2014-11-01 134 views
3

我正在写的程序与犰狳C++(4.400.1)犰狳复杂稀疏矩阵逆

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

在犰狳的API文档,它提到的方法.i()计算任何矩阵的逆,但是sp_cx_mat成员不包含这样的方法,并且inv()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); 

他们没有工作。

我想知道如何计算sp_cx_mat类型的矩阵的逆。

+0

什么是尺寸? X * X或X * Y? – Surt 2014-11-01 11:38:41

+0

矩阵是正方形的,所以X乘X – 2014-11-01 19:08:50

+0

稀疏矩阵的逆不一定是稀疏的。你真的需要稀疏矩阵的逆吗?我在快速搜索后看到的所有文献都建议以不同的方式解决潜在的问题。即使用迭代方法(或其他)来求解Ax = b。 – Unapiedra 2014-11-05 09:02:59

回答

2

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

考虑到稀疏矩阵的逆矩阵一般会很密集,那么您可以更好地将您的cx_sp_mat变成cx_mat,然后使用通常用于稠密矩阵的相同反演技术。既然你打算把它当作一个密集矩阵来表示,那么这是一个公平的假设,你有足够的RAM来做到这一点。