2.3高斯列主元消去法(可编辑修改word版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.3 高斯列主元消去法解线性方程组
一:问题的提出
我们都知道,高斯列主元素消去法是计算机上常用来求解线性方程组的一种直接的方法。就是在不考虑舍入误差的情况下,经过有限步的四则运算可以得到线性方程组的准确解的一类方法。实际运算的时候因为只能有限小数去计算,因此只能得到近似值。在实际运算的时候,我们很多时候也常用高斯消去法。但是高斯消去法在计算机中运算的时候常会碰到两个问题。
1.一旦遇到某个主元等于 0,消元过程便无法进行下去。
2.在长期使用中还发现,即使消元过程能进行下去,但是当某个主元的绝对值很小时,求解出的结果与真实结果相差甚远。
为了避免高斯消去法消元过程中出现的上述两个问题,一般采用所谓的选择主元法。其中又可以分为列选主元和全面选主元两种方法。目前计算机上常用的按列选主元的方法。因此我在这里做的也是列选主元高斯消去法。
二、算法的基本思想
大家知道,如果一个线性方程组的系数矩阵是上三角矩阵时,即这种方程组我们称之为上三角方程组,它是很容易求解的。我们只要把方程组的最下面的一个方程求解出来,在把求得的解带入倒数第二个方程,求出第二个解,依次往上回代求解。然而,现实中大多数线性方程组都不是上面所说的上三角方程组,所以我们有可以把不是上三角的方程通过一定的算法化成上三角方程组,由此我们
可以很方便地求出方程组的解。高斯消元法的目的就是把一般线性方程组简化成上三角方程组。于是高斯消元法的基本思想是:通过逐次消元将所给的线性方程组化为上三角形方程组,继而通过回代过程求解线性方程组。
三、算法的描述
1、设有 n 元线性方程组如下:
⎛a
11 a1n ⎫⎛x
1⎫
⎛b1 ⎫
⎪
⎪ ⎪ ⎪ ⎪= ⎪
n1 ⎪ ⎪ ⎪ nn n n
a a x b
⎝⎭⎝⎭ ⎝⎭
x 1
x 2 . x n-1 x n
a a . . a a a . . . a a a . . . a a a . . . a I I i1 1 ij ij i1 1j 22
i2 22
22 2n a a . . . a k a x ) / a 2、
第一步:如果 a 11!=0, 令
l i1= ai1/a11, I= 2,3,……,n
用(-li1)乘第一个方程加到第 i 个方程上,得同解方程组:
(1) (1) (1) 11 12 1n (1) (1) (1) 21 22 2n
. . . . . .
(1) (1) (1) n-11 n-12
n-1n
(1) (1) (1) n1 n2 nn
(1) 1 (1) 2 = . n-1 (1)
n
简记为:
A (2) x = b (2)
其中
a (2) = a (1) – l * a (1)
, I ,j =
2,3,..,n b (2) = b (1) – l * b (1)
,
I = 2,3,...,n 第二步:如果 a (2) != 0,令 l i2= a (2) /a (2)
, I= 3,……,n 依据同样的原理,对矩阵进行化间(省略),依次下去,直到完成!
最后,得到上三角方程组:
(1) (1) (1) 11 12 1n
0 a (1)
. . . a (1) . . . . . .
=
(n-1)
n-1n
(n) nn
简记为:
A (n) x = b (n)
最后从方程组的最后一个方程进行回代求解为:
X n = b (n) / a (n) X i = ( b (k) - ∑ (k)
(k) kj j kk
以上为高斯消去法的基本过程。但是如前面我们所提到的,存在的问题。
1. 一旦遇到某个主元等于 0,消元过程便无法进行下去。
2. 在长期使用中还发现,即使消元过程能进行下去,但是当某个主元的绝对值
很小时,求解出的结果与真实结果相差甚远。为了避免高斯消去法消元过程中出
x 1
x 2 . x x n
b (1)
1 b (1)
2 .
b (n-1) n-1 b (n)
n b b b b a a nn
0 0 . . 0
0 . . .
现的上述两个问题,一般采用所谓的选择主元法。其中又可以分为列选主元和全面选主元两种方法。目前计算机上常用的按列选主元的方法。因此我在这里做的也是列选主元高斯消去法。他的特点是:每次在系数矩阵中依次按列在主对角线及以下的元素中,选取绝对值最大的元素作为主元,将她调到主对角线上,然后用它消去主对角线以下的元素,最后化为同解的上三角形方程组去求解。由于列主元法相对高斯消元法来说就增加了选主元操作,其他的求解步骤是一样的。
四、程序流程图
)Array
五、程序描述
程序的名称为:zealous.cpp
1. 程序的结构如下:
线性方程组系数矩阵的输入函数
高
斯
用户查看矩阵系数的函数
列
主高斯主元素消去法的实现元
消
去回代求出结果的函数
法找主元素并换行的函数
主元素消去法后续个行中此列的元素使之为0的函数
回代过程
回代求解,并输出结果的函数
程序只能最大输入 60 行60 列的系数矩阵。
2.程序要用到的函数
结果输出
(1、)matrix_getElement(array,n,m);此函数的作用是获得用户输入的线性方程组的系数矩阵。
(2、)matrix_outputElement(array,n,m);此函数的作用是显示用户输入的矩阵。
(3、)selectMaxElement(array,n,m,row );此函数的作用是选择主元素,并把此时对角线上的那列元素与主元素行交换。
(4、)GAUSSProcess(array, n, m, row);此函数的作用是用主元素列进行高斯消元,把此行以后所有的行的,此列的元素变为 0。
(5、)GAUSSProcess_result(array, n,m);此函数的作用是显示经过高斯消元后的矩阵,此时的系数矩阵为一个上下三角矩阵。
(6、)GAUSSCalculate_result(array, n, m);此函数的作用是对已经消元好的矩阵,进行回代求解。并将结果输出。
六、程序代码
//------------------------- ***************高斯列消去法*****
#include
#include
#include