迭代改善算法是求解病态矩阵的一种比较理想的方法。
对于给定的方程组
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧a11⋅x1+a12⋅x2+⋯+a1n⋅xn=b1a21⋅x1+a22⋅x2+⋯+a2n⋅xn=b2⋯an1⋅x1+an2⋅x2+⋯+ann⋅xn=bn
将其改写为x=B0x+f的形式
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧x1=−a11(a12⋅x2+⋯+a1n⋅xn)+a11b1x2=−a22(a21⋅x1+⋯+a2n⋅xn)+a22b2⋯xn=−ann(an1⋅x1+an2⋅x2+⋯)+annbn
B0=⎣⎢⎢⎢⎢⎡0−a22a21⋮−annan1−a11a120⋮−annan2⋯⋯⋱⋯−a11a1n−a22a2n⋮0⎦⎥⎥⎥⎥⎤,f=⎣⎢⎢⎢⎢⎡a11b1a22b2⋮annbn⎦⎥⎥⎥⎥⎤
任取初值x(0)=[x1(0),x2(0),⋯,xn(0)]T,带入上式右端即可得:
x(1)=[x1(1),x2(1),⋯,xn(1)]T
重复上步,即可得:
x(k)=[x1(k),x2(k),⋯,xn(k)]T, k∈N
若k→∞limx(k)=x∗则称此迭代收敛。该方法称为迭代法(或一阶定常迭代法)。
x(k+1)=Bxk+f, k∈N
为研究x(k)的收敛性,引进误差向量ε(k+1)=x(k+1)−x∗
ε(k)=Bε(k−1)=B2ε(k−2)=⋯=Bkε(0)
迭代法收敛其实就是ε(k)收敛到0。当迭代序列收敛时,迭代序列的收敛解就是原方程的精确解。
设Ax=b, ∣A∣=0,将A分裂为A=M−N,其中M称为分裂矩阵。
(M−N)x=b
⇒ Mx=Nx+b
⇒ x=M−1Nx+M−1b
x=(M−1N)xB+(M−1b)f
构造一阶定常迭代法
x(k+1)=Bxk+f
A=M−N,B=M−1N
⇒B=M−1(M−A)
⇒B=I−M−1A
B=I−M−1A
同理,若将A分解为A=M+N则上式依然成立。
通过将A分解为A=M−N或A=M+N,可构造出
{B=I−M−1Af=M−1b
①②A=D−(L+U)A=D+(L+U)
①和②均为正确构造方法,上课时,老师使用的是②。
- D: 主对角矩阵
- L: 下三角矩阵(对角为0)
- U: 上三角矩阵(对角为0)
同步迭代算法
若aii=0,记①②{M=DN=L+U,则
迭代矩阵
B=I−M−1A={①②I−D−1(D−L−U)=D−1(L+U)I−D−1(D+L+U)=−D−1(L+U)
计算公式
由①得
Dx(k+1)=(L+U)x(k)+b
记x(k)=[x1(k),xi(k),⋯,xn(k)]T
aiixi(k+1)=−j=1∑i−1aijxj(k)−j=i+1∑naijxj(k)+bi
xi(k+1)=aiibi−j=ij=1∑naijxj(k)
异步迭代算法
①{M=D−LN=U,②{M=D+LN=U
迭代矩阵
B=I−M−1A={①②I−M−1(M−U)=(D−L)−1UI−M−1(M+U)=−(D+L)−1U
计算公式
由①得
Dx(k+1)=Dx(k)−(Lx(k+1)+Ux(k)−Dx(k)+b)
xi(k+1)=aiibi−j=1∑i−1aijxj(k+1)−j=i+1∑naijxj(k)
分别用雅可比迭代法及高斯-赛德尔迭代法解下列方程组
⎩⎪⎪⎨⎪⎪⎧5x1+2x2+x3=−12−x1+4x2+2x3=202x1−3x2+10x3=3,取x(0)=⎣⎢⎡000⎦⎥⎤
问
- 两种迭代法是否收敛
- 若收敛,迭代多少次可保证∥x(k)−x∗∥∞<10−4=ε
解
事前估计:k>lnqln∥x(1)−x(0)∥ε(1−q)
迭代构造:⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧A=D+L+UB=I−M−1A={−D−1(L+U)−(D+L)−1UMJacobi=DMGauss−Seide=D+Lf=M−1b
严格对角占优阵:∣aii∣>j=ij=1∑n∣aij∣
A=⎣⎢⎡5−1224−31210⎦⎥⎤=L+D+U=⎣⎢⎡−12−3⎦⎥⎤+⎣⎢⎡5410⎦⎥⎤+⎣⎢⎡212⎦⎥⎤
Jacobi
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧BJacobi=I−D−1A=⎣⎢⎡01/4−1/5−2/503/10−1/5−1/20⎦⎥⎤fJacobi=D−1b=[−5125103]T∥BJacobi∥∞=43<1
x(1)=BJacobix(0)+fJacobi=[−5125103]T
∥x(1)−x(0)∥∞=5
k>lnqln∥x(1)−x(0)∥ε(1−q)=ln43ln510−4(1−43)≈42.43
故根据事前估计,Jacobi约需要迭代43次
Gauss-Seide
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧BGS=−(D+L)−1U=⎣⎢⎡000−2/5−1/101/20−1/5−11/20−1/8⎦⎥⎤fGS=(D+L)−1b=[−5125221021]T∥BGS∥∞=2013=0.65<1
x(1)=BGSx(0)+fGS=[−5125221021]T
∥x(1)−x(0)∥∞=522=4.4
k>lnqln∥x(1)−x(0)∥ε(1−q)=ln0.65ln4.410−4(1−0.65)≈27.26
故根据事前估计,Gauss-Seide约需要迭代28次
①
记M=ω1(D−ωL)得
B=I−ω(D−ωL)−1A=(D−ωL)−1[(1−ω)D+ωU]
②
记M=ω1(D+ωL)得
B=I−ω(D+ωL)−1A=−(D+ωL)−1[(1−ω)D−ωU]
计算公式
由①得
Dx(k+1)=Dx(k)+ω(Lx(k+1)+Ux(k)−Dx(k)+b)
xi(k+1)=(1−ω)xi(k)+ω⋅aiibi−j=1∑i−1aijxj(k+1)−j=i+1∑naijxj(k)
高斯-赛德尔迭代是逐次超松弛迭代的一个特例情况。
ω<1 |
ω=1 |
ω>1 |
低松弛迭代 |
高斯-赛德尔迭代 |
超松弛迭代 |
误差向量
- e(k)=x(k)−x∗
- e(k)=x(k)−x∗=[Bx(k−1)+f]−[Bx∗+f]=B[x(k−1)−x∗]=Be(k−1)
- e(k)=Be(k−1)=⋯=Bke(0)
⎩⎪⎪⎨⎪⎪⎧e(k+1)=Be(k)e(k)=Bke(0)k∈N
收敛性定义
记Ak=(aij(k)∈Rn×n),如果由n2个数列极限存在,且有k→∞limaij(k)=aij (i,j=1,2,⋯,n),则称{Ak}收敛于A,记为k→∞limAk=A。
- k→∞limAk=A⇔k→∞lim∥Ak−A∥=0
- k→∞limAk=A⇔ 对于任何向量x∈Rn都有k→∞limAkx=Ax
收敛的充要条件
B=(bij)∈Rn×n
k→∞limBk=0 ⇔ ρ(B)<1
其中ρ(B)为B的谱半径。
收敛的充分条件
实际计算中,谱半径可能比较难求,可利用ρ(B)≤∥B∥<1(即谱半径≤矩阵的某种算子范数)进行判别
∥B∥=q<1 ⇒ k→∞limAk=A
- ∥x∗−x(k)∥≤qk⋅∥x∗−x(0)∥
- ∥x∗−x(k)∥≤1−qq⋅∥x(k)−x(k−1)∥
- ∥x∗−x(k)∥≤1−qqk⋅∥x(1)−x(0)∥
q表示迭代矩阵的某种算子范数
事后估计
若迭代矩阵B收敛,且允许误差为ε时,当满足
∥x(k)−x(k−1)∥≤q1−qε
时,有∥x(k)−x(k−1)∥<ε,即可停止迭代。
事前估计
若有
1−qqk∥x(1)−x(0)∥≤ε
就有∥x(k)−x∗∥<ε,即当
k>lnqln∥x(1)−x(0)∥ε(1−q)
k∗=⌊k⌋+1时即可停止迭代。事前估计往往大于实际次数。
由e(k)=Be(k−1)=⋯=Bke(0)得
∥e(k)∥=∥Bke(0)∥≤∥Bk∥⋅∥e(0)∥
即
∥Bk∥≥∥e(0)∥∥e(k)∥
平均收敛速度
迭代步数k与−k1ln∥Bk∥成反比
Rk(B)=−k1ln∥Bk∥
迭代矩阵B的算子范数越小,收敛速度越快。
渐进收敛速度
k→∞limRk(B)=−ln(ρ(B))
R(B)=−ln(ρ(B))
迭代矩阵B的谱半径ρ(B)越小,收敛速度越快。
对角占优阵
设A=(aij)n×n
- 若∣aii∣>j=ij=1∑n∣aij∣,则称矩阵A为严格对角占优阵。
- 若∣aii∣≥j=ij=1∑n∣aij∣,且至少一个不等式严格成立(即存在相等的情况),则称矩阵A为弱对角占优阵。
性质
- A严格对角占优⇒A非奇异。
- A严格对角占优⇒Ax=b的Jacobi和Gauss-Seide的迭代解均收敛。
- 0<ω<2⇐Ax=b的SOR迭代解收敛。
- A对称正定且0<ω<2⇒Ax=b的SOR迭代解收敛
- A对称正定⇒Ax=b的Gauss-Seide迭代解收敛
- A严格对角占优(或A弱对角占优不可约)且0<ω≤1⇒Ax=b的SOR迭代解收敛
- A严格对角占优(或A弱对角占优不可约)⇒Ax=b的Gauss-Seide迭代解收敛