解线性方程组的迭代方法 - 超松弛方法(SOR)

超松弛迭代方法(SOR)方法是Guass-Seidel方法的一种提升,它的思想如下:

对于任何尝试从 x ( k ) x^{(k)} x(k)找到 x ( k + 1 ) {x^{(k+1)}} x(k+1)的迭代方法,我们在从 x ( k ) x^{(k)} x(k) x ( k + 1 ) x^{(k+1)} x(k+1)的特定方向上移动一定的距离。这个方向是向量是 x ( k + 1 ) − x ( k ) \mathbf{{x^{(k+1)}-x^{(k)}}} x(k+1)x(k)。如果我们假设从 x k x^{k} xk x k + 1 x^{k+1} xk+1的方向使我们离真正的答案 x x x越来越近,但非一直这样,那么继续沿方向 x ( k + 1 ) − x ( k ) \mathbf{{x^{(k+1)}-x^{(k)}}} x(k+1)x(k)进行移动,但是在这个方向上移动的更远,将会是非常有意义的事情。
下面是怎样从Guass-Seidel 方法推导出SOR方法。首先注意到我们可以将Gauss-Seidel公式写为 D x ( k + 1 ) = b − L x ( k + 1 ) − U x ( k ) , Dx^{(k+1)}=b-Lx^{(k+1)}-Ux^{(k)}, Dx(k+1)=bLx(k+1)Ux(k),所以 x ( k + 1 ) = D − 1 [ b − L x ( k + 1 ) − U x ( k ) ] . x^{(k+1)}=D^{-1}[b-Lx^{(k+1)}-Ux^{(k)}]. x(k+1)=D1[bLx(k+1)Ux(k)].我们可以从两端减去 x ( k ) x^{(k)} x(k)得到 x ( k + 1 ) − x ( k ) = D − 1 [ b − L x ( k + 1 ) − D x ( k ) − U x ( k ) ] . x^{(k+1)}-x^{(k)}=D^{-1}[b-Lx^{(k+1)}-Dx^{(k)}-Ux^{(k)}]. x(k+1)x(k)=D1[bLx(k+1)Dx(k)Ux(k)].现在把这个看作是Gauss-Seidel修正项 ( x ( k + 1 ) − x ( k ) ) G S (x^{(k+1)}-x^{(k)})_{GS} (x(k+1)x(k))GS。就像上面建议的,结果表明,如果我们在每一步都比标准的Gauss-Seidel修正项 走的更远一些,结果表明逼近解到真实解的序列的收敛速度通常会快一些。SOR方法的基本思想是迭代 x ( k + 1 ) = x ( k ) + ω ( x ( k + 1 ) − x ( k ) ) G S x^{(k+1)}=x^{(k)}+\omega(x^{(k+1)}-x^{(k)})_{GS} x(k+1)=x(k)+ω(x(k+1)x(k))GS其中 ( x ( k + 1 ) − x ( k ) ) G S = D − 1 [ b − L x ( k + 1 ) − D x ( k ) − U x ( k ) ] (x^{(k+1)}-x^{(k)})_{GS}=D^{-1}[b-Lx^{(k+1)}-Dx^{(k)}-Ux^{(k)}] (x(k+1)x(k))GS=D1[bLx(k+1)Dx(k)Ux(k)]通常 1 < ω < 2 1<\omega<2 1<ω<2,注意到如果 ω = 1 \omega =1 ω=1时则正是Guass-Seidel方法。
写出细节,SOR方法是 x ( k + 1 ) = x ( k ) + ω D − 1 [ b − L x ( k + 1 ) − D x ( k ) − U x ( k ) ] x^{(k+1)}=x^{(k)}+\omega D^{-1}[b-Lx^{(k+1)}-Dx^{(k)}-Ux^{(k)}] x(k+1)=x(k)+ωD1[bLx(k+1)Dx(k)Ux(k)]我们可以对两边同时乘矩阵 D D D,然后两边同时除以 ω \omega ω将上述形式重写为 1 ω D x ( k + 1 ) = 1 ω D x ( k ) + [ b − L x ( k + 1 ) − D x ( k ) − U x ( k ) ] \frac{1}{\omega}Dx^{(k+1)}=\frac{1}{\omega}Dx^{(k)}+[b-Lx^{(k+1)}-Dx^{(k)}-Ux^{(k)}] ω1Dx(k+1)=ω1Dx(k)+[bLx(k+1)Dx(k)Ux(k)]然后将 x ( k + 1 ) x^{(k+1)} x(k+1)的项移到左边,得到 ( L + 1 ω D ) x ( k + 1 ) = 1 ω D x ( k ) + [ b − D x ( k ) − U x ( k ) ] (L+\frac{1}{\omega}D)x^{(k+1)}=\frac{1}{\omega}Dx^{(k)}+[b-Dx^{(k)}-Ux^{(k)}] (L+ω1D)x(k+1)=ω1Dx(k)+[bDx(k)Ux(k)] = ( 1 ω D − D − U ) x ( k ) + b =(\frac{1}{\omega}D-D-U)x^{(k)}+b =(ω1DDU)x(k)+b当我们对 x ( k + 1 ) x^{(k+1)} x(k+1)进行求解时,得到 x ( k + 1 ) = ( L + 1 ω D ) − 1 [ ( 1 ω D − D − U ) x ( k ) + b ] x^{(k+1)}=(L+\frac{1}{\omega}D)^{-1}[(\frac{1}{\omega}D-D-U)x^{(k)}+b] x(k+1)=(L+ω1D)1[(ω1DDU)x(k)+b]其中决定SOR方法是否收敛的迭代矩阵B是 ( L + 1 ω D ) − 1 ( 1 ω D − D − U ) (L+\frac{1}{\omega}D)^{-1}(\frac{1}{\omega}D-D-U) (L+ω1D)1(ω1DDU)

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值