San*_*era 3 c++ sparse-matrix matrix-inverse armadillo
我正在用犰狳 C++ (4.400.1) 编写程序
我有一个必须稀疏且复杂的矩阵,并且我想计算该矩阵的逆矩阵。由于它是稀疏的,因此可能是伪逆矩阵,但我可以保证矩阵具有完整的对角线。
在Armadillo的API文档中,提到了.i()计算任意矩阵的逆的方法,但是sp_cx_mat成员中不包含这样的方法,并且inv()orpinv()函数显然无法处理该sp_cx_mat 类型。
sp_cx_mat Y;
/*Fill Y ensuring that the diagonal is full*/
sp_cx_mat Z = Y.i();
Run Code Online (Sandbox Code Playgroud)
或者
sp_cx_mat Z = inv(Y);
Run Code Online (Sandbox Code Playgroud)
它们都不起作用。
我想知道如何计算sp_cx_mat类型矩阵的逆。
Armadillo 中的稀疏矩阵支持并不完整,许多可用于稠密矩阵的因式分解/复杂运算不适用于稀疏矩阵。造成这种情况的原因有很多,其中最大的原因是高效的复杂运算(例如稀疏矩阵的分解)仍然是一个开放的研究领域。因此,没有.i()可用的功能cx_sp_mat或其他功能sp_mat类型的功能。另一个原因是稀疏矩阵开发人员(...包括我)缺乏时间。
考虑到稀疏矩阵的逆通常是稠密的,那么您最好将您的矩阵转换cx_sp_mat为 a cx_mat,然后使用通常用于稠密矩阵的相同逆技术。既然您无论如何都计划将其表示为密集矩阵,那么可以合理地假设您有足够的 RAM 来做到这一点。