列主元消去法解方程组实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称: 列主元消去法解方程组 1 引言
我们知道,高斯消去法是一个古老的解线性方程组的方法。而在用高斯消去法解Ax=b
时,其中设A 为非奇异矩阵,可能出现()
0k kk a =的情况,这时必须进行带行交换的高斯消去法。但在实际计算中即使()0k kk a ≠但其绝对值很小时,用()k kk
a 作除数,会导致中间结果矩阵()k A 元素数量级严重增长和舍入误差的扩散,使得最后的结果不可靠。因此,小主元可能导致计算的失败,我们应该避免采用绝对值很小的主元素。为此,我们在高斯消去法的每一步应该在系数矩阵或消元后的低阶矩阵中选取绝对值最大的元素作为主元素,保持乘数1ik m ≤,以便减少计算过程中舍入误差对计算解的影响。
一种方式是完全主元消去法,这种消去法是在每次选主元时,选择()()
max 0k k
k k i j ij k i n
k j n
a a ≤≤≤≤=≠为主元素。这种方法是解低阶稠密矩阵方程组的有效方法,但这种方法在选取主元时要花费一定的计算机时间。实际计算中我们常采用部分选主元的的消去法。列主元消去法即在每次选主元时,仅依次按列选取绝对值最大的元素作为主元素,且仅交换两行,再进行消元计算。
2 实验目的和要求
运用matlab 编写一个.m 文件,要求用列主元消去法求解方程组(实现PA=LU ):
12345671
111111721111118321111110432111113543211117654321122765432128x x x x x x x ⎡⎤
⎡⎤⎡⎤⎢⎥
⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥
⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥⎣
⎦⎣⎦⎢⎥⎣⎦
要求输出以下内容:
(1) 计算解x ; (2) L,U ;
(3) 整形数组IP (i )(i=1,2,…,n-1)(记录主行信息)
3 算法原理与流程图
(1) 算法原理
设有线性方程组A x =b ,其中设A 为非奇异矩阵。方程组的增广矩阵为
1112112122
221
12[,]⎡⎤
⎢⎥⎢⎥⎢
⎥=⎢
⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦
n n
n n l nn
n a a a b a a a b a a a A a b b 第1步(k=1):首先在A 的第一列中选取绝对值最大的元素1i a ,作为第一步的主元素:
1,111max 0≤≤=≠i i i n
a a ,然后交换(A ,
b )的第1行与第i1行元素,再进行消元计算。
设列主元素消去法已经完成第1步到第k-1步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组()()=k k A x b
(1)
(1)
(1)(1)(1)1112111(2)(2)(2)(2)22
222()()()
()()
()()1,1()1,()()()
[,][,] +++⎡⎤
⎢⎥⎢⎥
⎢⎥⎢⎥→=⎢
⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥⎣
⎦k k k
k
n
k
n k k k k k kk k k n k k k k n k k k n nn nk
a a a a
b a a a b a a b a a b a a b A b A b
第k 步计算如下:
对于k=1,2,…,n-1
(1)按列选主元:即确定ik 使
,max 0≤≤=≠ik k ik k i n
a a
(2)如果,0=ik k a ,则A 为非奇异矩阵,停止计算。 (3)如果ik ≠k ,则交换[A ,b]第ik 行与第k 行元素。 (4)消元计算
,(1,,)
←=
=+ik
ik ik kk
a a m i k n a
, (,1,,), (1,,)←-=+⎧⎨
←-=+⎩ij ij ik kj i i ik k a a m a i j k n b b m b i k n 消元乘数ik m 满足: 1,(1,,)=≤=+ik
ik kk
a m i k n a
(5)回代求解
1/(0)()/,1,
,2,1
n 当=+←≠⎧
⎪⎨
←-=-⎪⎩
∑n n nn nn i i ij j ii j i b b a a b b a b a i n
计算解1(,,)n x x 在常数项b(n)内得到。
(2) 流程图见图1 (3)
4 程序代码及注释
附图1
,
,)
det
n ik i k+1,,),a /*k+1,
,),b ik kk ij ik n a a m a n ←-det kk a ←1,2,
n
5算例分析
6讨论与结论
初次编程时,没有考虑到给一个变量赋初值的情况。虽然在MATLAB中变量不赋初值是完全允许的,但是由于一个变量中含有多个元素时,每次改变该数组的长度,便会增加计算机时间。另外,给程序加上一定的判断条件及报错信息,一定程度上有程序优化的作用。
参考文献
[1] 易大义,沈云宝,李有法. 计算方法(第2版),浙江大学出版社. p.29-53.
[2] 张琨高思超毕靖编著MA TLAB2010从入门到精通电子工业出版社