This is documentation for Mathematica 4, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.2)

 Documentation /  Mathematica /  Das Mathematica Buch /  Höhere Mathematik in Mathematica /  Lineare Algebra /

Fortgeschrittenes Thema: Zerlegungen von MatrizenInhalt

3.7.11 Fortgeschrittenes Thema: Tensoren

Tensoren sind als mathematische Objekte Verallgemeinerungen von Vektoren und Matrizen. In Mathematica wird ein Tensor als ein Satz Listen dargestellt, die bis zu einer bestimmten Anzahl von Stufen verschachtelt sind. Die Verschachtelungstiefe ist die Stufe des Tensors.

Interpretationen verschachtelter Listen

Ein Tensor der Stufe ist im wesentlichen eine -dimensionale Wertetabelle. Bei einem Tensor der Stufe ist es daher möglich, die Elemente in der Tabelle in einem -dimensionalen quaderförmigen Array anzuordnen. Es dürfen dabei im Quader keine Löcher oder herausragende Teile auftreten.

Die Indizes, die ein bestimmtes Element des Tensors spezifizieren, entsprechen den Koordinaten des Quaders. Die Dimensionen des Tensors entsprechen den Seitenlängen des Quaders.

Ein Tensor der Stufe entsteht zum Beispiel bei der Angabe einer Wertetabelle für eine Funktion von Variablen. In der Physik haben die in der Regel vorkommenden Tensoren Indizes, die über die möglichen Richtungen des Raumes oder der Raumzeit laufen. Beachten Sie aber, daß es in Mathematica erst einmal kein Symbol oder keinen Ausdruck für kovariante und kontravariante Tensorindizes gibt: Sie müssen diese selbst explizit mittels metrischer Tensoren definieren.

Funktionen zur Erzeugung und zum Testen der Struktur von Tensoren

Hier ist ein -Tensor.

In[1]:= t = Table[i1+i2 i3, {i1, 2}, {i2, 3}, {i3, 2}]

Out[1]=

Dies ist eine andere Art, wie man denselben Tensor erzeugen kann.

In[2]:= Array[(#1 + #2 #3)&, {2, 3, 2}]

Out[2]=

MatrixForm zeigt die Elemente des Tensors in einem zweidimensionalen Array. Sie können sich das Array als eine Matrix mit Spaltenvektoren vorstellen.

In[3]:= MatrixForm[ t ]

Out[3]//MatrixForm=

Dimensions liefert die Dimensionen des Tensors.

In[4]:= Dimensions[ t ]

Out[4]=

Hier ist das Element des Tensors.

In[5]:= t[[1, 1, 1]]

Out[5]=

TensorRank liefert die Stufe des Tensors.

In[6]:= TensorRank[ t ]

Out[6]=

Die Stufe eines Tensors ist gleich der Anzahl der Indizes, die zur Spezifizierung eines jeden Elements benötigt werden. Untertensoren können Sie durch Verwendung einer kleineren Indexanzahl herausgreifen.

Tensor-manipulierende Operationen

Sie können sich Tensoren der Stufe so vorstellen, als ob sie „Schlitze" hätten, in die Sie Indizes einfügen. Transpose ordnet dann im Grunde diese Schlitze um. Wenn Sie sich vorstellen, daß die Elemente eines Tensors einen -dimensionalen Würfel bilden, können Sie Transpose als Rotation (und möglicherweise als Spiegelung) des Würfels ansehen.

Im allgemeinsten Fall läßt sich mit Transpose eine beliebige Umordnung der Indizes eines Tensors spezifizieren. Die Funktion Transpose[T, , , ... , ] liefert einen neuen Tensor , für den der Wert von durch gegeben ist.

Hatten Sie ursprünglich einen -Tensor, so werden Sie durch Anwendung von Transpose einen -Tensor erhalten.

Hier ist eine Matrix, die Sie auch als -Tensor ansehen können.

In[7]:= m = {{a, b, c}, {ap, bp, cp}}

Out[7]=

Die Anwendung von Transpose liefert einen -Tensor. Transpose vertauscht die zwei „Schlitze" für die Tensorindizes.

In[8]:= mt = Transpose[m]

Out[8]=

Das Element m[[2, 3]] des ursprünglichen Tensors wird zum Element m[[3, 2]] des transponierten Tensors.

In[9]:= { m[[2, 3]], mt[[3, 2]] }

Out[9]=

Dies erzeugt einen -Tensor.

In[10]:= t = Array[a, {2, 3, 1, 2}]

Out[10]=

Dies transponiert die ersten beiden Stufen von t.

In[11]:= tt1 = Transpose[t]

Out[11]=

Das Ergebnis ist ein -Tensor.

In[12]:= Dimensions[ tt1 ]

Out[12]=

Wenn Sie einen Tensor haben, der Listen derselben Länge auf verschiedenen Stufen enthält, dann können Sie mit Transpose im Grunde verschiedene Stufen „kollabieren".

Damit kollabieren alle drei Stufen, und es ergibt sich eine Liste der Elemente auf der „Hauptdiagonalen".

In[13]:= Transpose[Array[a, {3, 3, 3}], {1, 1, 1}]

Out[13]=

Damit werden nur die ersten zwei Stufen kollabiert.

In[14]:= Transpose[Array[a, {2, 2, 2}], {1, 1}]

Out[14]=

Sie können ebenfalls Tr verwenden, um diagonale Elemente eines Tensors zu extrahieren.

Dies bildet die gewöhnliche Spur eines Tensors von Rang 3.

In[15]:= Tr[Array[a, {3, 3, 3}]]

Out[15]=

Hier ist eine verallgemeinerte Spur mit Elementen, die in einer Liste zusammengefaßt sind.

In[16]:= Tr[Array[a, {3, 3, 3}], List]

Out[16]=

Dies kombiniert diagonale Elemente nur bis hinunter zu Stufe 2.

In[17]:= Tr[Array[a, {3, 3, 3}], List, 2]

Out[17]=

Mit äußeren Produkten und deren Verallgemeinerungen lassen sich Tensoren höherer Stufen aus Tensoren niedrigerer Stufe aufbauen. Äußere Produkte werden manchmal auch als direkte, Tensor- oder Kronecker-Produkte bezeichnet.

Unter einem strukturellen Gesichtspunkt hat der Tensor, den Sie durch Outer[f, t, u] erhalten, an der „Position" jedes Elements in t eine Kopie der Struktur von u. Die Elemente in der resultierenden Struktur werden durch Kombination der Elemente von t und u mit der Funktion f erhalten.

Dies ergibt das „äußere f" zweier Vektoren. Das Ergebnis ist eine Matrix.

In[18]:= Outer[ f, {a, b}, {ap, bp} ]

Out[18]=

Das „äußere f" eines Vektors der Länge 3 mit einem Vektor der Länge 2 liefert eine -Matrix.

In[19]:= Outer[ f, {a, b, c}, {ap, bp} ]

Out[19]=

Das Resultat des „äußeren f" einer -Matrix und eines Vektors der Länge ist ein -Tensor.

In[20]:= Outer[ f, {{m11, m12}, {m21, m22}}, {a, b, c} ]

Out[20]=

Hier sind die Dimensionen des Tensors.

In[21]:= Dimensions[ % ]

Out[21]=

Wenn Sie das verallgemeinerte äußere Produkt eines -Tensors mit einem -Tensor bilden, erhalten Sie einen -Tensor. Haben die ursprünglichen Tensoren die Stufen und , wird das Ergebnis ein Tensor der Stufe sein.

Mit Hilfe von Indizes läßt sich das Ergebnis der Anwendung von Outer auf zwei Tensoren und als ein Tensor mit den Elementen f[,] schreiben.

Bei der Ausführung üblicher Tensorrechnungen wird für die Funktion f in Outer zumeist Times verwendet. Das entspricht dem üblichen äußeren Produkt.

Besonders in kombinatorischen Berechnungen ist es jedoch oft angebracht, für f List zu nehmen. Mit Outer erhält man Kombinationen aller möglichen Elemente des einen Tensors mit allen möglichen Elementen des anderen.

Bei der Konstruktion von Outer[f, t, u] fügen Sie im Grunde an jeder Position in t eine Kopie von u ein. Um Inner[f, t, u] zu bilden, fassen Sie die letzte Dimension von t mit der ersten Dimension von u zusammen. Die Idee dabei ist, aus einem -Tensor und einem -Tensor, wobei ist, als Ergebnis einen -Tensor zu bilden.

Die einfachsten Beispiele lassen sich für Vektoren angeben. Wenden Sie Inner auf zwei Vektoren gleicher Länge an, erhalten Sie einen Skalar. Inner[f, , , g] ist eine Verallgemeinerung des normalen Skalarprodukts, wobei f die Rolle der Multiplikation und g die Rolle der Addition spielt.

Dies ist eine Verallgemeinerung des gewöhnlichen Skalarprodukts zweier Vektoren.

In[22]:= Inner[f, {a, b, c}, {ap, bp, cp}, g]

Out[22]=

Dies ergibt eine Verallgemeinerung eines Matrixprodukts.

In[23]:= Inner[f, {{1, 2}, {3, 4}}, {{a, b}, {c, d}}, g]

Out[23]=

Hier ist ein -Tensor.

In[24]:= a = Array[1&, {3, 2, 2}]

Out[24]=

Hier ist ein -Tensor.

In[25]:= b = Array[2&, {2, 3, 1}]

Out[25]=

Dies liefert einen -Tensor.

In[26]:= a . b

Out[26]=

Hier sind die Dimensionen des Ergebnisses.

In[27]:= Dimensions[ % ]

Out[27]=

Sie können Inner als Ausführung einer „Kontraktion" (streng genommen einer „Überschiebung") des letzten Indexes eines Tensors mit dem ersten Index eines anderen ansehen. Möchten Sie andere Indexpaare zusammenbringen, so können Sie dies, indem Sie zuerst die geeigneten Indizes in die erste oder letzte Position transponieren, dann Inner anwenden und schließlich das Resultat zurücktransponieren.

In vielen Tensoranwendungen müssen Sie Vorzeichen einfügen, wenn Sie Antisymmetrie implementieren wollen. Häufig eignet sich für diesen Zweck die Funktion Signature[, , ... ], die die Signatur einer Permutation liefert.

Nur bestimmte Unterlisten in Tensoren als separate Elemente behandeln

In diesem Fall wird jedes Einzelsymbol als ein separates Element behandelt.

In[28]:= Outer[f, {{i, j}, {k, l}}, {x, y}]

Out[28]=

Aber hier werden nur Unterlisten der Stufe 1 als separate Elemente behandelt.

In[29]:= Outer[f, {{i, j}, {k, l}}, {x, y}, 1]

Out[29]=

Fortgeschrittenes Thema: Zerlegungen von MatrizenInhalt