1、实验二 插值法 P50专业班级:信计 131 班 姓名:段雨博 学号:2013014907一、实验目的1、熟悉 MATLAB 编程;2、学习插值方法及程序设计算法。二、实验题目1、已知函数在下列各点的值为ix0.2 0.4 0.6 0.8 1.0if0.98 0.92 0.81 0.64 0.38试用 4 次牛顿插值多项式 及三次样条函数 (自然边界条件)对数据进行插值4PxSx用图给出 , 及 。,0.28,01,iixyi4Px2、在区间 上分别取 用两组等距节点对龙格函数 作多项1n 215fx式插值及三次样条插值,对每个 值,分别画出插值函数及 的图形。x3、下列数据点的插值x0 1
2、4 9 16 25 36 49 64y0 1 2 3 4 5 6 7 8可以得到平方根函数的近似,在区间 上作图0,6(1 )用这 9 个点作 8 次多项式插值 8Lx(2 )用三次样条(第一边界条件)程序求 S从得到结果看在 上,哪个插值更精确;在区间 上,两种插值哪个更精确?0,640,13、 实验原理与理论基础1、拉格朗日差值公式点斜式)()(1kkkxxyL两点式kkkx111)(2、 n 次插值基函数.,20,)()(0 njyxlxLijnkj nkxxxxxl nknkkkk ,.10,)().)()(.)()( 1100 3、 牛顿插值多项式 .,)( 102100100 ff
3、fPn ).(,.nnxx)(,.)( 10xffRnn 4、 三次样条函数若函数 且在每个小区间 上是三次多项式,其中,,(2baCxS,1j是给定节点,则称 是节点 上的三次样条函数。an.10 )(xSnx,.10若在节点 上给定函数值 并成立j ,.2,0)(njxfyi则称 为三次样条插值函数。,.,)(yij5、 三次样条函数的边界条件(1) )(0 nfSfxS(2) ,)(nx4、 实验内容1、 M 文件:function p=Newton_Polyfit(X,Y)format long gr=size(X);n=r(2);M=ones(n,n);M(:,1)=Y;for i=
4、2:nfor j=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;for i=1:n-1p1=M(i+1,i+1).*poly(X(1:i);p0=zeros(1,n-i-1) p1;p=p+p0;end3、 M 文件:function f=Language(,)%求已知数据点的拉格朗日插值多项式%已知数据点的 x 坐标向量: x%已知数据点的 y 坐标向量: y%插值点的 x 坐标:x0%解得的拉格朗日插值多项式 fx=0.0 0.4 0.8 1.2 1.6;y=0 0.42839
5、2 0.722101 0.910314 0.970348;x0=0.3 0.5;syms t l;if(length(x)=length(y)n=length(x);elsedisp(x,y 维数不一样);return;endp=sym(0);for i=1:nl=sym(y(i);for k=1:i-1l=l*(t-x(k)/(x(i)-x(k);endfor k=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);end5、 实验结果1、 X=0.2 0.4 0.6 0.8 1.0; Y
6、=0.98 0.92 0.81 0.64 0.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、
7、 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)图像:6、 实验结果分析与小结1、通过这次实习,我学会了用 matlab 设计程序并运行绘制出图形。根据已知的点的信息用牛顿插值法、三次样条插值法、拉格朗日插值法等插值方法来求得近似函数,在运行出图形时可以很直观地看出近似函数的精确度哪个更好。使用 matlab 来处理数学问题确实很方便,使我对 matlab 的很多功能也有了不少的了解,知道了最基本最常用的术语怎么来表达,同时让我对这几个插值方法的算法更熟悉。2、不过,使用 matlab 进行程序设计对我来说确实有点难度,不太会编写函数,特别是涉及到专门的函数,matlab 中已有的函数,不太会调用,查一下资料看到别人如何表示我也不是太懂,现在用 matlab 写作业需要很长时间,而且还参考别人是如何写函数的,自己只是稍作修改来运行,出现问题也不太会修改。以后实习多练习,学会编写程序,学会调用 matlab 内部函数,了解更多。