Effizienteste Weg zur Lösung eines Systems von linearen Gleichungen
Ich habe eine (n x n) - symmetrischen matrix A und einer (n x 1) Vektor B. im Grunde, ich brauche nur zu lösen ist Ax = b für x ein. Das Problem ist, dass a mit Einer potentiell massive. Also ich bin auf der Suche nach der effizienteste Algorithmus zur Lösung linearer Gleichungen in C++. Ich sah über die Eigen-Bibliothek. Anscheinend hat es ein SVD-Methode, aber ich habe gesagt, es ist langsam. Die Lösung x=inverse(A))*b scheint auch so, als wäre es suboptimal. Ist uBLAS schneller? Gibt es effizientere Methoden? Danke.
Edit: matrix A ist positiv definit und nicht spärlich.
InformationsquelleAutor der Frage aesir | 2013-11-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den besten Weg zur Lösung eines Systems von linearen Gleichungen in der form
Ax = b
ist Folgendes zu tun.A
in das formatA = M1 * M2
(woM1
undM2
sind dreieckig)M1 * y = b
füry
mit zurück substitutionM2 * x = y
fürx
mit zurück substitutionFür quadratische MatrizenSchritt 1 wäre, die Nutzung LU-ZERLEGUNG.
Für nicht quadratische MatrizenSchritt 1 wäre, die Nutzung QR-ZERLEGUNG.
Wenn die matrix A ist positiv definit und nicht mit die Sie verwenden würden, Cholesky-ZERLEGUNG für den ersten Schritt.
Wenn Sie möchten, verwenden Sie eigen, Sie müssen zuerst zerlegen und dann dreieckige lösen.
Wenn das immer noch langsam, zum Glück, es gibt zahlreiche lineare-algebra-Bibliotheken zur Verfügung, die helfen können, verbessern die Leistung. Die routine, die Sie achten sollten, ist
dpotrs
. Einige Bibliotheken haben diese umgesetzt sind wie folgt:Wenn Sie eigen, die in das Gesamtprojekt, können Sie die Schnittstelle der LAPACK-routine, die Sie benötigen, wie beschrieben hier.
InformationsquelleAutor der Antwort Pavan Yalamanchili