"Wurzel" aus Matrix berechnen



  • Kann man aus einer 3x3 Matrix sowas wie die "Wurzel" berechnen?

    Problem:
    Ich habe eine 3x3 Matrix A zur perspectivischen Transformation der Pixel eines Bildes in ein anderes.

    Damit kann ich 2 Bitmaps aufeineander abgestimmt abbilden - das eine in die Perspektive des anderen.

    Besser wäre aber, ich könnte beide (Teil-) transformieren auf eine gemeinsame Basis.

    Dazu bräuchte ich eine Matrix B, die mit sich selbst multipliziert die Matrix A ergibt.

    Ist es möglich, deine Matrix B zu bestimmen, derart, dass gilt:
    A = B x B
    ???

    Die Matrix B (oder die Inverse davon) sollen beide Bilder "hälftig" transformieren.

    Gruss
    Frank



  • Das geht prinzipiell schon, allerdings habe ich das bisher noch nie mit einer allgemeinen Matrix gemacht und bei den speziellen die ich bisher hatte ging das auch nur mit scharfem hinsehen und etwas überlegen.
    Siehe auch diesen Artikel. Wenn die Matrix diagonalisierbar ist, dann ist es einfach.
    In den von mir genannten Fällen war sie in der Jordanschen Normalform, da hat man neben der Diagonale noch eine Nebendiagonale und es ist immernoch recht einfach.

    Aber so wie du das nennst, so heißt es auch, du findest bei google mit "wurzel aus einer matrix" sehr viele Treffer, allerdings konnte ich so auf die Schnelle keinen allgemeingültigen Algorithmus finden. Man scheint immer diagonalisieren zu müssen für diese.
    Und dann ist da noch die Frage inwiefern diese theoretischen Verfahren in der Praxis anwendbar sind.



  • inverse aus A multipliziert mit B.



  • rapso schrieb:

    inverse aus A multipliziert mit B.

    Magst du deine Idee mal etwas ausführlicher darstellen? Im Moment kann ich mir beim besten Willen nicht vorstellen was du meinst bzw. wie das funktionieren soll.
    Und erkläre auch was bei dir A und was bei dir B sein soll bzw. deine Notation bei der ausführlicheren Erklärung.



  • rapso schrieb:

    inverse aus A multipliziert mit B.

    das geht ja wohl schlecht, da B ja vorher nicht bekannt ist.
    B will ich ja ermitteln.

    Gruss
    frank



  • S.T.A.L.K.E.R. schrieb:

    ...Wenn die Matrix diagonalisierbar ist, dann ist es einfach.

    Da wird das Problem liegen.
    Die vorgegebene Matrix ist eine Perpektivische Transformation (Entzerren/ Verzerren von Bild- Perspektiven). Da können alle möglichen Kombinationen von 3x3 double Werten drinstehen.

    Wenn das nicht prinzipiell geht, nutzt mir das leider nix.
    (Was wäre das für ein Programm, was je nach Werten funktioniert oder auch nicht 😃 🙂 )

    Der Link hat mir da nicht viel gebracht.
    Ich hab auch wenig Ahnung davon - bin eher Programmierer.

    Gruss
    Frank



  • Also ich habe etwas gesucht und zum diagonalisieren gibt es einmal das Jacobi-Verfahren und einmal das Gauß-Seidel-Verfahren, beide sind numerische Verfahren.
    Allerdings funktioniert ersteres nur für diagonaldominante Matrizen, letzteres immerhin auch für symmetrisch positiv definite Matrizen.
    Aber du wirst sicher keine symmetrische Matrix haben und diagonaldominant wohl auch eher nicht.

    Dann bleibt nur die Jordansche Normalform und nach etwas Suchen wird es wohl auch so gemacht. Ich habe allerdings nur eine mathematische Vorgehensweise (Beitrag 5) gefunden, d.h. das meiste muss man sich noch selber erarbeiten.

    Alternativ würde ich dir raten mal in einem Matheforum zu fragen, da rennen bestimmt ein paar talentierte Numeriker rum die dir sinnvoller helfen können, als ich es kann.



  • Also ich habe etwas gesucht und zum diagonalisieren gibt es einmal das Jacobi-Verfahren und einmal das Gauß-Seidel-Verfahren, beide sind numerische Verfahren.

    Kannste Knicken, da nicht jede Matrix Diagonalisierbar ist. Diagonalisierbarkeit ist mit Auflagen verbunden. Um genauer zu sein muss für jeden Eigenwert der Matrix gelten: Algebraische Vielfachheit=geometrische Vielfachheit. Das zweite Problem ist, dass nicht jede diagonalisierbare Matrix reell ist. Es gibt auch Complexwertige Lösungen.

    Und eine nicht Diagonalisierbare Matrix hat keine Wurzeldarstellung.



  • otze schrieb:

    Also ich habe etwas gesucht und zum diagonalisieren gibt es einmal das Jacobi-Verfahren und einmal das Gauß-Seidel-Verfahren, beide sind numerische Verfahren.

    Kannste Knicken, da nicht jede Matrix Diagonalisierbar ist. Diagonalisierbarkeit ist mit Auflagen verbunden. Um genauer zu sein muss für jeden Eigenwert der Matrix gelten: Algebraische Vielfachheit=geometrische Vielfachheit. Das zweite Problem ist, dass nicht jede diagonalisierbare Matrix reell ist. Es gibt auch Complexwertige Lösungen.

    Und eine nicht Diagonalisierbare Matrix hat keine Wurzeldarstellung.

    Also ich kann verstehen, dass du den nächsten Satz übersehen hast indem ich geschrieben habe für welche Matrizen diese Anwendbar sind.

    Aber mir ist rätselhaft wie du darauf kommst, dass mir das nicht bewusst ist, wenn ich danach mit der Jordanschen Normalform komme 😕



  • sorry, hatte mich verlesen (war ein wenig in eile). dachte du willst einen space in den anderen transformieren.

    ich glaube fuer dein problem gibt es bisher nur eine naehrungs formel.

    ich wuerde die matrix an deiner stelle zerlegen, in translation, rotation, skalierung und dann jeden dieser werte einzeln interpolieren und wieder zu einer matrix zusammenbauen. suchstichwort: matrix decomposition.

    aber das wissen die mathe leute sicher besser 🙂



  • Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum Mathematik verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ansonsten könnte man auch das LGS lösen:

    A=(abcdefghi)2A=\begin{pmatrix} a & b & c \\ d & e & f \\ g & h & i \end{pmatrix}^2



  • Naja halt (b_{ij})^2 = A.



  • Das ist nicht linear


Anmelden zum Antworten