zoukankan      html  css  js  c++  java
  • 求解PDE的多重网格法(MG)

          多重网格法相对于普通的Jacobi迭代或者G-S迭代等能够得到和未知数的个数成线性的高效运行时间的主要原因在于:迭代初值的一步步接近真值和G_S方法的前面几步的快速收敛性。

          先看一张图[1]:

                                   

          这张图说明了以下几点:一、G-S迭代法在开始几步迭代时收敛速度很快,但是随着步数的增加收敛速度逐渐减慢;二、第一条性质和求解的方程未知数的个数无关,尤其是在最开始的收敛速度很快的几步;三、未知数个数越少,最终收敛速度越快,如图中的绿线(这个可以从另一个角度来理解,一般情况下,求解未知数个数少的方程显然比求解未知数个数多的方程容易地多)。

          再看一系列图片的结果(这里只截取其中的几个)[2]:

               

              

          观察上面几个图,会发现随着迭代步数的增加,图像的右半侧变化越来越小,比如上面的第4个图到第6个图。这就是有的文献中[3]说的迭代方法可以迅速地将摆动误差(高频分量,上图中右半侧部分)衰减,但对那些低频分量,迭代法的效果不是很显著。

          有了以上的铺垫,下面的几个问题就相对容易理解了。一、既然随着迭代步数的增加,对于那些低频分量的效果很差,那么有没有其他的方法来解决这个问题呢?一个方法是将问题转化到粗网格上关于误差方程在使用G-S迭代方法迭代几步,而粗网格的高频对应细网格的低频,这样的话,误差的收敛速度相对来说快很多;二、如何进行粗细网格的转化?简言之,使用限制算子(从粗网格到细网格)和插值算子(从细网格到粗网格);三、在多重网格法中,既然G-S方法为什么能奏效,那么其他的迭代法如Jacobbi方法或者SOR方法能借用过来吗?不行,在多重网格法的使用中,只有G-S迭代法或者JOR迭代法(一种加权形式的Jacobbi迭代法)符合要求,而其他的迭代法则不符合要求,这可以使用双Fourier变换以及复变函数的知识来证明[4];四、实际上,多重网格法运行速度快的一个主要原因是在经过了粗网格的迭代校正后,重新回到细网格上使用迭代法,初值较只在原始细网格上使用迭代法的迭代值更接近真值。 

    参考文献:

         [1]http://www.ams.sunysb.edu/~hcchen/ams528_hw5_1.html

         [2]http://www.cs.berkeley.edu/~demmel/cs267/lecture25/lecture25.html

         [3]http://blog.renren.com/share/75144792/13005621357

         [4]《微分方程数值分析基础教程》,(英)伊则莱斯著,刘晓艳等译,清华大学出版社,2005年

     
  • 相关阅读:
    【C++】C++ primer 第三章学习笔记
    【C++】C++ primer 第二章学习笔记
    【C++】C++ primer 第一章学习笔记
    【C++】C++ sort函数
    【C++】C++ primer 第五版 Sales_item.h源码
    【其他】MarkDown的使用
    Dockerfile最佳实践
    docker跨主机通信--模拟flannel host-gw直接路由
    pod 生命周期hook钩子函数
    docker mysql 修改密码
  • 原文地址:https://www.cnblogs.com/liuyc/p/3751070.html
Copyright © 2011-2022 走看看