Nächste: Funktionen und Variablen für ITENSOR, Vorige: Paket ITENSOR, Nach oben: Paket ITENSOR [Inhalt][Index]
Das Paket itensor
für das Rechnen mit Tensoren in der Indexnotation
wird mit dem Kommando load("itensor")
geladen. Mit dem Kommando
demo(tensor)
wird eine Liste mit verschiedenen Beispielen angezeigt.
Im Paket itensor
werden Tensoren als indiziertes Objekte dargestellt.
Ein indiziertes Objekt ist eine Funktion mit drei Gruppen an Indizes, die die
kovarianten, kontravarianten und Ableitungsindizes eines Tensors darstellen.
Das erste Argument der Funktion ist eine Liste der kovarianten Indizes und das
zweite Argument die Liste der kontravarianten Indizes. Hat der Tensor keine
entsprechenden Komponenten, dann wird eine leere Liste als Argument angegeben.
Zum Beispiel repräsentiert g([a,b], [c]
einen Tensor g
, der zwei
kovariante Indizes [a,b]
, einen kontravarianten Index [c]
und
keinen Ableitungsindex hat. Mit der Funktion ishow
werden Tensoren
in einer besonderen Schreibweise ausgegeben.
Beispiele:
(%i1) load("itensor")$ (%i2) g([a,b], [c]); (%o2) g([a, b], [c]) (%i3) ishow(g([a,b], [c]))$ c (%t3) g a b
Ableitungsindizes werden als weitere Argumente der Funktion hinzugefügt, die
den Tensor repräsentiert. Ableitungsindizes können vom Nutzer angegeben
oder bei der Ableitung von Tensoren von Maxima hinzugefügt werden. Im
Allgemeinen ist die Differentiation kommutativ, so dass die Reihenfolge der
Ableitungsindizes keine Rolle spielt. Daher werden die Indizes von Maxima
bei der Vereinfachung mit Funktionen wie rename
alphabetisch sortiert.
Dies ist jedoch nicht der Fall, wenn bewegte Bezugssysteme genutzt werden, was
mit der Optionsvariablen iframe_flag
angezeigt wird, die in diesem Fall
den Wert true
erhält. Es ist zu beachten, dass mit dem Paket
itensor
Ableitungsindizes nicht angehoben werden können und
nur als kovariante Indizes auftreten.
Beispiele:
(%i1) load("itensor")$ (%i2) ishow(t([a,b],[c],j,i))$ c (%t2) t a b,j i (%i3) ishow(rename(%))$ c (%t3) t a b,i j (%i4) ishow(t([a,b],[c],j,i) - t([a,b],[c],i,j))$ c c (%t4) t - t a b,j i a b,i j (%i5) ishow(rename(%))$ (%t5) 0 (%i6) iframe_flag:true; (%o6) true (%i7) ishow(t([a,b],[c],j,i) - t([a,b],[c],i,j))$ c c (%t7) t - t a b,j i a b,i j (%i8) ishow(rename(%))$ c c (%t8) t - t a b,j i a b,i j
Das folgende Beispiel zeigt einen Ausdruck mit verschiedenen Ableitungen eines
Tensors g
. Ist g
der metrische Tensor, dann entspricht das
Ergebnis der Definition des Christoffel-Symbols der ersten Art.
(%i1) load("itensor")$ (%i2) ishow(1/2*(idiff(g([i,k],[]),j) + idiff(g([j,k],[]),i) - idiff(g([i,j],[]),k)))$ g + g - g j k,i i k,j i j,k (%t2) ------------------------ 2
Tensoren werden standardmäßig nicht als symmetrisch angenommen. Erhält
die Optionsvariable allsym
den Wert true
, dann werden alle
Tensoren als symmetrisch in den kovarianten und kontravarianten Indizes
angenommen.
Das Paket itensor
behandelt Tensoren im Allgemeinen als opake Objekte.
Auf Tensorgleichungen werden algebraischen Regeln insbesondere Symmetrieregeln
und Regeln für die Tensorverjüngung angewendet. Weiterhin kennt
itensor
die kovariante Ableitung, Krümmung und die Torsion. Rechnungen
können in bewegten Bezugssystemen ausgeführt werden.
Beispiele:
Die folgenden Beispiele zeigen einige Anwendungen des Paketes itensor
.
(%i1) load("itensor"); (%o1) /share/tensor/itensor.lisp (%i2) imetric(g); (%o2) done (%i3) components(g([i,j],[]),p([i,j],[])*e([],[]))$ (%i4) ishow(g([k,l],[]))$ (%t4) e p k l (%i5) ishow(diff(v([i],[]),t))$ (%t5) 0 (%i6) depends(v,t); (%o6) [v(t)] (%i7) ishow(diff(v([i],[]),t))$ d (%t7) -- (v ) dt i (%i8) ishow(idiff(v([i],[]),j))$ (%t8) v i,j (%i9) ishow(extdiff(v([i],[]),j))$ (%t9) v - v j,i i,j ----------- 2 (%i10) ishow(liediff(v,w([i],[])))$ %3 %3 (%t10) v w + v w i,%3 ,i %3 (%i11) ishow(covdiff(v([i],[]),j))$ %4 (%t11) v - v ichr2 i,j %4 i j (%i12) ishow(ev(%,ichr2))$ %4 %5 (%t12) v - (g v (e p + e p - e p - e p i,j %4 j %5,i ,i j %5 i j,%5 ,%5 i j + e p + e p ))/2 i %5,j ,j i %5 (%i13) iframe_flag:true; (%o13) true (%i14) ishow(covdiff(v([i],[]),j))$ %6 (%t14) v - v icc2 i,j %6 i j (%i15) ishow(ev(%,icc2))$ %6 (%t15) v - v ifc2 i,j %6 i j (%i16) ishow(radcan(ev(%,ifc2,ifc1)))$
%6 %7 %6 %7 (%t16) - (ifg v ifb + ifg v ifb - 2 v %6 j %7 i %6 i j %7 i,j %6 %7 - ifg v ifb )/2 %6 %7 i j
(%i17) ishow(canform(s([i,j],[])-s([j,i])))$ (%t17) s - s i j j i (%i18) decsym(s,2,0,[sym(all)],[]); (%o18) done (%i19) ishow(canform(s([i,j],[])-s([j,i])))$ (%t19) 0 (%i20) ishow(canform(a([i,j],[])+a([j,i])))$ (%t20) a + a j i i j (%i21) decsym(a,2,0,[anti(all)],[]); (%o21) done (%i22) ishow(canform(a([i,j],[])+a([j,i])))$ (%t22) 0
Nächste: Funktionen und Variablen für ITENSOR, Vorige: Paket ITENSOR, Nach oben: Paket ITENSOR [Inhalt][Index]