5 线性方程组的迭代解法

5 线性方程组的迭代解法

5.1 引言

直接法是最简单也最容易想到的方法,除直接法之外,还有基于迭代的方式求解的方法,基本思想是将原始的方程组\(Ax=b\),转换为:

\[x^{(k+1)}=Bx^{(k)}+g \]

的形式进行迭代,如果向量序列\(\{x^{(k)}\}\)能够收敛到某个向量,那么最终的收敛向量就是所要求的最终解。

由于实际应用中迭代次数总是有限的,因此通过迭代法得到的解只是理论值的一个近似值。为了保证近似值足够接近理论值,我们通过设定一个误差上限,使得最终结果能够满足精度要求。

5.2 雅可比(Jacobi)迭代

假设有方程组\(Ax=b\)

\[\left\{\begin{aligned} a_{11}x_1+a_{12}x_2&+\cdots+a_{1n}x_n=b_1\\ a_{21}x_1+a_{22}x_2&+\cdots+a_{2n}x_n=b_2\\ &\cdots\\ a_{n1}x_1+a_{n2}x_2&+\cdots+a_{nn}x_n=b_n \end{aligned}\right. \]

并假设\(A\)是非奇异矩阵,\(a_{ii}\ne0(1\le i\le n)\),那么

\[\left\{\begin{aligned} x_1&=-\frac{1}{a_{11}}(a_{12}x_2+\cdots+a_{1n}x_n-b_1)\\ x_2&=-\frac{1}{a_{22}}(a_{21}x_1+a_{23}x_3+\cdots+a_{2n}x_n-b_2)\\ &\qquad\qquad\vdots\\ x_n&=-\frac{1}{a_{nn}}(a_{n1}x_1+\cdots+a_{n(n-1)}x_{n-1}-b_n)\\ \end{aligned}\right. \]

将上述式子改写为迭代格式,就得到了Jacobi迭代格式:

\[\left\{\begin{aligned} x_1^{(k+1)}&=-\frac{1}{a_{11}}(a_{12}x_2^{(k)}+\cdots+a_{1n}x_n^{(k)}-b_1)\\ x_2^{(k+1)}&=-\frac{1}{a_{22}}(a_{21}x_1^{(k)}+a_{23}x_3^{(k)}+\cdots+a_{2n}x_n^{(k)}-b_2)\\ &\qquad\qquad\vdots\\ x_n^{(k+1)}&=-\frac{1}{a_{nn}}(a_{n1}x_1^{(k)}+\cdots+a_{n(n-1)}x_{n-1}^{(k)}-b_n)\\ \end{aligned}\right.\tag{1} \]

也可以写成

\[x_i^{(k+1)}=\frac{1}{a_{ii}}(b_i-\sum_{j=1\\j\ne i}^na_{ij}x_j^{(k)}), i=1,2,\cdots,n \]

为了利用计算机并行计算的能力,将上述迭代格式表示成矩阵的形式,令\(A=D-L-U\),其中

\[D=\left[\begin{matrix} a_{11}&&0\\ &\ddots&\\ 0&&a_{nn} \end{matrix}\right], L=\left[\begin{matrix} 0&&&0\\ -a_{21}&0&&\\ \vdots&\ddots&\ddots&\\ -a_{n1}&\cdots&-a_{n(n-1)}&0 \end{matrix}\right], U=\left[\begin{matrix} 0&-a_{12}&\cdots&-a_{1n}\\ &0&\ddots&\vdots\\ &&\ddots&-a_{(n-1)n}\\ 0&&&0 \end{matrix}\right] \]

\(D\)包含主对角线上的元素,其余位置全为0。\(L\)包含主对角线下方区域所有元素(取相反数),其余位置全为0。\(U\)包含主对角线上方区域所有元素(取相反数),其余位置全为0。

因此,方程组\(Ax=b\)可以改写为

\[\begin{aligned} Ax=b&\Leftrightarrow (D-L-U)x=b\\ &\Leftrightarrow Dx=(L+U)x+b\\ &\Leftrightarrow x=D^{-1}(L+U)x+D^{-1}b \end{aligned} \]

\(B_J=D^{-1}(L+U),g_J=D^{-1}b\),那么Jacobi迭代的矩阵形式为

\[x^{(k+1)}=B_Jx^{(k)}+g_J \]

Jacobi矩阵迭代格式也是可以直接根据迭代格式\((1)\)写出来的,请读者好好思考其中的对应关系。

5.3 高斯-赛德尔(Gauss-Seidel)迭代

为了加快收敛速度,同时节省计算机内存,可以对Jacobi迭代进行如下改进:每计算出一个分量的近似值,就将其应用到下一个分量的计算过程中,即迭代格式变为

\[\left\{\begin{aligned} x_1^{(k+1)}&=-\frac{1}{a_{11}}(a_{12}x_2^{(k)}+\cdots+a_{1n}x_n^{(k)}-b_1)\\ x_2^{(k+1)}&=-\frac{1}{a_{22}}(a_{21}x_1^{(k+1)}+a_{23}x_3^{(k)}+\cdots+a_{2n}x_n^{(k)}-b_2)\\ &\qquad\qquad\vdots\\ x_n^{(k+1)}&=-\frac{1}{a_{nn}}(a_{n1}x_1^{(k+1)}+\cdots+a_{n(n-1)}x_{n-1}^{(k+1)}-b_n)\\ \end{aligned}\right. \]

也可以将上述格式归结为

\[x_i^{(k+1)}=\frac{1}{a_{ii}}(b_i-\sum_{j=1}^{i-1}a_{ij}x_j^{(k+1)}-\sum_{j=i+1}^{n}a_{ij}x_j^{(k)}),i=1,2,\cdots,n \]

我们把Jacobi迭代的矩阵格式写成

\[Dx^{(k+1)}=Lx^{(k)}+Ux^{(k)}+b \]

那么高斯-赛德尔迭代就是将其变为

\[Dx^{(k+1)}=Lx^{(k+1)}+Ux^{(k)}+b \]

因此高斯-赛德尔迭代的矩阵格式为

\[x^{(k+1)}=B_{S}x^{(k)}+g_S \]

其中\(B_S=(D-L)^{-1}U,g_S=(D-L)^{-1}b\)

5.4 SOR(Successive Over Relaxation)迭代

SOR迭代是对高斯-赛德尔迭代的进一步改进,其基本思想是先利用当前值通过高斯-赛德尔迭代计算一个估计值,然后再将这个估计值和当前值做加权平均,以获得一个更好的结果。其迭代格式为

\[x_i^{(k+1)}=\omega{\hat{x}_i^{(k+1)}}+(1-\omega)x_i^{(k)} \]

其中\(\hat{x}_i^{(k+1)}\)是通过高斯-赛德尔迭代计算出来的结果,因此

\[x_i^{(k+1)}=(1-\omega)x_i^{(k)}+\frac{\omega}{a_{ii}}(b_i-\sum_{j=1}^{i-1}a_{ij}x_j^{(k+1)}-\sum_{j=i+1}^{n}a_{ij}x_j^{(k)}),i=1,2,\cdots,n \]

其中\(\omega\)称为松弛因子。当\(\omega>1\)时,称为超松弛;\(\omega<1\)时,称为低松弛;当\(\omega=1\)时,就是高斯-赛德尔迭代。

根据上述迭代格式,我们可以得到

\[x^{(k+1)}=(1-\omega)x^{(k)}+\omega{D^{-1}b}+\omega{D^{-1}Lx^{(k+1)}}+\omega{D^{-1}Ux^{(k)}} \]

整理之后可以得到

\[x^{(k+1)}=B_\omega x^{(k)}+g_\omega \]

其中\(B_\omega=(D-\omega{L})^{-1}[(1-\omega)D+\omega{U}],g_\omega=\omega{(D-\omega L)^{-1}}b\)

5.5 收敛性判别

上面三种迭代格式都可以写成\(x^{(k+1)}=Bx^{(k)}+g\)的形式,因此,在这一部分将探讨在什么情况下,上述三种迭代格式能够收敛。并给出误差估计式。

5.5.1 收敛的充要条件

在给出收敛的充要条件前,这里先引入几个定义和定理。

定义1\(\lambda_i(1\le i\le n)\)是矩阵\(A\)特征值,则称\(\rho(A)=\max\{|\lambda_i|\}\)为矩阵\(A\)的谱半径。

定义2 设有矩阵序列\(\{B_k=[b_{ij}^{(k)}]_{n\times n}\}\),以及矩阵\(B=[b_{ij}]_{n\times n}\)。如果

\[\lim_{k\rightarrow\infty}b_{ij}^{(k)}=b_{ij}\quad(i,j=1,2,\cdots,n) \]

则称矩阵序列\(\{B_k\}\)收敛于矩阵\(B\),记为\(\lim_{k\rightarrow\infty}{B_k}=B\)

定理1 \(\lim_{k\rightarrow\infty}{B_k}=B\)的充要条件是\(\lim_{k\rightarrow\infty}||{B_k-B}||=0\)

定理2 \(\lim_{k\rightarrow\infty}{B_k}=O\)的充要条件是\(\rho(B)<1\)

上述定理的证明涉及到Jordan标准型理论,具体证明可以参考矩阵分析等书籍。

定理3 对于任意\(A\in\mathbb{R}^{n\times n}\),都有\(\rho(A)\le||A||\)

证明:设\(\lambda_i\)\(x_i\)分别是矩阵\(A\)对应的一个特征值和特征向量,则有\(Ax_i=\lambda_i{x_i}\),等式两边取范数,可以得到

\[||\lambda_i||\cdot||x_i||=||\lambda_ix_i||=||Ax_i||\le||A||\cdot||x_i|| \]

因为\(||x_i||\ne0\),所以\(||A||\ge||\lambda_i||\)。对于任意的特征值该结论都是成立的,因此

\[\rho(A)=\max_{1\le i\le n}{|\lambda_i|}\le||A|| \]

定理4 迭代格式\(x^{(k+1)}=Bx^{(k)}+g\)任意的初始向量\(x^{(0)}\in\mathbb{R}^{n}\)产生的向量序列\(\{x^{(k)}\}\)都收敛的充要条件是\(\rho(B)<1\)

必要性证明:

\(\lim{x^{(k)}}=x^*\),则有\(x^*=Bx^*+g\),那么

\[x^{(k+1)}-x^*=(Bx^{(k)}+g)-(Bx^*+g)=B(x^{(k)}-x^*)=\cdots=B^{k+1}(x^{(0)}-x^*)\tag{4-1} \]

因此

\[\lim_{k\rightarrow\infty}(x^{(k+1)}-x^*)= (x^{(0)}-x^*)\lim_{k\rightarrow\infty}B^{k+1}=\mathbf0 \]

因为\(x^{(0)}\)可以是任意的初始向量,为了使得上述极限式恒成立,就必须要求\(\lim_{k\rightarrow\infty}{B_k}=O\)

因此,根据定理2可知,\(\rho(B)<1\)

充分性证明:

如果\(\rho(B)<1\),那么1不是\(B\)的特征值,进而\(I-B\)是可逆矩阵(因为不存在为0的特征值),于是\((I-B)x=g\)会有唯一解\(x^*\),即\(x^*=Bx^*+g\)成立。基于这一点,我们可以推出\((4-1)\)式是成立的。

根据定理2可知,\(\lim_{k\rightarrow\infty}{B^{k+1}}=O\)成立。于是对于任意的初始向量\(x^{(0)}\),根据\((4-1)\)式都有

\[\lim_{k\rightarrow\infty}(x^{(k+1)}-x^*)= (x^{(0)}-x^*)\lim_{k\rightarrow\infty}B^{k+1}=\mathbf0 \]

因此\(\lim{x^{(k)}}=x^*\)成立。

综上可知,定理4得证。

因此,判断雅可比迭代、高斯-赛德尔迭代、SOR迭代是否收敛,等价于判断\(\rho(B_J),\rho(B_S),\rho(B_\omega)\)的值是否小于1。

5.5.2 收敛的充分条件

定理4虽然给出了收敛的充要条件,但是谱半径不容易计算。因此,在这一部分给出几个判断收敛性的充分条件。

定理5 若矩阵\(B\)的某个范数满足\(||B||<1\),则迭代格式\(x^{(k+1)}=Bx^{(k)}+g\)任意的初始向量\(x^{(0)}\in\mathbb{R}^{n}\)产生的向量序列\(\{x^{(k)}\}\)都收敛。并且有

\[||x^{(k)}-x^*||\le\frac{||B||}{1-||B||}||x^{(k)}-x^{(k-1)}||\\ ||x^{(k)}-x^*||\le\frac{||B||^k}{1-||B||}||x^{(1)}-x^{(0)}|| \]

定理5指出了控制迭代误差和次数的方法。

证明:

根据定理3和定理4直接就可以知道当\(||B||<1\)时,迭代格式收敛。

\[\begin{aligned} ||x^{(k)}-x^*||&=||(Bx^{(k-1)}+g)-(Bx^*+g)||\\ &=||B(x^{(k-1)}-x^*)||\\ &=||B(x^{(k-1)}-x^{(k)}+x^{(k)}-x^*)||\\ &\le\lVert{B}\rVert\lVert{x^{(k)}-x^{(k-1)}}\rVert +\lVert{B}\rVert\lVert{x^{(k)}-x^*}\rVert \end{aligned} \]

所以

\[(1-||B||)\lVert{x^{(k)}-x^*}\rVert\le\lVert{B}\rVert\lVert{x^{(k)}-x^{(k-1)}}\rVert \]

因此有

\[||x^{(k)}-x^*||\le\frac{||B||}{1-||B||}||x^{(k)}-x^{(k-1)}|| \]

又因为

\[\begin{aligned} ||x^{(k)}-x^{(k-1)}||&=||(Bx^{(k-1)}+g)-(Bx^{(k-2)}+g)||\\ &=||B(x^{(k-1)}-x^{(k-2)})||\\ &\le\lVert{B}\rVert\lVert{x^{(k-1)}-x^{(k-2)}}\rVert\\ &\le\cdots\\ &\le\lVert{B}\rVert^{k-1}\lVert{x^{(1)}-x^{(0)}}\rVert \end{aligned} \]

于是有

\[||x^{(k)}-x^*||\le\frac{||B||}{1-||B||}||x^{(k)}-x^{(k-1)}|| \le\frac{||B||^k}{1-||B||}||x^{(1)}-x^{(0)}|| \]

定理6 SOR迭代收敛的必要条件是\(0\lt\omega\lt2\)

证明:如果SOR迭代收敛,那么\(\rho(B_\omega)<1\),并且有如下结论

\[|\det{B_\omega}|=|\lambda_1\lambda_2\cdots\lambda_n|\le\rho(B_\omega)^n<1 \]

其中\(\lambda_1,\cdots,\lambda_n\)\(B_\omega\)\(n\)个特征值。

\[\begin{aligned} \det{B_\omega}&=\det\{{(D-\omega{L})^{-1}}[(1-\omega)D+\omega U]\}\\ &=\frac{\det[{(1-\omega)D+\omega U}]}{\det{(D-\omega L)}} \end{aligned} \]

考虑到\(D-\omega L\)\((1-\omega)D+\omega U\)实际上是对角矩阵,所以

\[|\det{B_\omega}|=\frac{|(1-\omega)a_{11}a_{22}\cdots a_{nn}|} {|a_{11}a_{22}\cdots a_{nn}|}=|1-\omega|<1 \]

于是\(0\lt\omega\lt2\)

下面在介绍两个判断收敛性的充分非必要条件。

定义3 如果矩阵\(A=[a_{ij}]_{n\times n}\)满足以下条件

\[|a_{ii}|>\sum_{j=1\\j\ne i}^n{|a_{ij}|} \]

那么就称\(A\)是严格对角占优的。

定理7 如果矩阵\(A\)是严格对角占优的,那么\(Ax=b\)方程的雅可比迭代和高斯-赛德尔迭代对于任意初始向量都是收敛的。

定理8 如果矩阵\(A\)是对称正定的,那么\(Ax=b\)方程的高斯-赛德尔迭代对于任意初始向量都是收敛的。

上述几个充分条件相对来说都还是比较好用的,并且对于任意初始向量收敛,这个性质是非常好的。这意味着即使在某一个计算过程中\(x^{(k)}\)发生了溢出,这也不是太大的问题。因为,这相当于我们之前所计算的结果全部作废,重新从一个新的初始向量开始迭代而已。

posted @ 2020-02-15 21:08  SleepyCat  阅读(871)  评论(0编辑  收藏  举报