稀疏线性系统在应用中出现的频率越来越高。有很多例程可供选择来解决这些系统。在最高级别,直接(例如稀疏高斯消除或 Cholesky 分解,具有特殊排序算法和多前沿方法)和迭代(例如 GMRES,(双)共轭梯度)方法之间存在分水岭。
如何确定是使用直接方法还是迭代方法?做出选择后,如何选择特定算法?我已经知道对称性的利用(例如,对稀疏对称正定系统使用共轭梯度),但是在选择方法时是否需要考虑其他类似的因素?
稀疏线性系统在应用中出现的频率越来越高。有很多例程可供选择来解决这些系统。在最高级别,直接(例如稀疏高斯消除或 Cholesky 分解,具有特殊排序算法和多前沿方法)和迭代(例如 GMRES,(双)共轭梯度)方法之间存在分水岭。
如何确定是使用直接方法还是迭代方法?做出选择后,如何选择特定算法?我已经知道对称性的利用(例如,对稀疏对称正定系统使用共轭梯度),但是在选择方法时是否需要考虑其他类似的因素?
直接方法和迭代方法之间的选择取决于目标和手头的问题。
对于 Direct 方法,我们可以注意到:
对于迭代方法,我们可以注意到:
何时使用直接或迭代方法的指南?
我完全同意已经给出的答案。我想补充一点,所有迭代方法都需要某种初始猜测。这个初始猜测的质量通常会影响您选择的方法的收敛速度。Jacobi、Gauss Seidel 和 Successive Over Relaxation 等方法都可以在每一步迭代地“平滑”尽可能多的错误(详见本文) . 前几个步骤相当快地减少了高频误差,但低频误差需要更多的迭代才能平滑。这就是使这些方法收敛缓慢的原因。在这种情况下,我们可以通过先解决低频误差(例如在较粗的网格上解决相同的问题),然后再解决较高的频率误差(例如在较细的网格上)来加速收敛。如果我们通过分而治之的方式递归地应用这个概念,我们就会得到所谓的多重网格方法。即使线性系统不是对称的,对于任何非奇异稀疏矩阵系统(例如代数多重网格方法),也有多重网格方法的替代实现,可以加速求解器的收敛。然而,它们在并行系统上的可扩展性是大量研究的主题.
您的问题中缺少一条重要信息:矩阵来自哪里。你试图解决的问题的结构很有可能建议一种解决方法。
如果您的矩阵源自具有平滑系数的偏微分方程,那么几何多重网格方法将很难被击败,特别是在三个维度上。如果您的问题不那么规律,代数多重网格是一个好方法。两者通常与 Krylov 空间方法结合使用。其他有效的求解器可以从快速多极方法或快速傅里叶变换中推导出来。