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!