在计算科学中,我们经常遇到大型线性系统,我们需要通过一些(有效的)方法来求解,例如通过直接或迭代方法。如果我们关注后者,我们如何确定求解大型线性系统的迭代方法在实践中是收敛的?
很明显,我们可以进行试错分析(参见为什么我的迭代线性求解器不收敛?)并依靠通过证明保证收敛或具有良好经验基础的迭代方法(例如 CG 和 GMRES 等 Krylov 子空间方法分别用于对称和非对称系统)。
但是,如何在实践中建立收敛?做了什么?
在计算科学中,我们经常遇到大型线性系统,我们需要通过一些(有效的)方法来求解,例如通过直接或迭代方法。如果我们关注后者,我们如何确定求解大型线性系统的迭代方法在实践中是收敛的?
很明显,我们可以进行试错分析(参见为什么我的迭代线性求解器不收敛?)并依靠通过证明保证收敛或具有良好经验基础的迭代方法(例如 CG 和 GMRES 等 Krylov 子空间方法分别用于对称和非对称系统)。
但是,如何在实践中建立收敛?做了什么?
对于自然界中出现的许多偏微分方程,特别是具有强非线性或各向异性的偏微分方程,选择合适的预条件子会对迭代方法收敛快、慢或根本不收敛有很大影响。已知具有快速有效预条件子的问题示例包括强椭圆偏微分方程,其中多重网格方法经常实现快速收敛。有许多测试可以用来评估收敛性;在这里,我将使用 PETSc 的功能作为示例,因为它可以说是用于迭代求解线性(和非线性方程)的稀疏系统的最古老和最成熟的库。
PETSc 使用称为 KSPMonitor 的对象来监控迭代求解器的进度,并确定求解器是收敛还是发散。监视器使用四种不同的标准来决定是否停止。有关此处讨论的更多详细信息,请参见KSPGetConvergedReason()的手册页。
我们假设用户正在为以下方程组求解:
左预处理
无/正确的预处理
收敛标准
分歧标准
最大迭代次数 - 求解器可以进行的迭代次数受最大迭代次数的限制。如果在达到最大迭代次数时没有满足其他条件,则监视器返回发散。
残差 NaN - 如果在任何时候残差评估为 NaN,则求解器返回发散。
残差范数的发散 如果在任何点残差范数大于右侧范数一个预定义常数的因子,则监视器返回发散:
Solver Breakdown Krylov 方法本身可以在检测到奇异矩阵或预条件子时发出分歧信号。