犰狳复杂稀疏矩阵逆

时间:2014-11-01 10:56:02

标签: c++ sparse-matrix armadillo matrix-inverse

我正在用Armadillo C ++(4.400.1)编写程序

我有一个必须稀疏且复杂的矩阵,我想计算这种矩阵的逆。由于它是稀疏的,它可能是伪逆,但我可以保证矩阵具有完整的对角线。

在Armadillo的API文档中,它提到方法.i()来计算任何矩阵的逆,但sp_cx_mat成员不包含这样的方法,inv()或{{ 1}}函数显然无法处理pinv()类型。

sp_cx_mat

sp_cx_mat Y;

/*Fill Y ensuring that the diagonal is full*/

sp_cx_mat Z = Y.i();

他们都没有工作。

我想知道如何计算sp_cx_mat Z = inv(Y); 类型的矩阵的逆矩阵。

1 个答案:

答案 0 :(得分:4)

Armadillo中的稀疏矩阵支持并不完整,许多可用于密集矩阵的分解/复杂运算不适用于稀疏矩阵。这有很多原因,最大的原因是稀疏矩阵的有效复杂操作(例如稀疏矩阵的因子分解)仍然是一个开放的研究领域。因此,.i()或其他cx_sp_mat类型没有sp_mat功能。另一个原因是稀疏矩阵开发人员(......包括我)缺乏时间。

鉴于稀疏矩阵的逆矩阵通常会很密集,那么您可能只需将cx_sp_mat转换为cx_mat然后使用与通常情况相同的反转技术对于密集矩阵。既然你计划将它表示为一个密集矩阵,那么你有足够的RAM可以做到这一点是公平的假设。