Einführung in itensor (Maxima Manual)

Next: Funktionen und Variablen für itensor, Previous: Paket itensor, Up: Paket itensor [Contents][Index]

#### 20.2.1 Einführung in ITENSOR

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

Next: Funktionen und Variablen für itensor, Previous: Paket itensor, Up: Paket itensor [Contents][Index]