解决PDE的多重网格方法


15

我需要对Multigrid方法的简单解释或有关此的一些文献。

我熟悉BiCGStab,CG,GS,Jacobi和预处理等迭代方法,但是我是使用多网格方法的初学者。

有人可以详细解释这一点,或者至少提供清晰的伪代码或源代码,即使对于初学者来说,也有很好的文献资料?谢谢!

Answers:


15

多重网格背后的主要思想是投影。我尝试考虑如下:

假设我想高精度地求解PDE,因此我继续在具有很多点的非常精细的网格上离散域(比方说,使用有限差分法)。最后,我设置了方程组,并准备解决它。我尝试使用我最喜欢的迭代求解器(雅可比,高斯塞德尔,共轭梯度等)。我继续等待了一天以上,意识到我的计算机仍在尝试计算答案!!!

这些迭代方法无法快速运行的原因是(通常)在建立像这样的大型方程组时,矩阵本身的特征值非常接近1。为什么这很重要?因为许多迭代方法的收敛速度与最大特征值成反比关系(请参见Christian Clason与Brigg的Multigrid教程幻灯片的链接,第1部分,第27页)。因此,最大特征值越接近1,迭代方法就越慢。(注意:这有点简化了事情,但这有助于激发对多网格的需求)。

显然,如果未知数较少(即,在具有较少网格点的粗糙网格上),则解决问题的速度总是更快。但更重要的是,在较粗的网格上求解(或近似解)是解决较细网格问题的一个很好的起点。 这是大多数(如果不是全部)多网格方法背后的关键思想。为什么会这样呢?直观上讲,这是有道理的,但是有一种数学上严格的方法可以证明这一点。

让我们看一下应用于原始细网格问题的迭代方法(出于参数考虑,例如jacobi或gauss seidel)的错误的傅立叶模式。我们将看到,在最初的几次迭代中,大多数高频(高度振荡)错误已被消除!这很好,但是仍然存在低频(较少的振荡)错误,并且不会很快消失。实际上,低频误差阻止了标准迭代方法快速收敛。

当我们在较粗的网格上解决问题时(例如,通过类似jacobi或gauss-seidel的迭代方法),我们可以比细网格上更快地(即,迭代次数更少)消除低频误差。因此,如果我们解决了粗网格的问题,那么我们就有一个解决方案,它的低频误差已大大降低。因此,它将用作在更细网格上进行迭代方法的起点。

尽管存在多种不同的多重网格方法,但大多数方法是通过以下几种方式来进行操作的:

  1. 从细网格问题开始
  2. 投影到粗糙的网格上(也称为限制
  3. 在粗网格上近似求解(使用其他求解器)
  4. 将粗网格解决方案投影到细网格上(也称为延长
  5. 使用来自4.的投影作为初始猜测,通过迭代方法解决细网格问题。

对我来说,多重网格方法最困难的部分是网格之间的投影。@ChristianClason建议的Briggs教程比我能更好地处理该主题。


谢谢详细的回答!现在,我对multigrdi方法有了一些基础知识。现在,我对限制和延长流程有特定的疑问。我读到一些约束矩阵R和插值矩阵M以及诸如A2 = RAI的公式用于在网格之间进行投影。但是我不明白如何构造矩阵R和I。对此有什么想法吗?
Nurlan

请看ChristianClason发布的Briggs多重网格教程(第1部分)的幻灯片45-57。布里格斯在那里描述了几何多重网格方法的过程。那是我能找到的最简单的解释。如果您还有其他疑问,请随时发布新问题!:)
保罗

15

这个站点可能不是一个用伪代码进行详细解释的好地方(如FAQ中所述,“如果您能想象一本完整的书都能回答您的问题,那么您的要求就太多了。”),所以您可能想要首先从有关该主题的经典书籍(下面列出)开始,然后回过头来解决有关您遇到麻烦的具体细节的特定问题。


2
Briggs真的很好!
vanCompute

5

另一个经典:

  • Wesseling,《多重网格方法概论》,John Wiley&Sons,1992年。

可以在MGNet上找到示例代码

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.