Tensoranalysis (Maxima Manual)

Next: Tensoren in gekrümmten Räumen, Previous: Tensorsymmetrien, Up: Funktionen und Variablen für itensor [Contents][Index]

#### 20.2.2.3 Tensoranalysis

Funktion: diff (expr, v_1, n_1, v_2, n_2, …)

  Ist die gleichnamige Funktion `diff` für die Differentiation einer tensoriellen Größe. `diff` ist für das Paket `itensor` erweitert. Die tensorielle Größe expr wird n_1-mal nach der Variablen v_1, n_2 nach der Variablen v_2, … abgeleitet. Die Argumente `v_1` können ganze Zahlen von `1`, …, `dim` sein. In diesem Fall bezeichnen die ganzen Zahlen der Reihe nach die Indizes, die in der Optionsvariablen `vect_coords` abgelegt sind. `dim` ist die Dimension der tensoriellen Größen.

  Weiterhin erlaubt die erweiterte Funktion `diff` die Berechnung von Ableitungen nach indizierten Variablen. So können Ausdrücke, die den Metriktensor und seine Ableitungen enthalten, nach dem Metriktensor und seinen Ableitungen abgeleitet werden.

  Beispiele:

      (%i1) load(itensor)$

      (%i2) depends(v,t);
      (%o2)                        [v(t)]
      (%i3) ishow(diff(v([i,j],[k])^2, t,1))$
                                k    d    k
      (%t3)                  2 v    (-- (v   ))
                                i j  dt   i j
      (%i4) ishow(diff(v([i,j],[k])^2, t,2))$
                             2
                       k    d     k          d    k    2
      (%t4)         2 v    (--- (v   )) + 2 (-- (v   ))
                       i j    2   i j        dt   i j
                            dt

Funktion: idiff (expr, v_1, [n_1, [v_2, n_2] …])

  `idiff` führt Ableitungen nach den Koordinaten einer tensoriellen Größe aus. Im Unterschied dazu führt die Funktion `diff` Ableitungen nach den unabhängigen Variablen aus. Eine tensorielle Größe erhält zusätzlich den Index v_1, der die Ableitung bezeichnet. Mehrfache Indizes für Ableitungen werden sortiert, außer wenn die Optionsvariable `iframe_flag` den Wert `true` hat.

  `idiff` kann auch die Determinante des Metriktensors ableiten. Wird zum Beispiel der Optionsvariablen `imetric` der Wert `g` zugewiesen, dann hat das Kommando `idiff(determinant(g), k)` das Ergebnis `2 * determinant(g) * ichr2([%i,k], [%i])`, wobei die Dummy-Variable passend gewählt wird.

Funktion: liediff (v, ten)

  Berechnet die Lie-Ableitung eines tensoriellen Ausdrucks ten für das Vektorfeld v. Das Argument ten kann irgendeine tensorielle Größe sein. Das Argument v ist der Name eines Vektorfeldes und wird ohne Indizes angegeben.

  Beispiel:

      (%i1) load(itensor);
      (%o1)      /share/tensor/itensor.lisp
      (%i2) ishow(liediff(v,a([i,j],[])*b([],[k],l)))$
             k    %2            %2          %2
      (%t2) b   (v   a       + v   a     + v   a    )
             ,l       i j,%2    ,j  i %2    ,i  %2 j

                                %1  k        %1  k      %1  k
                            + (v   b      - b   v    + v   b   ) a
                                    ,%1 l    ,l  ,%1    ,l  ,%1   i j

Funktion: rediff (ten)

  Wertet jedes Auftreten von Substantivformen der Funktion `idiff` in dem tensoriellem Ausdruck ten aus.

Funktion: undiff (expr)

  Gibt einen zum Argument expr äquivalenten Ausdruck zurück, in dem alle Ableitungen von indizierten Größen durch Substantivformen der Funktion `idiff` ersetzt sind.

Funktion: evundiff (expr)

  Ist äquivalent zur Ausführung der Funktion `undiff`, der die Funktionen `ev` und `rediff` nachfolgen.

  `evundiff` erlaubt die Auswertung von Ausdrücken, die nicht direkt in ihrer abgeleiteten Form ausgewertet werden können. So führt das folgende Beispiel zu einer Fehlermeldung:

      (%i1) load(itensor);
      (%o1)      /share/tensor/itensor.lisp
      (%i2) icurvature([i,j,k],[l],m);
      Maxima encountered a Lisp error:

       Error in $ICURVATURE [or a callee]:
       $ICURVATURE [or a callee] requires less than three arguments.

      Automatically continuing.
      To reenable the Lisp debugger set *debugger-hook* to nil.

  Wird jedoch `icurvature` in der Substantivform verwendet, kann der Ausdruck mit `evundiff` ausgewertet werden:

      (%i3) ishow('icurvature([i,j,k],[l],m))$

                                               l
      (%t3)                          icurvature
                                               i j k,m

      (%i4) ishow(evundiff(%))$
                   l              l         %1           l           %1
      (%t4) - ichr2        - ichr2     ichr2      - ichr2       ichr2
                   i k,j m        %1 j      i k,m        %1 j,m      i k

                   l              l         %1           l           %1
            + ichr2        + ichr2     ichr2      + ichr2       ichr2
                   i j,k m        %1 k      i j,m        %1 k,m      i j

  Um Christoffel-Symbole abzuleiten, wird die Funktion `evundiff` nicht benötigt:

      (%i5) imetric(g);
      (%o5)                                done
      (%i6) ishow(ichr2([i,j],[k],l))$

             k %3
            g     (g         - g         + g        )
                    j %3,i l    i j,%3 l    i %3,j l
      (%t6) -----------------------------------------
                                2

                               k %3
                              g     (g       - g       + g      )
                               ,l     j %3,i    i j,%3    i %3,j
                            + -----------------------------------
                                               2

Funktion: flush (expr, tensor_1, tensor_2, …)

  Alle tensoriellen Größen tensor_i die im Ausdruck expr auftreten und keine Ableitungen haben, werden zu Null gesetzt.

Funktion: flushd (expr, tensor_1, tensor_2, …)

  Alle tensoriellen Größen tensor_i die im Ausdruck expr auftreten und Ableitungen haben, werden zu Null gesetzt.

Funktion: flushnd (expr, tensor, n)

  Setzt alle Ableitungen der tensoriellen Größe tensor die im Ausdruck expr auftritt und n oder mehr Ableitungen hat, auf den Wert Null.

  Beispiele:

      (%i1) load(itensor);
      (%o1)      /share/tensor/itensor.lisp
      (%i2) ishow(a([i],[J,r],k,r)+a([i],[j,r,s],k,r,s))$
                                      J r      j r s
      (%t2)                          a      + a
                                      i,k r    i,k r s
      (%i3) ishow(flushnd(%,a,3))$
                                           J r
      (%t3)                               a
                                           i,k r

Funktion: coord (tensor_1, tensor_2, …)
Systemvariable: coord

  Gibt der tensoriellen Größe tensor_i die Eigenschaft, dass die kovariante Ableitung eines Vektors mit dem Namen tensor_i das Ergebnis Kronecker-Delta hat.

  `coord` ist auch eine Systemvariable, die alle tensoriellen Größen enthält, die mit der Funktion `coord` die Eigenschaft der kovarianten Ableitung erhalten haben.

  Beispiel:

      (%i1) coord(x);
      (%o1)                         done
      (%i2) idiff(x([],[i]),j);
      (%o2)                   kdelta([j], [i])
      (%i3) coord;
      (%o3)                          [x]

Funktion: remcoord (tensor_1, tensor_2, …)
Funktion: remcoord (all)

  Entfernt die mit der Funktion `coord` definierte Eigenschaft für die tensoriellen Größen tensor_i. Das Kommando `remcoord(all)` entfernt diese Eigenschaft für alle tensoriellen Größen.

Funktion: makebox (expr, name)

  Zeigt das Argument expr auf die gleiche Weise an wie die Funktion `ishow` mit dem Unterschied, dass der dâAlembert-Operator name im Ausdruck durch `[]` ersetzt wird.

  Beispiel:

      (%i1) makebox(g([],[i,j])*p([m],[n],i,j),g);
      (%o1)                     []p([m], [n])

Funktion: conmetderiv (expr, tensor)

  Vereinfacht Ausdrücke, die kovariante und kontravariante Ableitungen des Metriktensors enthalten. `conmetderiv` kann zum Beispiel die Ableitungen des kontravarianten Metriktensors in Beziehung zu den Christoffel-Symbolen setzen:

      (%i1) load(itensor);
      (%o1)      /share/tensor/itensor.lisp
      (%i2) ishow(g([],[a,b],c))$
                                            a b
      (%t2)                                g
                                            ,c
      (%i3) ishow(conmetderiv(%,g))$
                               %1 b      a       %1 a      b
      (%t3)                 - g     ichr2     - g     ichr2
                                         %1 c              %1 c

Funktion: simpmetderiv (expr)
Funktion: simpmetderiv (expr[, stop])

  Vereinfacht Ausdrücke die Produkte von Ableitungen des Metriktensors enthalten. Im besonderen erkennt `simpmetderiv` die folgenden Identitäten:

         ab        ab           ab                 a
        g   g   + g   g     = (g   g  )   = (kdelta )   = 0
         ,d  bc        bc,d         bc ,d          c ,d

  daher ist

         ab          ab
        g   g   = - g   g
         ,d  bc          bc,d

  und

        ab          ab
       g   g     = g   g
        ,j  ab,i    ,i  ab,j

  was aus den Symmetrien der Christoffel-Symbole folgt.

  Die Funktion `simpmetderiv` akzeptiert einen optionalen Parameter stop. Ist dieser vorhanden, stoppt die Funktion nach der ersten erfolgreichen Substitution in einem Produkt. `simpmetderiv` beachtet ferner die Optionsvariable `flipflag`, welche die Ordnung der Indizes kontrolliert.

  Siehe auch `weyl.dem` für Beispiele der Funktionen `simpmetderiv` und `conmetderiv`, die die Vereinfachung des Weyl-Tensors zeigen.

  Beispiel:

      (%i1) load(itensor);
      (%o1)      /share/tensor/itensor.lisp
      (%i2) imetric(g);
      (%o2)                                done
      (%i3) ishow(g([],[a,b])*g([],[b,c])*g([a,b],[],d)*g([b,c],[],e))$
                                   a b  b c
      (%t3)                       g    g    g      g
                                             a b,d  b c,e
      (%i4) ishow(canform(%))$

      errexp1 has improper indices
       -- an error.  Quitting.  To debug this try debugmode(true);
      (%i5) ishow(simpmetderiv(%))$
                                   a b  b c
      (%t5)                       g    g    g      g
                                             a b,d  b c,e
      (%i6) flipflag:not flipflag;
      (%o6)                                true
      (%i7) ishow(simpmetderiv(%th(2)))$
                                     a b  b c
      (%t7)                         g    g    g    g
                                     ,d   ,e   a b  b c
      (%i8) flipflag:not flipflag;
      (%o8)                                false
      (%i9) ishow(simpmetderiv(%th(2),stop))$
                                     a b  b c
      (%t9)                       - g    g    g      g
                                          ,e   a b,d  b c
      (%i10) ishow(contract(%))$
                                          b c
      (%t10)                           - g    g
                                          ,e   c b,d

Funktion: flush1deriv (expr, tensor)

  Setzt alle tensoriellen Größen, die genau einen Ableitungsindex haben, auf den Wert Null.

Optionsvariable: vect_coords

  Standardwert: `false`

  Tensoren können durch Angabe von ganzen Zahlen nach den einzelnen Komponenten abgeleitet werden. In diesem Fall bezeichnen die ganzen Zahlen der Reihe nach die Indizes, die in der Optionsvariablen `vect_coords` abgelegt sind.

Next: Tensoren in gekrümmten Räumen, Previous: Tensorsymmetrien, Up: Funktionen und Variablen für itensor [Contents][Index]