多重网格法微
多重网格法的 MATLAB 实现,蛮适合用来练练手。偏微分方程,尤其是二维问题,效率挺高的。不同网格层级之间来回切换,高频误差抹得挺快,不用死磕单一精细网格。
四层网格结构,搭配SOR 迭代,从细到粗再反过来,误差压得比较稳。尤其是结合了FAS 限制算子,信息在不同层级之间传得还算准确,结果也不会太跑偏。
代码写得还不错,有限差分法搞定离散化,SOR
用得比较顺。像下面这种写法,用起来清晰直观:
for k = 1:max_iter
u = SOR(u, A, b, omega);
end
还有一段挺关键的是从细网格投影到粗网格的部分,用的是restrict
函数,得干净利落。比如:
r_coarse = restrict(r_fine);
如果你也在搞偏微分方程的数值求解,或者在研究效率更高的解法,建议拿这个代码跑一遍,改一改自己的模型试试,应该会有点收获。
对有限差分法还不太熟?可以看看这几个资源:
如果你是新手,不妨先跑通一遍代码;如果已经写过类似的 solver,可以试着把网格层级扩展到更多层,再比较下性能提升。
下载地址
用户评论