数值分析(6)-解线性方程组迭代方法

文章目录

  • 6 解线性方程组迭代方法
    • 6.1 Jacobi迭代法和Gauss-Seidel迭代法
      • 6.1.1 Jacobi迭代法
      • 6.1.2 Gauss-Seidel迭代法
      • 6.1.3 上面两种迭代法的矩阵形式
    • 6.2 迭代法的一般形式与收敛性
      • 6.2.1 一般形式
      • 6.2.2 收敛性
    • 6.3 Jacobi和Gauss-Seidel的收敛性
    • 6.4 逐次超松弛迭代法

6 解线性方程组迭代方法

迭代方法选取一个初始向量 x ( 0 ) x^{(0)} x(0),然后按照迭代公式,依次计算 x ( 1 ) x^{(1)} x(1) x ( 2 ) x^{(2)} x(2),……,最终当 k k k足够大的情况下, x ( k ) x^{(k)} x(k)就是方程组的近似解。由于是迭代计算,本身求解结果就是不停迭代来不停接近真实解,而且在每次迭代计算过程中由于机器精度问题也会存在误差,所以迭代法难以获得精确解,是一种逐次近似的方法。

虽然不绝对精确,但是因为算法简单易于实现,所以适用于求解大型稀疏线性方程组。

6.1 Jacobi迭代法和Gauss-Seidel迭代法

通过一个简单方程组,理解两种迭代方法:
{ a 11 x 1 + a 12 x 2 + a 13 x 3 = b 1 a 21 x 1 + a 22 x 2 + a 23 x 3 = b 2 a 31 x 1 + a 32 x 2 + a 33 x 3 = b 3 \left\{\begin{array}{l}{a_{11} x_{1}+a_{12} x_{2}+a_{13} x_{3}=b_{1}} \\ {a_{21} x_{1}+a_{22} x_{2}+a_{23} x_{3}=b_{2}} \\ {a_{31} x_{1}+a_{32} x_{2}+a_{33} x_{3}=b_{3}}\end{array}\right. a11x1+a12x2+a13x3=b1a21x1+a22x2+a23x3=b2a31x1+a32x2+a33x3=b3

6.1.1 Jacobi迭代法

雅克比迭代法,就是这个方程组通过简单的移项等操作,可以得到等价的下面方程组:
{ x 1 = 1 a 11 ( b 1 − a 12 x 2 − a 13 x 3 ) x 2 = 1 a 22 ( b 2 − a 21 x 1 − a 23 x 3 ) x 3 = 1 a 33 ( b 3 − a 31 x 1 − a 32 x 2 ) \left\{\begin{array}{l}{x_{1}=\frac{1}{a_{11}}\left(b_{1}-a_{12} x_{2}-a_{13} x_{3}\right)} \\ {x_{2}=\frac{1}{a_{22}}\left(b_{2}-a_{21} x_{1}-a_{23} x_{3}\right)} \\ {x_{3}=\frac{1}{a_{33}}\left(b_{3}-a_{31} x_{1}-a_{32} x_{2}\right)}\end{array}\right. x1=a111(b1a12x2a13x3)x2=a221(b2a21x1a23x3)x3=a331(b3a31x1a32x2)
这样就可以形成迭代计算公式,因为 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3都可以根据其他值进行计算,得到下面:
{ x 1 ( k + 1 ) = 1 a 11 ( b 1 − a 12 x 2 ( k ) − a 13 x 3 ( k ) ) x 2 ( k + 1 ) = 1 a 22 ( b 2 − a 21 x 1 ( k ) − a 23 x 3 ( k ) ) x 3 ( k + 1 ) = 1 a 33 ( b 3 − a 31 x 1 ( k ) − a 32 x 2 ( k ) ) \left\{\begin{array}{l}{x_{1}^{(k+1)}=\frac{1}{a_{11}}\left(b_{1}-a_{12} x_{2}^{(k)}-a_{13} x_{3}^{(k)}\right)} \\ {x_{2}^{(k+1)}=\frac{1}{a_{22}}\left(b_{2}-a_{21} x_{1}^{(k)}-a_{23} x_{3}^{(k)}\right)} \\ {x_{3}^{(k+1)}=\frac{1}{a_{33}}\left(b_{3}-a_{31} x_{1}^{(k)}-a_{32} x_{2}^{(k)}\right)}\end{array}\right. x1(k+1)=a111(b1a12x2(k)a13x3(k))x2(k+1)=a221(b2a21x1(k)a23x3(k))x3(k+1)=a331(b3a31x1(k)a32x2(k))
对于这个计算公式,先任意选定一个初始向量 x ( 0 ) = ( x 1 ( 0 ) , x 2 ( 0 ) , x 3 ( 0 ) ) ​ x^{(0)}=(x_1^{(0)},x_2^{(0)},x_3^{(0)})​ x(0)=(x1(0),x2(0),x3(0)),然后依次计算出 x ( 1 ) , x ( 2 ) , . . . ​ x^{(1)},x^{(2)},...​ x(1),x(2),...如果这些迭代向量 { x ( k ) } ​ \{x^{(k)}\}​ {x(k)}收敛于向量 x ∗ ​ x^*​ x,那么向量 x ∗ ​ x^*​ x就是原方程组的解。而且,根据精度要求,可以取第k次迭代向量作为原方程组的近似解。

当方程组扩展到n元时,Jacobi迭代方法为
x i ( k + 1 ) = 1 a i i ( b i − ∑ j = 1 i − 1 a i j x j ( k ) − ∑ j = i + 1 n a i j x j ( k ) ) i = 1 , 2 , ⋯   , n , k = 0 , 1 , ⋯ \begin{array}{c}{x_{i}^{(k+1)}=\frac{1}{a_{i i}}\left(b_{i}-\sum_{j=1}^{i-1} a_{i j} x_{j}^{(k)}-\sum_{j=i+1}^{n} a_{i j} x_{j}^{(k)}\right)} \\ {i=1,2, \cdots, n, \quad k=0,1, \cdots}\end{array} xi(k+1)=aii1(bij=1i1aijxj(k)j=i+1naijxj(k))i=1,2,,n,k=0,1,

6.1.2 Gauss-Seidel迭代法

高斯-赛德尔迭代法,优化了雅克比迭代法。在雅克比迭代中,每次计算迭代向量都是根据前一次的结果进行计算,但实际上在计算 x i x_i xi的时候, x j , j ∈ [ 1 , i − 1 ] x_j,j\in [1,i-1] xj,j[1,i1]都已经计算出来了。GS迭代法,就是利用上了当前迭代过程已经计算出的结果,有如下迭代公式:
{ x 1 ( k + 1 ) = 1 a 11 ( b 1 − a 12 x 2 ( k ) − a 13 x 3 ( k ) ) x 2 ( k + 1 ) = 1 a 22 ( b 2 − a 21 x 1 ( k + 1 ) − a 23 x 3 ( k ) ) x 3 ( k + 1 ) = 1 a 33 ( b 3 − a 31 x 1 ( k + 1 ) − a 32 x 2 ( k + 1 ) ) \left\{\begin{array}{l}{x_{1}^{(k+1)}=\frac{1}{a_{11}}\left(b_{1}-a_{12} x_{2}^{(k)}-a_{13} x_{3}^{(k)}\right)} \\ {x_{2}^{(k+1)}=\frac{1}{a_{22}}\left(b_{2}-a_{21} x_{1}^{(k+1)}-a_{23} x_{3}^{(k)}\right)} \\ {x_{3}^{(k+1)}=\frac{1}{a_{33}}\left(b_{3}-a_{31} x_{1}^{(k+1)}-a_{32} x_{2}^{(k+1)}\right)}\end{array}\right. x1(k+1)=a111(b1a12x2(k)a13x3(k))x2(k+1)=a221(b2a21x1(k+1)a23x3(k))x3(k+1)=a331(b3a31x1(k+1)a32x2(k+1))
当方程组扩展到n元时,GS迭代方法为
x i ( k + 1 ) = 1 a i i ( b i − ∑ j = 1 i − 1 a i j x j ( k + 1 ) − ∑ j = i + 1 n a i j x j ( k ) ) i = 1 , 2 , ⋯   , n , k = 0 , 1 , ⋯ \begin{array}{c}{x_{i}^{(k+1)}=\frac{1}{a_{i i}}\left(b_{i}-\sum_{j=1}^{i-1} a_{i j} x_{j}^{(k+1)}-\sum_{j=i+1}^{n} a_{i j} x_{j}^{(k)}\right)} \\ {i=1,2, \cdots, n, \quad k=0,1, \cdots}\end{array} xi(k+1)=aii1(bij=1i1aijxj(k+1)j=i+1naijxj(k))i=1,2,,n,k=0,1,

6.1.3 上面两种迭代法的矩阵形式

设有线性方程组:
A x = b Ax=b Ax=b
那么可以将系数矩阵A分解为:
A = D − L − U A=D-L-U A=DLU
其中D是A的对角线构成的对角矩阵,LU分别是下三角矩阵和上三角矩阵,也就是公式(7)改为:
( D − L − U ) x = b (D-L-U)x=b (DLU)x=b
通过移项可以得到两种等价形式:
KaTeX parse error: Got function '\hskip' as argument to '\begin{array}' at position 1: \̲h̲s̲k̲i̲p̲1em\relax
通过第一种形式可以得到雅克比迭代矩阵形式
x ( k + 1 ) = D − 1 ( L + U ) x ( k ) + D − 1 b , k = 0 , 1 , ⋯ x^{(k+1)}=D^{-1}(L+U) x^{(k)}+D^{-1} b, \quad k=0,1, \cdots x(k+1)=D1(L+U)x(k)+D1b,k=0,1,
通过第二种等价形式可以得到GS迭代矩阵形式
x ( k + 1 ) = ( D − L ) − 1 U x ( k ) + ( D − L ) − 1 b , k = 0 , 1 , ⋯ x^{(k+1)}=(D-L)^{-1} U x^{(k)}+(D-L)^{-1} b, \quad k=0,1, \cdots x(k+1)=(DL)1Ux(k)+(DL)1b,k=0,1,

6.2 迭代法的一般形式与收敛性

6.2.1 一般形式

设有线性方程组:
A x = b Ax=b Ax=b
其转化的等价形式:
x = M x + g x=Mx+g x=Mx+g
可以建立迭代公式:
x ( k + 1 ) = M x k + g x^{(k+1)}=Mx^{k}+g x(k+1)=Mxk+g
其中M成为迭代矩阵,g为某一个向量。如果迭代向量最终收敛到 x ∗ x^* x,那么取极限就可以得到:
x ∗ = M x ∗ + g x^*=Mx^*+g x=Mx+g
也就是说, x ∗ x^* x就是方程组的解。这就是迭代法的一般形式

通过一般形式,可以知道雅克比和GS迭代法的一般式为:

  • 雅克比: M = D − 1 ( L + U ) , g = D − 1 b M=D^{-1}(L+U),\quad g=D^{-1}b M=D1(L+U),g=D1b
  • GS: M = ( D − L ) − 1 U , g = ( D − L ) − 1 b M=(D-L)^{-1}U,\quad g=(D-L)^{-1}b M=(DL)1U,g=(DL)1b

6.2.2 收敛性

通过一般形式可以知道:
e ( k + 1 ) = M e ( k ) , k = 0 , 1 , ⋯ e^{(k+1)}=M e^{(k)}, \quad k=0,1, \cdots e(k+1)=Me(k),k=0,1,
其中e为误差向量, e ( k ) = x ( k ) − x ∗ e^{(k)}=x^{(k)}-x^* e(k)=x(k)x,递推可以得到:
e ( t ) = M k e ( 0 ) , k = 0 , 1 , ⋯ e^{(t)}=M^{k} e^{(0)}, \quad k=0,1, \cdots e(t)=Mke(0),k=0,1,
所以误差趋近于0的条件是 M k → 0 M^k\to0 Mk0

定理:对任意初始向量,迭代法收敛的充分必要条件是迭代矩阵M的谱半径 ρ ( M ) < 1 \rho(M)<1 ρ(M)<1

谱半径,就是矩阵特征值绝对值的最大值。

推论:对任意初始向量,迭代收敛的充分条件是 ∣ ∣ M ∣ ∣ < 1 ||M||<1 M<1

又来一个定理:设 ∣ ∣ M ∣ ∣ < 1 ||M||<1 M<1,那么有如下误差估计公式:
∥ x ( k ) − x ∗ ∥ ⩽ ∥ M ∥ 1 − ∥ M ∥ ∥ x ( k ) − x ( α − 1 ) ∥ \left\|x^{(k)}-x^{*}\right\| \leqslant \frac{\|M\|}{1-\|M\|}\left\|x^{(k)}-x^{(\alpha-1)}\right\| x(k)x1MMx(k)x(α1)

∥ x ( k ) − x ∗ ∥ ⩽ ∥ M ∥ k 1 − ∥ M ∥ ∥ x ( 1 ) − x ( 0 ) ∥ \left\|x^{(k)}-x^{*}\right\| \leqslant \frac{\|M\|^{k}}{1-\|M\|}\left\|x^{(1)}-x^{(0)}\right\| x(k)x1MMkx(1)x(0)

这样就可以根据迭代次数求得误差界限。按照下面的公式,可以根据误差界限,判断需要的迭代次数:
k > ( ln ⁡ ε + ln ⁡ 1 − ∥ M ∥ ∥ x ( 1 ) − x ( 0 ) ∥ ) / ln ⁡ ∥ M ∥ k>\left(\ln \varepsilon +\ln \frac{1-\|M\|}{\left\|x^{(1)}-x^{(0)}\right\|}\right) / \ln \|M\| k>(lnε+lnx(1)x(0)1M)/lnM
其中 ε \varepsilon ε就是精度要求。

6.3 Jacobi和Gauss-Seidel的收敛性

迭代法一般形式的收敛性同样适用于这两种迭代方法,也就是谱半径小于1是充分必要条件,行列式小于1是充分条件。这里有提出了新的收敛判定方法。

定义:严格对角占优矩阵,就是对角线上的元素是其对应行的绝对值最大的元素,如下面:
KaTeX parse error: Got function '\hskip' as argument to '\begin{array}' at position 1: \̲h̲s̲k̲i̲p̲1em\relax
而且有:如果A是严格对角占优矩阵,则A是非奇异矩阵。

**定理:**如果A是严格对角占优矩阵,那么方程组 A x = b Ax=b Ax=b的雅克比和GS迭代法均收敛。

**定理:**如果A是对称正定矩阵,则方程组 A x = b Ax=b Ax=b的GS迭代法收敛。

6.4 逐次超松弛迭代法

逐次超松弛迭代法,简称SOR方法,是前面两种迭代法的改进,他是在每一次迭代结果添加一个修正量来得到更精确的迭代值,如果是雅克比迭代法进行优化,那么就有下面的计算公式:
x i ( k + 1 ) = x i ( k ) + 1 a i i ( b i − ∑ j = 1 i − 1 a i j x j ( k ) − ∑ j = i n a i j x j ( k ) ) i = 1 , 2 , ⋯   , n , k = 0 , 1 , ⋯ \begin{array}{c}{x_{i}^{(k+1)}=x_{i}^{(k)}+\frac{1}{a_{ii}}\left(b_{i}-\sum_{j=1}^{i-1} a_{i j} x_{j}^{(k)}-\sum_{j=i}^{n} a_{i j} x_{j}^{(k)}\right)} \\ {i=1,2, \cdots, n, \quad k=0,1, \cdots}\end{array} xi(k+1)=xi(k)+aii1(bij=1i1aijxj(k)j=inaijxj(k))i=1,2,,n,k=0,1,
这时,如果考虑添加一个参数来控制修正量的大小(好比机器学习中的学习率)就能得到下面由GS方法优化得到的计算公式:
x i ( k + 1 ) = x i ( k ) + ω a i i ( b i − ∑ j = 1 i − 1 a i j x j ( k + 1 ) − ∑ j = i n a i j x j ( k ) ) i = 1 , 2 , ⋯   , n , k = 0 , 1 , ⋯ \begin{array}{c}{x_{i}^{(k+1)}=x_{i}^{(k)}+\frac{\omega}{a_{i i}}\left(b_{i}-\sum_{j=1}^{i-1} a_{i j} x_{j}^{(k+1)}-\sum_{j=i}^{n} a_{i j} x_{j}^{(k)}\right)} \\ {i=1,2, \cdots, n, \quad k=0,1, \cdots}\end{array} xi(k+1)=xi(k)+aiiω(bij=1i1aijxj(k+1)j=inaijxj(k))i=1,2,,n,k=0,1,
这个迭代方法就是SOR方法,其中的参数 ω \omega ω叫做松弛因子,如果 ω < 1 \omega<1 ω<1,就叫做欠松弛迭代,如果 ω > 1 \omega>1 ω>1,就叫做超松弛迭代,如果 ω = 1 \omega=1 ω=1恰好就是GS迭代法的格式。根据上面计算公式可以得到矩阵格式:
x ( k + 1 ) = x ( k ) + ω D − 1 ( b + L x ( k + 1 ) + ( U − D ) x ( k ) ) . x^{(k+1)}=x^{(k)}+\omega D^{-1}\left(b+L x^{(k+1)}+(U-D) x^{(k)}\right). x(k+1)=x(k)+ωD1(b+Lx(k+1)+(UD)x(k)).
再进一步按照一般形式转化:
x ( k + 1 ) = ( D − ω L ) − 1 [ ( 1 − ω ) D + ω U ] x ( k ) + ω ( D − ω L ) − 1 b k = 0 , 1 , ⋯ \begin{array}{c}{x^{(k+1)}=(D-\omega L)^{-1}[(1-\omega) D+\omega U] x^{(k)}+\omega(D-\omega L)^{-1} b} \\ {k=0,1, \cdots}\end{array} x(k+1)=(DωL)1[(1ω)D+ωU]x(k)+ω(DωL)1bk=0,1,

可以得到SOR方法的迭代矩阵
f ω = ( D − ω L ) − 1 [ ( 1 − ω ) D + ω U ] \mathcal{f}_{\omega}=(D-\omega L)^{-1}[(1-\omega) D+\omega U] fω=(DωL)1[(1ω)D+ωU]
定理:SOR方法的收敛的充分必要条件是 ρ ( f ω ) < 1 \rho(\mathcal{f}_\omega)<1 ρ(fω)<1,收敛的充分条件是 ∣ ∣ f ω ∣ ∣ < 1 ||\mathcal{f}_\omega||<1 fω<1

定理:SOR方法收敛的必要条件是 0 < ω < 2 0<\omega<2 0<ω<2

定理:如果系数矩阵A是对称正定矩阵,且 0 < ω < 2 0<\omega<2 0<ω<2,则SOR方法收敛。

你可能感兴趣的:(数值分析)