1 / 29
文档名称:

山建大数值分析实验报告.doc

格式:doc   大小:209KB   页数:29页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

山建大数值分析实验报告.doc

上传人:文档大全 2019/11/18 文件大小:209 KB

下载得到文件列表

山建大数值分析实验报告.doc

文档介绍

文档介绍:山东建筑大学《数值计算A》实验报告  二级学院:理学院 专业:信息与计算科学 指导教师:XXX 班级学号:信计XX 姓名:XXXX    实验一高斯消去法(1)题目:用选主元素法和高斯消去法求解下列方程组:已知方程增广矩阵:a=2-1006-1-3-201-13-20000-351(2)原理:(1)高斯消去法:相对于约当消去法而言,总的来说就是将增广矩阵化为下三角阵。(2)顺序选主元素法:相对于高斯消去法的唯一不同是要先按当前要排列元素所在列大小进行排列。(3)设计思想:(1)高斯消去法:首先让每一行的元素除以该行的主对角线元素。然后利用此行使位于下一行主对角线以前的元素变为0,依次类推。(2)选主元素法:在高斯消去法的基础上,每次进行化上三角阵之前,重新排列各方程的位置。(4)对应程序:(a)高斯消去法functiony=gauss1(a,b)%高斯顺序消去法[m,n]=size(a);ifm~=ndisp('输入错误,系数矩证阵只能是方阵')endifn~=length(b)disp('输入错误,常数项的个数应与方程的个数相同')endfork=1:n-1fori=k+1:na(i,k)=a(i,k)/a(k,k);b(i)=b(i)-a(i,k)*b(k);forj=k+1:nifa(k,k)==0disp('主元素为零,消去法无法继续');break;elsea(i,j)=a(i,j)-a(i,k)*a(k,j);endendendendb(n)=b(n)/a(n,n);fori=(n-1):-1:1w=0;forj=(i+1):nw=w+a(i,j)*b(j);endb(i)=(b(i)-w)/a(i,i);endy=b;(b)高斯列主元消去法 functionz=gauss2(a,b,ep)%高斯列主元素消元法ifnargin==2ep=[m,n]=size(a);ifm~=ndisp('输入错误,系数矩证阵只能是方阵')endifn~=length(b)disp('输入错误,常数项的个数应与方程的个数相同')endfork=1:n-1p=a(k,k);I=k;fori=k:nifabs(a(i,k))>abs(p)p=a(i,k);I=i;endendifp<=epz=0;endifI~=kforj=k:nw=a(k,j);a(k,j)=a(I,j);a(I,j)=w;endu=b(k);b(k)=b(I);b(I)=u;endfori=k+1:na(i,k)=a(i,k)/a(k,k);b(i)=b(i)-a(i,k)*b(k);forj=k+1:na(i,j)=a(i,j)-a(i,k)*a(k,j);endendendb(n)=b(n)/a(n,n);fori=(n-1):-1:1w=0;forj=(i+1):nw=w+a(i,j)*b(j);endb(i)=(b(i)-w)/a(i,i);end%disp('方程组的解为');z=b;(5)实验结果:>>a=2-100-1-3-20-13-2000-35>>b=6101>>gauss1(a,b)方程组的解为ans=35/12-1/6-41/24-33/40(6)实验体会:主元消去法和高斯消去法的确是两个非常锻炼人编程的方法,在编写程序时,需要使用的大量的循环和分支结构,但无论是高斯消去法还是高斯列主元法,它们的原理还算不难理解,通过变成能够较好的理解它们。① 掌握解线性方程组的雅可比迭代和高斯-塞德尔迭代算法;② :(1)选择一种计算机语言(Matlab)设计出雅可比(Jacobi)Gauss-Seidel、SOR迭代法,迭代法的算法程序,并且选择不同的迭代次数,观察输出结果;(2)(1)题目:=[2023;181;2-315];b=[24;12;30];x0=[0;0;0];  (2)对应程序:①Jacobi迭代法: functionX=jacobi(a,b,X0,ep)%Jacobi迭代法求解方程组ifnargin==3ep=-6;elseifnargin<3errorreturnendD=diag(diag(a));D=inv(D);L=tril(a,-1);U=triu(a,1);B=-D*(L+U);f=D*b;X=B*X0+f;k=1;while(norm(X-X0,inf)>=ep)&(k<=1000)X0=X;X=B*X0+f;k=k+1;enddisp('迭代次数为')kreturn②高斯-塞德尔(Gauss-Seidel):functionz=gauss2(a