并行求解 Ax=b?

机器算法验证 r 并行计算
2022-03-20 06:12:18

交叉发布在StackOverflow上。

我有一些使用矩阵包中的 spMatrix 函数创建的非常大的稀疏矩阵。

使用 solve() 函数可以解决我的 Ax=b 问题,但需要很长时间。几天。

我注意到http://cran.r-project.org/web/packages/RScaLAPACK/RScaLAPACK.pdf似乎具有可以并行化求解功能的功能,但是,可能需要几周时间才能在此安装新软件包特定的服务器。

服务器已经安装了雪包。

所以

  • 有没有办法使用雪来并行化这个操作?
  • 如果没有,是否有其他方法可以加快此类操作?
  • 有没有像 RScaLAPACK 这样的其他软件包?我在 RScaLAPACK 上的搜索似乎表明人们对它有很多问题。

谢谢。

额外细节

  • 矩阵约为 370,000 x 370,000。我用它来解决 alpha 中心性问题,http ://en.wikipedia.org/wiki/Alpha_centrality 。
  • 我最初在 igraph 包中使用 alpha 中心性函数,但它会使 R 崩溃。
  • 这是在具有 12 个内核和 96 个内存的单台机器上(我相信)
  • 这是一个沿着论文引用关系的有向图。
  • 计算条件数和密度需要一段时间。将在可用时发布。
2个回答

您可以将此操作分解为一组易于并行化的较小操作。

假设你想解决mv=uN经过N矩阵mN-向量u. 写作N=n+m(打算nm),分解m分成四个块an×n,bn×m,cm×n, 和dm×m, 也分解u进入它的第一个n成分en和它的最后一个m成分fm同时同样表达v作为的串联n-向量xm-向量y. 很容易看出原始系统等价于序列

az=eaw=b(dcw)y=fczax=eby

前两种形式m+1的系统n方程(有一个共同的矩阵);三是单一系统m方程(取决于前两个的解);最后是一个单一的系统n方程(取决于第三个的解)。通过选择mnN/2,您已经减少了所涉及的矩阵的大小,并且您已经创造了运行第一个矩阵的机会m+1系统并行。如果这还不够,可以递归地应用该技术。

无论您喜欢哪种求解线性系统的算法,这种方法都有效。

你试过二维码分解吗?请参阅此处的定理 3以解决Ax=b.

求矩阵的逆矩阵(即使是很小的矩阵)是一个缓慢的过程。当需要“反转”时(至少根据我在统计编程方面的经验),在实践中使用诸如 QR 或 Cholesky 分解之类的方法。