多重网格法简述及简单C++实现

多重网格法是求解线性方程组的一种新方法(当然还有谱方法,对特殊方程的快速多极子,区域分解等方法),它不同于传统的定常迭代(Jacobi,Gauss-Seidel等),也不同于Krylov子空间方法(CG,由CG派生的很多方法);它的求解思想大致是对传统的定常方法进行收敛分析后,针对不同分量的收敛进行处理,加快收敛速度。具体思路是分析Ax*-b的残差(x是当前的计算结果,Ax-b为当前的解经过矩阵A变换后与b的误差,即求解中,每次迭代后残差总会减少,最终趋近于0),此残差经过傅立叶分析后发现,高频部分是由于与对物理模型离散太细引起(矩阵A很大),低频部分是对网格划分太粗引起(矩阵A较小)。按照以上思路,可以将原物理模型按不同的离散方式划分,在计算时,将细网格上误差“放到”粗网格上迭代可以快速消除误差,同理也可以将粗网格上的误差“放到”细网格消除低频误差(如何放也有讲究)。因此,多重网格的方法就是将求解的物理模型按不同粗细网格划分,再迭代时将误差“放到”不同网格下消除误差,这样可以加快收敛速度,因此多重网格方法名称源与此。以上思路在具体执行时,存在不同网格间误差的传递方式,也就导致了不同的收敛速度。目前多重网格法也是研究热点(amazon上还有很多这样的书籍);此外,由于方程组的建立是按照网格划分得到,不同的计算要求下可能存在不同的划分,如果线性方程组的矩阵A从物理模型而来,网格的划分总有物理意义,但非物理模型下的矩阵是否存在不同的划分,如何划分网格,这就是代数多重网格,目前此类还没有清晰的认识(未查询到文献)。关于多重网格的书籍大致有《多重网格法》,代码可以参见https://github.com/ljb1672/

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值