Ho una domanda sulla libreria Eigen in C++. In realtà, voglio calcolare la matrice inversa della matrice sparsa. Quando ho usato la matrice densa in Eigen, posso usare l'operazione .inverse() per calcolare l'inverso della matrice densa. Ma in Sparse matrix, non riesco a trovare l'operazione inversa da nessuna parte. Qualcuno che sa calcolare l'inversa della matrice sparsa? aiutami.Come calcolare l'inversa della matrice sparsa nella libreria Eigen
risposta
Non è possibile farlo direttamente, ma è sempre possibile calcolarlo utilizzando uno dei risolutori sparsi. L'idea è di risolvere A*X=I
, dove I è la matrice di identità. Se c'è una soluzione, X sarà la tua matrice inversa. The eigen documentation ha una pagina su risolutori sparse e come usarli, ma i passaggi fondamentali sono i seguenti:
SolverClassName<SparseMatrix<double> > solver;
solver.compute(A);
SparseMatrix<double> I(n,n);
I.setIdentity();
auto A_inv = solver.solve(I);
Non è matematicamente significativo.
Una matrice sparsa non ha necessariamente un inverso sparse.
Ecco perché il metodo non è disponibile.
Ciò vale anche per le matrici dense, matematicamente non c'è differenza. È più che è costoso farlo, soprattutto perché le matrici sparse tendono ad essere grandi. – MatthiasB
Si può trovare un esempio su inverso della matrice complessa Sparse
ho usato di classe SimplicialLLT,
si possono trovare altra classe da muggito
http://eigen.tuxfamily.org/dox-devel/group__TopicSparseSystems.html
Questa pagina può aiutare con una corretta nome di classe per il vostro lavoro (spead, accuratezza e dimmenssion del vostro Matrix)
////////////////////// 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;
}
Una piccola estensione @Soheib e @ risposte di MatthiasB, se si sta utilizzando Eigen::SparseMatrix<float>
è meglio utilizzare SparseLU anziché SimplicialLLT o SimplicialLDLT, hanno prodotto risposte errate con me su matrici float
- 1. Come convertire la matrice sparsa in matrice densa in Eigen
- 2. Estrarre un blocco da una matrice sparsa come un'altra matrice sparsa
- 3. colonna Append alla matrice, utilizzando Eigen libreria
- 4. Calcola la similarità della matrice sparsa
- 5. Factorizzazione rapida della matrice non negativa su matrice sparsa grande
- 6. Media dei valori diversi da zero nella matrice sparsa?
- 7. Come modificare gli elementi nella matrice sparsa in Python's SciPy?
- 8. R: conversione matrice sparsa
- 9. Javascript scorrendo matrice sparsa
- 10. Matrice di rotazione in Eigen
- 11. Mappatura della matrice su una matrice Eigen esistente
- 12. Come parallelizzare la moltiplicazione della matrice sparsa di scipy
- 13. minimo di una matrice sparsa?
- 14. Argmax di ogni riga o colonna nella matrice sparsa scipy
- 15. Come analizzare una matrice di adiacenza sparsa?
- 16. Matrice cross-product in Eigen
- 17. moltiplicazione della matrice numpy in memoria triangolare/sparsa?
- 18. Operazioni con matrice sparsa su CUDA
- 19. Converti matrice sparsa (csc_matrix) in dataframe panda
- 20. Come convertire Eigen :: Matrix4f in Eigen :: Affine3f
- 21. Applicare la funzione a tutti gli elementi della matrice Eigen
- 22. Creare una matrice diagonale sparsa dalla riga di una matrice sparsa
- 23. somma massima subrectangle in una matrice sparsa
- 24. Algoritmo per moltiplicazione di matrice di forme quadratiche con matrice sparsa
- 25. SVD per matrice sparsa in R
- 26. C++ Eigen inizializza la matrice statica
- 27. Crea matrice sparsa da un riquadro dati
- 28. csv a matrice sparsa in python
- 29. Matrice di puntatori a Eigen Matrices
- 30. Come calcolare la matrice della chiave inversa nell'algoritmo Hill Cipher?
Inserisci un paio di altri tag per attirare risposte più complete. – Bathsheba
Aha .. Grazie ci proverò – kujungmul
Ma la mia risposta tersa non regge! – Bathsheba