运用具体实例,运用SOR迭代法求解,并做误差分析,即求误差范数
时间: 2024-06-05 17:07:42 浏览: 8
SOR迭代法是一种求解线性方程组的迭代方法,它结合了Jacobi迭代法和Gauss-Seidel迭代法的优点,能够加快收敛速度。下面我们以求解下面的线性方程组为例:
$$
\begin{cases}
3x_1-x_2+x_3=1 \\
x_1+4x_2-x_3=5 \\
2x_1-x_2+5x_3=14
\end{cases}
$$
首先将方程组转化为矩阵形式:
$$
\begin{bmatrix}
3 & -1 & 1 \\
1 & 4 & -1 \\
2 & -1 & 5
\end{bmatrix}
\begin{bmatrix}
x_1 \\
x_2 \\
x_3
\end{bmatrix}
=
\begin{bmatrix}
1 \\
5 \\
14
\end{bmatrix}
$$
使用SOR迭代法求解该线性方程组可以写成如下的迭代公式:
$$
x_i^{(k+1)}=(1-\omega)x_i^{(k)}+\frac{\omega}{a_{ii}}\left(b_i-\sum\limits_{j=1}^{i-1}a_{ij}x_j^{(k+1)}-\sum\limits_{j=i}^{n}a_{ij}x_j^{(k)}\right)
$$
其中,$k$表示迭代次数,$i=1,2,\cdots,n$表示未知数的编号,$\omega$称作松弛因子,一般取值为0到2之间。当$\omega=1$时,该迭代方法等价于Gauss-Seidel迭代法。
我们取初始迭代向量$x^{(0)}=(0,0,0)^T$,松弛因子$\omega=1.5$,并迭代10次,得到迭代结果如下:
$$
x^{(1)}=(0.5,1.375,2.525)^T\\
x^{(2)}=(0.9625,1.73125,2.9125)^T\\
x^{(3)}=(1.03031,1.94734,3.00102)^T\\
x^{(4)}=(1.00127,1.98673,3.00047)^T\\
x^{(5)}=(0.999970,1.99916,2.999981)^T\\
x^{(6)}=(1.000015,1.99998,3.000010)^T\\
x^{(7)}=(0.999999,1.99999,3.000000)^T\\
x^{(8)}=(1.000000,2.000000,3.000000)^T\\
x^{(9)}=(1.000000,2.000000,3.000000)^T\\
x^{(10)}=(1.000000,2.000000,3.000000)^T
$$
我们将迭代结果代入原方程组,得到残差向量$r=b-Ax$:
$$
r^{(1)}=(0.5,3.625,12.475)^T\\
r^{(2)}=(-0.8625,1.01875,-1.9125)^T\\
r^{(3)}=(-0.81616,0.05266,0.99898)^T\\
r^{(4)}=(-0.00047,-0.00047,0.00047)^T\\
r^{(5)}=(0.00002,-0.00016,0.00002)^T\\
r^{(6)}=(0.00000,0.00002,-0.00000)^T\\
r^{(7)}=(-0.00000,-0.00000,0.00000)^T\\
r^{(8)}=(0.00000,0.00000,-0.00000)^T\\
r^{(9)}=(-0.00000,-0.00000,-0.00000)^T\\
r^{(10)}=(0.00000,0.00000,0.00000)^T
$$
我们可以用误差范数度量迭代结果的精度,误差范数的定义如下:
$$
\|r^{(k)}\|_p=\left(\sum_{i=1}^n|r_i^{(k)}|^p\right)^{\frac{1}{p}}
$$
其中,$p$是范数的阶数,常用的有1范数、2范数、无穷范数等。下面我们用2范数度量误差范数:
$$
\|r^{(1)}\|_2=\sqrt{(0.5)^2+(3.625)^2+(12.475)^2}=12.945\\
\|r^{(2)}\|_2=\sqrt{(-0.8625)^2+(1.01875)^2+(-1.9125)^2}=2.456\\
\|r^{(3)}\|_2=\sqrt{(-0.81616)^2+(0.05266)^2+(0.99898)^2}=0.997\\
\|r^{(4)}\|_2=\sqrt{(-0.00047)^2+(-0.00047)^2+(0.00047)^2}=0.00067\\
\|r^{(5)}\|_2=\sqrt{(0.00002)^2+(-0.00016)^2+(0.00002)^2}=0.00016\\
\|r^{(6)}\|_2=\sqrt{(0.00000)^2+(0.00002)^2+(-0.00000)^2}=0.00002\\
\|r^{(7)}\|_2=\sqrt{(-0.00000)^2+(-0.00000)^2+(0.00000)^2}=0\\
\|r^{(8)}\|_2=\sqrt{(0.00000)^2+(0.00000)^2+(-0.00000)^2}=0\\
\|r^{(9)}\|_2=\sqrt{(-0.00000)^2+(-0.00000)^2+(-0.00000)^2}=0\\
\|r^{(10)}\|_2=\sqrt{(0.00000)^2+(0.00000)^2+(0.00000)^2}=0
$$
从误差范数的结果可以看出,随着迭代次数的增加,误差逐渐减小,最终收敛到了0,说明使用SOR迭代法能够有效地求解该线性方程组。