解线性方程组或非线性方程组之迭代法,迭代思想,雅可比迭代法

解线性方程组或非线性方程组之迭代法,迭代思想,雅可比迭代法

迭代法

迭代思想

  将方程组转换成 A x ⃗ = b ⃗ A \vec x=\vec b Ax =b 的形式,其中 A A A 是矩阵。例如
{ 8 x 1 − 3 x 2 + 2 x 3 = 20 4 x 1 + 11 x 2 − x 3 = 33 6 x 1 + 3 x 2 + 12 x 3 = 36 \begin{cases} 8 x_1-3x_2+2x_3=20 \\ 4x_1+11x_2-x_3=33\\ 6x_1+3x_2+12x_3=36\\ \end{cases} 8x13x2+2x3=204x1+11x2x3=336x1+3x2+12x3=36
  可得出, A = ( 8 − 3 2 4 11 − 1 6 3 12 ) x ⃗ = ( x 1 x 2 x 3 ) b ⃗ = ( 20 33 36 ) A= \begin{gathered} \begin{pmatrix} 8 & -3&2 \\ 4 & 11&-1 \\ 6&3&12 \end{pmatrix} \end{gathered} \qquad \vec x= \begin{gathered} \begin{pmatrix} x_1 \\ x_2 \\ x_3 \end{pmatrix} \end{gathered} \qquad \vec b= \begin{gathered} \begin{pmatrix} 20 \\ 33 \\ 36 \end{pmatrix} \end{gathered} A=84631132112x =x1x2x3b =203336
  首先使用一般解线性方程组的方法解出其精确解 x ∗ = ( 3 , 2 , 1 ) T x^*=(3,2,1)^T x=(3,2,1)T
  而迭代法的做法是将原方程组改写成 x ⃗ = B x ⃗ + f ⃗ \vec x=B \vec x+\vec f x =Bx +f 的形式,即 { x 1 = 1 8 ( 3 x 2 − 2 x 3 + 20 ) x 2 = 1 11 ( − 4 x 1 + x 3 + 33 ) x 3 = 1 12 ( − 6 x 1 − 3 x 2 + 36 ) \begin{cases} x_1=\frac{1}{8}(3x_2-2x_3+20) \\ x_2=\frac{1}{11}(-4x_1+x_3+33) \\ x_3=\frac{1}{12}(-6x_1-3x_2+36) \\ \end{cases} x1=81(3x22x3+20)x2=111(4x1+x3+33)x3=121(6x13x2+36)  可得出 B = ( 0 3 8 − 2 8 − 4 11 0 1 11 − 1 2 − 3 12 0 ) f ⃗ = ( 20 8 33 11 36 12 ) B= \begin{gathered} \begin{pmatrix} 0& \frac{3}{8}&-\frac{2}{8} \\ -\frac{4}{11} &0&\frac{1}{11} \\ -\frac{1}{2}&-\frac{3}{12}&0 \end{pmatrix} \end{gathered} \qquad \vec f= \begin{gathered} \begin{pmatrix} \frac{20}{8} \\ \frac{33}{11} \\ \frac{36}{12} \end{pmatrix} \end{gathered} B=011421830123821110f =82011331236
  取 x ⃗ ( 0 ) = ( 0 , 0 , 0 ) T \vec x^{(0)}=(0,0,0)^T x (0)=(0,0,0)T,由 x ⃗ = B x ⃗ + f ⃗ \vec x=B \vec x+\vec f x =Bx +f 算得 x ⃗ ( 1 ) = ( 2.5 , 3 , 3 ) T \vec x^{(1)}=(2.5,3,3)^T x (1)=(2.5,3,3)T,以此类推, x ⃗ ( 10 ) = ( 3.000032 , 1.999838 , 0.9998813 ) T \vec x^{(10)}=(3.000032,1.999838,0.9998813)^T x (10)=(3.000032,1.999838,0.9998813)T,此时已经非常接近精确解了,也即随着迭代次数的增加,算出的解与精确解的误差逐渐变小。

  以上,迭代公式为 x ⃗ ( k + 1 ) = B x ⃗ ( k ) + f ⃗ \vec x^{(k+1)}=B \vec x^{(k)}+\vec f x (k+1)=Bx (k)+f .

  上例是一个收敛的例子,但还有一种情况,即迭代是发散的。如果迭代发散的话,随着迭代的增加,结果不会逐渐靠近精确解。

判断迭代的收敛性:

  设 e e e为迭代法求得的解与精确解之间的差值,有 e ⃗ ( k + 1 ) = x ⃗ ( k + 1 ) − x ∗ ⃗ = ( B x ⃗ ( k ) + f ⃗ ) − ( B x ⃗ ∗ + f ⃗ ) = B e ⃗ ( k ) = B 2 e ⃗ ( k − 1 ) \vec e^{(k+1)}=\vec x^{(k+1)}-\vec {x^*}=(B\vec x^{(k)}+\vec f)-(B\vec x^{*}+\vec f)=B \vec e^{(k)}=B^2 \vec e^{(k-1)} e (k+1)=x (k+1)x =(Bx (k)+f )(Bx +f )=Be (k)=B2e (k1)
  因此可推出, e ⃗ ( k ) = B k e ⃗ ( 0 ) \vec e^{(k)}=B^k \vec e^{(0)} e (k)=Bke (0),因此如果 B k → 0 B^k \rightarrow 0 Bk0,则 e ( k ) → 0 e^{(k)} \rightarrow 0 e(k)0,即迭代是收敛的。
判断 B k B^k Bk是否趋近于0等价于 B B B的谱半径小于1。 B k → 0 ⇔ e ( B ) < 1 B^k \rightarrow 0 \Leftrightarrow e(B)<1 Bk0e(B)<1

   B B B矩阵的不同会影响方程组的计算结果是否收敛以及收敛的速度,因此不同的迭代方法就是寻找不同的 B B B

雅可比迭代

A x ⃗ = b ⃗ A \vec x=\vec b Ax =b 其中的A,有
A = ( a 11 a 12 ⋅ ⋅ ⋅ a 1 n a 21 a 22 ⋅ ⋅ ⋅ a 2 n ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ a m 1 a m 2 ⋅ ⋅ ⋅ a m n ) = ( a 11 0 ⋅ ⋅ ⋅ 0 0 a 22 ⋅ ⋅ ⋅ 0 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ 0 0 ⋅ ⋅ ⋅ a m n ) − ( 0 0 ⋅ ⋅ ⋅ 0 − a 21 0 ⋅ ⋅ ⋅ 0 − a 31 − a 32 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ − a m 1 − a m 2 ⋅ ⋅ ⋅ 0 ) − ( 0 − a 12 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ − a 1 n 0 0 − a 23 ⋅ ⋅ ⋅ − a 2 n 0 0 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ 0 0 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ 0 ) A= \begin{pmatrix} a_{11} &a_{12}&···&a_{1n}\\ a_{21} &a_{22}&···&a_{2n}\\ ··· &···&···&···\\ a_{m1} &a_{m2}&···&a_{mn}\\ \end{pmatrix}= \begin{pmatrix} a_{11} &0&···&0\\ 0 &a_{22}&···&0\\ ··· &···&···&···\\ 0 &0&···&a_{mn}\\ \end{pmatrix}- \begin{pmatrix} 0 &0&···&0\\ -a_{21}&0&···&0\\ -a_{31}&-a_{32}&···&···\\ ···&···&···&···\\ -a_{m1} &-a_{m2}&···&0 \end{pmatrix}- \begin{pmatrix} 0 &-a_{12}&···&···&-a_{1n}\\ 0&0&-a_{23}&···&-a_{2n}\\ 0&0&······&&···\\ 0&0&···&···&0 \end{pmatrix} A=a11a21am1a12a22am2a1na2namn=a11000a22000amn0a21a31am100a32am20000000a12000a23a1na2n0
  简写为 A = D + L + U A=D+L+U A=D+L+U D D D为对角矩阵, L L L为下对角矩阵, U U U为上对角矩阵。

  带入 A x ⃗ = b ⃗ A \vec x=\vec b Ax =b ( D − L − U ) x ⃗ = b ⃗ (D-L-U)\vec x=\vec b (DLU)x =b D x ⃗ = ( L + U ) x ⃗ + b ⃗ D \vec x=(L+U)\vec x+\vec b Dx =(L+U)x +b 进一步化简, x ⃗ = D − 1 ( L + U ) x ⃗ + D − 1 b ⃗ \vec x=D^{-1}(L+U)\vec x+D^{-1}\vec b x =D1(L+U)x +D1b ,可得到雅可比迭代的迭代公式为 x ⃗ ( k + 1 ) = D − 1 ( L + U ) x ⃗ ( k ) + D − 1 b ⃗ \vec x^{(k+1)}=D^{-1}(L+U)\vec x^{(k)}+D^{-1}\vec b x (k+1)=D1(L+U)x (k)+D1b ,对每个元素的迭代公式如下,为了方便理解,以行列式的方式显示:
a 11 x 1 + a 12 x 2 + ⋅ ⋅ ⋅ + a 1 j x j + ⋅ ⋅ ⋅ + a 1 N x N = b 1 a 21 x 1 + a 22 x 2 + ⋅ ⋅ ⋅ + a 2 j x j + ⋅ ⋅ ⋅ + a 2 N x N = b 2 ⋮ ⋮ ⋮ ⋮ ⋮ a j 1 x 1 + a j 2 x 2 + ⋅ ⋅ ⋅ + a j j x j + ⋅ ⋅ ⋅ + a j N x N = b j ⋮ ⋮ ⋮ ⋮ ⋮ a N 1 x 1 + a N 2 x 2 + ⋅ ⋅ ⋅ + a N j x j + ⋅ ⋅ ⋅ + a N N x N = b N a_{11}x_1+a_{12}x_2+···+a_{1j}x_j+···+a_{1N}x_N=b_1 \\ a_{21}x_1+a_{22}x_2+···+a_{2j}x_j+···+a_{2N}x_N=b_2 \\ \vdots \quad\quad\quad\quad \vdots \quad\quad\quad\quad\quad \vdots \quad\quad\quad\quad \vdots \quad \quad\quad\quad \vdots \\ a_{j1}x_1+a_{j2}x_2+···+a_{jj}x_j+···+a_{jN}x_N=b_j \\ \vdots \quad\quad\quad\quad \vdots \quad\quad\quad\quad\quad \vdots \quad\quad\quad\quad \vdots \quad \quad\quad\quad \vdots \\ a_{N1}x_1+a_{N2}x_2+···+a_{Nj}x_j+···+a_{NN}x_N=b_N \\ a11x1+a12x2++a1jxj++a1NxN=b1a21x1+a22x2++a2jxj++a2NxN=b2aj1x1+aj2x2++ajjxj++ajNxN=bjaN1x1+aN2x2++aNjxj++aNNxN=bN
  可得元素的迭代公式为:
x j ( k + 1 ) = b j − a j 1 x 1 ( k ) − ⋯ − a j ( j − 1 ) x ( j − 1 ) ( k ) − a j ( j + 1 ) x ( j + 1 ) ( k ) − ⋯ − a j N x N ( k ) a j j x_j^{(k+1)}=\frac{b_j-a_{j1}x_1^{(k)}-\cdots -a_{j (j-1)}x_{(j-1)}^{(k)} - a_{j (j+1)}x_{(j+1)}^{(k)}- \cdots -a_{j N}x_N^{(k)} }{a_{jj}} xj(k+1)=ajjbjaj1x1(k)aj(j1)x(j1)(k)aj(j+1)x(j+1)(k)ajNxN(k)

猜你喜欢

转载自blog.csdn.net/weixin_43943476/article/details/124406622