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

#### 20.4.1 Einführung in ATENSOR

Das Paket `atensor` erlaubt das algebraische Rechnen mit Tensoren. Mit dem Kommando `load(atensor)` wird das Paket geladen. Um das Paket zu initialisieren, wird die Funktion `init_atensor` ausgeführt.

Im wesentlichen enthält das Paket `atensor` Regeln für die Vereinfachung von Ausdrücken mit dem `dot-Operator` Operator `"."`. `atensor` kennt verschiedene Algebren. Mit der Funktion `init_atensor` werden die Regeln einer Algebra initialisiert.

Um die Möglichkeiten des Paketes `atensor` zu zeigen, wird im Folgenden die Algebra der Quaternionen als eine Clifford-Algebra Cl(0,2) mit zwei Basisvektoren definiert. Die drei imaginären Einheiten `i`, `j` und `k` werden durch die zwei Vektoren `v[1]` und `v[2]` sowie das Produkt `v[1] . v[2]` dargestellt:

        i = v     j = v     k = v  . v
             1         2         1    2

Das Paket `atensor` hat eine vordefinierte Algebra der Quaternionen. Hier wird die Algebra der Quaterinonen als Clifford-Algebra Cl(0,2) definiert und die Multiplikationstabelle der Basisvektoren konstruiert.

    (%i1) load(atensor)$

    (%i2) init_atensor(clifford,0,0,2);
    (%o2)                         done
    (%i3) atensimp(v[1].v[1]);
    (%o3)                          - 1
    (%i4) atensimp((v[1].v[2]).(v[1].v[2]));
    (%o4)                          - 1
    (%i5) q:zeromatrix(4,4);
                             [ 0  0  0  0 ]
                             [            ]
                             [ 0  0  0  0 ]
    (%o5)                    [            ]
                             [ 0  0  0  0 ]
                             [            ]
                             [ 0  0  0  0 ]
    (%i6) q[1,1]:1;
    (%o6)                           1
    (%i7) for i thru adim do q[1,i+1]:q[i+1,1]:v[i];
    (%o7)                         done
    (%i8) q[1,4]:q[4,1]:v[1].v[2];
    (%o8)                        v  . v
                                  1    2
    (%i9) for i from 2 thru 4 do
              for j from 2 thru 4 do
                  q[i,j]:atensimp(q[i,1].q[1,j]);
    (%o9)                         done
    (%i10) q;
                [    1        v         v      v  . v  ]
                [              1         2      1    2 ]
                [                                      ]
                [   v         - 1     v  . v    - v    ]
                [    1                 1    2      2   ]
    (%o10)      [                                      ]
                [   v      - v  . v     - 1      v     ]
                [    2        1    2              1    ]
                [                                      ]
                [ v  . v      v        - v       - 1   ]
                [  1    2      2          1            ]

Indizierte Symbole mit dem Namen, der in der Optionsvariablen `asymbol` abgelegt ist, werden von `atensor` als Basisvektoren erkannt. Dabei läuft der Index von `1` bis `adim`. Für indizierte Symbole werden die Bilinearformen `sf`, `af` und `av` ausgewertet. Die Auswertung ersetzt die Bilinearform `fun(v[i].v[j])`, durch das Matrixelement `aform[i,j]`, wobei `v` einen Basisvektor bezeichnet und `fun` einer der Bilinearformen `sf` oder `af` ist. Ist `fun` die Bilinearform `av`, dann wird `v[aform[i,j]]` für `av(v[i],v[j])` substituiert. Siehe auch die Optionsvariable `aform`.

Die Bilinearformen `sf`, `af` und `av` können vom Nutzer neu definiert werden, um eine gewünschte Algebra zu definieren.

Wird das Paket `atensor` geladen, werden die folgenden Schalter auf die angegebenen Werte gesetzt:

    dotscrules  : true
    dotdistrib  : true
    dotexptsimp : false

Wird das symbolische Rechnen in einer nicht-assoziativen Algebra gewünscht, kann auch noch der Schalter `dotassoc` auf den Wert `false` gesetzt werden. In diesem Fall kann jedoch die Funktion `atensimp` nicht immer eine gewünschte Vereinfachung erzielen.

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