您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数值分析实验报告(Matlab实现)
学生实验报告实验课程名称数值分析开课实验室数学与统计学院实验室学院2010年级数学与应用数学专业班01班学生姓名学号开课时间2012至2013学年第一学期总成绩教师签名1课程名称数值分析实验项目名称Gauss消元法实验项目类型验证演示综合设计其他指导教师何光辉成绩√一、实验目的:(1)高斯列主元消去法求解线性方程组的过程(2)熟悉用迭代法求解线性方程组的过程(3)设计出相应的算法,编制相应的函数子程序二、实验内容分别用高斯列主元消元法和直接消元法求解线性方程组:725101391444321131243301024321xxxx三、实验原理对于线性方程组1111221121122222n1122n=b=b=bnnnnnnnnaxaxaxaxaxaxaxaxax……………(1)常记为矩阵形式Axb(2)根据高等代数的知识,若0A,上式的解存在且唯一。(1)Gauss直接消元法考虑上述线性方程组的增广矩阵[:]Ab,对增广矩阵进行行变换,将(2)式化为等价的三角形方阵,然后回代解之,这就是Gauss消元法。具体如下:a)消元①令(1),,1,2nijijaaij,…,;(1),1,2niibbi,…,②对k=1到n-1,若()0kkka,进行2()()(1)(1)()()(1)(),1,2,n0,1,2,n,,1,2,n,1,2,nkikikkkkkikkkkijijikkjkkkiiikkalikkaaikkaalaijkkbblbikk…,…,…,…,b)回代,若a0nnn()()11()nnnnnnniiiiijjijkiibxbxbaxa(2)Gauss列主元消元法设列主元消元法已完成Axb的第k-1(11kn)次消元,的到方程组()()kkAxbAxb在进行第k次消元前,先进行2个步骤:a)在()kkka至()knka这一列内选出最大值,即()(),maxkkkikikkinaa,若(),0kkika,此时0A方程组无确定解,应给出退出信息。b)若(),0kkika,则交换第ki行和k行,然后用Gauss消元法进行消元。四、MATLAB软件实现(1)写出Gauss消元法和列主元消元法实现的MATLAB函数根据以上的算法,写出如下程序:%%%%%%%Gauss消元法%%%%%%%%%%%%functiony=Gauss1(A,b)[m,n]=size(A);%检查系数正确性ifm~=nerror('矩阵A的行数和列数必须相同');return;endifm~=size(b)error('b的大小必须和A的行数或A的列数相同');return;end%再检查方程是否存在唯一解ifrank(A)~=rank([A,b])error('A矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解');return;3end%这里采用增广矩阵行变换的方式求解c=n+1;A(:,c)=b;%%消元过程fork=1:n-1A(k+1:n,k:c)=A(k+1:n,k:c)-(A(k+1:n,k)/A(k,k))*A(k,k:c);end%%回代结果x=zeros(length(b),1);x(n)=A(n,c)/A(n,n);fork=n-1:-1:1x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k);end%显示计算结果%disp('x=');%disp(x);y=x;%%%%%%%%%%%%高斯列主元消元法求解线性方程组Ax=b%%%%%%%%%%%%%%%A为输入矩阵系数,b为方程组右端系数%方程组的解保存在x变量中functiony=Gauss_line(A,b)formatlong;%设置为长格式显示,显示15位小数[m,n]=size(A);%先检查系数正确性ifm~=nerror('矩阵A的行数和列数必须相同');return;endifm~=size(b)error('b的大小必须和A的行数或A的列数相同');return;end%再检查方程是否存在唯一解ifrank(A)~=rank([A,b])error('A矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解');return;endc=n+1;A(:,c)=b;%(增广)fork=1:n-1[r,m]=max(abs(A(k:n,k)));%选主元m=m+k-1;%修正操作行的值4if(A(m,k)~=0)if(m~=k)A([km],:)=A([mk],:);%换行endA(k+1:n,k:c)=A(k+1:n,k:c)-(A(k+1:n,k)/A(k,k))*A(k,k:c);%消去endendx=zeros(length(b),1);%回代求解x(n)=A(n,c)/A(n,n);fork=n-1:-1:1x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k);endy=x;formatshort;%设置为默认格式显示,显示5位(2)建立MATLAB界面利用MATLAB的GUI建立如下界面求解线性方程组:详见程序。五、计算实例、数据、结果、分析下面我们对以上的结果进行测试,求解:5725101391444321131243301024321xxxx输入数据后点击和,得到如下结果:更改以上数据进行测试,求解如下方程组:123443211343212343112341xxxx得到如下结果:6六、实验中遇到的问题及解决办法在本实验中,遇到的问题主要有两个:(1)如何将上述的Gauss消元法的算法在MATLAB中实现针对此问题我借鉴了网上以及课本上的算法的MATLAB实现的程序;(2)如何将建立界面使得可以随意输入想要求解的相关矩阵后就可以直接求解针对此问题,我通过网上的一些关于MATLAB的GUI设计的相关资料,总结经验完成了此项任务。七、实验结论通过以上的测试,我们发现以上算法和程序能够求出线性方程组的比较精确解。八、参考文献[1]杨大地,王开荣.2006.数值分析.北京:科学出版社[2]何光辉.2008.数值分析实验.重庆大学数理学院数学实验教学中心[3]百度文库,百度知道教师签名年月日课程名称数值分析实验项目名称插值方法实验项目类型验证演示综合设计其他指导教师何光辉成绩√一、实验目的:(1)学会拉格朗日插值、牛顿插值等基本方法(2)设计出相应的算法,编制相应的函数子程序(3)会用这些函数解决实际问题二、实验内容(1)设计拉格朗日插值算法,编制并调试相应的函数子程序(2)设计牛顿插值算法,编制并调试相应的函数子程序(3)给定函数四个点的数据如下:X1.12.33.95.1Y3.8874.2764.6512.117试用拉格朗日插值确定函数在x=2.101,4.234处的函数值。(4)已知,,,392411用牛顿插值公式求5的近似值。三、实验原理(1)拉格朗日插值7n次拉格朗日插值多项式为:Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x)n=1时,称为线性插值,L1(x)=y0(x-x1)/(x0-x1)+y1(x-x0)/(x1-x0)=y0+(y1-x0)(x-x0)/(x1-x0)n=2时,称为二次插值或抛物线插值,精度相对高些L2(x)=y0(x-x1)(x-x2)/(x0-x1)/(x0-x2)+y1(x-x0)(x-x2)/(x1-x0)/(x1-x2)+y2(x-x0)(x-x1)/(x2-x0)/(x2-x1)对节点xi(i=0,1,…,n)中任一点xk(0=k=n)作一n次多项式lk(xk),使它在该点上取值为1,而在其余点xi(i=0,1,…,k-1,k+1,…,n)上为0,则插值多项式为Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x)上式表明:n个点xi(i=0,1,…,k-1,k+1,…,n)都是lk(x)的零点。(2)牛顿插值插商公式1231111()[,,,...];()...()()...()kjkjjjjjjjkfxfxxxxxxxxxxxxNewton插值多项式为112112312123121()()[,]()[,,]()()[,,,...]()()...();nnnNxfxfxxxxfxxxxxxxfxxxxxxxxxx四、MATLAB软件实现(1)分别写出lagrange插值法和Newton插值法的求解函数%%%%%%%%%%%%%%lagrange插值法求解函数%%%%%%%%%%%%%%%%%x,y为初始数据,z为插值点functionz=lagrange(x,y,a)formatlong;%显示15位n=length(x);%取长度%初始计算s=0;%进入公式计算forj=0:(n-1)t=1;fori=0:(n-1)ifi~=jt=t*(a-x(i+1))/(x(j+1)-x(i+1));endends=s+t*y(j+1);endz=s;%显示输出结果formatshort;%%%%%%%%%%%%%%%Newton插值法求解函数%%%%%%%%%%%%%%%x,y为初始数据,z为插值点functionj=Newton(x,y,z)n=max(size(x));8l=1;a=y(1);B=a;s=1;%一次因子的乘积,预设为1dx=y;%差商fori=1:n-1dx0=dx;forj=1:n-idx(j)=(dx0(j+1)-dx0(j))/(x(i+j)-x(j));enddf=dx(1);s=s*(z-x(i));%一次因子乘积a=a+s*df;%计算各次Newton插值的值l=l+1;B=a;%结果保存在变量B中endj=B;(2)建立界面利用MATLAB中的GUI编程建立如下界面:详见程序。五、计算实例、数据、结果、分析下面我们对以上的问题进行测试:输入数据:9计算结果如下:当x=2.101时,x=4.234时,同理可以测试(4)中的5的值。六、实验中遇到的问题及解决办法在本实验中,遇到的问题主要有两个:(3)如何将上述的插值的算法在MATLAB中实现针对此问题我借鉴了网上以及课本上的算法的MATLAB实现的程序;(4)如何将建立界面使得可以随意输入想要求解的相关矩阵后就可以直接求解针对此问题,我通过网上的一些关于MATLAB的GUI设计的相关资料,总结经验完成了此项任务。七、实验结论通过以上的测试,我们发现以上算法和程序能够求出插值的比较精确解。八、参考文献[1]杨大地,王开荣.2006.数值分析.北京:科学出版社10[2]何光辉.2008.数值分析实验.数理学院数学实验教学中心[3]百度文库,百度知道教师签名年月日课程名称数值分析实验项目名称数值微积分实验项目类型验证演示综合设计其他指导教师何光辉成绩√一、实验目的:(1)学会复化梯形、复化辛浦生求积公式的应用(2)设计出相应的算法,编制相应的函数子程序(3)会用这些函数解决实际问题二、实验内容(1)设计复化梯形公式求积算法,编制并调试相应的函数子程序(2)设计复化辛浦生求积算法,编制并调试相应的函数子程序(4)分别用复化梯形公式和复化辛浦生公式计算定积分10sindxxx三、实验原理(1)复化梯形求积公式11图1复化梯形求积公式算法的流程图Step1给出被积函数)(xf、区间],[ba端点ba,和等分数n;Step2求出,khxknabh;Step3计算10)(),(),(nkkxfbfaf;Step4得)]()()([2110bfxfafhTnkkn
本文标题:数值分析实验报告(Matlab实现)
链接地址:https://www.777doc.com/doc-2403318 .html