數值分析(6)-解線性方程組迭代方法

6 解線性方程組迭代方法

迭代方法選取一個初始向量x(0)x^{(0)},然後按照迭代公式,依次計算x(1)x^{(1)}x(2)x^{(2)},……,最終當kk足夠大的情況下,x(k)x^{(k)}就是方程組的近似解。由於是迭代計算,本身求解結果就是不停迭代來不停接近真實解,而且在每次迭代計算過程中由於機器精度問題也會存在誤差,所以迭代法難以獲得精確解,是一種逐次近似的方法。

雖然不絕對精確,但是因爲算法簡單易於實現,所以適用於求解大型稀疏線性方程組。

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

通過一個簡單方程組,理解兩種迭代方法:
{a11x1+a12x2+a13x3=b1a21x1+a22x2+a23x3=b2a31x1+a32x2+a33x3=b3 \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.

6.1.1 Jacobi迭代法

雅克比迭代法,就是這個方程組通過簡單的移項等操作,可以得到等價的下面方程組:
{x1=1a11(b1a12x2a13x3)x2=1a22(b2a21x1a23x3)x3=1a33(b3a31x1a32x2) \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,x2,x3x_1,x_2,x_3都可以根據其他值進行計算,得到下面:
{x1(k+1)=1a11(b1a12x2(k)a13x3(k))x2(k+1)=1a22(b2a21x1(k)a23x3(k))x3(k+1)=1a33(b3a31x1(k)a32x2(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.
對於這個計算公式,先任意選定一個初始向量x(0)=(x1(0),x2(0),x3(0))x^{(0)}=(x_1^{(0)},x_2^{(0)},x_3^{(0)})​,然後依次計算出x(1),x(2),...x^{(1)},x^{(2)},...​如果這些迭代向量{x(k)}\{x^{(k)}\}​收斂於向量xx^*​,那麼向量xx^*​就是原方程組的解。而且,根據精度要求,可以取第k次迭代向量作爲原方程組的近似解。

當方程組擴展到n元時,Jacobi迭代方法爲
xi(k+1)=1aii(bij=1i1aijxj(k)j=i+1naijxj(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}

6.1.2 Gauss-Seidel迭代法

高斯-賽德爾迭代法,優化了雅克比迭代法。在雅克比迭代中,每次計算迭代向量都是根據前一次的結果進行計算,但實際上在計算xix_i的時候,xj,j[1,i1]x_j,j\in [1,i-1]都已經計算出來了。GS迭代法,就是利用上了當前迭代過程已經計算出的結果,有如下迭代公式:
{x1(k+1)=1a11(b1a12x2(k)a13x3(k))x2(k+1)=1a22(b2a21x1(k+1)a23x3(k))x3(k+1)=1a33(b3a31x1(k+1)a32x2(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.
當方程組擴展到n元時,GS迭代方法爲
xi(k+1)=1aii(bij=1i1aijxj(k+1)j=i+1naijxj(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}

6.1.3 上面兩種迭代法的矩陣形式

設有線性方程組:
Ax=b Ax=b
那麼可以將係數矩陣A分解爲:
A=DLU A=D-L-U
其中D是A的對角線構成的對角矩陣,LU分別是下三角矩陣和上三角矩陣,也就是公式(7)改爲:
(DLU)x=b (D-L-U)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)=D1(L+U)x(k)+D1b,k=0,1, x^{(k+1)}=D^{-1}(L+U) x^{(k)}+D^{-1} b, \quad k=0,1, \cdots
通過第二種等價形式可以得到GS迭代矩陣形式
x(k+1)=(DL)1Ux(k)+(DL)1b,k=0,1, x^{(k+1)}=(D-L)^{-1} U x^{(k)}+(D-L)^{-1} b, \quad k=0,1, \cdots

6.2 迭代法的一般形式與收斂性

6.2.1 一般形式

設有線性方程組:
Ax=b Ax=b
其轉化的等價形式:
x=Mx+g x=Mx+g
可以建立迭代公式:
x(k+1)=Mxk+g x^{(k+1)}=Mx^{k}+g
其中M成爲迭代矩陣,g爲某一個向量。如果迭代向量最終收斂到xx^*,那麼取極限就可以得到:
x=Mx+g x^*=Mx^*+g
也就是說,xx^*就是方程組的解。這就是迭代法的一般形式

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

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

6.2.2 收斂性

通過一般形式可以知道:
e(k+1)=Me(k),k=0,1, e^{(k+1)}=M e^{(k)}, \quad k=0,1, \cdots
其中e爲誤差向量,e(k)=x(k)xe^{(k)}=x^{(k)}-x^*,遞推可以得到:
e(t)=Mke(0),k=0,1, e^{(t)}=M^{k} e^{(0)}, \quad k=0,1, \cdots
所以誤差趨近於0的條件是Mk0M^k\to0

定理:對任意初始向量,迭代法收斂的充分必要條件是迭代矩陣M的譜半徑ρ(M)<1\rho(M)<1

譜半徑,就是矩陣特徵值絕對值的最大值。

推論:對任意初始向量,迭代收斂的充分條件是M<1||M||<1

又來一個定理:設M<1||M||<1,那麼有如下誤差估計公式:
x(k)xM1Mx(k)x(α1) \left\|x^{(k)}-x^{*}\right\| \leqslant \frac{\|M\|}{1-\|M\|}\left\|x^{(k)}-x^{(\alpha-1)}\right\|

x(k)xMk1Mx(1)x(0) \left\|x^{(k)}-x^{*}\right\| \leqslant \frac{\|M\|^{k}}{1-\|M\|}\left\|x^{(1)}-x^{(0)}\right\|

這樣就可以根據迭代次數求得誤差界限。按照下面的公式,可以根據誤差界限,判斷需要的迭代次數:
k>(lnε+ln1Mx(1)x(0))/lnM k>\left(\ln \varepsilon +\ln \frac{1-\|M\|}{\left\|x^{(1)}-x^{(0)}\right\|}\right) / \ln \|M\|
其中ε\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是嚴格對角佔優矩陣,那麼方程組Ax=bAx=b的雅克比和GS迭代法均收斂。

**定理:**如果A是對稱正定矩陣,則方程組Ax=bAx=b的GS迭代法收斂。

6.4 逐次超鬆弛迭代法

逐次超鬆弛迭代法,簡稱SOR方法,是前面兩種迭代法的改進,他是在每一次迭代結果添加一個修正量來得到更精確的迭代值,如果是雅克比迭代法進行優化,那麼就有下面的計算公式:
xi(k+1)=xi(k)+1aii(bij=1i1aijxj(k)j=inaijxj(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}
這時,如果考慮添加一個參數來控制修正量的大小(好比機器學習中的學習率)就能得到下面由GS方法優化得到的計算公式:
xi(k+1)=xi(k)+ωaii(bij=1i1aijxj(k+1)j=inaijxj(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}
這個迭代方法就是SOR方法,其中的參數ω\omega叫做鬆弛因子,如果ω<1\omega<1,就叫做欠鬆弛迭代,如果ω>1\omega>1,就叫做超鬆弛迭代,如果ω=1\omega=1恰好就是GS迭代法的格式。根據上面計算公式可以得到矩陣格式:
x(k+1)=x(k)+ωD1(b+Lx(k+1)+(UD)x(k)). x^{(k+1)}=x^{(k)}+\omega D^{-1}\left(b+L x^{(k+1)}+(U-D) x^{(k)}\right).
再進一步按照一般形式轉化:
x(k+1)=(DωL)1[(1ω)D+ωU]x(k)+ω(DωL)1bk=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}

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

定理:SOR方法收斂的必要條件是0<ω<20<\omega<2

定理:如果係數矩陣A是對稱正定矩陣,且0<ω<20<\omega<2,則SOR方法收斂。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章