《计算方法》笔记之(二)线性代数方程组之Gauss消去法

目录

  • Gauss 消去法
    • 消去法的基本思想
    • 消去法的消去过程
  • 列主元 Gauss 消去法

本章的重点在于求解下列线性方程组:
{ α 11 x 1 + α 12 x 2 + ⋯ + α 1 n x n = β 1 α 21 x 1 + α 22 x 2 + ⋯ + α 2 n x n = β 2 ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ α n 1 x 1 + α n 2 x 2 + ⋯ + α n n x n = β n \left\{\begin{matrix} {{\alpha _{11}}{x_1} + {\alpha _{12}}{x_2} + \cdots + {\alpha _{1n}}{x_n} = {\beta _1}}\\ {{\alpha _{21}}{x_1} + {\alpha _{22}}{x_2} + \cdots + {\alpha _{2n}}{x_n} = {\beta _2}}\\ { \cdots \quad \cdots \quad \cdots \quad \cdots \quad \cdots \quad \cdots }\\ {{\alpha _{n1}}{x_1} + {\alpha _{n2}}{x_2} + \cdots + {\alpha _{nn}}{x_n} = {\beta _n}} \end{matrix}\right. α11x1+α12x2++α1nxn=β1α21x1+α22x2++α2nxn=β2αn1x1+αn2x2++αnnxn=βn

方程组可以转化为:
A x = B Ax=B Ax=B
其中:
A = [ α 11 α 12 ⋯ α 1 n α 21 α 22 ⋯ α 2 n ⋯ ⋯ ⋯ ⋯ α n 1 α n 2 ⋯ α n n ] , x = [ x 1 x 2 ⋮ x n ] , b = [ β 1 β 2 ⋮ β n ] A = \begin{bmatrix} {{\alpha _{11}}}&{{\alpha _{12}}}& \cdots &{{\alpha _{1n}}}\\ {{\alpha _{21}}}&{{\alpha _{22}}}& \cdots &{{\alpha _{2n}}}\\ \cdots & \cdots & \cdots & \cdots \\ {{\alpha _{n1}}}&{{\alpha _{n2}}}& \cdots &{{\alpha _{nn}}} \end{bmatrix} ,x=\begin{bmatrix} x_1\\ x_2\\ \vdots\\ x_n \end{bmatrix},b = \begin{bmatrix} {{\beta _1}}\\ {{\beta _2}}\\ \vdots \\ {{\beta _n}} \end{bmatrix} A=α11α21αn1α12α22αn2α1nα2nαnn,x=x1x2xn,b=β1β2βn
则:
法 1 求逆
根据矩阵的思想,
x = A − 1 B x=A^{-1}B x=A1B
求逆的方法有很多,那么该算法的复杂性就取决于求逆的方法。
法 2 Crammer 法则
x i = ∣ A i ∣ ∣ A ∣ , i = 1 , 2 , . . . , n x_i=\frac {|A_i|} {|A|},i=1,2,...,n xi=AAi,i=1,2,...,n
其中, ∣ A ∣ |A| A 是系数矩阵行列式, ∣ A i ∣ |A_i| Ai 是以右端向量 b 代替 A 的第 i 列所得的矩阵的行列式。

计算量为求矩阵的行列式(下面是行列式的定义式):
∣    A    ∣ = ∑ ( − 1 ) J ( i 1 , i 2 ⋯ i n ) α 1 i 1 α 2 i 2 ⋯ α n i n \left| {\;{\bf{A}}\;} \right| = \sum {{{( - 1)}^{J({i_1},{i_2} \cdots {i_n})}}{\alpha _{1{i_1}}}{\alpha _{2{i_2}}} \cdots {\alpha _{n{i_n}}}} A=(1)J(i1,i2in)α1i1α2i2αnin
其中 J ( i 1 , i 2 ⋯ i n ) J({i_1},{i_2} \cdots {i_n}) J(i1,i2in) 是从{1,2,…,n}变换到 i 1 , i 2 , . . . , i n {i_1,i_2,...,i_n} i1,i2,...,in 所需的置换次数。

所以使用 Crammer 法则与行列式定义求解方程组需要 N = ( n 2 − 1 ) ( n ! ) + n N=(n^2-1)(n!)+n N=(n21)(n!)+n 次浮点运算。

因为根据定义每个行列式都由 n ! n! n! 项之和组成({1,2,…,n}的全排列有 n!种),每项是 n 个数的乘积,所以计算一个 n 阶行列式的运算量约为 ( n − 1 ) ( n ! ) f l o p (n-1)(n!)flop (n1)(n!)flop,一共需要计算 ∣ A i ∣ |A_i| Ai ∣ A ∣ |A| A n + 1 n+1 n+1 个行列式。行列式算完之后的加法和除法有 n 步,所以总运算量为 O ( n 2 ∗ n ! ) O(n^2*n!) O(n2n!)

运算量过大,实际无法使用。

Gauss 消去法

Gauss 消去法过程示例:

基本步骤:消去和回代
时间复杂度 O ( n 3 ) O(n^3) O(n3) ,空间复杂度 O ( n 2 ) O(n^2) O(n2)

消去法的基本思想

将求解 n 元方程组的问题通过降维,变为等价的 n-1 元方程组进行求解,逐次进行直至变为一个一元一次方程为止,然后求解,再逐步回代得到其余的解

消去法的消去过程

将方程的过程转化为矩阵的变换
对以下增广矩阵:
( A ( 0 ) b ( 0 ) ) = ( a 11 ( 0 ) a 12 ( 0 ) a 13 ( 0 ) ⋯ a 1 n ( 0 ) β 1 ( 0 ) a 21 ( 0 ) a 22 ( 0 ) a 23 ( 0 ) ⋯ a 2 n ( 0 ) β 2 ( 0 ) a 31 ( 0 ) a 32 ( 0 ) a 33 ( 0 ) ⋯ a 3 n ( 0 ) β 3 ( 0 ) ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ a n 1 ( 0 ) a n 2 ( 0 ) a n 3 ( 0 ) ⋯ a n n ( 0 ) β n ( 0 ) ) \begin{pmatrix} {{A^{(0)}}}&{{b^{(0)}}} \end{pmatrix}=\begin{pmatrix} {a_{11}^{(0)}}&{a_{12}^{(0)}}&{a_{13}^{(0)}}& \cdots &{a_{1n}^{(0)}}&{\beta _1^{(0)}}\\ {a_{21}^{(0)}}&{a_{22}^{(0)}}&{a_{23}^{(0)}}& \cdots &{a_{2n}^{(0)}}&{\beta _2^{(0)}}\\ {a_{31}^{(0)}}&{a_{32}^{(0)}}&{a_{33}^{(0)}}& \cdots &{a_{3n}^{(0)}}&{\beta _3^{(0)}}\\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ {a_{n1}^{(0)}}&{a_{n2}^{(0)}}&{a_{n3}^{(0)}}& \cdots &{a_{nn}^{(0)}}&{\beta _n^{(0)}} \end{pmatrix} (A(0)b(0))=a11(0)a21(0)a31(0)an1(0)a12(0)a22(0)a32(0)an2(0)a13(0)a23(0)a33(0)an3(0)a1n(0)a2n(0)a3n(0)ann(0)β1(0)β2(0)β3(0)βn(0)
将矩阵的第 i 行分别减去矩阵第一行的倍数 l 1 = a i 1 ( 0 ) a 11 ( 0 ) , i = 2 , 3 , . . . , n l_1=\frac {a_{i1}^{(0)}} {a_{11}^{(0)}},i=2,3,...,n l1=a11(0)ai1(0),i=2,3,...,n ,得到:
( A ( 1 ) b ( 1 ) ) = ( a 11 ( 0 ) a 12 ( 0 ) a 13 ( 0 ) ⋯ a 1 n ( 0 ) β 1 ( 0 ) 0 a 22 ( 1 ) a 23 ( 1 ) ⋯ a 2 n ( 1 ) β 2 ( 1 ) 0 a 32 ( 1 ) a 33 ( 1 ) ⋯ a 3 n ( 1 ) β 3 ( 1 ) ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ 0 a n 2 ( 1 ) a n 3 ( 1 ) ⋯ a n n ( 1 ) β n ( 1 ) ) \begin{pmatrix} {{A^{(1)}}}&{{b^{(1)}}} \end{pmatrix}=\begin{pmatrix} {a_{11}^{(0)}}&{a_{12}^{(0)}}&{a_{13}^{(0)}}& \cdots &{a_{1n}^{(0)}}&{\beta _1^{(0)}}\\ 0&{a_{22}^{(1)}}&{a_{23}^{(1)}}& \cdots &{a_{2n}^{(1)}}&{\beta _2^{(1)}}\\ 0&{a_{32}^{(1)}}&{a_{33}^{(1)}}& \cdots &{a_{3n}^{(1)}}&{\beta _3^{(1)}}\\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ 0&{a_{n2}^{(1)}}&{a_{n3}^{(1)}}& \cdots &{a_{nn}^{(1)}}&{\beta _n^{(1)}} \end{pmatrix} (A(1)b(1))=a11(0)000a12(0)a22(1)a32(1)an2(1)a13(0)a23(1)a33(1)an3(1)a1n(0)a2n(1)a3n(1)ann(1)β1(0)β2(1)β3(1)βn(1)
其中:
a i j ( 1 ) = a i j ( 0 ) − l i 1 a 1 j ( 0 ) β i ( 1 ) = β i ( 0 ) − l i 1 β 1 ( 0 ) j = 2 , 3 , . . . , n i = 2 , 3 , . . . , n \begin{matrix} a_{ij}^{(1)} = a_{ij}^{(0)} - {l_{i1}}a_{1j}^{(0)}\\ \beta _i^{(1)} = \beta _i^{(0)} - {l_{i1}}\beta _1^{(0)}\\ j = 2,3,...,n\\ i = 2,3,...,n \end{matrix} aij(1)=aij(0)li1a1j(0)βi(1)=βi(0)li1β1(0)j=2,3,...,ni=2,3,...,n
以此类推,消去第 k 步,得到矩阵:
( A ( k ) b ( k ) ) = ( a 11 ( 0 ) ⋯ a 1 k ( 0 ) a 1 , k + 1 ( 0 ) ⋯ a 1 n ( 0 ) β 1 ( 0 ) ⋱ ⋮ ⋮ ⋮ ⋮ a k k ( k − 1 ) a k , k + 1 ( k − 1 ) ⋯ a k n ( k − 1 ) β k ( k − 1 ) a k + 1 , k + 1 ( 0 ) ⋯ a k + 1 , n ( k ) β k + 1 ( k ) ⋮ ⋮ ⋮ a n , k + 1 ( k ) ⋯ a n n ( k ) β n ( k ) ) \begin{pmatrix} {{A^{(k)}}}&{{b^{(k)}}} \end{pmatrix} = \begin{pmatrix} {a_{11}^{(0)}}& \cdots &{a_{1k}^{(0)}}&{a_{1,k + 1}^{(0)}}& \cdots &{a_{1n}^{(0)}}&{\beta _1^{(0)}}\\ {}& \ddots & \vdots & \vdots &{}& \vdots & \vdots \\ {}&{}&{a_{kk}^{(k - 1)}}&{a_{k,k + 1}^{(k - 1)}}& \cdots &{a_{kn}^{(k - 1)}}&{\beta _k^{(k - 1)}}\\ {}&{}&{}&{a_{k + 1,k + 1}^{(0)}}& \cdots &{a_{k + 1,n}^{(k)}}&{\beta _{k + 1}^{(k)}}\\ {}&{}&{}& \vdots &{}& \vdots & \vdots \\ {}&{}&{}&{a_{n,k + 1}^{(k)}}& \cdots &{a_{nn}^{(k)}}&{\beta _n^{(k)}} \end{pmatrix} (A(k)b(k))=a11(0)a1k(0)akk(k1)a1,k+1(0)ak,k+1(k1)ak+1,k+1(0)an,k+1(k)a1n(0)akn(k1)ak+1,n(k)ann(k)β1(0)βk(k1)βk+1(k)βn(k)
计算关系式:
l i k = a i k ( k − 1 ) a k k ( k − 1 ) a i j ( k ) = a i j ( k − 1 ) − l i k a k j ( k − 1 ) , j = k + 1 , . . . , n β i ( k ) = β i ( k − 1 ) − l i k β k ( k − 1 ) , i = k + 1 , k + 2 , . . . , n \begin{matrix} {l_{ik}} = \frac{{a_{ik}^{(k - 1)}}}{{a_{kk}^{(k - 1)}}}\\ \\ {\rm{ }}a_{ij}^{(k)} = a_{ij}^{(k - 1)} - {l_{ik}}a_{kj}^{(k - 1)},j = k + 1,...,n\\ \\ {\rm{ }}\beta _i^{(k)} = \beta _i^{(k - 1)} - {l_{ik}}\beta _k^{(k - 1)},i = k + 1,k + 2,...,n \end{matrix} lik=akk(k1)aik(k1)aij(k)=aij(k1)likakj(k1),j=k+1,...,nβi(k)=βi(k1)likβk(k1),i=k+1,k+2,...,n
经过 n-1 步消去后,得到:
( A ( n − 1 ) b ( n − 1 ) ) = ( a 11 ( 0 ) a 12 ( 0 ) a 13 ( 0 ) ⋯ a 1 n ( 0 ) β 1 ( 0 ) a 22 ( 1 ) a 23 ( 1 ) ⋯ a 2 n ( 1 ) β 2 ( 1 ) a 33 ( 2 ) ⋯ a 3 n ( 2 ) β 3 ( 2 ) ⋱ ⋮ ⋮ a n n ( n − 1 ) β n ( n − 1 ) ) (\begin{matrix} {{A^{(n - 1)}}}&{{b^{(n - 1)}}} \end{matrix}) = \left( {\begin{matrix} {a_{11}^{(0)}}&{a_{12}^{(0)}}&{a_{13}^{(0)}}& \cdots &{a_{1n}^{(0)}}&{\beta _1^{(0)}}\\ {}&{a_{22}^{(1)}}&{a_{23}^{(1)}}& \cdots &{a_{2n}^{(1)}}&{\beta _2^{(1)}}\\ {}&{}&{a_{33}^{(2)}}& \cdots &{a_{3n}^{(2)}}&{\beta _3^{(2)}}\\ {}&{}&{}& \ddots & \vdots & \vdots \\ {}&{}&{}&{}&{a_{nn}^{(n - 1)}}&{\beta _n^{(n - 1)}} \end{matrix}} \right) (A(n1)b(n1))=a11(0)a12(0)a22(1)a13(0)a23(1)a33(2)a1n(0)a2n(1)a3n(2)ann(n1)β1(0)β2(1)β3(2)βn(n1)
然后,经过回代,就可以得到所有解。
{ x n = β n ( n − 1 ) a n n ( n − 1 ) x k = 1 a k k ( k − 1 ) ( β k ( k − 1 ) − ∑ j = k + 1 n a k j ( k − 1 ) x j ) , k = n − 1 , n − 2 , . . . , 1 \left\{ \begin{array}{l} {x_n} = \frac{{\beta _n^{(n - 1)}}}{{a_{nn}^{(n - 1)}}}\\ {x_k} = \frac{1}{{a_{kk}^{(k - 1)}}}\left( {\beta _k^{(k - 1)} - \sum\limits_{j = k + 1}^n {a_{kj}^{(k - 1)}{x_j}} } \right),k = n - 1,n - 2,...,1 \end{array} \right.{\rm{ }} xn=ann(n1)βn(n1)xk=akk(k1)1(βk(k1)j=k+1nakj(k1)xj),k=n1,n2,...,1

列主元 Gauss 消去法

但 Gauss 消去法并非万能,例如对于以下问题就不能执行:
{ 5 x 2 + x 3 = 2 2 x 1 + x 2 − x 3 = 1 4 x 1 − x 2 + x 3 = 0 \left\{ \begin{array}{l} {\rm{ 5}}{x_2} + {x_3} = 2\\ 2{x_1} + {x_2} - {x_3} = 1\\ 4{x_1} - {x_2} + {x_3} = 0 \end{array} \right. 5x2+x3=22x1+x2x3=14x1x2+x3=0

所以当 Gauss 消去法遇到以下现象时,不能执行:

  1. a k k ( k − 1 ) = 0 a_{kk}^{(k-1)}=0 akk(k1)=0
  2. ∣ a k k ( k − 1 ) ∣ < < ∣ a i k ( k − 1 ) ∣ , i = k + 1 , . . . , n |a_{kk}^{(k-1)}|<<|a_{ik}^{(k-1)}|,i=k+1,...,n akk(k1)<<aik(k1),i=k+1,...,n

第一种情况容易理解,第二种情况是因为会导致小数字作为除数参加运算,会产生大数字,大数字加到其他数上面会产生“大数吃小数”的问题。

所以可以采用以下方法解决上面两种现象:

若矩阵非奇则总可以通过选主元的方式继续执行消去过程

所以列主元高斯消去法是稳定的,但是高斯消去法可能是不稳定的。

注意:当矩阵对称正定或者严格对角占优时,不需要使用列主元高斯消去法。

你可能感兴趣的:(《计算方法》笔记之(二)线性代数方程组之Gauss消去法)