写在前面
- 1 SOR简介
- 2 SOR算法推导
- 3 SOR算法收敛性
- 4 实例分析
- 5 代码实现
- 6 参考文献与链接
迭代法收敛定理
定理1(充要条件):
矩阵M的谱半径
ρ(M)=imax{λi∣i=1,2,⋯n}<1(∥M∥2<1)(1)
定理2(充分条件):
矩阵M的某个算子范数
∥M∥<1(2)
1 SOR简介
SOR是Successive Over Relaxation(逐次超松弛)的缩写。该方法是求解大型稀疏矩阵方程组的有效方法之一,也可看作为Gauss-Seidel迭代法的加速,Gauss-Seidel是SOR迭代的一种特殊形式。
2 SOR算法推导
将方程组AX=b写成
ai1x1+ai2x2+⋯+ai,i−1xi−1+aiixi⋯+ainxn=bi,(i=1,2,⋯,n)(2.1)
则
⇒aiixi=bi−(ai1x1+ai2x2+⋯+ai,i−1xi−1)−(ai,i+1xi+1+⋯+ainxn)⇒aiixi=aiixi+(bi−ai1x1−ai2x2−⋯−ai,i−1xi−1−aiixi−ai,i+1xi+1−⋯−ainxn)⇒xi=xi+aii1(bi−ai1x1−ai2x2−⋯−ai,i−1xi−1−aitxi−ai,i+1xi+1−⋯−ainxn)
于是Gauss-Seidel迭代法可写成(ai,i=0)
xi(k+1)=xi(k)+aii1(bi−ai1x1(k+1)−⋯−ai,i−1xi−1(k+1)−ainxi(k)−⋯−ainxn(k))=xi(k)+aii1(bi−∑j=1i−1aijxj(k+1)−∑j=inaijxj(k))ri(k)=(bi−∑j=1i−1aijxj(k+1)−∑j=inaijxj(k)),i=1,2,⋯,n(2.2)
记
ri(k)=(bi−j=1∑i−1aijxj(k+1)−j=i∑naijxj(k)),i=1,2,⋯,n
则(2.2)式可写成
xi(k+1)=xi(k)+aii1ri(k)(2.3)
由(2.3)式可看出,Gauss-Seidel迭代法的第k+1步的基础上每个分量上加上aii1ri(k)。为了获得更快的收敛效果,在修正项的前面乘以一个参数ω,于是得到逐次超松弛算法
xi(k+1)=xi(k)+aiiωri(k),i=1,2,⋯,n(2.4)
即
xi(k+1)=(1−ω)xi(k)+aiiω(bi−j=1∑i−1aijxj(k+1)−j=i+1∑naijxj(k)),i=1,2,⋯,n(2.5)
其矩阵形式为
X(k+1)=(1−ω)X(k)+ωD−1(b+LX(k)+UX(k))(2.6)
其中,A=D−L−U
D=⎝⎜⎜⎛a11a22⋱ann⎠⎟⎟⎞,L=⎝⎜⎜⎜⎛0a21⋮an10⋱an2⋱⋯0⎠⎟⎟⎟⎞,U=⎝⎜⎜⎜⎛0a120⋯⋱⋱a1na2n⋮0⎠⎟⎟⎟⎞
3 SOR算法收敛性
由(2.6)式有
DX(k+1)=(1−ω)DX(k)+ω(b+LX(k+1)+UX(k))
即
DX(k+1)−ωLX(k+1)=(1−ω)DX(k)+ω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)−1b
记
{Bω=(D−ωL)−1[(1−ω)D+ωU]Fω=ω(D−ωL)−1b(3.1)
则有
X(k+1)=Bω(X)(k)+Fω(3.2)
其中,Bω为SOR迭代矩阵。
由收敛定理的定理1和定理2可知,SOR收敛的充要条件是ρ(Bω)<1或者∥Bω∥2<1,可以看出SOR迭代法收敛与否或收敛的快慢都与松弛因子ω有关,因此SOR迭代算法存在如下定理.
定理3: SOR迭代法收敛的充要条件是松弛因子0<ω<2 .
证:由于SOR收敛,则ρ(Bω)<1。记Bω的特征值为λ1,λ2,⋯,λn,而n阶矩阵的n个特征值之积等于其行列式之值,即
∣detBω∣=∣λ1λ2⋯λn∣
而
∣λi∣≤∣ρ(Bω)∣
故
∣detBω∣=∣λ1λ2⋯λn∣≤[ρ(Bω)]n<1
另一方面,由
Bω=(D−ωL)−1[(1−ω)D+ωU]
有
∣detBω∣=∣∣det(D−ωL)−1∣∣⋅∣det[(1−ω)D+ωU]
即
∣detBω∣=∣det(D−ωL)∣∣det[(1−ω)D+ωU]∣=∣1−ω∣n
因此有∣1−ω∣n<1或者∣1−ω∣<1,也即0<ω<2. □
定理4:如果矩阵A是对称正定的,则SOR法对于0<ω<2是收敛的。
4 实例分析
用逐次超松弛(SOR)迭代法求解方程组AX=b,其中矩阵A为
A=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡12−21−212−2⋱1−212⋱11−2⋱−211⋱12−21⋱−212−21−212⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x1x2x3⋮x18x19x20⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡555⋮555⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤(4.1)
利用Matlab2016a软件求解(4.1)式(具体程序见第五节),讨论不同的松弛因子ω对迭代速度的影响。其中参数设置为:最大迭代值为500。
由于(4.1)式是一个对称正定阵,且本文规定松弛因子0<ω<2,因此由定理4可知,式(4.1)一定收敛,也即有解。求解的结果如下表。
表1 不同ω值对方程收敛速度的影响
w |
迭代次数 |
0.3 |
120 |
0.6 |
50 |
0.9 |
25 |
1.2 |
30 |
1.5 |
50 |
1.8 |
150 |
图1 不同ω值时的SOR迭代曲线值
由表1或图1可知,(1)当SOR迭代法松弛因子ω>1时,ω值越大,迭代的次数就越多,收敛速度就越慢,ω越接近1时,迭代的次数越少,收敛速度越快;(2)当SOR迭代法松弛因子ω<1时,ω越小,迭代的次数就越多,收敛速度就越慢,ω越接近1时,迭代的次数越少,收敛速度越快;(3)SOR迭代法松弛因子不在范围内时,系数矩阵的谱半径大于1,不收敛。
小结
- 在SOR迭代算法中,松弛因子ω越接近1时,迭代的次数越小,收敛速度越快,故ω最优值应选择ω=1。
- 在SOR迭代算法中,松弛因子ω距离1越远时,迭代次数越多,收敛速度越慢。
- 在SOR迭代算法中,松弛因子应选择0<ω<2,当ω超过这个范围时,不满足收敛定理,即谱半径不小于1,此时方程无解。
5 代码实现
数据下载地址
提取码:wmy0
6 参考文献与链接
[1] 数值分析 曾繁慧
[2] 科学计算与应用软件讲义_迭代思想 胡行华
[3] https://mdnice.com/
[4] Markdown Nice插件下载
[5] Markdown三线表制作方法
为了能够敲公式,第一次使用Markdown写文章,有很多不足之处请谅解
Markdown真香,更多内容请关注公众号获取
