资源描述:
《插值与拟合的MATLAB实现.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、3.3插值与拟合的MATLAB实现简单的插值与拟合可以通过手工计算得出,但复杂的只能求助于计算机了。3.3.1线性插值在MATLAB中,一维的线性插值可以用函数interpl来实现。函数interpl的调用格式如下:yi=interpl(x,y,xi),其中yi表示在插值向量xi处的函数值,x与y是数据点。这个函数还有如下两种形式:yi=interpl(y,xi),省略x,x此时为l:N,其中N为向量y的长度。yi=interpl(x,y,xi,method),其中method为指定的插值方法,可取以下凡种:nearest:最近插值。l
2、inear:线性插值。spline:三次样条插值。cubic:三次插值。注意:对于上述的所有的调用格式,都要求向量x为单调。例如:对以下数据点:(2*pi,2),(4*pi,3),(6*pi,5),(8*pi,7),(10*pi,11),(12*pi,13),(14*pi,17)进行插值,求x=pi,6的函数值。>>x=linspace(0,2*pi,8);>>y=[2,3,5,7,11,13,17,19];>>xl=[pi,6];>>yl=interpl(x,y,xl)yl=900001836903.3.2Lagrange插值Lagr
3、ange插值比较常用,是MATLAB中相应的函数,但根据Lagrange插值函数公式,可以用M文件实现:Lagrange.mfunctions=Larange(x,y,x0)%Lagrange插值,x与y为已知的插值点及其函数值,x0为需要求的插值点的值nx=length(x);ny=length(y);ifnx~=nywaming(‘向量x与y的长度应该相同’)return;endm=length(x0);%按照公式,对需要求的插值点向量x0的元素进行计算fori=l:mt=0.0;forj=l:nxu=1.0;fork=l:nxif
4、k~=ju=j*(x0(i)-x(k))/(x(j)-(k));endendt=t+u*y(j);ends(i)=t;endreturn例如:对(l,2),(2,4),(3,6),(4,8),(5,10)进行Lagrange插值,求x=23,3.7的函数值。利用上面的M函数,可进行Lagrange插值运算。>>x=[l,2,3,45];>>y=[2,4,7,14,20];>>Lagrange(x,y,[2.33.7])ans=4.503811.62283.3.3Newton插值同样,MATLAB中也没有专门用于Newton插值的函数。据
5、牛顿插值函数可以编写出Newton插值的M文件。Newton.mfunctions=Newton(x,y,xo,nn)%Newton插值,x与y为已知的插值点及其函数值%x0为需要求的插值点的横坐标。nn为Newton插值多项式的次数,即%nn次Newton插值多项式nx=length(x);ny=length(y);ifnx~=nywaming(‘向量x与y的长度应该相同’)returnendm=length(x0);%按照公式,对需要求的插值点x0的每个元素进行计算fori=l:mt=0.0’j=1;yy=y;kk=j;%求差商wh
6、ile(kk<=nn)kk=kk+l;fork=kk:nxyy(k)=yy(k)-yy(kk-l))/(x(k)-x(kk-l));endend%求差商结果t=yy(l);fork=2:nnu=1.0;jj=1;while(jj>x=[12481632];>>y=[212
7、325324868];>>Newton(x,y,20,4)ans=27.28573.3.4三次样条插值前面介绍过的函数interpl可以实现三次样条插值,在这里主要介绍另一个函数spline。spline函数的调用形式主要有两种:(l)yy=spline(x,y,xx):利用三次样条插值法寻找在插值点xx处的插值函数值yy插值函数根据输入参数x与y的关系得来。此函数作用等同于interpl(x,y,xx,'spline').(2)pp=spline(x,y):返回三次样条插值的分段多项式形式的向量,以后可以使用函数ppval来进行插值计
8、算。例如:在某处测得海洋不同深度处水温如下表所示。深度m44671495014221634水温ºC7.044.283.402.542.13试用样条插值求在深度500米、100米、1500米处的水温。解:>>