数值分析(3)-线性方程组直接解法

文章目录

  • 3 线性方程组直接解法
    • 3.1 Gauss(高斯)消去法
      • 3.1.1 顺序高斯消去法
      • 3.1.2 列主元高斯消去法
    • 3.2 矩阵三角分解法
      • 3.2.1 高斯消去法的矩阵运算
      • 3.3.2 直接三角分解法
      • 3.3.3 平方根法
      • 3.3.4 追赶法

3 线性方程组直接解法

在初高中学习过了二元、多元方程组的基础解法,但是都是依赖我们手工变换方程组,然后进行大量计算,求解出各个未知量。这里要学习的是,多元方程组的通用解法,并且这些解法都是可以按照公式编制出计算机程序的。

首先,一个有n个未知量的n个方程构成的方程组:

{ 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{array}{l}{a_{11} x_{1}+a_{12} x_{2}+\cdots+a_{1 n} x_{n}=b_{1}} \\ {a_{21} x_{1}+a_{22} x_{2}+\cdots+a_{2 n} x_{n}=b_{2}} \\ {\vdots} \\ {a_{n 1} x_{1}+a_{n 2} x_{2}+\cdots+a_{n n} x_{n}=b_{n}}\end{array}\right. a11x1+a12x2++a1nxn=b1a21x1+a22x2++a2nxn=b2an1x1+an2x2++annxn=bn

其中 a i j a_{ij} aij称为方程组的系数。则他们可以写成矩阵的形式:

A x = b Ax = b Ax=b

A A A称为系数矩阵,若系数矩阵非奇异,那么这个方程组就有唯一解。 x = ( x 1 , x 2 , . . . , x n ) T x=(x_1,x_2,...,x_n)^T x=(x1,x2,...,xn)T

A = [ a 11 , a 12 , . . . , a 1 n a 21 , a 22 , . . . , a 2 n ⋮ , ⋮ , ⋮ , ⋮ , ⋮ , ⋮ , . . . , ⋮ a n 1 , a n 2 , . . . , a n n ] , x = [ x 1 x 2 ⋮ x n ] , b = [ b 1 b 2 ⋮ b n ] A=\left[ \begin{array}{c}{a_{11},a_{12},...,a_{1n}} \\ {a_{21},a_{22},...,a_{2n}} \\ {\vdots,\vdots,\vdots,\vdots,\vdots,\vdots,...,\vdots} \\ {a_{n1},a_{n2},...,a_{nn}}\end{array}\right] , x = \left[ \begin{array}{c}{x_{1}} \\ {x_{2}} \\ {\vdots} \\ {x_{n}}\end{array}\right], b=\left[ \begin{array}{c}{b_{1}} \\ {b_{2}} \\ {\vdots} \\ {b_{n}}\end{array}\right] A=a11,a12,...,a1na21,a22,...,a2n,,,,,,...,an1,an2,...,ann,x=x1x2xn,b=b1b2bn

最基础的方法就是使用**克莱姆(Cramer)**法则,前面方程的解:

x j = D j D x_j = \frac{D_j}{D} xj=DDj

其中 D D D A A A行列式, D j D_j Dj是把 D D D j j j列用向量 b b b替换得到的行列式。

但是克莱姆法则算法的时间复杂度 O ( ( n 2 − 1 ) n ! ) O((n^2-1)n!) O((n21)n!),也就是说其运算时间随着未知数的数量增多,会急剧增加,以至于我们现在的计算力根本无法计算出结果。

由于上面的问题,又诞生了许多求解线性方程组的方法,他们可以分为两类:直接方法迭代方法。本文说的就是直接方法。

3.1 Gauss(高斯)消去法

3.1.1 顺序高斯消去法

高斯消去法,实际上类似于我们手工求解方程组的方法,通过逐次消元把 A A A转化成上三角矩阵。

在方程组中实际上就是,第一个方程原封不动,用第一个方程* − a 21 a 11 -\frac{a_{21}}{a_{11}} a11a21加到第二个方程上,消去第二个方程的第一个未知数 x 1 x_1 x1(因为其系数为0);并用类似的方法,利用已经消元的第二个方程对第三个方程消元,最终最后一个方程就是这样的形式: x n = b n x_n=b_n xn=bn

这样就求解出来了 x n x_n xn的值,将其带入倒数第二个方程可以求得 x n − 1 x_{n-1} xn1的值,进一步就可以得到所有的未知量的值。

上面两段介绍的就是顺序高斯消去法的内容,因为他是按照原始方程组顺序进行计算的,所以叫做顺序高斯消去。

3.1.2 列主元高斯消去法

上面说的顺序高斯消去的过程,使用到的 a k k ( k ) a_{kk}^{(k)} akk(k)称为主元素(上标的 k k k表示这是第k次消元后得到的结果),称为主元素,那么根据上面顺序高斯消去法的计算,我们知道如果主元素太小误差就会放大,如果主元素为0那么顺序高斯消去法根本就无法计算。

列主元高斯消去法,就是在第k次消元计算之前,将行编号大于等于k的所有行按照第k列进行绝对值排序。通过这个排序操作,让我们高斯消去过程中的主元素尽量保持在较大的值,可以有效减小误差和减少无法计算的情况出现。(**当然,对系数矩阵 A A A某行排序交换顺序的时候, b b b中的顺序也要随之改变)

3.2 矩阵三角分解法

3.2.1 高斯消去法的矩阵运算

要学习矩阵方式的方法,那么我们就先了解一个直接法的矩阵形式以帮助理解。

由高斯消去法可知,每一次消元操作,都可以看做是在 A A A的左边乘了一个矩阵,这个矩阵可以将某一行乘一个数并加到另一行。所以高斯消去法可以看成是下面的形式:

A = L 1 − 1 L 2 − 1 . . . L n − 1 − 1 A ( n ) = L U A = L_1^{-1}L_2^{-1}...L_{n-1}^{-1}A^{(n)} = LU A=L11L21...Ln11A(n)=LU

因为第k次消元时,第k个方程不会变,编号大于k的方程才会变,所以所有 L i ( − 1 ) L_i^{(-1)} Li(1)的乘积 L L L是一个单位下三角矩阵。矩阵 U U U就是我们高斯消去法最终得到的系数矩阵,所以 U U U是一个上三角矩阵。

3.3.2 直接三角分解法

直接三角分解法又称为杜立特(Doolittle)分解,其内容如下

n n n阶方阵 A A A的各阶顺序主子式均不为0,则存在唯一的单位下三角矩阵 L L L和上三角矩阵 U U U使 A = L U A=LU A=LU

如果某阶顺序主子式为0,那么消去计算就无法进行,所以不能为0。

3.3.3 平方根法

平方根法的分解又称为对称正定矩阵的乔列斯基(Cholesky)分解。

由前面的杜立特分解可知,所有顺序主子式大于零的矩阵可分解为 A = L U A=LU A=LU,令矩阵 D D D为对角矩阵,其对角线上的值等于 U U U中对角线上的值。令矩阵 M = D − 1 ) U M=D^{-1)}U M=D1)U,则 M M M为单位上三角矩阵。故,原方程可分解为:

A = L D M A=LDM A=LDM

如果 A A A是对称矩阵,那么可知 M = L T M=L^T M=LT,所以有分解式:

A = L D L T A = LDL^T A=LDLT

G = L D 1 2 G=LD^{\frac{1}{2}} G=LD21,则可以得到 A = G G T A=GG^T A=GGT。故可以得出下面分解方法。

设有对称正定矩阵 A A A,那么他具有如下分解: A = G G T A=GG^T A=GGT

3.3.4 追赶法

追赶法专门用于三对角方程组

平方根法 A = L D M A=LDM A=LDM,令 T = L D T=LD T=LD,则 T T T为下三角矩阵,所以可以得到克劳特(Crout)分解,其内容如下:

对于一个对称正定矩阵 A A A,他可以分解成如下形式:

A = T M A = TM A=TM

你可能感兴趣的:(数值分析)