我正在用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);
类型的矩阵的逆矩阵。
答案 0 :(得分:4)
Armadillo中的稀疏矩阵支持并不完整,许多可用于密集矩阵的分解/复杂运算不适用于稀疏矩阵。这有很多原因,最大的原因是稀疏矩阵的有效复杂操作(例如稀疏矩阵的因子分解)仍然是一个开放的研究领域。因此,.i()
或其他cx_sp_mat
类型没有sp_mat
功能。另一个原因是稀疏矩阵开发人员(......包括我)缺乏时间。
鉴于稀疏矩阵的逆矩阵通常会很密集,那么您可能只需将cx_sp_mat
转换为cx_mat
然后使用与通常情况相同的反转技术对于密集矩阵。既然你计划将它表示为一个密集矩阵,那么你有足够的RAM可以做到这一点是公平的假设。