选择稀疏线性系统求解器时应遵循哪些准则?


49

稀疏线性系统在应用中会随着频率的增加而出现。解决这些系统有很多例程可供选择。在最高级别,直接方法(例如,稀疏的高斯消除或Cholesky分解,使用特殊的排序算法和多前沿方法)与迭代方法(例如,GMRES,(双)共轭梯度)方法之间存在分水岭。

如何确定使用直接方法还是迭代方法?做出了这样的选择之后,如何选择一种特定的算法?我已经知道对称性的利用方法(例如,将共轭梯度用于稀疏对称正定系统),但是在选择方法时还需要考虑其他类似因素吗?

Answers:


33

选择迭代求解器时,重要的是运算符的范围,请参阅本文。但是,有很多负面结果,请参见本文,其中没有迭代求解器可以解决所有问题,并且本文证明了迭代求解器可以针对任何频谱获得GMRES的任何收敛曲线。因此,除了少数几个孤立的情况外,似乎不可能预测迭代求解器的行为。因此,最好的选择是使用类似PETSc的系统尝试所有迭代求解器,该系统也具有直接求解器。


2
“投入一切您可以做到的”几乎是我习惯的建议。:)您链接到的第三篇论文是我之前从未见过的。感谢那!
JM

2
马特(Matt)有一个很好的答案,但您必须在他所来自的社区(大型科学计算)的背景下加以考虑。您会发现对于小问题(例如,少于十万个未知数),如果问题不是强椭圆形,则直接求解器的性能将大大优于迭代方法。我在文献中没有看到任何好的一般论文会引导您采用最初的启动策略,这让我有些尴尬。
阿隆·艾玛迪亚

5
Aron的估计不错,但是严重依赖于填充,因为稀疏直接方法通常会在耐心之前耗尽记忆。
Matt Knepley 2011年

18

直接方法和迭代方法之间的选择取决于当前的目标和问题。

对于直接方法,我们可以注意:

  • 线性系统的系数矩阵会在计算过程中发生变化,并且对于稀疏系统,可能会耗尽内存需求并由于填充而增加工作量
  • 必须完成才能给出有用的结果
  • 如果存在多个右侧,则分解可以在后续步骤中重用
  • 只能用于求解线性系统。
  • 很少失败。

对于迭代方法,我们可以注意:

  • 目标是仅在少量迭代后给出部分结果。
  • 解决同一问题的工作量应少于直接方法。
  • 经济的存储方式(无需填写)
  • 通常易于编程。
  • 可以利用已知的近似解。
  • 有时它们很快,有时却不快(有时甚至发散)。
  • 对于复杂的问题,与直接方法相比,迭代方法的健壮性大大降低。

何时使用直接或迭代方法的准则?

  • 当系数矩阵稀疏且直接方法无法有效利用稀疏性时(避免创建填充)的迭代方法。
  • 多个右侧的直接方法。
  • 如果不太关注准确性,则迭代方法可能会更有效率
  • 非线性方程组的迭代方法。

8
我认为重要的是要注意,直接方法对于多个右侧而言并不总是更好。也许它们对于右侧更好,但是如果迭代方法为而直接方法为,则将迭代求解器用于仍然是有利的右边。ØñØñØñ2Ø1个
杰克·普尔森

8

我完全同意已经给出的答案。我想补充一点,所有迭代方法都需要某种初始猜测。初始猜测的质量通常会影响您选择的方法的收敛速度。诸如Jacobi,Gauss Seidel和“连续过度松弛”之类的方法都可以迭代地“平滑”出每个步骤中尽可能多的错误(有关详细信息,请参见本文))。前几步可以相当快地减少高频误差,但是低频误差需要更多的迭代才能消除。这就是使这些方法的收敛速度变慢的原因。在这种情况下,我们可以先解决低频误差(例如,在较粗的网格上解决相同的问题),然后解决更高的频率误差(例如,在较细的网格上),以加快收敛速度​​。如果通过分而治之递归地应用此概念,我们将获得所谓的“多重网格”方法。即使线性系统不是对称的,对于任何非奇异稀疏矩阵系统(例如代数多网格方法),也可以使用多网格方法的替代实现,这可以加快求解器的收敛速度。但是,它们在并行系统上的可伸缩性是许多研究的主题。


5
这个答案似乎给人的印象是,多重网格的有效性来自于找到一个很好的初步猜测。实际上,最初的猜测只是线性问题的次要问题,而实际上仅仅是Full Multigrid的问题。由于频谱分离,多重网格有效。请注意,要使多网格在遇到困难的问题上表现良好是一项重大挑战。Multigrid可以并行良好地工作,它已成为多个Gordon Bell奖项的关键要素,并且在当今最大的机器上以高效率运行着一些开源软件包。对于GPU实现,请查看CUSP库。
杰德·布朗

大多数情况下,随机的初始猜测就足够了。在使用Lanczos算法提取特征值时,随机启动/重新启动向量确实有帮助。Lanczos算法有时确实会重新启动。
AnilJ

3

您的问题中缺少一条重要的信息:矩阵是从哪里来的。您试图解决的问题的结构很有可能提出解决方法。

如果您的矩阵源自具有光滑系数的偏微分方程,那么几何多重网格方法将很难克服,尤其是在三个维度上。如果您的问题不太规律,则代数多重网格是个好方法。两者通常都与Krylov空间方法结合。其他有效的求解器可以从快速多极方法或快速傅立叶变换中得出。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.