您好,欢迎访问三七文档
《数值分析》实验报告学院:_________________专业:__________________班级:___________________学号:___________________姓名:___________________2015年1月5日1实验一MATLAB在数值分析中的应用插值与拟合是来源于实际、又广泛应用于实际的两种重要方法。随着计算机的不断发展及计算水平的不断提高,它们已在国民生产和科学研究等方面扮演着越来越重要的角色。下面对插值中分段线性插值、拟合中的最为重要的最小二乘法拟合加以介绍。1.1分段线性插值所谓分段线性插值就是通过插值点用折线段连接起来逼近原曲线,这也是计算机绘制图形的基本原理。实现分段线性插值不需编制函数程序,MATLAB自身提供了内部函数interp1其主要用法如下:interp1(x,y,xi)一维插值◆yi=interp1(x,y,xi)对一组点(x,y)进行插值,计算插值点xi的函数值。x为节点向量值,y为对应的节点函数值。如果y为矩阵,则插值对y的每一列进行,若y的维数超出x或xi的维数,则返回NaN。◆yi=interp1(y,xi)此格式默认x=1:n,n为向量y的元素个数值,或等于矩阵y的size(y,1)。◆yi=interp1(x,y,xi,’method’)method用来指定插值的算法。默认为线性算法。其值常用的可以是如下的字符串。●nearest线性最近项插值。●linear线性插值。●spline三次样条插值。2●cubic三次插值。所有的插值方法要求x是单调的。x也可能并非连续等距的。正弦曲线的插值示例:x=0:0.1:10;y=sin(x);xi=0:0.25:10;yi=interp1(x,y,xi);plot(x,y,’0’,xi,yi)则可以得到相应的插值曲线。Matlab也能够完成二维插值的运算,相应的函数为interp2,使用方法与interpl基本相同,只是输入和输出的参数为矩阵,对应于二维平面上的数据点,详细的用法见Matlab联机帮助。1.2最小二乘法拟合在科学实验的统计方法研究中,往往要从一组实验数据),(iiyx中寻找出自变量x和因变量y之间的函数关系y=f(x)。由于观测数据往往不够准确,因此并不要求y=f(x)经过所有的点),(iiyx,而只要求在给定点ix上误差iiiyxf)(按照某种标准达到最小,通常采用欧氏范数2作为误差量度的标准。这就是所谓的最小二乘法。在MATLAB中实现最小二乘法拟合通常采用polyfit函数进行。函数polyfit是指用一个多项式函数来对已知数据进行拟合,我们以下列数据为例介绍这个函数的用法:x=0:0.1:1;3y=[-0.4471.9783.286.167.087.347.669.569.489.3011.2]为了使用polyfit,首先必须指定我们希望以多少阶多项式对以上数据进行拟合,如果我们指定一阶多项式,结果为线性近似,通常称为线性回归。我们选择二阶多项式进行拟合。P=polyfit(x,y,2)P=-9.810820.1293-0.0317函数返回的是一个多项式系数的行向量,写成多项式形式为:0317.01293.208108.92xx为了比较拟合结果,我们绘制两者的图形:xi=linspace(0,1,100);%绘图的X-轴数据。Z=polyval(p,xi);%得到多项式在数据点处的值。当然,我们也可以选择更高幂次的多项式进行拟合,如10阶:p=polyfit(x,y,10);xi=linspace(0,1,100);z=ployval(p,xi);曲线在数据点附近更加接近数据点的测量值了,但从整体上来说,曲线波动比较大,并不一定适合实际使用的需要,所以在进行高阶曲线拟合时,“越高越好”的观点不一定对的。4实验二Lagrange插值与Runge现象2.1Lagrange插值2.1.1实验目的掌握Lagrange插值公式的一般形式和构造方法,并利用Matlab绘出已知函数的Lagrange插值图像。2.1.2实验步骤已知点nniiyxyxyxyx,,,,,1100Lagrange的基函数:niiiiiiiniiixxxxxxxxxxxxxxxxxxxxxl11101110Lagrange插值公式:niiinyxlxL0由以上公式可以在Matlab中构造lagrange函数,构造语法如下:functiony=lagrange(x0,y0,x)n=length(x0);m=length(x);fori=1:mz=x(i);s=0;fork=1:nL=1;forj=1:nifj~=kL=L*(z-x0(j))/(x0(k)-x0(j));endends=s+L*y0(k);endy(i)=s;endy;5由Lagrange插值函数对xysin做出的图形如下:2.2Runge现象2.2.1实验目的:利用Lagrange插值公式对函数211xxf进行插值,并绘出插值图像与原图像进行比较。2.2.2实验步骤构建函数xffunctiony=f(x)y=1/(1+x*x);构建函数functiony=lagrange(x0,y0,x)其构造方法即上面构造的lagrange函数执行主程序:a=[-10:0.2:10];fori=1:length(a)b(i)=f(a(i));6endc=[-5:1:5];fori=1:length(c)d(i)=f(c(i));ende=[-5:0.2:5];z=lagrange(c,d,e);plot(a,b,'r',e,z)绘出图像如下:2.3实验结论通过龙格现象可知,并不是插值多项式的次数越高(即插值节点越多)精度就越高在,这个实验中插值函数在两个端点处发生剧烈的波动,造成较大的误差,从数值计算上可解释为高次插值多项式的计算会带来舍入误差的增大,从而引起计算失真,因此,实际应用时,我们一般只用一次、二次最多是三次插值多项式,若想提高插值精度,我们可以采用分段插值。7实验三最小二乘拟合在科学工程试验中,经常需要从试验数据中寻找拟合曲线。曲线拟合是指函数g(x)拟合给定的节点(xi,yj),i=1,2,…,n,通常所拟合的节点数n必须大于未知数个数k。确定函数g(x)参数,使得拟合函数与节点的偏差最小,这种方法称为最小二乘法。当n=k时,由于拟合曲线通过所用节点,可使问题得到简化。3.1实验目的明确曲线拟合的含义,用最小二乘法通过matlab进行曲线拟合。3.2实验步骤编制以函数nkkx0为基的多项式最小二乘拟合程序,并用于对下表中数据作3次多项式最小二乘拟合.xi-1.0-0.50.00.51.01.52.0yi-4.447-0.4520.5510.048-0.4470.5494.552取权数1i,求拟合曲线nkkkxa0中的参数ka、平方误差2,并作离散数据iiyx,的拟合函数)(*xy的图形。编写matlab代码进行三次多项式拟合,程序如下:x0=-1:0.5:2;y0=[-4.447-0.4520.5510.048-0.4470.5494.552];n=3;alph=polyfit(x0,y0,n);y=polyval(alph,x0);r=(y0-y)*(y0-y)';x=-1:0.01:2;y=polyval(alph,x);plot(x,y,'k--');xlabel('x');ylabel('y0*andpolyfit.y-.');holdon;plot(x0,y0,'*');title('离散数据的多项式拟合');gridon;8disp(['平方误差:',sprintf('%g',r)]);disp(['参数alph:',sprintf('%g\t',alph)])3.3结果分析输出结果:平方误差:2.17619e-005参数alph:1.99911-2.99767-3.96825e-0050.549119根据给定的7个点的数据,所求的拟合函数的曲线可以基本地反映数据点的其最小平方误差为:2.17619e-005。拟合的三次多次多项式为:549119.01096825.399767.299911.1)(5233xxxxP离散数据的拟合函数图形为:-1-0.500.511.52-5-4-3-2-1012345xy0*andpolyfit.y-.离散数据的多项式拟合9实验四复化求积公式计算定积分4.1实验目的利用复化求积公式计算下列定积分.(1)dxx10211;(2)dxxeex212;4.2实验要求(1)若用复化梯形公式要求绝对误差限为710,利用它们的余项对算法做出步长的事前估计.(2)用复化梯形公式作出计算.(3)将计算结果与精确解做比较,并比较算法的计算量.4.3实验步骤4.3.1事前估计的Matlab程序如下用复化梯形公式进行事前估计的Matlab程序(1)formatlonggx=0:0.01:1;f=8.*(3*x.^2-1)./(x.^2+1).^3;%二阶导函数x=1;%计算导函数最大值f=8.*(3*x.^2-1)./(x.^2+1).^3;h2=0.5*10^(-7)*12/f;h=sqrt(abs(h2))%步长n=1/hn=ceil(1/h)+1%选取的点数(2)formatlonggx=1:0.01:2;f=2.*exp(x)+x.*exp(x);%二阶导函数10x=2;%计算导函数最大值f=2.*exp(x)+x.*exp(x);h2=0.5*10^(-7)*12/f;h=sqrt(abs(h2))%步长n=1/hn=ceil(1/h)+1%选取的点数估计结果步长h及结点数n分别为(1)h=0.000547722557505166n=1827(2)h=0.000142479094906909n=70204.3.2积分计算的Matlab程序formatlonggpromps={'请选择积分公式,若用复化梯形,请输入T'};result=inputdlg(promps,'charpt4',1,{'T'});Nb=char(result);result=inputdlg({'请输入积分式题号1-4:'},'实验4.1',1,{'1'});Nb_f=str2num(char(result));switchNb_fcase1fun=inline('4./(x.^2+1)');a=0;b=1;case2fun=inline('x.*exp(x)');a=1;b=2;endpromps={'请输入用复化梯形公式应取的步长:'};result=inputdlg(promps,'实验4.2',1,{'0.01'});h=str2num(char(result));tic;N=floor((b-a)/h);detsum=0;11fori=1:N-1xk=a+i*h;detsum=detsum+fun(xk);endt=h*(fun(a)+fun(b)+2*detsum)/2;time=toc;switchNb_fcase1disp('精确解:pi=3.14159265358979')disp(['绝对误差:',num2str(abs(t-pi))]);disp(['运行时间:',num2str(time)]);case2disp('精确解:e^2=7.38905609893065')disp(['绝对误差:',num2str(abs(t-7.38905609893065))]);disp(['运行时间:',num2str(time)]);end4.4结果分析当选用复化梯形公式时:(1)式运行结果为:t=3.14159261385336
本文标题:数值分析实验报告
链接地址:https://www.777doc.com/doc-2387478 .html