Gauss消元法解解线性方程组
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要
本文叙述了Gauss 顺序消元法解线性方程的算法思想以及其求解过程,同时简要叙述了Gauss 主元素消元法以及Gauss 全主元消元法。紧接着给出了
Gauss Seidel -迭代法的算法思想,本文给出了这三个消元方法以及一个迭代法的算法流程图,由于全主元消元法是前两个算法的基础上改进而来,故本文采用第三种方法进行编程计算,前两种方法不再重复编程,然后给出一个实例的计算结果,运行时间,在文章最后分析该实例的计算结果,针对同一实例,又采用
Gauss Seidel -方法编程实现,然后对结果进行分析和对比。最后给出了本人在编程时遇到的一些问题和解决办法。
关键词:Gauss 顺序消元法 Gauss 主元素消元法 Gauss 全主元消元法
一、算法的简要描述
1.1Gauss 顺序消元法
Gauss 消元法在中学里已经学习过,其方法实质,就是运用初等变换,将线性方程组Ax b =转化为同解的上三角矩阵方程组
1Ux L b -=
(1.1.1)
其中,U 为上三角矩阵,L 为下三角矩阵。然后对式(1.1.1)进行回代求解,即得方程组的解。手算的过程是非常清楚的,现在需回答的是计算机求解,如何实现上述计算过程。
设线性方程组为
1111221331121122223322
112233n n n n n n n nn n n
a x a x a x a x
b a x a x a x a x b a x a x a x a x b +++⋅⋅⋅+=⎧⎪+++⋅⋅⋅+=⎪⎨
⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⎪
⎪+++⋅⋅⋅+=⎩ 写成矩阵形式为
1112111212222221222m m m n n a a a x b a
a a x
b a a a x b ⎡⎤⎡⎤⎡⎤
⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢
⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦
(1.1.2)
设线性方程组如上式所示,记(1)A A =,(1)b b =,与是增广矩阵具有形式
(1)
(1)[][]A b A b =,此时方程组为(1)(1)A x b =。
第一次消元。设(1)
110a ≠,为将第二个方程至第n 个方程的1x 系数(1)1i a 消成零,
构造乘数
(1)1
1(1)11
i i a l a = (2,3,,)i n =
用1i l -乘以矩阵(1)[A
b ](1)
的第一行加到第i 行上(2,3,,)i n =得
(1)(1)
(1)(1)(1)11121311(2)(2)(2)(2)(2)222322
(2)(2)
(2)(2)23
[A
b ]0
n n
n n nn
n a a a a b a a a b a a a b ⎡⎤
⎢⎥⎢
⎥=⎢⎥⎢⎥⎢⎥⎣⎦
(2)
其中,
(2)(1)
(1)11(2)(1)(1)11
a a (,2,3,,)
(,2,3,,)
ij ij i j i i i l a i j n b b l b i j n ⎧=-=⎨=-=⎩
假设经过1k -次消元得同解方程组()()k k A x b =,此时
(1)(1)
(1)(1)(1)11121311(2)(2)(2)(2)k ()22
23
22
()()()()()n
k n
k k kn k k k k nk
nn
n a a a a b a a a b A b a b a a b ⎡⎤⎢⎥⎢⎥⎡⎤=⎣
⎦⎢
⎥⎢⎥⎢⎥⎣
⎦
() (1.1.3) 假若()
0k kk
a ≠,则第k 次消元如下:构造乘数 ()
()
(1,,)k ik
ik k kk
a l i k n a ==+
用ik l -乘以矩阵()
()k k A b ⎡⎤⎣
⎦第k 行加到第i 行上(1,
,)i k n =+得同解方程
组(1)(1)k k A x b ++=,其中,(1)(1)[]k k A b ++中的元素计算公式为
(1)()()(1)
()()a a (,2,3,,)
(,2,3,,)
k k k ij ij ik kj k k k i
i ik k l a i j n b b l b i j n ++⎧=-=⎨=-=⎩
如此进行1n -次消元,即1,2,,1k n =-,最后得同解方程组
()()n n A x b =
其中,
(1)
(1)
(1)(1)(1)11121311(2)(2)(2)(2)()()k ()22
23
22
()()n
n n k n
n n nn
n a a a a b a a a b A x b A b a b ⎡⎤⎢⎥⎢⎥⎡⎤==⎣
⎦⎢⎥⎢⎥⎢⎥⎣
⎦
()
假若()
0n nn
a ≠,对式(3.1.3)进行回代计算得方程组的解
()
()()()1/()/(1,2,1)
n n n nn n i i i i i ij j ii
j i x b a x b a x a i n =+⎧=⎪⎨=-=-⎪⎩
∑
上述全过程称为Gauss 顺序消元法。
1.2Gauss 主元素消元法
Gauss 顺序消元法每一步总有一个要求()
0k kk
a ≠,否则算法就失败。然而从方程组的理论,只要det()0A ≠,则方程组解存在且唯一。由此可知,Gauss 顺序
消元法可执行条件苛刻。不仅如此,从数值计算角度,当()0k kk a ≠,但()
k kk a 很小时。用()
k kk a 做分母运算,会引起误差界的放大,数值不稳定现象产生,严重时导
致解失真。为克服这一缺点,常采用选主元的消元法。
Gauss 列主元消元法主要依据线性方程组任意交换两个方程的次序,方程组的同解性不变,且解的分量次序也不变。于是,第k 步在顺序消元法进行之前,
从()k A 的第k 列元素()k kk a ,()
1k k k a +,
,()
k nk a 中选取绝对值最大者,并记录所在行,
即
()()
max k k k i k ik
k i n
a a ≤≤=,记k l i = 如果l k ≠,则交换矩阵()
()k k A b ⎡⎤⎣⎦的第k 行与第l 行所有对应的元素,然后,再
进行第k 步顺序消元法。
1.3Gauss 全主元消元法
Gauss 全主元消元法是在Gauss 列主元消元法的基础上进一步改进,目的是更好的提高数值稳定性和解的精度。对那些矩阵性态不太理想的方程组能给出最大可能性的满意解。
全主元算法的第k 步是从()
(,1,
,)k ij a i k k n =+中选取绝对值最大者作为主元,
并记录主元所在列与所在行,即
()()
,max k k k k i j ij k i j n
a a ≤≤=,记,k k l i t j ==
如果l k ≠,则交换矩阵()
()k k A b ⎡⎤⎣⎦的第k 行与第l 行所有对应的元素;
如果t k ≠,则交换矩阵()()k k A b ⎡⎤⎣
⎦的第k 行与第t 列所有对应的元素。值得注意的是,进行
行元素的交换,解的分量次序不变,但是进行列元素交换时,解的分量次序将有所改变。
1.4 Gauss Seidel -迭代法
将方程组Ax b =改写成等价方程组