一、消元法介绍
消元法(elimination)是一个求解线性方程组的系统性方法。下面是使用消元法求解一个 2 × 2 2\times2 2×2 线性方程组的例子。消元之前,两个方程都有 x x x 和 y y y,消元后,第一个未知数 x x x 将从第二个方程消失:
新的方程 8 y = 8 8y=8 8y=8 能够直接得到 y = 1 y=1 y=1,再将 y = 1 y=1 y=1 回代到第一个方程 x − 2 y = 1 x-2y=1 x−2y=1,求得 x = 3 x=3 x=3,则解就是 ( x , y ) = ( 3 , 1 ) (x,y)=(3,1) (x,y)=(3,1)。
消元法的目的是得到一个上三角形系统。非零系数 1 , − 2 , 8 1,-2,8 1,−2,8 形成一个三角形,这个系统从底部向上求解。首先得到 y = 1 y=1 y=1,然后求得 x = 3 x=3 x=3。这个过程称之为回代。经过消元法得到的三角形,回代可以在任意大小(行和列)的上三角形上使用。
重点: 原始方程组有着相同的解 x = 3 , y = 1 x=3,y=1 x=3,y=1。Figure 2.5 中对这两个系统都使用了一对直线来表示,它们均相交于点 ( 3 , 1 ) (3,1) (3,1)。即经过消元后,它们会交于相同的点,每一步的方程都有相同的解。
如何从第一对直线得到第二对直线呢?将第一个方程乘 3 3 3,然后用第二个方程减去第一个方程。目的是消去未知数 x x x:
消去 x x x:从方程 2 2 2 减去方程 1 1 1 的倍数
3 3 3 乘 x − 2 y = 1 x-2y=1 x−2y=1 得到 3 x − 6 y = 3 3x-6y=3 3x−6y=3,从方程 3 x + 2 y = 11 3x+2y=11 3x+2y=11 减去上面的方程,右侧得到 8 8 8,重点是左侧 3 x 3x 3x 与 3 x 3x 3x 相消得到 2 y − ( − 6 y ) = 8 y 2y-(-6y)=8y 2y−(−6y)=8y,消去了 x x x,系统变成了三角形。
如何得到乘数 l = 3 l=3 l=3 呢?第一个方程包含 1 x 1x 1x,所以第一个主元是 1 1 1( x x x 的系数),第二个方程包含 3 x 3x 3x,所以乘数是 3 3 3。 3 x − 3 x 3x-3x 3x−3x 就可以得到零和三角形。
如果将第一个方程变为 4 x − 8 y = 4 4x-8y=4 4x−8y=4(同样的直线,但是第一个主元变成 4 4 4)。现在乘数就变成了 l = 3 / 4 l=3/4 l=3/4。把需要消去的系数 3 3 3 除以主元 4 4 4 就可以得到乘数:
最终仍然是个三角形系统,通过最后一个方程得到 y = 1 y=1 y=1。回代后得到 4 x − 8 = 4 4x-8=4 4x−8=4,解得 x = 3 x=3 x=3。这里虽然改变了数字,但是直线是不变的,解也就不会变。
主元 = 经过消元后的行的第一个非零数 乘数 = (需要消去的元) / (主元) = 3 / 4 \pmb{主元} = 经过消元后的行的第一个非零数\kern 15pt\\ \pmb{乘数} = (需要消去的元)/(主元)= 3/4 主元=经过消元后的行的第一个非零数乘数=(需要消去的元)/(主元)=3/4
新的第二个方程是从第二主元开始的,主元是 8 8 8。如果要解 n n n 个方程,那么需要 n n n 个主元,完成消元后,这些主元都会在三角形的对角线上。
二、消元法失效
正常情况下消元法可以找到解,但是也有失效的情况。有时会遇到除以 0 0 0 的情况,这种情况下可能需要调整顺序,也可能消元法完全失效。
一般有如下三种例题的情况:例 1 是无解的情况,例 2 是有无穷解,例 3 可以通过交换方程的顺序来解决。
【例1】无解而完全失效。消元过后可以清楚的看到: x − 2 y = 1 3 x − 6 y = 11 消元后 x − 2 y = 1 0 y = 8 \begin{matrix}x-2y=1\\3x-6y=11\end{matrix}\kern 15pt消元后\kern 15pt\begin{matrix}x-2y=1\\\kern 18pt0y=8\end{matrix} x−2y=13x−6y=11消元后x−2y=10y=8 0 y = 8 0y=8 0y=8 无解。正常情况下是右侧的 8 8 8 除以第二个主元,但是这里没有第二个主元(零不允许是主元)。从 Figure 2.6 中的行图像和列图像可以看出失效的原因。如果系统无解,那么消元过程中就会出现类似 0 y = 8 0y=8 0y=8 这样形式的方程。
行图像中可以发现这是两条平行线,平行线是没有交点的,若方程组有解,那么这个解必定会同时落在两条直线上。这两条直线没有交点,所以方程组无解。
列图像中可以看出两个列向量 ( 1 , 3 ) (1,3) (1,3) 和 ( − 2 , − 6 ) (-2,-6) (−2,−6) 位于同一个方向(同向或反向),所有列的线性组合都在同一直线上,但是右侧的列 ( 1 , 11 ) (1,11) (1,11) 不在这条直线上。不存在正确列的线性组合可以得到右侧的向量,因此方程组无解。
若将右侧改为 ( 1 , 3 ) (1,3) (1,3),那么会因为一整条直线都是解而失效。例 2 是由无穷多个解。
【例2】无限多解而失效。将 b \boldsymbol b b 从 ( 1 , 11 ) (1,11) (1,11) 改成 ( 1 , 3 ) (1,3) (1,3)。 x − 2 y = 1 3 x − 6 y = 3 消元后 x − 2 y = 1 0 y = 0 仍然仅有一个主元 \begin{matrix}x-2y=1\\3x-6y=3\kern 4pt\end{matrix}\kern 15pt消元后\kern 15pt\begin{matrix}x-2y=1\\\kern 19pt0y=0\end{matrix}\kern 10pt仍然仅有一个主元 x−2y=13x−6y=3消元后x−2y=10y=0仍然仅有一个主元所有的 y y y 都满足方程 0 y = 0 0y=0 0y=0,实际上只有一个方程 x − 2 y = 1 x-2y=1 x−2y=1。未知数 y y y 是自由的,当 y y y 选定后,通过 x = 2 y + 1 x=2y+1 x=2y+1 也就可以确定 x x x。
Figure 2.7 是该方程组的行图像和列图像。
此时的行图像,两条平行线变成了同一条直线,直线上的每一点都同时满足两个方程。
列图像中, b = ( 1 , 3 ) \boldsymbol b=(1,3) b=(1,3) 与列 1 1 1 相同。所以列的线性组合可以是 x = 1 , y = 0 x=1,y=0 x=1,y=0,也可以是 x = 0 , y = − 1 / 2 x=0,y=-1/2 x=0,y=−1/2。对于每一行的解 ( x , y ) (x,y) (x,y) 同样也是列的解。
关于消元法:
失效 n \kern 10ptn n 个方程无法得到 n n n 个主元
消元法得到方程 0 ≠ 0 0\neq0 0=0(无解),或 0 = 0 0=0 0=0(无限多解)
得到 n n n 个主元表示成功,但是可能需要交换这 n n n 个方程的顺序。
第三种消元法失效的情况下可以通过交换方程的顺序来解决。假设第一个主元的位置是 0 0 0,而 0 0 0 不能作为主元。当第一个方程没有 x x x 项时,我们可以将它与下面的方程交换:
【例3】暂时失效(主元出现 0 0 0)。交换行可以得到两个主元: 重新排列 0 x + 2 y = 4 3 x − 2 y = 5 两个方程交换 3 x − 2 y = 5 2 y = 4 重新排列\kern 15pt\begin{matrix}0x+2y=4\\3x-2y=5\end{matrix}\kern 10pt两个方程交换\kern 15pt\begin{matrix}3x-2y=5\\\kern 24pt2y=4\end{matrix} 重新排列0x+2y=43x−2y=5两个方程交换3x−2y=52y=4新的系统已经是三角形了。这个例子可以直接进行回代,最后一个方程得到 y = 2 y=2 y=2,回代到第一个方程可以得到 x = 3 x=3 x=3。本例行图像是正常的(两条相交直线),列图像也是正常的(列向量不在同一方向)。主元 3 3 3 和 2 2 2 也是正常的。但是需要进行一次行交换。
例 1 和例 2 是奇异的 —— 没有第二个主元。例 3 是非奇异的 —— 每个主元都存在,仅有一个解。奇异方程无解或有无限多解,非奇异方程仅有一个解。主元因为要做除数,所以不能是零。
三、三个方程三个未知数
为了更深入的理解高斯消元法, 2 × 2 2×2 2×2 的系统是不够的,下面将以 3 × 3 3×3 3×3 的系统为例。现在的系数矩阵都是方形的 —— 行数与列数相等。 2 x + 4 y − 2 z = 2 4 x + 9 y − 3 z = 8 − 2 x − 3 y + 7 z = 10 ( 2.2.1 ) \begin{matrix}2x+4y-2z=2\\4x+9y-3z=8\\-2x-3y+7z=10\end{matrix}\kern 25pt(2.2.1) 2x+4y−2z=24x+9y−3z=8−2x−3y+7z=10(2.2.1)第一个主元是 2 2 2(左上角),这个主元下方是要消去的 4 4 4,第一个乘数就是 4 / 2 = 2 4/2=2 4/2=2。第一个方程乘 l 21 = 2 l_{21}=2 l21=2 后,用第二个方程减去上面的结果,即可将 4 x 4x 4x 消去:
步骤1: 从方程 2 中减去 2 乘方程 1,得: y + z = 4 y+z=4 y+z=4
我们也需要使用第一个主元消去第三个方程中的 − 2 x -2x −2x。最快的方法是将方程 3 与方程 1 相加,但是为了更系统的实现消元,我们仍然使用相同的方法,使用先乘后减的方法。乘数 l 31 = − 2 / 2 = − 1 l_{31}=-2/2=-1 l31=−2/2=−1,将其与第一个方程相乘后,在从第三个方程减去上述结果:
步骤2: 方程 3 减去 − 1 -1 −1 乘方程 1,得: y + 5 z = 12 y+5z=12 y+5z=12。
新的方程只包含了两个未知数 y y y 和 z z z,第二个主元是 1 1 1: x 已经被消去 1 y + 1 z = 4 1 y + 5 z = 12 x\,已经被消去\kern 10pt\begin{matrix}1y+1z=4\kern 6pt\\1y+5z=12\end{matrix} x已经被消去1y+1z=41y+5z=12我们已经得到一个 2 × 2 2×2 2×2 的系统,最后一步消去 y y y 得到 1 × 1 1×1 1×1 的系统:
步骤3: 新的方程 3 减去 1 1 1 乘新的方程 2,乘数是 l 32 = 1 / 1 = 1 l_{32}=1/1=1 l32=1/1=1,得到 4 z = 8 4z=8 4z=8。
原始的 A x = b A\boldsymbol x=\boldsymbol b Ax=b 转换成了上三角形 U x = c U\boldsymbol x=\boldsymbol c Ux=c:
至此消元的目的达成,从 A A A 到 U U U 完成了前向消元。注意 U U U 的对角线就是主元 2 , 1 , 4 2,1,4 2,1,4。原始系统中主元 1 1 1 和 4 4 4 被隐藏了,通过消元法可以找到它们。 U x = c U\boldsymbol x=\boldsymbol c Ux=c 的形式可以使用回代来解方程组了: ( 4 z = 8 得 z = 2 ) ( y + z = 4 得 y = 2 ) ( 2 x + 4 y − 2 z = 2 得 x = − 1 ) (4z=8\,得\,z=2)\kern 10pt(y+z=4\,得\,y=2)\kern 10pt(2x+4y-2z=2\,得\,x=-1) (4z=8得z=2)(y+z=4得y=2)(2x+4y−2z=2得x=−1)方程组的解是 ( x , y , z ) = ( − 1 , 2 , 2 ) (x,y,z)=(-1,2,2) (x,y,z)=(−1,2,2)。行图像中三个方程形成三个平面,这三个平面都会经过解。原始的平面都是倾斜的,经过消元后最后一个平面 4 z = 8 4z=8 4z=8 是水平的。
列图像显示列向量的线性组合 A x A\boldsymbol x Ax 产生右侧的向量 b \boldsymbol b b,组合系数 ( x , y , z ) = ( − 1 , 2 , 2 ) (x,y,z)=(-1,2,2) (x,y,z)=(−1,2,2): A x = ( − 1 ) [ 2 4 − 2 ] + 2 [ 4 9 − 3 ] + 2 [ − 2 − 3 7 ] = [ 2 8 10 ] = b ( 2.2.3 ) A\boldsymbol x=(-1)\begin{bmatrix}\kern 7pt2\\\kern 7pt4\\-2\end{bmatrix}+2\begin{bmatrix}\kern 7pt4\\\kern 7pt9\\-3\end{bmatrix}+2\begin{bmatrix}-2\\-3\\\kern 7pt7\end{bmatrix}=\begin{bmatrix}2\\8\\10\end{bmatrix}=\boldsymbol b\kern 10pt(2.2.3) Ax=(−1) 24−2 +2 49−3 +2 −2−37 = 2810 =b(2.2.3)三角形 U x = c U\boldsymbol x=\boldsymbol c Ux=c 与 A x = b A\boldsymbol x=\boldsymbol b Ax=b 有相同的列向量组合 ( − 1 , 2 , 2 ) (-1,2,2) (−1,2,2) 产生右侧向量。
四、从 A 到 U 的消元法
对于 4 × 4 4×4 4×4 或者 n × n n\times n n×n 的问题,消元法的步骤都是一样的。当高斯消元法成功时,系数矩阵将一列接一列的从 A A A 变成 U U U。
列1. \,\, 利用第一个方程将第一个主元下的都变成 0.
列2. \,\, 利用新得到的第二个方程将第二个主元下的都变成 0.
列 3 到列 n. \,\, 重复上述步骤,找到 n n n 个主元和上三角矩阵 U U U.
列 2 之后有 [ x x x x 0 x x x 0 0 x x 0 0 x x ] ,最终目标 [ x x x x 0 x x x 0 0 x x 0 0 0 x ] ( 2.1.4 ) 列\,2\,之后有\kern 8pt\begin{bmatrix}x&x&x&x\\0&x&x&x\\0&0&x&x\\0&0&x&x\end{bmatrix},最终目标\kern 8pt\begin{bmatrix}x&x&x&x\\0&x&x&x\\0&0&x&x\\0&0&0&x\end{bmatrix}\kern 10pt(2.1.4) 列2之后有 x000xx00xxxxxxxx ,最终目标 x000xx00xxx0xxxx (2.1.4)前向消元法的结果是一个上三角形系统,如果 n n n 个主元均存在(非零数字),则矩阵是非奇异的。
五、主要内容总结
- 线性系统 A x = b A\boldsymbol x=\boldsymbol b Ax=b 成功消元后变成上三角形 U x = c U\boldsymbol x=\boldsymbol c Ux=c。
- 从方程 i i i 减去 l i j l_{ij} lij 乘方程 j j j 使得单元 ( i , j ) (i,j) (i,j) 为 0 0 0。
- 乘数 l i j = 行 i 要消去的单元 行 j 的主元 l_{ij}=\displaystyle\frac{行\,i\,要消去的单元}{行 \,j\,的主元} lij=行j的主元行i要消去的单元,主元不为 0 0 0。
- 当主元的位置为 0 0 0 时,如果下面有非零单元,交换行。
- 上三角 U x = c U\boldsymbol x=\boldsymbol c Ux=c 使用回代的方法求解。(从底到上)
- 当消元法完全失效时, A x = b A\boldsymbol x=\boldsymbol b Ax=b 无解或有无限多解。
六、例题
【例4】对矩阵 A A A 进行消元法,第一主元和第二主元是什么?第一步的乘数 l 21 l_{21} l21 是什么(行 2 减去 l 21 l_{21} l21 乘行 1)? A = [ 1 1 0 1 2 1 0 1 2 ] → [ 1 1 0 0 1 1 0 1 2 ] → [ 1 1 0 0 1 1 0 1 1 ] = U A=\begin{bmatrix}1&1&0\\1&2&1\\0&1&2\end{bmatrix}\rightarrow\begin{bmatrix}1&1&0\\0&1&1\\0&1&2\end{bmatrix}\rightarrow\begin{bmatrix}1&1&0\\0&1&1\\0&1&1\end{bmatrix}=U A= 110121012 → 100111012 → 100111011 =U矩阵 A A A 的 ( 2 , 2 ) (2,2) (2,2) 位置上数字变为多少会使得行 2 2 2 和行 3 3 3 必须交换?
为什么左下角的乘数 l 31 = 0 l_{31}=0 l31=0,需要行 3 3 3 减去 0 0 0 乘行 1 1 1?
如果将角落的单元 a 33 = 2 a_{33}=2 a33=2 改成 a 33 = 1 a_{33}=1 a33=1,为什么会使得消元法失败?
解: 第一主元是 1 1 1,第二主元也是 1 1 1,乘数 l 21 = 1 / 1 = 1 l_{21}=1/1=1 l21=1/1=1。
若将矩阵 A A A 的 ( 2 , 2 ) (2,2) (2,2) 位置的单元改成 1 1 1,那么就必须要交换行 2 2 2 和行 3 3 3。
因为 a 31 = 0 a_{31}=0 a31=0,所以 l 31 = 0 / 1 = 0 l_{31}=0/1=0 l31=0/1=0。某一行的开始是 0 0 0 则不需要消元。矩阵 A A A 是一个带状矩阵,中心带之外的都为 0 0 0。
如果原始角落的单元 a 33 a_{33} a33 改成 1 1 1,消元法就会产生 0 0 0。没有第三个主元,消元法失败。
【例5】假设 A A A 是一个三角形矩阵(上三角或下三角),主元会在什么位置?对于任意的 b \boldsymbol b b,什么情况下 A x = b A\boldsymbol x=\boldsymbol b Ax=b 有且仅有一个确切的解?
解: 矩阵的对角线就是主元的位置。
当这些主元全都不是 0 0 0 时,消元法执行成功可以。若 A A A 是上三角,使用回代;若 A A A 是下三角,使用前向代入。
【例6】使用消元法得到上三角形矩阵 U U U。通过回代求解,或者解释为什么无法执行?主元(不为 0 0 0)是什么?必要时可以交换方程的顺序。下面两个系统的唯一区别是最后一个方程的 − x -x −x。 成功 x + y + z = 7 x + y − z = 5 x − y + z = 3 失败 x + y + z = 7 x + y − z = 5 − x − y + z = 3 成功\kern 10pt\begin{matrix}x+y+z=7\\x+y-z=5\\x-y+z=3\end{matrix}\kern 15pt失败\kern 10pt\begin{matrix}x+y+z=7\\x+y-z=5\\-x-y+z=3\kern 6pt\end{matrix} 成功x+y+z=7x+y−z=5x−y+z=3失败x+y+z=7x+y−z=5−x−y+z=3解: 对于系统 1,方程 2 和方程 3 分别减去方程 1(乘数 l 21 = 1 , l 31 = 1 l_{21}=1,l_{31}=1 l21=1,l31=1),由于 ( 2 , 2 ) (2,2) (2,2) 的位置会变成 0,所以交换方程 2 和 3 的顺序: 成功 x + y + z = 7 0 y − 2 z = − 2 − 2 y + 0 z = − 4 交换行后 x + y + z = 7 − 2 y + 0 z = − 4 − 2 z = − 2 成功\kern 10pt\begin{matrix}x+y+z=7\\\kern 16pt0y-2z=-2\\\kern 10pt-2y+0z=-4\end{matrix}\kern 15pt交换行后\kern 10pt\begin{matrix}x+y+z=7\\\kern 9pt-2y+0z=-4\\\kern 33pt-2z=-2\end{matrix} 成功x+y+z=70y−2z=−2−2y+0z=−4交换行后x+y+z=7−2y+0z=−4−2z=−2回代后可得 z = 1 , y = 2 , x = 4 z=1,y=2,x=4 z=1,y=2,x=4。主元是 1 , − 2 , − 2 1,-2,-2 1,−2,−2。
对于系统 2,执行消元后: 失败 x + y + z = 7 0 y − 2 z = − 2 0 y + 2 z = 10 列 2 没有主元 ( 它就是列 1 ) 进一步消元得到 0 z = 8 三个平面 不相交 于一点 失败\kern 10pt\begin{matrix}x+y+z=7\\\kern16pt0y-2z=-2\\\kern 16pt0y+2z=10\end{matrix}\kern 15pt\begin{matrix}列\,2\,\pmb{没有主元}(它就是列\,1)\\进一步消元得到\,0z=8\kern 12pt\\三个平面\pmb{不相交}于一点\kern 11pt\end{matrix} 失败x+y+z=70y−2z=−20y+2z=10列2没有主元(它就是列1)进一步消元得到0z=8三个平面不相交于一点平面 1 与平面 2 相交于一条直线,平面 2 与 平面 3 平行,该方程组无解。
如果将第三个方程中的 3 3 3 改成 − 5 -5 −5,则消元法会得到 0 = 0 0=0 0=0,有无限多个解。三个平面相交于一条直线。此时第三个平面和第二个平面重合。