我有一个关于C++的特征库的问题。实际上,我想要计算稀疏矩阵的逆矩阵。当我在本征中使用稠密矩阵时,可以使用.inverse()运算来计算稠密矩阵的逆。但是在稀疏矩阵中,我在任何地方都找不到逆运算。谁知道如何计算稀疏矩阵的逆?帮帮我。
发布于 2014-09-19 08:45:31
你不能直接做它,但是你总是可以计算它,使用一个稀疏的求解器。其思想是求解A*X=I
,其中我是恒等矩阵。如果有解,X将是你的逆矩阵。The eigen documentation有一个关于稀疏求解器和如何使用它们的页面,但是基本步骤如下:
SolverClassName<SparseMatrix<double> > solver;
solver.compute(A);
SparseMatrix<double> I(n,n);
I.setIdentity();
auto A_inv = solver.solve(I);
发布于 2014-09-19 08:22:32
这在数学上没有意义。
稀疏矩阵不一定具有稀疏逆。
这就是为什么这个方法不可用的原因。
发布于 2016-12-06 17:58:33
关于@Soheib和@MatthiasB的答案的一个小扩展,如果您使用Eigen::SparseMatrix<float>
,最好使用SparseLU而不是SimplicialLLT或SimplicialLDLT,它们在浮点矩阵上给出了错误的答案。
https://stackoverflow.com/questions/25929311
复制相似问题