关于C ++:Armadillo复杂稀疏矩阵逆

您所在的位置:网站首页 稀疏矩阵的逆 关于C ++:Armadillo复杂稀疏矩阵逆

关于C ++:Armadillo复杂稀疏矩阵逆

2024-06-12 01:43| 来源: 网络整理| 查看: 265

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

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

在Armadillo的API文档中,它提到了方法.i()以计算任何矩阵的逆,但是sp_cx_mat成员不包含这种方法,并且inv()或pinv()函数不能处理sp_cx_mat类型 显然。

12345sp_cx_mat Y; /*Fill Y ensuring that the diagonal is full*/ sp_cx_mat Z = Y.i();

要么

1sp_cx_mat Z = inv(Y);

他们都不工作。

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

相关讨论 尺寸是多少? X * X或X * Y? 矩阵是正方形,所以X X 稀疏矩阵的逆不一定是稀疏的。您是否真的需要稀疏矩阵的逆矩阵?经过快速搜索后,我所见过的所有文献都建议以其他方式解决根本问题。即使用迭代方法(或其他方法)求解Ax = b。 您可以计算SVD。依次U S V == Y,然后Y.pinv() == U S.pinv() V。因为Y是满秩的(由于该对角线),所以Armadillo::svd_econ()没有意义。因此,计算SVD的速度将比解决伪逆的其他方法慢得多。 是的,我需要逆,因为该逆矩阵将用于(A ^ -1)x = b系统的解。不计算反向矩阵会使我重新构成填充初始非反向矩阵的所有电气模型。 Y.pinv()确实不错,但是它在复杂的稀疏矩阵库中不存在。 如果要求解(A ^ -1)x = b,为什么不求解x = Ab呢? 因为x和b中的某些项缺失,所以使用牛顿拉夫森方法求解该系统。

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

鉴于稀疏矩阵的逆通常会很稠密,那么将您的cx_sp_mat变成cx_mat然后使用与通常用于稠密矩阵相同的反演技术可能会更好。 由于无论如何您都打算将其表示为一个密集矩阵,因此可以合理地假设您有足够的RAM来执行此操作。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3