多網(wǎng)格方法求解泊松方程

1.簡介
求解泊松方程通??梢允褂玫蠼夂椭苯忧蠼鈨烧叻椒?,其中常用的迭代方法包括雅各比、高斯賽德爾和超松弛等方法,但是當(dāng)泊松方程求解網(wǎng)格數(shù)量較多時(shí)以上方法收斂速度較慢,因此需要使用加速方法加速收斂,本文主要介紹多網(wǎng)格方法來加速泊松方法的迭代收斂。其他求解方法包括但不限共軛梯度方法,廣義最小殘差法等。以及使用譜方法直接求解。
2.方法介紹
本文使用雅各比迭代和多網(wǎng)格加速技術(shù)求解泊松方程。
2.1雅各比迭代
? ? 雅各比迭代公式如下(具體內(nèi)容可參考文獻(xiàn)1犀利程老師數(shù)值方法視頻,文獻(xiàn)2):

2.2多網(wǎng)格方法
多網(wǎng)格方法
? ? 先在細(xì)網(wǎng)格上迭代使得頻率大的誤差衰減,剩下誤差中頻率較小的部分;再將誤差中頻率較小的部分作為方程組的右側(cè),在粗網(wǎng)格上迭代,使得頻率較小的誤差也能快速地衰減;最后為了保證精度,將粗網(wǎng)格上迭代的結(jié)果和細(xì)網(wǎng)格上的結(jié)果加總之后,作為初始猜測值再在細(xì)網(wǎng)格上迭代。如此循環(huán)往復(fù)[3]。參考文獻(xiàn)4中對具體網(wǎng)格構(gòu)建,矩陣生成技術(shù)有很詳細(xì)的介紹。
????多網(wǎng)格方法的主要分為一下幾步:
????a.進(jìn)行有限次數(shù)的雅各比(或者其他迭代方法)迭代;
????b.計(jì)算a過程后的殘差,并將殘差插值到粗網(wǎng)格上(2h),這里使用簡單的線性插值可使用(Restrict Matrix)實(shí)現(xiàn);
????c.(L1)將粗網(wǎng)格上的殘差使用雅各比迭代(或者其他迭代方法)迭代指定次數(shù)。這里要說明的是,由于求解區(qū)域邊界是已知的,所以邊界上的殘差為0。
????d. (L2)將c步得到的殘差繼續(xù)在插值到更粗的網(wǎng)格上(4h),同時(shí)重復(fù)c.步驟。若網(wǎng)格不止兩層,則可以重復(fù)步驟c和d直到構(gòu)建層數(shù)符合設(shè)定層數(shù)。這里需要強(qiáng)調(diào)在使用同一個(gè)網(wǎng)格系統(tǒng)時(shí)將殘差插值到網(wǎng)格點(diǎn)上則需要網(wǎng)格數(shù)滿足于層數(shù)的特定關(guān)系,本文提供代碼中包括有計(jì)算方法。
????e.將粗網(wǎng)格殘差插值到細(xì)網(wǎng)格上(4h>2h>h),這里也可使用線性插值(Interpolate Matrix)實(shí)現(xiàn)。
????f.將多網(wǎng)格得到的殘差于第一步雅各比迭代后所得未知數(shù)相加,這樣得到新的x0(未知數(shù)向量),重復(fù)進(jìn)行a~f步驟直到前后兩次迭代滿足設(shè)定的誤差。一般多網(wǎng)格層數(shù)與設(shè)定程序中斷誤差相關(guān),避免前后兩次迭代結(jié)構(gòu)相近停止迭代,但卻與真實(shí)值相差較大。
3.計(jì)算模型和時(shí)間結(jié)果
解如下方程:


這里我們用SOR方法給出使用和未使用多網(wǎng)格方法收斂速度對比。

4.代碼
參考文獻(xiàn)
[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)