高斯消元法解线性方程组

                     

贡献者: addis

预备知识 线性方程组的解集

  1线性方程组(有 x1xnn 个未知量,所以也叫 n 元一次方程组

(1){a1,1x1+a1,2x2++a1,nxn=y1a2,1x1+a2,2x2++a2,nxn=y2am,1x1+am,2x2++am,nxn=ym 
可以写成矩阵和列矢量相乘的形式
(2)Ax=y ,
其中 A 是维度 m×n 的矩阵,称为系数矩阵
(3)A=(a1,1a1,2a1,na2,1a2,2a2,nam,1am,2am,n) ,
xn 维列矢量 (x1,x2,,xm,,xn)Tym 维列矢量 (y1,y2,,ym)T,称为常数列Ay 通常看做已知的,而 x 看做未知的,即方程组待求的。下面我们介绍一种解线性方程组的简单的方法,高斯消元法(Gauss elimination)。 先来看一个简单的例子。

例 1 

   我们先回顾一下初中阶段如何解线性方程组,例如

(4){2x+3y=215x2y=5 
一种方法是将第一条等式两边除以 2 再移项得到
(5)x=32y+212 .
再代入第二个条式消去 x
(6)192y+1052=5 .
解得 y=5,再代入第一条等式得 x=3

   另一种更方便的解法是,将第一条等式(两边)乘以 5/2,加到第二条上消去 x

(7)192y=952 .
解得 y=5,再代入第一条等式得 x=3。为什么可以这么做? 简单来说是因为如果两条等式都成立,将它们两边相加得到的新的等式同样成立。下面我们来详细讲解第二种方法。

   为了书写简单,我们可以用所谓的增广矩阵(augmented matrix)来表示矩阵和常数列,即把式 4 记为

(8)(2321525) 
同样把第一行乘以 5/2,加到第二行上得
(9)(2321019/295/2) 

   如果这个方程有多个未知数,且方程的数量和未知数相同(系数矩阵为方阵),理想情况下我们可以用第一行消去所有 i>1 行的第一个系数,再用第二行消去所有 i>2 行的第 2 个系数,以此类推,最后得到一个三角形系数矩阵。三角形系数矩阵的最后一行只有最后一个变量的系数不为零,我们求出这个变量后,再代入倒数第二行(只有两个未知量)求出另一个未知量,最后就可以得到所有未知量的值。这个过程叫做反向迭代(backward substitution)

   注意这只是一种理想的情况,如果在处理第 i 行的时候发现 ai,i=0,则该方法无法进行下去。为此我们需要稍微复杂一些的方法,也就是高斯消元法的一般步骤。

1. 一般步骤

   我们将式 1 形式的方程组用增广矩阵表示为

(10)B=(A,y)=(a1,1a1,2a1,ny1a2,1a2,2a2,ny2am,1am,2am,nym) 

   定义以下三种矩阵(或增广矩阵)变换为初等行变换。初等行变换不改变方程组的解2

  1. 对调矩阵中的第 i 行与第 j 行,记作 rirj
  2. 将矩阵第 i 行的所有元素乘以一个非零数 k,记作 ri×k
  3. 把矩阵第 i 行的所有元素乘以数 k 后加到第 j 行上,下文简记为 rj+ri×k

   任何非零矩阵(或增广矩阵)经过有限次初等行变换后总可以使系数矩阵 A 转化为梯形矩阵(echelon form)。我们把梯形矩阵定义为满足该条件的矩阵:第 i 行的第一个非零系数3 ai,q(i) 的列标 q(i) 总是大于第 i1 行的第一个非零元 ai1,q(i1) 的列标 q(i1)。与例 1 不同的是,当系数矩阵经过行变换化为梯形矩阵后,最后若干行有可能都为零,最后一个非零行也未必只有一个非零元。

   高斯消元法的一般步骤如下:

   完成后,系数矩阵就会变为梯形矩阵。

例 2 解线性方程组

  

(11){x1+x2x3+x4=32x1+2x22x3+x4=7x1+x2+2x4=32x1+2x2x3+5x4=4 
解:

   将该方程组写成增广矩阵形式

(12)B=(11113222171102322154) 
对第一列
(13)r22r1r31r1r42r1B=(11113000110011000132) 

   发现此时,矩阵第二列自第二行以下全为零,所以需要依次向下一列寻找不为零的元素。继续消元

(14)r2r4r31r2r40r2B=(11113001320002200011) 
(15)r40.5r3B=(11113001320002200000) 
我们按照上面的方法用第 3 行求 x4,代入第 2 行求得 x3。然而当我们想用第 1 行求 x1 的时候却出发现我们还没求出 x2。解决办法是,我们令 x2=c 且假设 c 可以取任意值,再把 x1c 表示。方程的解可以表示为
(16){x1=5cx2=cx3=1x4=1 
或者写成列矢量的形式
(17)x=c(1100)+(5011) .
将该式代入方程组,可以验证 c 取任意值时方程组都成立。

   如果多个 xi 的值都未知,我们就分别假设它们等于不同的任意常数 ci 即可。

2. 解的数量

   根据以上步骤,当系数矩阵变为梯形矩阵后,可以用以下步骤判断解的数量:

  1. 若存在系数 ai,j 全为零的行 i,但是对应的常数 yi 却不为零,则方程组无解。
  2. 若存在 d 个系数 ai,j 全为零的行 i,且对应的所有 yi 也都为零,则方程有无穷个解,且需要 d 个任意常数来表示所有可能的解。
  3. 若不存在系数 ai,j 全为零的行,则系数矩阵可以化为三角矩阵,使对角线上的元素全不为零。此时方程有唯一解。

3. 解的结构

   按照高斯消元法的一般步骤,如果方程有解,我们总可以将解表示为一些常矢量的线性组合加上一个常矢量。

(18)x=i=1dcixi+x0 .
其中 cid 个任意常数(当方程有唯一解时 d=0),无论这些常数取什么值,x 都是方程的解。另一方面,给出方程的任意一个解,总能找到一些常数 ci 与之对应。式 18 叫做方程的通解(general solution),通解中的任意一个就做方程的特解(special solution)

   将式 18 代入方程组,使用矩阵乘法分配律(式 17 )得到

(19)Ai=1dcixi+Ax0=y ,
由于 x0 是方程的一个特解,有 Ax0=y。所以
(20)Ai=1dcixi=0 .
线性方程组 Ax=y 中,如果 y=0(粗体的 0 表示零矢量,即每个元都是 0),则方程组被称为是齐次(homogeneous)的。上式说明 icixi 就是齐次方程组 Ax=0 的通解。

   综上所述,对于任意有解的非齐次(inhomogeneous)方程组 Ax=y,我们可以将通解(式 18 )从形式上理解为齐次方程组 Ax=0 的通解与非齐次方程组的任一特解相加。


1. ^ 参考 Wikipedia 相关页面
2. ^ 这点我们留到以后证明
3. ^ 为了书写简单,我们将每次变换后的系数矩阵元仍然用 ai,j 来表示,虽然它的值可能已经发生变化。若需要区分,可以将第 n 次变换后的矩阵元用 ai,j(n) 表示。
4. ^ 如果 a1,10 则不需要
5. ^ 如果在处理 i=m1 之前就得到了梯形矩阵,则可提前终止。

                     

© 小时科技 保留一切权利