随笔 - 55  文章 - 0  评论 - 14 

1. 高斯消元法

高斯消元法(Gaussian elimination是求解线性方阵组的一种算法,它也可用来求矩阵的秩,以及求可逆方阵逆矩阵。它通过逐步消除未知数来将原始线性系统转化为另一个更简单的等价的系统。它的实质是通过初等行变化(Elementary row operations),将线性方程组的增广矩阵转化为行阶梯矩阵(row echelon form)。总结起来,如下步骤所示

 

以下面方程组为例,它的执行步骤为

                          image

1)构造增广矩阵,即系数矩阵A增加上常数向量b(A|b)

                          image

2)通过以交换行、某行乘以非负常数和两行相加这三种初等变化将原系统转化为更简单的三角形式(triangular form)

     注:这里的初等变化可以通过系数矩阵A乘上初等矩阵E来实现

                         image

3)从而得到简化的三角方阵组,注意它更容易解

                         image

4)这时可以使用向后替换算法(Algorithm for Back Substitution)求解得

    z=-4/-4=1,  y=4-2z=4-2=2,  x= (1-y-z)/2=(1-2-1)/2=-1

 

总结上面过程,高斯消元法其实就是下面非常简单的过程

                            原线性方程组       ——>       高斯消元法     ——> 下三角或上三角形式的线性方程组           ——>  前向替换算法求解(对于上三角形式,采用后向替换算法)

image         
\begin{matrix}
l_{1,1} x_1 &   &             &            &             & = &    b_1 \\
l_{2,1} x_1 & + & l_{2,2} x_2 &            &             & = &    b_2 \\
     \vdots &   &      \vdots &     \ddots &             &   & \vdots \\
l_{m,1} x_1 & + & l_{m,2} x_2 & + \dotsb + & l_{m,m} x_m & = &   b_m  \\
\end{matrix}
                 image        

 

2.高斯-若尔当消元法(Gauss-Jordan Elimination

相对于高斯消元法,高斯-若尔当消元法最后的得到线性方程组更容易求解,它得到的是简化行列式。其转化后的增高矩阵形式如下,因此它可以直接求出方程的解,而无需使用替换算法。但是,此算法的效率较低。

                             image

 

例子如下:

image          解为image

 

3.实际应用中的高斯消元法

前面介绍了最基本的高斯消元法,现在看看应用于实际问题的实用算法。

3.1 误差

因为实际应用中,我们总是利用计算机来分析线性系统,而计算机中以有限的数来近似无限的实数,因此产生舍入误差(roundoff error),进而对解线性系统产生很多影响。

 

一个t位(即精度为t)以image为基的浮点数的表达形式为:imageimage。对于一个实数x,其浮点近似值image为最接近x的浮点数,必要时进行近似image

例1:对2位以10为基的浮点算法,image

例2:同样考虑imageimage

 

以下面系统为例,看看在高斯消元中采用浮点算法会产生什么效果。

                                                                           image

当以精确解法时,通过将第一行乘以m=89/47,并从第二行中减去得到image,进而利用后向替换算法得x=1,y=-1。

当以3位以10为基的浮点算法时,乘子变为image,因为image,因此第一步高斯消元后得

image。此时,因为不能将第2行第1列位置变为0,所以不能将其三角化。从而,我们只能接受将这个位置值赋为0,而不管其实际浮点值。因此,3位浮点高斯消元的结果为image,后向算法计算结果为image

3.2 部分主元消元(Partial Pivoting)

尽管无法消除近似误差的影响,可以采用一些技术来尽量减小这类机器误差。部分主元消元法在高斯消元的每一步,都选择列上最大值为轴(通过行变换将其移动)。

3.

posted on 2011-07-31 21:21 Tony Ma 阅读(...) 评论(...) 编辑 收藏