求解偏微分方程的多重网格法

计算科学 线性代数 pde 多重网格
2021-12-09 22:55:59

我需要对多重网格方法或一些相关文献的简单解释。

我熟悉迭代方法,包括 BiCGStab、CG、GS、Jacobi 和预处理,但我是 multigrid 方法的初学者。

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

3个回答

多重网格背后的主要思想是投影。我试着这样想:

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

这些迭代方法不能快速工作的原因是(通常)当您设置这样的大型方程组时,矩阵本身的特征值非常接近 1。为什么这很重要?因为许多迭代方法的收敛速度与最大特征值成反比(请参阅 Christian Clason 到 Brigg 的多重网格教程幻灯片的链接,第 1 部分,第 27 页)。因此,最大特征值越接近 1,迭代方法越慢。(注意:这有点过于简单化了,但它有助于激发对多重网格的需求)。

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

让我们看一下应用于原始细网格问题的迭代方法(为了论证,假设为 jacobi 或 gauss seidel)中误差的傅立叶模式。我们会看到,在最初的几次迭代中,大部分高频(高度振荡)错误都被消除了!这很好,但是仍然存在低频(较少振荡)误差并且不会很快消失。事实上,正是低频误差阻止了标准迭代方法快速收敛。

当我们在较粗的网格上解决问题时(比如说,通过像 jacobi 或 gauss-seidel 这样的迭代方法),我们基本上能够比在细网格上更快地(即在更少的迭代中)消除低频误差因此,如果我们解决粗网格问题,我们的解决方案的低频误差已显着减少。因此,它可以作为更精细网格上的迭代方法的起点。

虽然有不同的多重网格方法,但它们中的大多数都通过以下一些变化进行操作:

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

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

这个网站可能不是一个用伪代码要求详细解释的好地方(如常见问题解答中所述,“如果你能想象一整本书可以回答你的问题,那么你问的太多了。”),所以你可能想要从有关该主题的经典书籍之一(如下所列)开始,然后返回有关您遇到麻烦的具体细节的具体问题。

另一个经典:

  • Wesseling,多重网格方法简介,John Wiley & Sons,1992。

示例代码可以在MGNet上找到