posts - 74,  comments - 33,  trackbacks - 0

高斯消元是求解线性方程组的重要方法,在中有广泛的应用。本文就来讨论这个方法。

什么是线性方程组?含m个方程和n个未知量的方程组定义为
a(11)x(1)+a(12)x(2)+…+a(1n)x(n)=b(1)
a(21)x(1)+a(22)x(2)+…+a(2n)x(n)=b(2)

a(m1)x(1)+a(m2)x(2)+…+a(mn)x(n)=b(m)
这个方程组称为m*n线性方程组,其中a(ij)和b(i)为实数,括号中为下标。这个方程组有多种表示方法。例如,我们知道m*n矩阵(用大写字母表示)是一个m行n列的数阵,n维向量(用加粗的小写字母表示)是n个数的数组,也就是一个n*1矩阵(列向量。我们不考虑行向量)。另外,大家也都知道矩阵乘法。因此一个m*n线性方程组可以表示为
Ax=b,其中A是由系数aij组成的m*n矩阵即系数矩阵,x是n维的未知数向量,b是m维的结果向量。如果把向量b写到A的右边得到m*(n+1)的矩阵,得到的新矩阵称为这个方程组的增广矩阵。每一个方程组均对应于一个增广矩阵。

下面介绍一下矩阵的初等行变换:
1 交换两行
2 用非零实数乘以任一行
3 把某一行的倍数加到另一行上
同理可以定义初等列变换。初等行变换和初等列变换统称初等变换。
定理:对于一个方程组对应的增广矩阵进行有限次初等行变换,所得矩阵对应的方程组与原方程组等价。即它们是等价方程组。

高斯消元的过程,就是利用初等行变换将原来不容易求解的方程组转化为容易求解的方程组。

下面我们以求解n*n线性方程组为例。因为如果m<>n,这个m*n方程组一般不会有唯一的解。

定义:上三角矩阵是一个n*n的矩阵,其中对于任意i>j的项a(ij)=0。若i=j时a(ij)<>0则称为严格上三角矩阵。下面就是一个严格上三角矩阵。
1 2 1
0 1 1
0 0 1
我们发现,如果将系数矩阵化为上三角矩阵,就可以轻而易举地求解。

可以证明,n*n方程组有唯一解等价于它的增广矩阵可以化为严格上三角矩阵。

消元过程如下:
对于增广矩阵A
1 for i:=1 to n-1 do
2 选择第i至第n行中第i个元素绝对值最大的行,与第3行交换//选择主元,由于涉及实数除法运算,选取大绝对值可以减小误差
3 for j:=i+1 to n do
4 使用第3种行变换使a(j,i)=0
根据得到的矩阵,可以回代求出每个未知数x(i)

这只是对于有唯一解的情况。那么,其他情况呢?

我们定义在消元过程中保留的那行称为主行,主行第一个非零元素称为主元。消元的任务就是使主元非0,使主元下方元素变为0。当消元过程中无法选择非0主元,则此方程组无解或无穷解。此时,我们选择右边一列操作。即,若第i行为主行,在第j列无法选择主元,就对第i+1列操作。这样,最后的结果不再是上三角形,而是行阶梯形:每一次在竖直方向下降1,在水平方向扩展可能大于1。在增广矩阵中能够选择主元的列对应的变量称为首变量,跳过的列对应的变量称为自由变量。

定义:行阶梯形矩阵是一个满足(1)每一个非零行的第一个非零元为1;(2)若第i行为非零行,则第i+1行行首的0多于第i行;(3)非零行在全零行之前
如这就是一个行阶梯形矩阵:
1 2 3 4
0 0 1 3
0 0 0 1
当然,对于竞赛解方程没必要把首元素化为1。

定理:m*n线性方程组有解当且仅当其行阶梯形矩阵不含这样一行:[0 0 ... 0 1]
亦即,对于n*n线性方程组,若没有唯一解,我们就将其化为行阶梯形,若最后某行形如[0 0 ... 0 a] (a<>0) 则无解,否则有无穷多的解。

上面我们主要讨论了n*n方程组。下面讨论m<>n的方程组:

1 若m>n 则这个方程组称为超定方程组。超定方程组对应的矩阵行数增加,因此通常无解(但若其行阶梯形矩阵上方为严格上三角,下方全为[0 0 ... 0],则有唯一解;若下方全为[0 0 ... 0]而上方是阶梯形,则有无穷解)

2 若m<n 则这个方程组称为亚定方程组。这个方程组一定没有唯一解,如果最后有[0 0 ... 0 a](a<>0)则无解,否则有无穷解。

由此可见,对于任意m*n线性方程组,求解均将其转化为行阶梯形矩阵。这就是我们所讨论的:

定义 利用矩阵行初等变换,将线性方程组的增广矩阵化为行阶梯形的过程称为高斯消元法(Gaussian elimination)

而求解线性方程组的步骤:
1 将其增广矩阵化为行阶梯形
2 若最后有形如[0 0 ... 0 a] (a<>0)的行则无解 否则
3 若含有自由变量则有无穷组解 否则
4 原方程有唯一解。采用回代求解。

至于有无穷组解的方程组的求解,需将其化为行最简形矩阵,其方法称为高斯-若尔当消元法。这里就不讨论了。如果只需求出任意一组可行解,则只要给自由变量任意赋值即可。

posted on 2009-05-11 19:16 KNIGHT 阅读(1093) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(8)

随笔档案

文章档案

Friends

OJ

搜索

  •  

最新评论

阅读排行榜

评论排行榜