资源描述:
《选列主元的高斯消去法实验报告2.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、选列主元的高斯消去法实验报告令狐烈一,实验目的:(1)掌握gauss消去法的基本算法思想和学会编写其MATLAB代码。(2)掌握选列主元的gauss消去法的基本算法思想和学会编写其MATLAB代码。(3)分析选列主元的gauss消去法相比于gauss消去法的优点。(4)对选列主元的gauss消去法和gauss消去法进行误差分析二,实验原理对于非奇异矩阵A,求解线性方程组Ax=b可以使用gauss消去法进行。但是,gauss消去法要求系数矩阵A的顺序主子式非奇异。为此做出改进:每次消元之前,首先选出第i列(i<=k)中最大的作为列
2、主元,这样,就能保证消元乘数不仅不被系数矩阵A的顺序主子式非奇异的限制,还这样就能有效的防止误差的传播与放大。算法:(1)对增广矩阵[ab]进行第i次消元,首先选取列主元a(i,k)=Max
3、a(I,i:n),交换第i行与第k行;(2)以列主元进行消元,计算公式为a(k,i)=a(k,i)/a(i,i);(k=i+1:n)a(k,j)=a(k,j)-a(k,i)*a(i,j);(j=i:n)(3)回代法计算结果,计算公式为:x(n)=b(n)/a(n,n);x(p)=[b(p)-∑a(p,j)x(j)]/a(p,p)(j=p+1
4、:n)注:gauss(a,b)为选取列主元gauss消去法,gauss2(a,b)为gauss消去法。三,实验MATLAB程序代码实验的MATLAB程序代码如下一,实验结果与分析1,两种算法对系数矩阵的顺序主子式奇异线性方程的效果分析实验结果(如图一)对于顺序主子式奇异的系数矩阵,使用gauss消去法(gauss2(a,b))不能解出,而使用选列主元的gauss消去法(gauss(a,b))能够解出。主要是选列主元的gauss消去法每次都选出最大的列主元,从而保证了每次用作除数的a(I,i)≠0.图一:两种算法对系数矩阵的顺序主
5、子式奇异线性方程的效果2,两种算法对舍入误差的放大效应分析用随机生成函数random('Normal',1,7,10,10)生成10*10矩阵,分别gauss消去法和选列主元的高斯消去法解出,并用公式erx=
6、
7、x-x*
8、
9、
10、x
11、≤conda*
12、r
13、
14、b
15、估计其误差,结果如下图。图二:两种算法对舍入误差的放大效应分析可以看到,对同一个方程组,选列主元的高斯消去法得到的结果中范数norm(r=a*ans'-b,inf)=6.6613e-016<高斯消去法得到的结果中范数norm(r=a*ans'-b,inf)=7.6605e-01
16、5,两者相差一个数量级,由公式erx=
17、
18、x-x*
19、
20、
21、x
22、≤conda*
23、r
24、
25、b
26、可知,对应的误差也就相差一个数量级。选列主元的高斯消去法因为每次消元之前,首先选出第i列(i<=k)中最大的作为列主元,这样,就能保证消元乘数小于1,因此选列主元的高斯消去法能有效的防止误差的传播与放大。3,对于恶性矩阵:希尔伯特矩阵,选列主元的高斯消去法的表现:由以下代码生成希尔伯特矩阵:fori=1:nforj=1:na(i,j)=1/(i+j-1);endend取方程组Hx=ones(n,1);当n=5,结果为:norm(a*ans'-b
27、,inf)=8.7311e-011;erx=
28、
29、x-x*
30、
31、
32、x
33、≤conda*
34、r
35、
36、b
37、=(4.7661e+005*1.4211e-014)/2.2361=3.0290*-09;可见误差比较小;结果还可以接受。当n=10,结果为:norm(a*ans'-b,inf)=8.7311e-011;erx=
38、
39、x-x*
40、
41、
42、x
43、≤conda*
44、r
45、
46、b
47、=(1.6025e+013*8.7311e-011)/3.1623=4.4720*+02;此时,误差已经大到无法接受。对于这样的情况,需要用以下方法改进:(1)算出残余矩阵r=b-a
48、*x;(2)解出a*y=r;(3)X’=x+y;但是这种改进只对病态不是很严重的矩阵有帮助,对病态严重的矩阵,比如对于H10,我们有:改进后,解得:x=(x+y)=1.0e+006*[-0.00000.0010-0.02380.2402-1.26113.7834-6.72607.0006-3.93790.9237],对应误差为erx=
49、
50、x-x*
51、
52、
53、x
54、≤conda*
55、r
56、
57、b
58、=(1.6025e+013*8.0036e-011)/3.1623=4.0558*+02,可见改进并无很好效果。一,实验心得(1)通过具体的实验,我真
59、正明白了gauss消去法的原理,而且明白了选列主元的gauss消去法对于减小系数矩阵的要求和减少舍入误差的传播方面的优点。(2)由于MATLAB我是才开始接触,因此在编程的时候碰到了许多问题,花了不少时间,但是也让我对MATLAB的使用有了进一步的了解。