GMRES 方法讲解的.txt 版本

1. 总述。工程上对线性方程组(A*x=b)的求解有巨大的需求,其中特殊形式的方程已经有
十分有效且快捷的方法,如大部分线性方程组的矩阵都为对称正定的特殊形式(称为
SPD),可以使用CG(共轭梯度)方法求解,就算在收敛速度不足的情况下,增加预条件算
子(就是再乘一个矩阵)也可以得到有效解决。但对于其他形式的线性方程组也有一般方
法,对于非正定非对称的情况下也有BiCGStab(双共轭稳定)方法,但对求解要求更高的
情况下,则使用GMRES(广义最小残差)方法,也就是说,以上方法失效后可以使用此方
法,参看[1]。
2. Krylov 子空间。使用[b,A*b,A^2*b,…,]组成的矩阵,称为Krylov 子空间。实际上
使用此空间(矩阵)可以来计算相似矩阵H。
3.GMRES 方法的基本思想。(1)其思想就是使用某些算法(具体算法见后),在Krylov 空间中寻
找方程解的一个基,通过这个基来线性组合成解。因此,求解线性方程组的解的问题,
变成了如何寻找基和求解系数的问题。
(2)使用更细致的描述:x=x0+a1*x1+a2*x2+...;其中x 是方程的解,x0 是方程的初始解,
x1,x2..是向量(解的基),a1,a2...是系数。计算中按Krylov 作为空间,使用Arnoldi
过程计算基向量x1,x2,使用最小二乘计算系数a1,a2...,在后面的叙述中,这些系数
使用y 表示。
(3)在计算中,可以逐步增加基的维数或重启来逼近这个解。步骤是:如果精度达到,则停
止运算;不满足则增加基的个数,即继续增加xi,计算系数ai 或者再重启运算(使用
当前的计算结果作为初始值x0 重新计算Krylov 子空间),直到满足精度。从方法上说,
只有全量求出解的基xn 才能得到线性组合成精确解,但实际中并不需要,可以根据精
度选择需要的维数(据目前文献所知,尚无对维数选择的一般方法)。
4.如何求解这个基。即Arnoldi 过程,此过程与施密特正交化类似。施密特正交化矩阵后有
两个矩阵,一个上三角矩阵(R),一个Q 阵(正交矩阵),即A=Q*R。Arnoldi 化一个矩阵
后,生成一个上Hesenberg 矩阵和一个正交矩阵(Q),即A=Q*H*Q^(T),在Krylov 子空
间中,A 阵与H 阵相似。由于已经确定是使用Krylov 子空间(即这个空间的数值已知),
因此可以像施密特正交化一样递推出矩阵的每个元素,即生成Q 阵和H 阵。
5.如何求解组合系数。大致思路,解方程可以表达成如下形式,||A*x-b||->0(就是尽可能
找到x,变换后尽可能接近b),按照GMRES 的思想,即解使用基线性组合,即x=Q*y;
其中Q 是前面的正交阵,y 就是系数(a1,a2…)。即||A*Q*y-b||->0,利用范数正交不
变有||Q^(T)*A*Q*x-Q^(T)*b||->0,再结合第4 步求基的过程,可以得到H*x-Q^(T)*b=0。
这是同样也是个线性方程组的求解问题,矩阵为上Hesenberg 矩阵(只不过求解的量相
对原方程大大降低)。使用Givens 变换Hesenberg 阵成上三角矩阵,即可求出方程的解
y(即系数a)。 注意,其中利用了Krylov 子空间的一些特性,求解Q^(T)*b。
6.参考资料。据笔者学习的经历(花了很长时间),总感觉没有哪本书或文章讲解得清晰和全
面(总存在那样或这样的疑问),总体来说,可以参看[2](十分适合工科学生学习),原
汁原味的看[3](即作者的讲解)。
7.计算实例。使用Excel 完成了2 个实例,第一个使用3*3 求解线性方程的实例,全面说明
了求解基和系数的求解过程,第二个实例展示了使用了4*3 的空间来计算重启的GMRES。
并展示了Jacobi 预条件下的迭代求解收敛情况。基本的计算涉及矩阵与向量乘,内积
的计算,每个变量的计算过程可以充分理解,可以参看[4]。
8.C++代码。参照开源代码完成了一个(还存在一些BUG,大矩阵下内存未释放完全),但更
建议使用Eigen 中的方法(算法中提供了带不完全LUT 的预条件技术)。Github 上传了这2 个实例代码,参看[5]
9.进一步说明。由于尚未完全找到一个通俗易懂介绍GMRES 方法的文章,因此笔者将前期对
此方法的理解做了简单的笔记分享,如有理解不正确或有偏差的地方,肯请指出,再次
修订。此外,书写中也未使用矩阵、向量的严格符号,基本使用文本文件的格式了。关
于此方法发展方向和急需解决的问题请参考[6]。其中一些更详细的推导的细节尚未做
详细说明,建议参考[7]。
参考资料
[1]Templates for the Solution of Linear Systems Building Blocks for Iterative
Methods。合著中的Jack Dongarra 获2021 年图灵奖。
[2]Greg Fasshauer 课件的14/15
[3]Iterative Methods for Sparse Linear Systems.pdf
[4]GMRES.xlsx
[5]https://github.com/ljb1672
[6]GMRES_algorithms_over_35_years
[7]https://math.ecnu.edu.cn/~jypan/Teaching/MatrixIter

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值