超松弛迭代方法(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)=b−Lx(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)=D−1[b−Lx(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)=D−1[b−Lx(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=D−1[b−Lx(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)+ωD−1[b−Lx(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)+[b−Lx(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)+[b−Dx(k)−Ux(k)]
=
(
1
ω
D
−
D
−
U
)
x
(
k
)
+
b
=(\frac{1}{\omega}D-D-U)x^{(k)}+b
=(ω1D−D−U)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[(ω1D−D−U)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(ω1D−D−U)