实验二插值法P50专业班级:信计131班姓名:段雨博学号:2013014907一、实验目的1、熟悉MATLAB编程;2、学习插值方法及程序设计算法。二、实验题目1、已知函数在下列各点的值为ix0.20.40.60.81.0ifx0.980.920.810.640.38试用4次牛顿插值多项式4Px及三次样条函数Sx(自然边界条件)对数据进行插值用图给出,,0.20.08,0,1,11,10iiixyxii,4Px及Sx。2、在区间1,1上分别取10,20n用两组等距节点对龙格函数21125fxx作多项式插值及三次样条插值,对每个n值,分别画出插值函数及fx的图形。3、下列数据点的插值x01491625364964y012345678可以得到平方根函数的近似,在区间0,64上作图(1)用这9个点作8次多项式插值8Lx(2)用三次样条(第一边界条件)程序求Sx从得到结果看在0,64上,哪个插值更精确;在区间0,1上,两种插值哪个更精确?三、实验原理与理论基础1、拉格朗日差值公式)()(111kkkkkkxxxxyyyxL点斜式kkkkkkkkxxxxyxxxxyxL11111)(两点式2、n次插值基函数....,2,1,0,)()(0njyxlyxLijnkkkjnnkxxxxxxxxxxxxxlnknkkkkk,...,1,0,)()(...)()(...)()()(11003、牛顿插值多项式...))(](,,[)](,[)()(102100100xxxxxxxfxxxxfxfxPn))...(](,...,[100nnxxxxxxf)(],...,,[)()()(10xxxxfxPxfxRnnnn4、三次样条函数若函数],,[)(2baCxS且在每个小区间],[1jjxx上是三次多项式,其中,bxxxan...10是给定节点,则称)(xS是节点nxxx,...,,10上的三次样条函数。若在节点jx上给定函数值),,...,2,1,0)((njxfyji并成立,,...,2,1,0,)(njyxSij则称)(xS为三次样条插值函数。5、三次样条函数的边界条件(1)0)()(''''''00''nnfxSfxS(2)'''00')(,)(nnfxSfxS四、实验内容1、M文件:function[p]=Newton_Polyfit(X,Y)formatlonggr=size(X);n=r(2);M=ones(n,n);M(:,1)=Y';fori=2:nforj=i:nM(j,i)=(M(j,i-1)-M(j-1,i-1))/(X(j)-X(j-i+1));endendp0=[zeros(1,n-1)M(1,1)];p=p0;fori=1:n-1p1=M(i+1,i+1).*poly(X(1:i));p0=[zeros(1,n-i-1)p1];p=p+p0;end3、M文件:functionf=Language(~,~,~)%%求已知数据点的拉格朗日插值多项式%%已知数据点的x坐标向量:x%%已知数据点的y坐标向量:y%%插值点的x坐标:x0%%解得的拉格朗日插值多项式fx=[0.00.40.81.21.6];y=[00.4283920.7221010.9103140.970348];x0=[0.30.5];symstl;if(length(x)==length(y))n=length(x);elsedisp('x,y维数不一样');return;endp=sym(0);fori=1:nl=sym(y(i));fork=1:i-1l=l*(t-x(k))/(x(i)-x(k));endfork=i+1:nl=l*(t-x(k))/(x(i)-x(k));endp=p+1;endsimplify(p);f=subs(p,'t',x0);f=vpa(f,6);end五、实验结果1、X=[0.20.40.60.81.0];Y=[0.980.920.810.640.38];[p]=Newton_Polyfit(X,Y);Y2=polyval(p,X);X1=0:0.01;1;Y3=interp1(X,Y,X1,'spline');plot(X,Y,'o',X,Y2,'r',X1,Y3,'g')图像:2、X=-1:0.01:1;Y=1./(1+25*X.^2);X1=-1:0.2:1;Y1=1./(1+25*X1.^2);Y2=interp1(X1,Y1,X,'linear');Y3=interp1(X1,Y1,X,'spline');subplot(211)plot(X,Y,X,Y2,'r-',X,Y3,'g-')图像:3、x=[0;1;4;9;16;25;36;49;64];y=0:1:8;x0=0:0.1:64;f=Language(x,y,x0);Y=interp1(x,y,x0,'spline');Y1=sqrt(x0);plot(x0,Y1,x0,f,'g',x0,Y,'r')图像:六、实验结果分析与小结1、通过这次实习,我学会了用matlab设计程序并运行绘制出图形。根据已知的点的信息用牛顿插值法、三次样条插值法、拉格朗日插值法等插值方法来求得近似函数,在运行出图形时可以很直观地看出近似函数的精确度哪个更好。使用matlab来处理数学问题确实很方便,使我对matlab的很多功能也有了不少的了解,知道了最基本最常用的术语怎么来表达,同时让我对这几个插值方法的算法更熟悉。2、不过,使用matlab进行程序设计对我来说确实有点难度,不太会编写函数,特别是涉及到专门的函数,matlab中已有的函数,不太会调用,查一下资料看到别人如何表示我也不是太懂,现在用matlab写作业需要很长时间,而且还参考别人是如何写函数的,自己只是稍作修改来运行,出现问题也不太会修改。以后实习多练习,学会编写程序,学会调用matlab内部函数,了解更多。