我在一些稀疏矩阵上测试了Eigen的SparseLU和BicGSTAB方法,这些稀疏矩阵的密集对应体的大小在3000*3000到16000*16000之间。所有案例表明,SparseLU比BicGSTAB方法快13%左右。
我没有给BiCGSTAB提供RowMajor稀疏矩阵,也没有给它任何预处理。这可能是慢的原因。
所以我想知道,如果我两种方法都做得好,哪一种应该更快?
如果矩阵大小增加到数百万,情况如何?
非常感谢!
您已经提到了性能差异的主要原因。当你选择"正确的"预处理器时,迭代方法会变得更快。
你可以参考的一个预处理器列表示例是:
- 雅各比
- SOR
- ILU
- 多重网格
每个预处理器都有一些参数,这些参数也应该调整。
线性求解器的选择与矩阵的特征值/特征向量的分布有很大关系。如果你有一个对称正定矩阵,那么共轭梯度是一个很好的选择。迭代次数取决于条件数(最大特征值/最小特征值)。对于从椭圆算子导出的矩阵,条件数随着矩阵的大小而增加。
查看Jonathan Shewchuk的这篇文章,了解关于CG的精彩解释。(https://www.cs.cmu.edu/~地震论文/无痛共轭梯度.pdf)。
对于其他矩阵类型,可以根据本征属性使用GMRES等。看看这篇论文http://www.sam.math.ethz.ch/~mhg/pub/biksm.pdf
希望这能有所帮助。