资源描述:
《Gauss消去法实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Gauss消去法实验报告学院:教师教育学院 专业:数学与应用数学(师范)实验名称使用matlab编写gauss消去法程序指导教师孙老师姓名郑碧玉年级2011学号22110631成绩实验一、gauss消去法解线性方程组一、实验目的: 1、学习使用matlab编写数值计算程序。 2、了解gauss消去法的基本原理和解法思路及相应的编程方法。 3、根据gauss消去法的原理编写matlab程序,并运行出相应的结果,提高matlab编程能力。二、实验原理:消元过程:设,令乘数,做(消去第i个方程组的)
2、操作×第1个方程+第i个方程(i=2,3,.....n)则第i个方程变为这样消去第2,3,。。。,n个方程的变元后。原线性方程组变为:这样就完成了第1步消元。回代过程:在最后的一方程中解出,得:再将的值代入倒数第二个方程,解出,依次往上反推,即可求出方程组的解:其通项为三、实验内容与步骤: 1、实验内容:依照实验原理编写gauss消去法的程序。 2、实验步骤:首先,在电脑上安装matlab,然后,启动matlab,新建一个M文件。程序代码程序代码说明functionx=gauss(A,b)n=le
3、ngth(A);a=[A,b];fork=1:n-1fori=k+1:na(i,k)=a(i,k)/a(k,k);forj=k+1:na(i,j)=a(i,j)-a(i,k)*a(k,j);endb(i)=b(i)-a(i,k)*b(k);endend%调用M文件gauss.m%形成增广矩阵%计算乘子% 对k+1~n项进行消元x=zeros(n,1);x(n)=b(n)/a(n,n);fork=n-1:-1:1s=b(k);forj=k+1:ns=s-a(k,j)*x(j);endx(k)=s/a(k
4、,k);endx%增广矩阵第i行减去第k行的乘子倍目的是将该矩阵中的第k列中a(k,k)以下的元素全部消为零%回代求解%此循环用来求a(j,k)*x(j)由k+1~n项的和%输出最终的解X四、实验数据及结果:1、实验送的初值为:A=[0.729,0.810,0.900;1.000,1.000,1.000;1.331,1.210,1.100]b=[0.6867;0.8338;1.0000]2、实验结果为: X=0.22450.28140.3279五、实验分析:1.在本次实验中要先新建M文件并存储,以便
5、实验中多次调试,减少每次输入的麻烦2.在本次实验中,很容易把矩阵中各元素的下标写错,因为编程技术还不够熟练,所以在使用数学指令上还不够全面,这在以后的实验中是应该加强训练的。3.通过本次实验也增强了我对matlab这个软件的了解,尤其是循环语句的使用。4.输入矩阵时的分行符号是英文分号而不是中文分号,否则会出现运行错误。 实验二、列主元法解线性方程组一、实验目的:1、学习使用matlab编写数值计算程序。 2、了解列主元消去法的基本原理和解法思路及相应的编程方法。 3、根据列主元法的原理编写mat
6、lab程序,并运行出相应的结果,提高matlab编程能力。二、实验原理:由一般线性方程组在使用Gauss消去法求解时,从求解过程中可以清楚地看到,若,必须施以行交换的手续,才能使消去过程继续下去。有时既使,但其绝对值很小,由于舍入误差的影响,消去过程也会出现不稳定现象。因此,为使这种不稳定现象发生的可能性减至最小,在施行消去过程时每一步都要选主元素,即要寻找行,使并将第行与第行交换,以使的当前值(即的数值)远大于0。这种列主元消去法的主要步骤如下:1.消元过程对,做1º选主元,记若,说明方程组系数矩阵
7、奇异,则停止计算,否则进行2º。2º交换(增广矩阵)的两行元素3º计算2.回代过程对,计算三、实验内容与步骤: 1、实验内容:依照实验原理编写列主元消去法的程序。 2、实验步骤:首先,在电脑上安装matlab,然后,启动matlab,新建一个M文件。程序代码程序代码说明functionx=gauss(A,b)n=length(A);a=[A,b];fork=1:n-1maxa=max(abs(a(k:n,k)));ifmaxa==0return;endfori=k:nifabs(a(i,k))==
8、maxa%调用M文件gauss.m%形成增广矩阵%选出每列中绝对值最大的数y=a(i,k:n+1);a(i,k:n+1)=a(k,k:n+1);a(k,k:n+1)=y;break;endendfori=k+1:nl(i,k)=a(i,k)/a(k,k);a(i,k+1:n+1)=a(i,k+1:n+1)-l(i,k).*a(k,k+1:n+1);endend%回代ifa(n,n)==0returnendx(n)=a(n,n+1)/a(n,n);fori