Boosts lineare Algebra Lösung für y = Axe

8

Hat Boost einen? Wo A, y und x ist eine Matrix (dünn und kann sehr groß sein) und Vektoren. Entweder y oder x kann unbekannt sein.

Ich kann es hier anscheinend nicht finden:   Ссылка

    
neversaint 04.08.2009, 01:50
quelle

6 Antworten

4

Lineare Löser sind in der Regel Teil der LAPACK-Bibliothek, die eine Erweiterung der BLAS-Bibliothek auf höherer Ebene ist. Unter Linux bietet der Intel MKL einige gute Löser, die sowohl für dichte als auch für dünn besetzte Matrizen optimiert sind. Wenn Sie unter Windows sind, hat MKL eine einmonatige Testversion kostenlos ... und um ehrlich zu sein, habe ich keine der anderen da draußen ausprobiert. Ich weiß, dass das Atlas-Paket eine kostenlose LAPACK-Implementierung hat, aber nicht sicher ist, wie schwer es ist, unter Windows zu laufen.

Wie auch immer, suchen Sie nach einer LAPACK-Bibliothek, die auf Ihrem System funktioniert.

    
DeusAduro 04.08.2009, 02:02
quelle
17

Ja, Sie können lineare Gleichungen mit der ublas-Bibliothek von boost lösen. Hier ist ein kurzer Weg mit LU-Faktorisierung und Rückersatz, um die Umkehrung zu erhalten:

%Vor%

Um also ein lineares System Ax = y zu lösen, würde man die Gleichung trans (A) Ax = trans (A) y lösen, indem man die Umkehrung von (trans (A) A) ^ - 1 nimmt, um x: x = zu erhalten (trans (A) A) ^ - 1Ay.

    
Inverse 19.08.2009 03:51
quelle
4

Einer der besten Löser für Ax = b, wenn A spärlich ist, ist Tim Davis UMFPACK

UMFPACK berechnet eine spärliche LU-Zerlegung von A. Es ist der Algorithmus, der wird hinter den Kulissen in Matlab verwendet, wenn Sie x=A\b eingeben (und A ist spärlich) und Quadrat). UMFPACK ist freie Software (GPL)

Beachten Sie auch, wenn y = Ax, und x ist bekannt, aber y ist nicht, Sie berechnen y, indem Sie eine spärliche Matrixvektor-Multiplikation durchführen, nicht durch Lösen eines linearen Systems.

    
codehippo 08.08.2009 11:35
quelle
3

Wenn man die Boost-Dokumentation liest, scheint es nicht so zu sein, dass w.r.t x gelöst wird. Lösung in y ist nur eine Frage von Matrix-Vektor-Produkt, das in ublas implementiert scheint.

Beachten Sie, dass blas nur einfache Operationen wie Addition, Multiplikation usw. von Vektor- und Matrixtypen implementiert. Alles, was weiter fortgeschritten ist (lineares Problemlösen, wie zB "löse xy = A x", Eigenvektoren und co) ist Teil von LAPACK, das auf BLAS aufbaut. Ich weiß nicht, was Boost in dieser Hinsicht bietet.

    
David Cournapeau 04.08.2009 02:04
quelle
3

Die Optimierung des linearen Algebra-Pakets von Boost konzentrierte sich auf "dichte Matrizen". Soweit ich weiß, hat Boosts Paket keinen linearen Systemlöser. Wie wäre es mit Quellcode in "Numerisches Rezept in C ( Ссылка )"?

Hinweis. Es kann einen subtilen Indexfehler im Quellcode geben (einige Codes verwenden den Array-Index von 1)

    
rein 04.08.2009 02:06
quelle
3

Schauen Sie sich JAMA / TNT an. Ich habe es nur für Nicht-Sparse-Matrizen verwendet (wahrscheinlich wollen Sie die QR- oder LU-Faktorisierung, die beide Löser-Hilfsmethoden haben), aber es hat anscheinend einige Möglichkeiten für dünn besetzte Matrizen.

    
Jason S 04.08.2009 13:39
quelle

Tags und Links