欢迎光临散文网 会员登陆 & 注册

多网格方法求解泊松方程

2023-08-24 09:50 作者:uncle1234  | 我要投稿

1.简介

求解泊松方程通常可以使用迭代求解和直接求解两者方法,其中常用的迭代方法包括雅各比、高斯赛德尔和超松弛等方法,但是当泊松方程求解网格数量较多时以上方法收敛速度较慢,因此需要使用加速方法加速收敛,本文主要介绍多网格方法来加速泊松方法的迭代收敛。其他求解方法包括但不限共轭梯度方法,广义最小残差法等。以及使用谱方法直接求解。

2.方法介绍

本文使用雅各比迭代和多网格加速技术求解泊松方程。

2.1雅各比迭代

    雅各比迭代公式如下(具体内容可参考文献1犀利程老师数值方法视频,文献2):

2.2多网格方法

多网格方法

    先在细网格上迭代使得频率大的误差衰减,剩下误差中频率较小的部分;再将误差中频率较小的部分作为方程组的右侧,在粗网格上迭代,使得频率较小的误差也能快速地衰减;最后为了保证精度,将粗网格上迭代的结果和细网格上的结果加总之后,作为初始猜测值再在细网格上迭代。如此循环往复[3]。参考文献4中对具体网格构建,矩阵生成技术有很详细的介绍。

    多网格方法的主要分为一下几步:

    a.进行有限次数的雅各比(或者其他迭代方法)迭代;

    b.计算a过程后的残差,并将残差插值到粗网格上(2h),这里使用简单的线性插值可使用(Restrict Matrix)实现;

    c.(L1)将粗网格上的残差使用雅各比迭代(或者其他迭代方法)迭代指定次数。这里要说明的是,由于求解区域边界是已知的,所以边界上的残差为0。

    d. (L2)将c步得到的残差继续在插值到更粗的网格上(4h),同时重复c.步骤。若网格不止两层,则可以重复步骤c和d直到构建层数符合设定层数。这里需要强调在使用同一个网格系统时将残差插值到网格点上则需要网格数满足于层数的特定关系,本文提供代码中包括有计算方法

    e.将粗网格残差插值到细网格上(4h>2h>h),这里也可使用线性插值(Interpolate Matrix)实现。

    f.将多网格得到的残差于第一步雅各比迭代后所得未知数相加,这样得到新的x0(未知数向量),重复进行a~f步骤直到前后两次迭代满足设定的误差。一般多网格层数与设定程序中断误差相关,避免前后两次迭代结构相近停止迭代,但却与真实值相差较大。

3.计算模型和时间结果

解如下方程:

这里我们用SOR方法给出使用和未使用多网格方法收敛速度对比。

4.代码

参考文献

[1] https://www.bilibili.com/video/BV1K54y187dtp=12&;vd_source=ebc0307e4f097cccb951ee67decd8fe6

[2] https://zhuanlan.zhihu.com/p/389389672

[3] https://zhuanlan.zhihu.com/p/337970166

[4] Multigrid Methods by Gilbert Strang (MIT)

多网格方法求解泊松方程的评论 (共 条)

分享到微博请遵守国家法律