解线性方程组 A x = b Ax = b Ax=b 可以有两种方法:
- 准确方法
例如高斯消去法等 - 迭代方法
从某个特殊值出发,按照一个适当的计算法则,逐次计算出 x 的值,不断地逼近准确值。
基本迭代法
迭代法实质上是指:有这么一个函数 φ ( x ) \varphi(x) φ(x) ,初始近似向量 x ( 0 ) {x^{(0)}} x(0) 使得:
x ( 1 ) = φ ( x ( 0 ) ) x^{(1)}=\varphi(x^{(0)}) x(1)=φ(x(0))
x ( 2 ) = φ ( x ( 1 ) ) x^{(2)}=\varphi(x^{(1)}) x(2)=φ(x(1))
…
x ( k ) = φ ( x ( k − 1 ) ) x^{(k)}=\varphi(x^{(k-1)}) x(k)=φ(x(k−1))
…
x ( ∗ ) = φ ( x ( ∗ ) ) x^{(*)}=\varphi(x^{(*)}) x(∗)=φ(x(∗))
迭代法是一种逐次近似的方法,需解决的问题:
(1) 如何确定初始近似向量 x ( 0 ) {x^{(0)}} x(0)
(2) 如何构造一种迭代格式,由 x ( k − 1 ) {x^{(k - 1)}} x(k−1) 计算 x ( k ) {x^{(k)}} x(k)
(3) 证明所得到的向量序列 { x ( k ) } \left\{ {
{x^{(k)}}} \right\} {
x(k)} 收敛性
(4) 若 { x ( k ) } \left\{ {
{x^{(k)}}} \right\} {
x(k)} 收敛于 x,x 是否是原方程的解
(5) 若 x 是原方程组的解,那么当 k 足够多大时, x ( k ) {x^{(k)}} x(k) 的可以作为解的一个近似
在迭代的过程中最简单的函数是线型函数:
y = a x + b y=ax+b y=ax+b
对于向量:
Y = G X + d Y=GX+d Y=GX+d
根据 x ( ∗ ) = φ ( x ( ∗ ) ) x^{(*)}=\varphi(x^{(*)}) x(∗)=φ(x(∗))
x ( ∗ ) = G x ( ∗ ) + d x^{(*)}=Gx^{(*)}+d x(∗)=Gx(∗)+d
( I − G ) x ( ∗ ) = d (I-G)x^{(*)}=d (I−G)x(∗)=d
{ G = I − A d = b \left\{\begin{matrix} G=I-A\\ d=b \end{matrix}\right. { G=I−Ad=b
其中 G = ( g i j ) n × n , d = ( d 1 , d 2 , . . . , d n ) T G = {\left( { {g_{ij}}} \right)_{n \times n}},d = {\left( { {d_1},{d_2},...,{d_n}} \right)^T} G=(gij)n×n,d=(d1,d2,...,dn)T
由此可用 x ( k ) = G x ( k − 1 ) + d k = 0 , 1 , 2 , . . . . , {x^{(k)}} = G{x^{(k - 1)}} + d{\rm{ }}_k = 0,1,2,...., x(k)=Gx(k−1)+dk=0,1,2,...., 计算迭代序列 { x ( k ) } \left\{ { {x^{(k)}}} \right\} { x(k)}
Jacobi 迭代
{ a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 ⋮ a n 1 x 1 + a n 2 x 2 + ⋯ + a n n x n = b n \left\{ {\begin{matrix} {
{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}}\\ \vdots \\ {
{a_{n1}}{x_1} + {a_{n2}}{x_2} + \cdots + {a_{nn}}{x_n} = {b_n}} \end{matrix}} \right. ⎩⎪⎪⎪⎨⎪⎪⎪⎧a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋮an1x1+an2x2+⋯+annxn=bn
改写为:
{ x 1 = ( b 1 − a 12 x 2 − a 13 x 3 ⋯ − a 1 n x n ) / a 11 x 2 = ( b 2 − a 21 x 1 − a 23 x 3 ⋯ − a 2 n x n ) / a 22 ⋮ x n = ( b n − a n 1 x 1 − a n 2 x 2 ⋯ − a n n − 1 x n − 1 ) / a n n \left\{ {\begin{matrix} {x_1} = ({b_1} - {a_{12}}{x_2} - {a_{13}}{x_3} \cdots - {a_{1n}}{x_n})/{a_{11}}\\ {
{x_2} = ({b_2} - {a_{21}}{x_1} - {a_{23}}{x_3} \cdots - {a_{2n}}{x_n})/{a_{22}}}\\ \vdots \\ {
{x_n} = ({b_n} - {a_{n1}}{x_1} - {a_{n2}}{x_2} \cdots - {a_{nn - 1}}{x_{n - 1}})/{a_{nn}}} \end{matrix}} \right. ⎩⎪⎪⎪⎨⎪⎪⎪⎧x1=(b1−a12x2−a13x3⋯−a1nxn)/a11x2=(b2−a21x1−a23x3⋯−a2nxn)/a22⋮xn=(bn−an1x1−an2x2⋯−ann−1xn−1)/ann
得到迭代格式:
x i ( k ) = 1 α i i [ ∑ j = 1 , j ≠ i n α i j x j ( k − 1 ) ] , i = 1 , 2 , . . . , n x_i^{(k)} = \frac{1}{\alpha _{ii}} \left[\sum_{j = 1,j \ne i}^n {\alpha _{ij}}x_{_j}^{(k - 1)}\right] ,i = 1,2,...,n xi(k)=αii1⎣⎡j=1,j̸=i∑nαijxj(k−1)⎦⎤,i=1,2,...,n
迭代公式为:
{ x 1 ( k ) = ( b 1 − a 12 x 2 ( k − 1 ) − a 13 x 3 ( k − 1 ) ⋯ − a 1 n x n ( k − 1 ) ) / a 11 x 2 ( k ) = ( b 2 − a 21 x 1 ( k − 1 ) − a 23 x 3 ( k − 1 ) ⋯ − a 2 n x n ( k − 1 ) ) / a 22 ⋮ x n ( k ) = ( b n − a n 1 x 1 ( k − 1 ) − a n 2 x 2 ( k − 1 ) ⋯ − a n n − 1 x n − 1 ( k − 1 ) ) / a n n \left\{ {\begin{matrix} {x_1^{(k)} = ({b_1} - {a_{12}}x_2^{(k - 1)} - {a_{13}}x_3^{(k - 1)} \cdots - {a_{1n}}x_n^{(k - 1)})/{a_{11}}}\\ {x_2^{(k)} = ({b_2} - {a_{21}}x_1^{(k - 1)} - {a_{23}}x_3^{(k - 1)} \cdots - {a_{2n}}x_n^{(k - 1)})/{a_{22}}}\\ \vdots \\ {x_n^{(k)} = ({b_n} - {a_{n1}}x_1^{(k - 1)} - {a_{n2}}x_2^{(k - 1)} \cdots - {a_{nn - 1}}x_{n - 1}^{(k - 1)})/{a_{nn}}} \end{matrix}} \right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x1(k)=(b1−a12x2(k−1)−a13x3(k−1)⋯−a1nxn(k−1))/a11x2(k)=(b2−a21x1(k−1)−a23x3(k−1)⋯−a2nxn(k−1))/a22⋮xn(k)=(bn−an1x1(k−1)−an2x2(k−1)⋯−ann−1xn−1(k−1))/ann
Gauss-Seidel 迭代
在 Jacobi 迭代迭代中,当计算第 i 个分量 x i ( k ) x_i^{(k)} xi(k) 时,前面 i-1 个分量 x 1 ( k ) , x 2 ( k ) , . . . , x i − 1 ( k ) x_1^{(k)},x_2^{(k)},...,x_{i - 1}^{(k)} x1(k),x2(k),...,xi−1(k) 都已经计算出来了,可以使用它们来计算 x i ( k ) x_i^{(k)} xi(k) 。
x i ( k ) = 1 a i i [ β i − ∑ j = 1 i − 1 α i j x j ( k ) − ∑ j = i + 1 n α i j x j ( k − 1 ) ] i = 1 , 2 , . . . , n , k = 1 , 2 , . . . x_{_i}^{(k)} = \frac{1}{
{
{a_{ii}}}}\left[ {
{\beta _i} - \sum\limits_{j = 1}^{i - 1} {
{\alpha _{ij}}x_j^{(k)}} - \sum\limits_{j = i + 1}^n {
{\alpha _{ij}}x_j^{(k - 1)}} } \right]{\rm{ }}i = 1,2,...,n,k = 1,2,... xi(k)=aii1[βi−j=1∑i−1αijxj(k)−j=i+1∑nαijxj(k−1)]i=1,2,...,n,k=1,2,...
{ x 1 ( k ) = ( b 1 − a 12 x 2 ( k − 1 ) − a 13 x 3 ( k − 1 ) ⋯ − a 1 n x n ( k − 1 ) ) / a 11 x 2 ( k ) = ( b 2 −