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: Ссылка
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.
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.
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.
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.
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)
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.
Tags und Links math c++ boost linear-algebra