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

计算科学 线性代数 线性求解器 稀疏矩阵
2021-12-07 19:36:30

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

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

4个回答

选择迭代求解器时重要的是算子的频谱,请参阅本文但是,有很多负面结果,请参阅这篇论文,其中没有迭代求解器能够胜任所有问题,而这篇论文证明了他们可以为任何频谱获得任何 GMRES 的收敛曲线。因此,似乎不可能预测迭代求解器的行为,除非在少数孤立的情况下,因此,您最好的选择是使用像PETSc这样的系统来尝试所有这些,它也有直接求解器。

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

对于 Direct 方法,我们可以注意到:

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

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

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

何时使用直接或迭代方法的指南?

  • 系数矩阵稀疏时的迭代方法和直接方法无法有效利用稀疏性(避免创建填充)。
  • 多个右手边的直接方法。
  • 如果准确性不那么重要,迭代方法会更有效
  • 非线性方程组的迭代方法。

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

您的问题中缺少一条重要信息:矩阵来自哪里。你试图解决的问题的结构很有可能建议一种解决方法。

如果您的矩阵源自具有平滑系数的偏微分方程,那么几何多重网格方法将很难被击败,特别是在三个维度上。如果您的问题不那么规律,代数多重网格是一个好方法。两者通常与 Krylov 空间方法结合使用。其他有效的求解器可以从快速多极方法或快速傅里叶变换中推导出来。