1

我在一些稀疏矩阵上测试了 Eigen 的 SparseLU 和 BicGSTAB 方法,其密集对应物的大小范围从 3000*3000 到 16000*16000。所有案例都表明 SparseLU 比 BicGSTAB 方法快 13% 左右。

我没有为 BiCGSTAB 提供 RowMajor 稀疏矩阵,也没有给它任何预处理器。这可能是慢的原因。

所以我想知道,如果我两种方法都做得好,哪一种应该更快?

如果矩阵大小达到百万*百万怎么办?

非常感谢!

4

2 回答 2

0

线性求解器的选择与矩阵的特征值/特征向量的分布有很大关系。如果你有一个对称的正定矩阵,那么共轭梯度是一个不错的选择。迭代次数取决于条件数(最大特征值/最小特征值)。对于从椭圆算子派生的矩阵,条件数随着矩阵的大小而增加。

查看 Jonathan Shewchuk 的这篇文章,了解关于 CG 的精彩解释。(https://www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf)。

对于其他矩阵类型,您可以根据特征属性使用 GMRES 等。查看这篇论文http://www.sam.math.ethz.ch/~mhg/pub/biksm.pdf

希望这可以帮助。

于 2016-10-10T07:16:10.147 回答
0

您已经提到了性能差异的主要原因。当您选择“正确的”预处理器时,迭代方法会变得更快。

您可能会参考的预处理器示例列表是:

  • 雅可比
  • 索尔
  • 国际劳工组织
  • 多重网格

每个预调节器都有一些参数也应该调整。

于 2016-03-24T09:06:33.197 回答