Nächste: , Vorige: , Nach oben: Funktionen und Variablen für ITENSOR   [Inhalt][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.


Nächste: , Vorige: , Nach oben: Funktionen und Variablen für ITENSOR   [Inhalt][Index]