对于使用迭代方法求解大型线性系统,通常需要引入预处理,例如,求解,其中用于系统的左预处理。通常,与原始系统的解决方案相比,我们应该使并提供(更多)有效解决方案或减少计算资源(例如内存存储)的基础(即当。但是,我们应该使用什么准则来选择预处理器?从业者如何针对他们的特定问题呢?中号- 1(甲X = b )中号中号- 1 ≈ 甲- 1中号= 甲
对于使用迭代方法求解大型线性系统,通常需要引入预处理,例如,求解,其中用于系统的左预处理。通常,与原始系统的解决方案相比,我们应该使并提供(更多)有效解决方案或减少计算资源(例如内存存储)的基础(即当。但是,我们应该使用什么准则来选择预处理器?从业者如何针对他们的特定问题呢?中号- 1(甲X = b )中号中号- 1 ≈ 甲- 1中号= 甲
Answers:
我本来不想给出答案,因为这值得长期的对待,希望其他人仍然可以给出答案。但是,我当然可以对推荐的方法做一个非常简短的概述:
3的示例是亥姆霍兹的拉普拉斯算子的移位版本,以及徐进超最近用拉普拉斯算子对双谐波算子进行预处理的工作。
其他人已经对预处理的问题发表了评论,我称之为“整体式”矩阵,例如,标量方程的离散形式,例如Laplace方程,Helmholtz方程,或者,如果要泛化,则是向量值弹性方程。对于这些事情,很明显,如果方程是椭圆的,则多重网格(代数或几何)是赢家,而对于其他方程则不是那么清楚-但像SSOR这样的东西通常工作得相当好(出于某种意义“合理”)。
对我而言,最大的启示是如何处理非单片式的问题,例如对于斯托克斯算子 大约15年前,当我开始进行数值分析时,我认为人们希望将相同的技术应用于上述矩阵,研究的方向是直接尝试多重网格或使用SSOR的概括(使用“点平滑器”(例如Vanka)和类似方法。但这已经消失了,因为它不能很好地工作。
取代这种情况的是最初被称为“基于物理的预处理器”,后来又(可能更准确地)称为“块预处理器”,例如Silvester和Wathen的那种。这些通常基于块消除或Schur补充,其思想是构建一种预处理器,使人们可以对已知工作良好的单个块重新使用预处理器。例如,在斯托克斯方程式中,Silvester / Wathen预处理器使用矩阵 (〜甲- 1个乙0 〜(乙Ť 甲- 1个乙)- 1)阿〜甲- 1〜(乙Ť 甲- 1个乙)- 1
这种处理包含矩阵的各个块并在各个块上重新使用预处理器的想法已被证明是非常强大的,并且完全改变了我们今天对方程式预处理系统的看法。当然,这是相关的,因为实际上大多数实际问题都是方程组。
杰克为找到前置条件提供了很好的程序。我将尝试解决一个问题,即“什么是好的前置条件?”。操作定义是:
但是,这并没有使我们对设计预处理器有任何见识。大多数预处理器基于操作员频谱的操纵。通常,当特征值聚类时,Krylov方法收敛速度更快,请参见矩阵迭代或亚纯函数和线性代数。有时我们可以证明预处理器的结果只是一些独特的特征值,例如《不确定线性系统的预处理说明》。
通用策略以Multigrid为例。像SOR这样的松弛式预处理器(此处为平滑器)会消除误差中的高频分量。当残差投影到粗网格上时,较低频率的误差分量将变为较高频率,并且可能再次受到SOR的攻击。这种基本策略是MG等更复杂版本的基础,例如AMG。请注意,求解器必须在底部准确地解决误差中的最低频率。
另一种策略是在小子空间中求解方程,这正是Krylov求解器正在做的事情。最简单的形式是Kaczmarz方法或Additive Schwarz方法。这里的理论高级变形是“ 区域分解”,它集中在界面误差的频谱近似上,因为假定可以相当精确地解决这些区域。