| 迭代 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| x | 0 | 0.5 | 0.375 | 0.4375 | 0.6172 | 0.7480 | 0.8350 | 0.8920 | 0.9293 | 0.9537 | 0.9697 |
| y | 0 | 0.25 | 0.125 | 0.2344 | 0.4961 | 0.6699 | 0.7839 | 0.8586 | 0.9074 | 0.9394 | 0.9603 |
| z | 0 | 0.375 | 1.0312 | 1.3750 | 1.5918 | 1.7329 | 1.8252 | 1.8856 | 1.9251 | 1.9510 | 1.9679 |
| t | 0 | -1.1875 | -1.5156 | -1.6875 | -1.7959 | -1.8665 | -1.9126 | -1.9426 | -1.9626 | -1.9755 | -1.9840 |
图 5.15 使用高斯–赛德尔迭代法对 (5.28) 的迭代求解。
并使用相同的起始点 $x = 0$ , $y = 0$ 被使用。迭代过程略有不同:
将值 0, 0 代入第一个方程 $$\Rightarrow x = \frac{1}{2}$$
将值 $$\frac{1}{2}$$ , 0 代入第二个方程 $\implies y = -\frac{18}{18}$
将值 $$\frac{1}{2}$$ , $-\frac{15}{8}$ 代入第一个方程 $\implies x = \frac{31}{32}$ 。
将值 $$\frac{31}{32}$$ , $-\frac{15}{8}$ 代入第二个方程 $\Rightarrow y = -\frac{255}{128}$
将值 $$\frac{31}{32}$$ , $-\frac{2555}{128}$ 在第一个方程中 $\Rightarrow x = \frac{511}{512}$
并以同样的方式继续。可以看出,收敛速度已经快了很多。
在第二个例子中,我们一旦计算出 x、y、z 和 t 的新值就立即使用它们:这种方法称为 Gauss–Seidel 迭代。这可以写成
$$x^{(r+1)} = \frac{1}{2} (1 - y^{(r)})$$
$$y^{(r+1)} = \frac{1}{2} (1 - x^{(r+1)} - z^{(r)})$$
$$z^{(r+1)} = \frac{1}{2} (1 - y^{(r+1)} - t^{(r)})$$
$$t^{(r+1)} = \frac{1}{2} (-2 - z^{(r+1)})$$
现在的计算得到了如图 5.15 所示的结果。我们看到,在所引用的十次迭代之后,用 Gauss–Seidel 迭代得到的解与实际解的误差在 4% 以内,而用 Jacobi 迭代得到的解仍有约 20% 的误差。Gauss–Seidel 方法不仅更快,而且更便于在计算机上实现。在二十次迭代之内,Gauss–Seidel 解即可精确到小数点后三位。
尽管这两种迭代方法是通过一个特定例子来描述的,但该方法是相当通用的。为求解
AX = b
我们将
A = D + L + U
重写,其中 D 是对角矩阵,L 仅在对角线下方有非零元素,U 仅在对角线上方有非零元素,于是