减少带宽的稀疏矩阵逆

计算科学 稀疏矩阵 矩阵 r
2021-12-18 17:24:32

我有一个维度稀疏的对称矩阵1393x1393(8308 没有零元素),带宽为 1380。通过 Cuthill-McKee 算法,我可以实现带宽为 89 的新矩阵。如果我们称这个矩阵B为 ,那么我有兴趣计算逆矩阵I-rho*B,其中I是对角矩阵,rho是在我的 MCMC 算法中更新的参数。我需要多次计算矩阵求逆(在 MCMC 期间),有人告诉我通过减少矩阵带宽,我可以获得更快的矩阵求逆。

我使用 R 作为我的编程语言。solve函数用于计算矩阵的逆矩阵。在计算带宽为 1380 或带宽为 89 的稀疏矩阵的逆时,我注意到没有区别。

我想我需要一些明确的命令/选项才能利用带宽减少,但我不知道我应该针对哪些关键字。谁能给我一些建议?

以前的帖子有更多信息。

1个回答

立即想到三件事:

  • solve在使用命令计算矩阵的逆时,R 可能不会利用稀疏性。通常,稀疏矩阵的逆矩阵是稠密的,因此可能已经编写了内置过程来将其转换为稠密矩阵,并认为很少能从稀疏中获得任何东西。要检查这一点,请查看您是否可以打印出逆矩阵的任何类型信息,或者检查逆矩阵中非零条目的数量。
  • 减少稀疏矩阵的带宽确实减少了稀疏矩阵分解的填充。但是,这是获得您真正想要的东西的间接方法:尽可能稀疏的矩阵因子。相反,您可以尝试使用近似最小度数排序,如果R 中的分解算法知道如何利用稀疏性,这可能会给您带来更好的结果。
  • 最后,在很多情况下,从数值的角度来看,计算矩阵的逆是非常糟糕的。您真的需要计算逆矩阵,还是能够将多个向量乘以逆矩阵就足够了?在这种情况下,稀疏 LU 分解就足以满足您的目的。