Ich möchte eine Matrix mit ihrer Transponierten multiplizieren, um herauszufinden, ob sie Q t Q=I bestätigt.
Doch wenn ich es in Matlab berechne, erhalte ich etwas Seltsames unter Verwendung eines mir unbekannten Konzepts: conj(x)
.
- Wie multipliziert man also eine Matrix mit ihrer Transponierten?
Hier ist der Code, den ich ausprobiert habe:
>> syms x
>> A=[cos(x) -sin(x);
sin(x) cos(x)]
A =
[ cos(x), -sin(x)]
[ sin(x), cos(x)]
>> A'*A
ans =
[ cos(conj(x))*cos(x) + sin(conj(x))*sin(x), sin(conj(x))*cos(x) - cos(conj(x))*sin(x)]
[ cos(conj(x))*sin(x) - sin(conj(x))*cos(x), cos(conj(x))*cos(x) + sin(conj(x))*sin(x)]
Antwort1
Mir ist klar, dass dies eine alte Frage ist, aber da der Community-Bot sie unbedingt wieder hochholen möchte, kann ich sie auch gleich beantworten.
Der Grund, den MATLAB Ihnen in der Ausgabe angibt, conj
ist, dass Sie den komplex konjugierten Transponierungsoperator '
(auch bekannt als ctranspose()
) verwenden.
Weil es sich um symbolische Mathematik handelt, macht MATLAB keine Annahmen darüber, ob x
real oder komplex ist, und muss es deshalb conj()
in der Ausgabe belassen – bei reellen Zahlen tut die Funktion nichts, bei komplexen Zahlen nimmt sie die Konjugierte.
Wenn Sie .'
stattdessen verwenden, ist dies die reguläre Matrixtransponierung (auch bekannt als transpose()
). Infolgedessen fügt MATLAB der Ausgabe keine komplexen konjugierten Aufrufe hinzu, da es den Inhalt des Arrays bei der Transponierung ignoriert.
>> A'*A
ans =
[ cos(conj(x))*cos(x) + sin(conj(x))*sin(x), sin(conj(x))*cos(x) - cos(conj(x))*sin(x)]
[ cos(conj(x))*sin(x) - sin(conj(x))*cos(x), cos(conj(x))*cos(x) + sin(conj(x))*sin(x)]
>> A.'*A
ans =
[ cos(x)^2 + sin(x)^2, 0]
[ 0, cos(x)^2 + sin(x)^2]
Hinweis: cos(x)^2 + sin(x)^2 == 1
, also ans == [1 0;0 1] == I
.