Ich habe eine Frage zur Eigen-Bibliothek in C++. Eigentlich möchte ich die inverse Matrix der Sparse-Matrix berechnen. Wenn ich die Dichte Matrix in Eigen verwendete, kann ich die Operation .inverse() verwenden, um die Inverse der dichten Matrix zu berechnen. Aber in der Sparse-Matrix kann ich nirgendwo eine umgekehrte Operation finden. Kennt jemand, der die Inverse der Sparse-Matrix berechnet? Hilf mir.Wie kann ich Inverse von Sparse-Matrix in Eigen-Bibliothek berechnen
Antwort
Sie können es nicht direkt tun, aber Sie können es immer berechnen, indem Sie einen der sparse solvers verwenden. Die Idee ist zu lösen A*X=I
, wo ich die Identitätsmatrix ist. Wenn es eine Lösung gibt, wird X Ihre inverse Matrix sein. The eigen documentation Seite über spärliche Löser hat und wie sie verwendet werden, aber die grundlegenden Schritte sind wie folgt:
SolverClassName<SparseMatrix<double> > solver;
solver.compute(A);
SparseMatrix<double> I(n,n);
I.setIdentity();
auto A_inv = solver.solve(I);
Es ist nicht mathematisch sinnvoll.
Eine dünne Matrix muss nicht unbedingt eine spärliche Inverse haben.
Deshalb ist die Methode nicht verfügbar.
Dies gilt auch für dichte Matrizen, mathematisch gibt es keinen Unterschied. Es ist mehr, dass es kostspielig ist, insbesondere wenn dünn besetzte Matrizen groß sind. – MatthiasB
Sie ein Beispiel über Inverse von Sparse komplexer Matrix
habe ich von SimplicialLLT Klasse finden,
können Sie andere Klasse finden von unten
http://eigen.tuxfamily.org/dox-devel/group__TopicSparseSystems.html
Auf dieser Seite können Sie mit der richtigen Klassennamen für Ihre Arbeit (spead, Genauigkeit und dimmenssion Ihrer Matrix) helfen
////////////////////// In His Name \\\\\\\\\\\\\\\\\\\\\\\\\\\
#include <iostream>
#include <vector>
#include <Eigen/Dense>
#include <Eigen/Sparse>
using namespace std;
using namespace Eigen;
int main()
{
SparseMatrix< complex<float> > A(4,4);
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
A.coeffRef(i, i) = i+j;
}
}
A.insert(2,1) = {2,1};
A.insert(3,0) = {0,0};
A.insert(3,1) = {2.5,1};
A.insert(1,3) = {2.5,1};
SimplicialLLT<SparseMatrix<complex<float> > > solverA;
A.makeCompressed();
solverA.compute(A);
if(solverA.info()!=Success) {
cout << "Oh: Very bad" << endl;
}
SparseMatrix<float> eye(4,4);
eye.setIdentity();
SparseMatrix<complex<float> > inv_A = solverA.solve(eye);
cout << "A:\n" << A << endl;
cout << "inv_A\n" << inv_A << endl;
}
Eine kleine Erweiterung auf @Soheib und @ MatthiasB die Antworten, wenn Sie Eigen::SparseMatrix<float>
verwenden, es ist besser zu Verwenden Sie SparseLU anstelle von SimplizialLLT oder SimplizialLDLT, sie erzeugten falsche Antworten mit mir auf Float-Matrizen
- 1. wie zu berechnen inverse tan?
- 2. Inverse einer Funktion berechnen - Bibliothek
- 3. Hauptkomponentenanalyse mit Eigenbibliothek
- 4. Inverse von numpy.dot
- 5. Verwenden der Eigenbibliothek in Netbeans
- 6. Berechnen von Cos inverse, um Winkelgrad zu finden
- 7. Inverse von IN in Schienen
- 8. Wie Feature-Auswahl auf SparseMatrix-Matrix in R
- 9. Inverse von Tan in Python (Tan-1)
- 10. Inverse Berechnung von Polynomringen
- 11. Wie kann ich optimale Spaltenbreiten berechnen?
- 12. Inverse von Spaltenwerten in R
- 13. Inverse Matrix in R
- 14. Verallgemeinerte Eigenwerte und Vektoren in der Eigenbibliothek
- 15. Inverse einer Matrix in SymPy?
- 16. Inverse von Flatten in Mathematica?
- 17. Wie kann ich eine große Exponentialfunktion berechnen?
- 18. Wie inverse einer GenericRelation
- 19. kann ich Normalen in GPU berechnen?
- 20. Inverse von ggplotGrob?
- 21. Inverse Funktion von numpy.polyval()
- 22. Inverse von jQuery.extend (true, ...)
- 23. R konvertiert Matrix oder Datenrahmen zu SparseMatrix
- 24. Wie kann ich Genauigkeit in NLTK KMeans Clustering berechnen
- 25. Wie kann ich die Varianz einer Liste in Python berechnen?
- 26. Wie kann ich elementare Bedingungen für Chargen in TensorFlow berechnen?
- 27. inverse Zeichenfolge in c
- 28. Inverse von url_for in Flask suchen
- 29. Wie kann ich Pi (π) in VB berechnen?
- 30. Wie kann ich den Median der Werte in SQLite berechnen?
Fügen Sie ein paar mehr Tags, um möglicherweise umfassendere Antworten zu gewinnen. – Bathsheba
Aha .. Danke, ich werde es versuchen – kujungmul
Aber meine knappe Antwort steht! – Bathsheba