1实验10曲线拟合和插值运算一.实验目的学会MATLAB软件中软件拟合与插值运算的方法。二.实验内容与要求在生产和科学实验中,自变量x与因变量y=f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值或导数值。当要求知道观测点之外的函数值时,需要估计函数值在该点的值。要根据观测点的值,构造一个比较简单的函数y=t(x),使函数在观测点的值等于已知的数值或导数值,寻找这样的函数t(x),办法是很多的。根据测量数据的类型有如下两种处理观测数据的方法。(1)测量值是准确的,没有误差,一般用插值。(2)测量值与真实值有误差,一般用曲线拟合。MATLAB中提供了众多的数据处理命令,有插值命令,拟合命令。1.曲线拟合已知离散点上的数据集[(1x,1y),………(nx,ny)],求得一解析函数y=f(x),使f(x)在原离散点ix上尽可能接近给定iy的值,之一过程叫曲线拟合。最常用的的曲线拟合是最小二乘法曲线拟合,拟合结果可使误差的平方和最小,即使求使21|()|niiifxy最小的f(x).格式:p=polyfit(x,Y,n).说明:求出已知数据x,Y的n阶拟合多项式f(x)的系数p,x必须是单调的。[例1.95]x=[0.5,1.0,1.5,2.0,2.5,3.0];%给出数据点的x值y=[1.75,2.45,3.81,4.80,7.00,8.60];%给出数据点的y值p=polyfit(x,y,2);%求出二阶拟合多项式f(x)的系数x1=0.5:0.05:3.0;%给出x在0.5~3.0之间的离散值y1=polyval(p,1x);%求出f(x)在1x的值plot(x,y,’*r’,11,xy’-b’)%比较拟合曲线效果计算结果为:p=0.56140.82871.1560即用f(x)=0.56142x+0.8287x+1.1560拟合已知数据,拟合曲线效果如图所示。2问题1.32:将上题改为6阶拟合,拟合效果又如何?(拟合曲线经过所有已知数据点)从以上例子可看出,选择不同的阶数,会得到不同的效果,如何选择阶数,需要进一步了解系统辨识方面的知识。2.一维插值已知离散点上的数据集[(1x,1y),………(nx,ny)],找出一解析函数连接自变量相邻的两个点(,1iixx),并求得两点间的数值,之一过程叫插值。格式一:yi=inter1p(X,Y,1x,method)说明:该命令用指定的算法对数据点之间计算内插值,它找出一元函数f(x)在中间点的数值,其中函数f(x)由所给数据决定,各个参量之间的关系如图1.32所示。“nearest”:最近邻点插值,直接完成计算。“linear”线性插值(缺省方式),直接完成计算。“spline”三次样条函数插值。“cubic”三次函数插值。对于超出x的范围的1x的分量,使用其他的方法,inter1p将对超出的分量执行外插值算法。格式二:1y=inter1p(X,Y,1x,method,’extrap’)%对于超出x范围的1x中的分量将执行特殊的外插值法extrap.yi=inter1p(X,Y,1x,method,extrapval)%确定超出x范围的1x中的分量的外插值extrapval,其值通常取NaN或0.[例1.96]year=1900:10:2010;product=[75.995,91.972,105.711,123.203,131.669,….249.633,256.344,267.893];p2005==interpl(year,product,2005)x=1900:1:2010;3y=interpl(year,product,x,‘cubic’);plot(year,product,’o’,x,y)插值结果为p1995=262.11853.二维插值格式:ZI=interp2(X,Y,Z,XI,YI,method)说明:用指定的算法method计算二维插值,返回矩阵ZI,其元素对应于参量XI与Y元素,用户可以输入行向量和列向量XI和YI,此时,输出向量ZI与矩阵meshgrid(xi,yi)是同型的,参量X与Y必须是单调的,且相同的划分格式,就像由命令meshgrid生成的一样,method有:‘linear’:双线性插值算法(缺省算法)‘nearest’:最临近插值‘spline’:三次样条插值‘cubic’:双三次插值[例1.97]years=1950:10:1990;service=10:10:30;wage=[150.697,199.592,187.625;179.323,195.072,250.287;203.212,179.092,322.767;226.505,153.706,426.730;249.636,120.281,598.243];w=interp2(service,years,wage,15,1975)插值结果为:w=190.6288[例1.98]x=1:6;y=1:4;t=[12,10,11,11,13,15;16,22,28,35,27,20;18,21,26,32,28,25;20,25,30,33,32,30];subplot(1,2,1)mesh(x,y,t)x1=1:0.1:6;y1=1:0.1:4;[x2,y2]=meshgrid(x1,y1);t1=interp2(x,y,t,x2,y2,'cubic');subplot(1,2,2)mesh(x1,y1,t1)图形结果为:三,练习与思考41)已知x=[1.2,1.8,2.1,2.4,2.6,3.0,3.3],y=[4.85,5.2,5.6,6.2,6.5,7.0,7.5],求对x和y进行6阶多项式拟合的系数.2)分别用2,3,4,5阶多项式来逼近[0,3]上的正弦函数sinx,并做出拟合曲线及sinx函数曲线图,了解多项式的逼近程度和有效拟合区间随多项式的阶数有何变化.3)已知x=[0.1,0.8,1.3,1.9,2.5,3.1],y=[1.2,1.6,2.7,2.0,1.3,0.5],用不同的方法求x=2点的插值,并分析所得结果有何不同.四,提高内容1.三维数据插值格式:VI=interp3(X,Y,Z,V,XI,YI,ZI,method).说明:用指定的算法method找出由参量X,Y,Z决定的三元函数V=V(X,Y,Z)在点(XI,YI,ZI)的值,参量XI,YI,ZI是同型阵列或向量.‘cubic’:三次插值‘spline’:三次样条插值.‘nearest’:最邻近插值.注意:在所有的算法中,都要求X,Y,Z是单调且有相同的格点形式,当X,Y,Z是等距且单调时,且算法’*linear’,ۢ*cubic’,ۢ*nearest’可得到快速插值.[例1.99][x,y,z,v]=flow(20);[xx,yy,zz]=meshgrid(0.1:0.25:10,-3:0.25:3,-3:0.25:3);vv=interp3(x,y,z,v,xx,yy,zz);slice(xx,yy,zz,vv,[6,9.5],[1,2],[-2,0.2]);shadinginterpcolormapcool插值图形如下:2一维插值的快速傅里叶算法格式:y=interpft(x,n).说明:返回包含周期函数x在重采用的n个等距的点的插值y.若length(x)=m,且x有采样间隔dx,则新的y的采样间隔dy=dx*m/n,注意,必须要nm,若x为一矩阵,则按x的列进行计算,返回的矩阵y有与x相同的列数,但有n行.数据格点5格式:ZI=griddata(x,y,z,XI,YI,method).说明:用二元函数z=f(x,y)的曲面拟合有不规则的数据向量x,y,z.griddata将返回曲面z在点)XI,YI)处的插值,曲面总是经过这些数据点(x,y,z)的,输入参量(XI,YI)通常是规则的格点(像用命令meshgrid生成的一样),XI可以是行向量,这时XI指定一有常数列向量的矩阵,类似地,YI可以是一列向量,它指定一个有常数行向量的矩阵.‘linear’:基于三角形的线性插值(缺省算法)‘cubic’:基于三角形的三次插值.‘nearest’:最邻近插值法.3.三次样条数据插值格式:yy=spline(x,y,xx).说明:对于给定的离散的测量数据x,y(称为断点),要寻找一个三项式y=p(x),以逼近每对数据(x,y)点间的曲线.该命令用三次样条插值计算出由向量x与y确定的一元函数y=f(x)在点xx处的值,若参量若参量是一个矩阵,则以y的每一列和x配对,再分别计算由它们确定的函数在点xx处的值.则yy是一阶数为length(xx)*size(y,2)的矩阵.[例1.100]对离散地分布在y=exsinx函数曲线上的数据点进行样条插值计算.x=[024561212.817.219.920];y=exp(x).*sin(x);xx=0:.25:20;yy=spline(x,y,xx);plot(x,y,'o',xx,yy)插值图形结果如图所示:(报告来源)