DMUG-Archiv 2005

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Komplexe Matrizen, Transpose, ConjugateTranspose

Hallo Marc,

zwei Definitionen sind bekannt: Dot[] und Matrixmultiplikation (es gibt ein Buch von W. Groebner aus den fünfziger Jahren über Matrizenalgebra, in dem die Matrixmultiplikationsdefinition begründet und mit Alternativen verglichen wird).

Diese beiden muss man zur Deckung bringen (i.e. die Elemente für Dot[] so anordnen, dass damit die Matrixmultiplikation ausgeführt wird). Dass die Matrix V komplexe Elemente enthält, ist an der Stelle unwichtig, weil dies keinen Einfluss auf Addition und Multiplikation der Stellen (oder Kästchen) hat, es ändert nur den Inhalt der Kästchen. Also,

In[8]:= Clear[matA];
matA = Array[a, {3, 3}]

In[14]:= Clear[matV];
matV = Array[x, {3, 5}] + I Array[y, {3, 5}]

matA . matV ist die Matrixmultiplikation, es kommt eine 3 x 5 (3 Zeilen, 5 Spalten) Matrix heraus:

In[25]:= Dimensions[matA . matV]
Out[25]= {3,5}

Für eine weitere Multiplikation müssen Sie links eine {5, 3} Matrix haben, das ist Transpose[ComplexExpand[Conjugate[matV]]], somit gesamthaft

In[32]:= Dimensions[Transpose[ComplexExpand[Conjugate[matV]]] . matA . matV]
Out[32]= {5,5}

Mit den besten Grüssen
Udo.

P.S.: In Ihrem reellen Fall (Vt).A.V sollte Tranpose[V].A.V stehen. Man muss nicht versuchen, das Dot[] zu überlisten. Die Rechnungen sind mit Mma 5.1 ausgeführt. In früheren Versionen - bilde ich mir ein - musste man schonmal ein extra Transpose[] anwenden, um die richtigen Elemente unter Dot zusammenzubringen.

Marc von Bredow wrote:

Hallöchen,

mir ist im Moment nicht klar, wie Mathematica mit komplexen Matrizen
arbeitet:
Angenommen, man möchte die Matrix (V*).A.V berechnen.
(V*) ist die konjugiert transponierte Matrix von V

V ist eine n x m - Matrix (also i.a. rechteckig) mit m Spaltenvektoren der
Dimension n.
(V*) ist dann die konjugiert-komplexe m x n - Matrix.
A ist n x n.

Wie wird jetzt genau (V*).A.V berechnet?

1. Transpose[V].A.V
2. V.A.Transpose[V]
3. V.A.V
4. ConjugateTranspose[V].A.V
5. V.A.ConjugateTranspose[V]
6. Conjugate[V].A.Transpose[V]
7. Transpose[V].A.Conjugate[V]
..
oder wie?
Ich habe ein echtes Problem mit MMA, da es keine Unterscheidung zwischen
Zeilen- und Spaltenvektoren kennt.

Für den Fall, daß alle Matrizen reell sind, kriege ich das noch hin.
(Vt) = Transponierte von V

(Vt).A.V --> V.A.Transpose[V], das klappt.

nur beim Komplexen, da weiß ich jetzt nicht mehr, wie ich das machen soll.


Danke!





Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html