线性方程组直接解法的不足:
- 准确度不可调整:只有精确解法
- 复杂度高,对稀疏矩阵没有较好的策略
迭代法基本概念
类似于不动点迭代法,对方程
Ax=b
构造与原方程等价的方程
x=g(x)
从而迭代计算
x(k+1)=g(x(k))
为了使每步计算量尽可能小,要求g为线性函数
x(k+1)=Bx(k+1)+f
其中B为常矩阵,f为常向量
上面的方法称为一阶定常迭代法
一阶定常迭代法的构造方法:矩阵分裂法
令
A=M−N
则
Ax=b⇔Mx−Nx=b⇔x=M−1Nx+M−1b
对M的选取需要考虑以下问题:
- M非奇异
- 迭代法易收敛、收敛快
- 求解以M为系数矩阵的方程计算量小
迭代法判停准则
类似非线性方程求根的迭代法:
- 残差判据:∣∣b−Ax(k)∣∣≤ε1
- 误差判据:∣∣x(k)−x(k−1)∣∣≤ε2
一阶定常迭代法的收敛性可以如下考察:
考虑误差
e(k)=x(k)−x∗
由于
x∗=Bx∗+f
x(k+1)=Bx(k)+f
可知
e(k+1)=Be(k)
全局收敛等价于
k→+∞limBk=O
为此,我们介绍下面一些补充知识
矩阵收敛基本理论
矩阵收敛定义为每个元素收敛
可以证明,所有矩阵算子范数等价
进而可以证明,矩阵序列收敛等价于误差的算子范数收敛到0
矩阵收敛是比向量收敛更强的结论:
若
k→+∞limA(k)=A
则
∀x, k→+∞limA(k)x=Ax
这可以通过算子范数的定义证明
定义(谱半径) 矩阵的谱半径ρ(A)为其特征值绝对值的最大值
定理(谱半径和算子范数)
- 对任意矩阵,ρ(A)≤∣∣A∣∣
- 对实对称矩阵,∣∣A∣∣2=ρ(A)
证明是容易的
定理(矩阵收敛与谱半径)
k→+∞limBk=O⇔ρ(B)<1
证明
对矩阵做Jordan分解:
B=XJX−1
则
Bk=XJkX−1
各个Jordan块的乘方独立,只需考虑一个Jordan块
Jλ,m=λ1λ1⋱⋱λ1λm×m
则
Jλ,mk=λk(1k)λk−1λk(2k)λk−2(1k)λk−1λk⋯⋯⋯⋱(m−1k)λk−m+1(m−2k)λk−m+2(m−3k)λk−m+3⋮λk
由于
k→+∞lim(lk)λk−l=k→+∞liml!λl1(k−l)!k!λk
l!λl1(k−l)!k!λk≤l!λl1klλk
显然此极限为0当且仅当∣λ∣<1
迭代法的收敛性
ρ(B)<1是全局收敛的充分条件,只需对一种算子范数成立即可,且能保证对任意初值都收敛(即全局收敛)
可以类似定义迭代法的收敛阶:p阶收敛定义为
k→+∞lim∣∣e(k)∣∣p∣∣e(k+1)∣∣=c=0
可以证明一阶定常迭代法1阶收敛,且c=ρ(B)
常见的迭代法
Jacobi迭代法
分量描述
考虑原方程
⎩⎨⎧a11x1+a12x2+a13x3=b1a21x1+a22x2+a23x3=b2a31x1+a32x2+a33x3=b3
对第i个方程,在左端只保留第i个未知量
⎩⎨⎧x1=−a111(a12x2+a13x3)+a11b1x2=−a221(a21x1+a23x3)+a22b2x3=−a331(a31x1+a32x2)+a33b3
以此为基础构造迭代法,即
⎩⎨⎧x1(k+1)=−a111(a12x2(k)+a13x3(k))+a11b1x2(k+1)=−a221(a21x1(k)+a23x3(k))+a22b2x3(k+1)=−a331(a31x1(k)+a32x2(k))+a33b3
矩阵描述
将A的对角元素和非对角元素拆开:
A=D+N,D=a11a22a33
于是
x=−D−1Nx+D−1b
Jacobi迭代每步迭代计算量相当于一次矩阵乘向量,如果是系数矩阵,计算量为Nnz(A)次乘法
计算过程不改变矩阵A,因此所有矩阵元素的计算均可只做一次
Gauss-Seidel迭代法
分量描述
回忆Jacobi迭代:
⎩⎨⎧x1(k+1)=−a111(a12x2(k)+a13x3(k))+a11b1x2(k+1)=−a221(a21x1(k)+a23x3(k))+a22b2x3(k+1)=−a331(a31x1(k)+a32x2(k))+a33b3
这样的迭代不方便原位计算,如果我们在计算后面的分量的(k+1)次迭代时,使用前面的分量已计算完的(k+1)次迭代,则得到
⎩⎨⎧x1(k+1)=−a111(a12x2(k)+a13x3(k))+a11b1x2(k+1)=−a221(a21x1(k+1)+a23x3(k))+a22b2x3(k+1)=−a331(a31x1(k+1)+a32x2(k+1))+a33b3
显然这样的迭代法仍然满足不动点性质
矩阵描述
上面的过程本质上相当于把原来的矩阵分成了对角、严格上三角、严格下三角三部分:
A=D+L+U
然后对
Dx+Lx+Ux=b
构造迭代
(D+L)x(k+1)=−Ux(k)+b
即
x(k+1)=−(D+L)−1Ux(k)+(D+L)−1b
这对应矩阵分裂法中的M为A的(不严格的)下三角部分D+L
SOR迭代法
SOR迭代法全称为逐次超松弛(Successive Over Relaxation)
在G-S迭代法的基础上引入松弛因子ω,本质上为G-S法算得的迭代结果与迭代前的结果进行加权平均
具体如下:
⎩⎨⎧x1(k+1)=(1−ω)x1(k)+ω[−a111(a12x2(k)+a13x3(k))+a11b1]x2(k+1)=(1−ω)x1(k)+ω[−a221(a21x1(k+1)+a23x3(k))+a22b2]x3(k+1)=(1−ω)x1(k)+ω[−a331(a31x1(k+1)+a32x2(k+1))+a33b3]
矩阵表示为
x(k+1)=(1−ω)x(k)+ωD−1(−Lx(k+1)−Ux(k)+b)
(D+ωL)x(k+1)=[(1−ω)D−ωU]x(k)+ωb
x(k+1)=(D+ωL)−1[(1−ω)D−ωU]x(k)+ω(D+ωL)(−1)b
三种迭代法的收敛性
使用迭代矩阵判断
考虑三种迭代法的迭代矩阵:
- Jacobi:BJ=−D−1(A−D)
- G-S:BG=−(D+L)−1U
- SOR:BS=(D+ωL)−1[(1−ω)D−ωU]
注 这里的定义均为A=L+D+U
只有Jacobi迭代的迭代矩阵是可以简单求出的
定理(Jacobi充分条件)
若∣∣BJ∣∣1<1或∣∣BJ∣∣∞<1,则Jacobi迭代法收敛
定理(G-S充分条件)
若∣∣BJ∣∣1<1或∣∣BJ∣∣∞<1,则G-S迭代法收敛
注 这里的条件与Jacobi迭代相同,不需要使用G-S迭代的迭代矩阵
使用系数矩阵判断
定理(Jacobi对称正矩阵的充分必要条件)
若A为对角元均正的对称矩阵,则Jacobi迭代法全局收敛等价于A与2D−A都正定
定义(可约矩阵)
设A∈Rn×n, n≥2,若存在排列阵P,使
PTAP=[A11OA12A22]
其中A11,A22均为方阵,则称A为可约矩阵,反之为不可约矩阵
定理(对角占优定理)
严格对角占优矩阵或不可约的弱对角占优矩阵非奇异
定理(对角占优与Jacobi/G-S迭代法收敛性)
对满足对角占优定理的A,求解Ax=b的Jacobi和G-S迭代法都收敛
定理(对角占优与SOR迭代法收敛性)
对满足对角占优定理的A,若松弛因子0<ω≤1,则求解Ax=b的SOR迭代法收敛
定理(对称正定矩阵与迭代法收敛性)
系数矩阵为对称正定矩阵时:
- G-S迭代法收敛
- 0<ω<2时的SOR迭代法收敛
定理(SOR法收敛的必要条件)
SOR法收敛的必要条件是0<ω<2
共轭梯度法
最速下降法理论基础
最速下降法是除了一阶定常迭代法以外的一种新的迭代法构造思路
可以解决一阶定常迭代法对大规模矩阵收敛慢的问题
将解线性方程组化为搜索极值点
此方法只对对称正(负)定矩阵有效
设A对称,定义函数
ϕ(x)=21xTAx−bTx
此函数为Rn上的标量场,其梯度为
∇ϕ(x)=[∂x1∂ϕ⋯∂xn∂ϕ]=(Ax−b)T
Hassian矩阵为
Hϕ(x)=∂x1∂x1∂2ϕ⋮∂xn∂x1∂2ϕ⋯⋱⋯∂x1∂xn∂2ϕ⋮∂xn∂xn∂2ϕ=A
此时:
- 若A正定,则x∗为全局唯一最小值点(极小值点)
- 若A负定,则x∗为全局唯一最大值点(极大值点)
- 若A不定,则x∗为梯度为零的非极值点,即鞍点
最速下降法
此时,假设A对称正定,则我们需要求ϕ(x)的最小值点
我们采取直线搜索的策略,即从x(k)出发,给定搜索方向p(k),我们希望找到在直线
x(k)+αkp(k)
上的ϕ(x)的最小值点
考虑到标量场的梯度为
∇ϕ(x)=(Ax−b)T
为了方便,我们忽略梯度中转置,将梯度按列向量处理。上述直线上每一点的梯度为
∇ϕ(x)T=Ax(k)+αkAp(k)−b
令残差向量
r(k)=b−Ax(k)
则
∇ϕ(x)T=αkAp(k)−r(k)
直线上的方向导数为
∂p(k)∂ϕ=(∇ϕ(x))p(k)=αkp(k)TAp(k)−r(k)Tp(k)
于是,直线上的最小值点满足
αk=p(k)TAp(k)r(k)Tp(k)
因此,每步迭代公式为
x(k+1)=x(k)+αkp(k)
其中
αk=p(k)TAp(k)r(k)Tp(k)
在上面的方法中,搜索方向p(k)的选取是任意的,实际上,为了满足最速下降,可以直接选择搜索方向为负梯度方向,即r(k),于是迭代公式变为
x(k+1)=x(k)+αkr(k)
其中
r(k)=b−Ax(k)
αk=r(k)TAr(k)r(k)Tr(k)
这实际上是A对r(k)的Rayleigh商的倒数
此方法在实际使用时,常利用残差判据,因为算法本身需要计算残差,不需要额外计算
实际判断常使用相对残差
∣∣b∣∣∣∣r(k)∣∣
根据ϕ(x)的凸性,最速下降法一定收敛
与一阶定常迭代法相同,每步核心计算量为一步矩阵与向量乘法,这里需要计算的是Ar
共轭梯度法
事实上,沿最速下降方向搜索并不一定是最优的,实际最速下降法经常出现 迂回 的情况。为了减少这种迂回,使用共轭梯度法:
我们将实际搜索方向在 最速下降方向 的基础上添加少许 偏移 ,而此偏移基于 上一步的实际搜索方向 :
x(k+1)=x(k)+ξr(k)+ηp(k−1)
其中p(k)表示实际搜索方向,上式的后两项代表了p(k)的迭代:
p(k)=r(k)+βk−1p(k−1)
x(k+1)=x(k)+αkp(k)
为此,我们需要找βk−1和αk,使ϕ(x(k+1))取在经过x(k),由r(k)和p(k−1)张成的平面上的最小值(实际计算n>>2,因此这个平面仍然是高维空间中的一个小空间)
我们将ϕ(x)看成是以下二元函数:
ϕ^(ξ,η)=ϕ(x(k)+ξr(k)+ηp(k−1))
其中三个向量均为确定值
求出上面函数的偏导数:
∂ξ∂ϕ^=(∇ϕ(x))r(k)=(r(k))TAx(k)+ξ(r(k))TAr(k)+η(r(k))TAp(k−1)−(r(k))Tb
=ξ(r(k))TAr(k)+η(r(k))TAp(k−1)−(r(k))Tr(k)
∂η∂ϕ^=(∇ϕ(x))p(k−1)=(p(k−1))TAx(k)+ξ(p(k−1))TAr(k)+η(p(k−1))TAp(k−1)−(p(k−1))Tb
=ξ(p(k−1))TAr(k)+η(p(k−1))TAp(k−1)−(p(k−1))Tr(k)
由于上一步搜索沿方向p(k−1),得到了所在平面内的最小值,因此
∂p(k−1)∂ϕ(x(k))=0
而x(k)处ϕ的梯度正好是−r(k),这说明
(p(k−1))Tr(k)=0
即:每一步搜索的搜索方向总是与搜索后的残差正交,这也符合我们对搜索后的结果是此直线上的极值点的印象
于是,平面上的最小值满足的方程
∂ξ∂ϕ^=∂η∂ϕ^=0
可以化简为
{ξ(r(k))TAr(k)+η(r(k))TAp(k−1)−(r(k))Tr(k)=0ξ(p(k−1))TAr(k)+η(p(k−1))TAp(k−1)=0
可知最优情况下的
(ξη)opt=−(p(k−1))TAp(k−1)(p(k−1))TAr(k)
注意到η/ξ就是新的搜索方向中的βk−1,因此
βk−1=−(p(k−1))TAp(k−1)(p(k−1))TAr(k)
于是,计算出下一步的搜索方向
p(k)=r(k)+βk−1p(k−1)
然后,即可计算步长
αk=p(k)TAp(k)r(k)Tp(k)
进行迭代
x(k+1)=x(k)+αkp(k)
上述公式可以采用以下手段来记忆:α,β的公式都满足以下形式:
pppr
但α和最速下降法的α相同,是一个Rayleigh商倒数的格式,于是
α=pTAppTr
而β对A是齐次的,带负号,于是
β=−pTAppTAr
同时也要注意两个公式里使用的p不是同一阶段的p,算法中几个量的更新顺序为x(k)→r(k)→βk−1→p(k)→αk→x(k+1)
取p(0)=r(0)
共轭梯度法的几个结论
相邻两步的搜索方向在A定义的内积下正交(不是常规意义下正交),即
(p(k))TAp(k−1)=0
x(k+1)一定存在于一个称为Krylov空间的仿射空间(即平移的线性子空间)中:
x(0)+Kk+1(A,r(0))=x(0)+span(r(0),Ar(0),⋯,Akr(0))
同时可以确定,x(k+1)是上述仿射子空间内的最小值点,因此x(n)将得到精确解(不考虑数值误差)
共轭梯度法的特征
共轭梯度法只能应用于对称正定矩阵,且由于其经过n步必然计算出精确值,实际上也是一种直接解法
然而,当计算次数较多时,舍入误差很严重;对于病态矩阵也可能因误差传递而无法收敛
为了改善系数矩阵的病态性,可以使用预条件技术:
选择矩阵M,将原问题等价转化为
M−1Ax=M−1b
其中M−1A的性质更好
然而,此时无法保持矩阵的对称正定性,要保证这一点,需要选择对称正定矩阵M=LLT,进行等价转化
L−1AL−Ty=L−1b
x=L−Ty