matrix inversion
-
Hallo, hab mir die aus dem Beitrag "wie wäre es hiermit?" die Dateien von Techsoft die MATRIX TCL LITE geholt...
Hat da jemand "Übung" drin? Ich möchte größere Matrizen invertieren und anschließend mit einer anderen multiplizieren..
Soweit auch kein Problem (mit dem tollen Test matdemo1 der dabei ist).
Allerdings möchte ich zum Teil auch komplexe Elemente in die Matrix mit eingeben.
In matdemo2 war so ein Beispiel mit nem komplexen Vektor...
Wie verbinde ich das jetzt am besten?Beispiel für meine Rechnung:
# 77 Matrix mit komplexen Elementen und letzte Spalte soll 1 sein (bzw complex: (1,0) (?)) invertieren
# Inverse davon multipliziert mit einer 17 Matrix (hier sind es wieder reelle Elemente)
# die 7 erechneten Werte benötige ich für weitere (einfachere) BerechnungenHoffe das liest hier jemand, auch wenn der letzte beitrag 5 Jahre alt ist.
Danke!?
-
1. Matrix Invertierung ist zu vermeiden. Gleichungssysteme kann man z.B. direkt lösen und das ist auch numerisch viel besser.
2. Ich habe bisher hauptsächlich mit Boost.uBLAS gearbeitet, würde es aber nicht empfehlen. Sonst habe ich noch gutes von Eigen gehört. Ausprobiert habe ich das aber bisher nicht.
-
Mein Tip, wenn du Matizen zerlegen willst
GSL Gnu Scientific Library
www.gnu.org/s/gsl/
-
Danke für die schnellen Antworten!
Ich komme an der Matrixinversion nicht vorbei. Ich arbeite an einem Studienprojekt. Mein Prof meinte auch, das wird das "happigste" an der Arbeit (oder so ähnlich halt).
Also ist das n Tipp eurerseits, es mit EIGEN oder dem GNU-Teil zu versuchen, oder wisst ihr, dass es mit den libraries besser geht?
Bevor ich da noch länger rumdoktorn müsste komplexe Elemente einzubauen, versuch ich es wohl weiter mit meiner MATRIX TCL von techsoft...Gruß
-
sum_pattern schrieb:
Ich komme an der Matrixinversion nicht vorbei. Ich arbeite an einem Studienprojekt. Mein Prof meinte auch, das wird das "happigste" an der Arbeit (oder so ähnlich halt).
Eine lausige Matrix zu invertieren ist das "happigste" an deiner Arbeit?
Herzlichen Glückwunsch.
-
Naja, programmiertechnisch vielleicht schon das happigste. Und da bin ich eben nicht so der Profi...
Also bitte meine harte Arbeit - die noch einiges mehr umfasst - nicht so in den Dreck ziehen, danke
-
Was für eine Matrix is das denn, die du da invertieren musst? Und warum musst du sie invertieren?
-
Das kommt ganz auf die variierenden Eingaben beim Start an.
Als Beispiel würden sich 7 Gleichung ergeben. In Matrizen ausgedrückt:A * B = C
wobei...
...A eine 77 Matrix ist (Spalte 1 bis 6 ist komplett komplex - Spalte 7 sind alles "1"en)
...B eine 17 Matrix ist (mit den unbekannten, gesuchten Werten)
...C (logischerweise) eine 1*7 Matrix ist (mit reellen Werten)Nun brauch ich also die Inverse von A um
B = A(^-1) * C
herauszubekommen.
-
Nein brauchst du nicht. Multiplikation mit der Inversen ist so ziemlich die schlechtestmögliche Art um ein Gleichungssytem zu lösen, ein numerischer Alptraum. Jede beliebige linalg Bibliothek bietet entsprechende Algorithmen an.
-
sum_pattern schrieb:
Nun brauch ich also die Inverse von A um
B = A(^-1) * C
herauszubekommen.
Das ist falsch. Du brauchst A^{-1} nicht. Sagte ich doch! Stichwort: LR-Zerlegung. Schnapp Dir mal ein "Numerik für Anfänger"-Buch oder lass Dir von Mathestudenten, die Numerik gehört haben, erklären, wie man das richtig macht.
-
Ach ja!?
Ich kann ja nicht Gleichung für Gleichung rechnen. Dann stoß ich ja auf 7 Unbekannte auf einmal!
Wie sieht dann die bessere/einfachere Lösung aus?
-
so wie oben verlinkt...
-
Danke, hab die Beiträge bei meiner Antwort noch nicht gesehen...
Ich werds versuchen.
-
Das brauchst du aber nicht selber machen, denn jede entsprechende Bibliothek bietet dir das...
-
sum_pattern schrieb:
Ach ja!? [...]
Wie sieht dann die bessere/einfachere Lösung aus?Je nachdem, was A für eine Matrix ist. Im allgemeinen Fall über die LR-Zerlegung (auf Englisch: LU factorization) mit Pivotisierung. Eigen kann das (und vieles mehr) z.B. schon.
-
So, nochmals danke für die Hilfe.
Habe das Verfahren vorher leider noch nicht gekannt. Aber sieht gut aus. Werde das nun mit Hilfe von Eigen ausprobieren.
Eine Frage noch: Da kann ich dann auch ohne Probleme mit komplexen Zahlen rechen / rechnen lassen?
-
sum_pattern schrieb:
So, nochmals danke für die Hilfe.
Habe das Verfahren vorher leider noch nicht gekannt.Und dein Prof etwa auch nicht?
Aber sieht gut aus. Werde das nun mit Hilfe von Eigen ausprobieren.
Eine Frage noch: Da kann ich dann auch ohne Probleme mit komplexen Zahlen rechen / rechnen lassen?Ich kenne zwar jetzt Eigen nicht, aber bei den anderen Matrixbibliotheken die ich kenne, ist das sogar Standard.
-
Dem Ganzen liegen irgendwelche Thesen eines Amerikaners von vor 30 Jahren zu Grunde. Der hat eben soweit ich weiss mit Inversen gerechnet und deshalb war ich (und der Prof) auf dem Trichter. Wie gesagt ich kannte die andere Variante auch gar nicht... Dem Prof unterstell ich das aber nicht
-
Also bei uns war das so ziemlich das erste, was man am Anfang jedes Kurses, der sich irgendwie mit dem lösen von Gleichungssystemen zu tun hat, hatten.
Vor allem auch um uns klar zu machen, dass man die Inverse einer Matrix eigentlich nie wirklich braucht und in realen Einsatzgebieten (Numerik) keine Inversen dazu gibt und wenn doch wäre es viel zu aufwändig die zu finden.
Uns wurde richtiggehend eingebleut: Inverse haben wollen = böse (in Herleitungen für Techniken natürlich völlig Ok, aber wehe jemand will die dann auch berechnen)
-
boost.uBLAS bietet out-of-the-box z.B. gar keinen Weg um eine inverse zu berechnen...