在寻找针对特定问题的良好预处理方法时,应使用哪些准则?


19

对于使用迭代方法求解大型线性系统,通常需要引入预处理,例如,求解,其中用于系统的左预处理。通常,与原始系统的解决方案相比,我们应该使并提供(更多)有效解决方案或减少计算资源(例如内存存储)的基础(即当。但是,我们应该使用什么准则来选择预处理器?从业者如何针对他们的特定问题呢?中号- 1X = b 中号中号- 1- 1中号= Ax=bM1(Ax=b)MM1A1M=A


1
即使对于一类特殊的方程式,这也需要非常长且详细的答案……
Jack Poulson

应该有可能建议如何选择前置条件的启发式策略。例如,给定一个问题,从业人员在实践中会尝试寻找一个好的前置条件吗?只需从基于?提取对角线的基本对角线预处理器开始。要么?A
艾伦·恩格西格·卡鲁普

4
我将引导@MattKnepley并说适当的操作是进行文献搜索。如果失败,请在相当大的问题上尝试所有容易获得的选项。如果失败了,请深入考虑物理学,以及如何便宜地找到一个近似的解决方案,并将其用作前提条件。
Jack Poulson

@JackPoulson:由于这个问题与使用哪种稀疏线性系统求解器相似以及如何选择可扩展的线性求解器,这对我来说似乎是个话题(尽管很广泛)。由于您的评论基本上是答案,请您将其转换为答案?
Geoff Oxberry '02

我已经开始悬赏这个问题了,但是我也有兴趣看到更多这样的问题,这些问题可能更好地提出或仅限于特定类别的问题。
阿隆·艾玛迪亚

Answers:


17

我本来不想给出答案,因为这值得长期的对待,希望其他人仍然可以给出答案。但是,我当然可以对推荐的方法做一个非常简短的概述:

  1. 执行全面的文献搜索。
  2. 如果失败,请尝试可以使用的所有预处理器。MATLAB,PETSc和Trilinos是很好的环境。
  3. 如果失败了,您应该仔细考虑问题的物理原理,看是否有可能提出一种廉价的近似解决方案,甚至可能是对问题的稍作改动。

3的示例是亥姆霍兹的拉普拉斯算子的移位版本,以及徐进超最近用拉普拉斯算子对双谐波算子进行预处理的工作。


谢谢!此注释的其余部分符合最小字符数限制。
Geoff Oxberry '02

14

其他人已经对预处理的问题发表了评论,我称之为“整体式”矩阵,例如,标量方程的离散形式,例如Laplace方程,Helmholtz方程,或者,如果要泛化,则是向量值弹性方程。对于这些事情,很明显,如果方程是椭圆的,则多重网格(代数或几何)是赢家,而对于其他方程则不是那么清楚-但像SSOR这样的东西通常工作得相当好(出于某种意义“合理”)。

对我而言,最大的启示是如何处理非单片式的问题,例如对于斯托克斯算子 大约15年前,当我开始进行数值分析时,我认为人们希望将相同的技术应用于上述矩阵,研究的方向是直接尝试多重网格或使用SSOR的概括(使用“点平滑器”(例如Vanka)和类似方法。但这已经消失了,因为它不能很好地工作。

(ABBT0).

取代这种情况的是最初被称为“基于物理的预处理器”,后来又(可能更准确地)称为“块预处理器”,例如Silvester和Wathen的那种。这些通常基于块消除或Schur补充,其思想是构建一种预处理器,使人们可以对已知工作良好的单个块重新使用预处理器。例如,在斯托克斯方程式中,Silvester / Wathen预处理器使用矩阵 - 1个0 Ť - 1个- 1- 1Ť - 1个- 1

(AB0BTA1B)1
当与GMRES一起用作前置条件时,将导致精确的两次迭代收敛。由于它是三角形的,因此反演也要简单得多,但是我们仍然要解决对角线块的问题,这里使用近似值: ,其中代字号表示将近似值替换为精确的逆值。这通常会更简单:因为块是椭圆运算符,因此可以通过多网格V循环很好地近似,结果在这里,由质量矩阵的ILU很好地近似。
(A1~B0(BTA1B)1~)
AA1~(BTA1B)1~

这种处理包含矩阵的各个块并在各个块上重新使用预处理器的想法已被证明是非常强大的,并且完全改变了我们今天对方程式预处理系统的看法。当然,这是相关的,因为实际上大多数实际问题都是方程组。


1
是的,我非常想要赏金!;-)
Wolfgang Bangerth 2012年

在您的第二段中:“但是,由于效果不佳,它已经消失了。” 您能给我一些直觉,为什么它不能很好地工作吗?在某些情况下它可以工作吗?
Andrew T. Barker

直接多重网格应用于整个系统的成功尚未得到证明的原因是,平滑器需要保留方程式的结构属性,而这并非易事。例如,如果要将多重网格应用于Stokes方程,则必须使平滑度,给定无散度矢量可以使您获得无散度矢量。Stokes有这样的平滑器,但是构建起来并不简单,通常会失去作为平滑器/求解器的质量。在更多的案例中,保存属性变得更加困难。
Wolfgang Bangerth,2012年

至于将Jacobi / SSOR / etc之类的信息推广到系统中,这些方法中的大多数都要求矩阵的对角线项不为零。斯托克斯显然不是这样。因此,下一个最简单的方法是不查看单个矩阵行,而是查看行,例如,与单个顶点关联的DoF的所有行。它们被称为“点平滑器”(在顶点中为点),它们在一定程度上起作用,但是一旦问题变大,它们就会遭受与Jacobi / SSOR相同的性能下降。为避免这种情况,预处理器需要全局交换信息像多重网格。
Wolfgang Bangerth '04年

众所周知,Multigrid在解决亥姆霍兹方面无效,主要是因为低能振荡模式难以平滑或难以在粗糙的空间中表示。关于波射线多重网格已经有一些工作,但是该公式非常技术性,目前还不是成熟的方法。注意,也可以使用这种块分解来解决非对称系统。根据变量的选择(例如原始变量还是保守变量),可能需要在预处理器内部更改基础以暴露阻塞的结构。
杰德·布朗

13

杰克为找到前置条件提供了很好的程序。我将尝试解决一个问题,即“什么是好的前置条件?”。操作定义是:

Ax=bM1A1

但是,这并没有使我们对设计预处理器有任何见识。大多数预处理器基于操作员频谱的操纵。通常,当特征值聚类时,Krylov方法收敛速度更快,请参见矩阵迭代亚纯函数和线性代数。有时我们可以证明预处理器的结果只是一些独特的特征值,例如《不确定线性系统的预处理说明》

通用策略以Multigrid为例。像SOR这样的松弛式预处理器(此处为平滑器)会消除误差中的高频分量。当残差投影到粗网格上时,较低频率的误差分量将变为较高频率,并且可能再次受到SOR的攻击。这种基本策略是MG等更复杂版本的基础,例如AMG。请注意,求解器必须在底部准确地解决误差中的最低频率。

另一种策略是在小子空间中求解方程,这正是Krylov求解器正在做的事情。最简单的形式是Kaczmarz方法Additive Schwarz方法。这里的理论高级变形是“ 区域分解”,它集中在界面误差的频谱近似上,因为假定可以相当精确地解决这些区域。

A


谢谢您的回复。关于我们应该走多远才能实际证明预处理适用于大型系统的任何经验,以及可能如何或应该在实践中完成。这是我的经验,许多系统,我们必须依靠直觉,启发等
艾伦P. Engsig-卡鲁普

我认为直觉太过分了。我在实践中看到的是一个简单系统的证明。然后是一个论点,认为某些修改对参数或某种变体不敏感。然后数值实验表明,即使在这种变化模型之外,它仍然有效。
Matt Knepley
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.