Dekomposition komplexer Matrix in eine Reihe einfacher Transformationen?

8

Ich frage mich, ob es möglich ist (und wenn es dann wie ist), eine beliebige M3-Matrixtransformation als eine Folge von einfacheren Transformationen (wie translate, scale, skew, rotate) wiederzugeben.

Mit anderen Worten: Wie berechnet man MTranslate, MScale, MRotate, MSkew-Matrizen aus dem MComplex, so dass die folgende Gleichung zutrifft:

MComplex = MTranslate * MScale * MRotate * MSkew (oder in einer anderen Reihenfolge)

    
Sergey Ilinsky 24.07.2009, 11:13
quelle

2 Antworten

9

Singular Value Decomposition (siehe auch dieses blog und dies PDF ). Es verwandelt eine willkürliche Matrix in eine Zusammensetzung von 3 Matrizen: orthogonal + diagonal + orthogonal. Die orthogonalen Matrizen sind Rotationsmatrizen; die Diagonalmatrix repräsentiert die Verzerrung entlang der Primärachsen = Skalierung.

Die Übersetzung wirft einen Schraubenschlüssel in das Spiel, aber was Sie tun sollten, ist den Übersetzungsteil der Matrix herauszunehmen, so dass Sie eine 3x3-Matrix haben, SVD ausführen, um Ihnen die Drehung + Neigung zu geben, dann fügen Sie die Übersetzung hinzu Teil zurück in. Auf diese Weise haben Sie eine Rotation + Skalierung + Rotation + übersetzen Zusammensetzung von 4 Matrizen. Es ist wahrscheinlich möglich, dies in 3 Matrizen zu tun (Rotation + Skalierung entlang einer Reihe von Achsen + Translation), aber ich bin mir nicht sicher, wie ... vielleicht eine QR-Zerlegung (Q = orthogonal = Rotation, aber ich bin mir nicht sicher, ob das R ist nur schief oder hat einen rotierenden Teil.)

    
Jason S 24.07.2009, 15:23
quelle
1

Ja, aber die Lösung wird nicht einzigartig sein. Auch sollte man lieber die Übersetzung ans Ende legen (die Reihenfolge des Restes spielt keine Rolle)

Für jede gegebene quadratische Matrix A gibt es unendlich viele Matrizen B und C , also A = B*C . Wählen Sie eine invertierbare Matrix B (was bedeutet, dass B ^ -1 existiert oder det (B)! = 0) und jetzt C = B^-1*A .

Für Ihre Lösung zerlegen Sie zuerst MC in MT und MS*MR*MSk*I und wählen Sie MT als invertierbare Transpositionsmatrix. Dann zerlege den Rest in MS und MR*MSk*I , so dass MS eine beliebige Skalierungsmatrix ist. Und so weiter ...

Nun, wenn am Ende des Spaßes I eine Identitätsmatrix ist (mit 1 auf Diagonale, 0 woanders), bist du gut. Wenn nicht, starte von vorne, aber wähle andere Matrizen ;-)

Wenn Sie die obige Methode verwenden, können Sie einen Satz von Gleichungen erstellen, die Ihnen eine parametrisierte Formel für alle diese Matrizen liefern.

Wie nützlich diese Zerlegungen für Sie sein würden, nun - das ist eine andere Geschichte.

Wenn Sie dies in Mathematica oder Maxima eingeben, berechnen sie dies in kürzester Zeit für Sie.

    
Marcin 24.07.2009 12:50
quelle