如何在特征库中计算稀疏矩阵的逆
How can I calculate inverse of sparse matrix in Eigen library
我有一个关于C++中的特征库的问题。实际上,我想计算稀疏矩阵的逆矩阵。当我在Eigen中使用稠密矩阵时,我可以使用inverse()运算来计算稠密矩阵的逆。但在稀疏矩阵中,我在任何地方都找不到逆运算。有人知道稀疏矩阵的逆运算吗?帮帮我。
您不能直接执行,但始终可以使用稀疏解算器进行计算。这个想法是求解A*X=I
,其中I是单位矩阵。如果有一个解,X将是你的逆矩阵。特征文档有一个关于稀疏解算器以及如何使用它们的页面,但基本步骤如下:
SolverClassName<SparseMatrix<double> > solver;
solver.compute(A);
SparseMatrix<double> I(n,n);
I.setIdentity();
auto A_inv = solver.solve(I);
这在数学上没有意义。
稀疏矩阵不一定具有稀疏逆。
这就是该方法不可用的原因。
@Soheib和@MatthiasB答案的一个小扩展,如果你使用Eigen::SparseMatrix<float>
,最好使用SparseLU,而不是SimplicialLLT或Simplicial LDLT,它们在浮点矩阵上产生了错误的答案
请注意,稀疏矩阵的逆并不一定是稀疏的,因此如果您使用的是大矩阵(如果您使用稀疏表示,则很可能是这样),那么这将是昂贵的。仔细考虑是否真的需要实际的矩阵逆。如果你要使用矩阵逆来求解方程组,那么你不需要实际计算矩阵逆并将其相乘(使用通常命名为solve
的方法,并提供方程的右侧)。如果你需要费舍尔矩阵的倒数来计算协变量,试着近似。
您可以找到一个关于稀疏复矩阵逆的例子
我用过SimpliciaLLT类,
你可以在下面的中找到其他级别
http://eigen.tuxfamily.org/dox-devel/group__TopicSparseSystems.html
这个页面可以帮助你为你的工作提供正确的类名(你的矩阵的拼写、准确性和尺寸)
////////////////////// 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_An" << inv_A << endl;
}
相关文章:
- C++ 中的特征向量计算
- 计算数组的特征值/向量,而不是使用特征 3 计算矩阵
- 如何计算特征中的非零数::张量<T,2>
- 使用 c++ 特征库中的特征向量() 只计算一个特征向量
- 特征库中标准偏差的逐列初始化和计算
- 特征:矩阵行的计算规范比在向量上迭代计算它们慢
- 使用python在非阳性组件中使用python与cpp中的特征库来计算特征值
- OPENCV:如何使用5点算法从来自不同相机的两个图像之间的特征匹配来计算必需矩阵
- 如何使用特征计算C++中稀疏矩阵的差分
- 特征库:计算倒数时静态和动态大小矩阵之间的不同行为
- 计算Armadillo中复杂对称矩阵的有限特征向量的正确函数
- C 特征会引发错误,但完成计算
- 在矢量中使用值(特征)来计算OpenCV的余弦相似性
- 使用特征来计算Cholesky分解
- 使用 Opencv 计算 haar 特征
- ITK-图像处理,计算3D图像的形状特征
- C ++或MATLAB代码来计算图像的类似HAAR的特征
- 如何使用特征库计算矩阵幂
- LAPACK计算特征向量失败
- 如何计算特征向量的绝对值