您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 第九章插值-2014111719522614
第九章实验数据的插值数学实验一、实验目的学会MATLAB软件中利用给定数据进行插值运算的方法。二、相关知识在生产和科学实验中,自变量与因变量间的函数关系有时不能写出解析表达式,而只能得到函数在若干点的函数值或导数值,或者表达式过于复杂需要较大的计算量而只能计算函数在若干点的函数值或导数值,当要求知道其它点的函数值时,需要估计函数值在该点的值。为了完成这样的任务,需要构造一个比较简单的函数,使函数在观测点的值等于已知的值,或使函数在该点的导数值等于或者接近已知的值,寻找这样的函数有很多方法。根据测量数据的类型有以下两类处理观测数据的方法。xy()yfx()yx()yx(1)测量数据的数据量较小并且数据值是准确的,或者基本没有误差,这时我们一般用插值的方法来解决问题。(2)测量数据的数据量较大或者测量值与真实值有误差,这时一般用曲线拟合的方法来解决问题。在MATLAB中,无论是插值还是拟合,都有相应的命令来处理。本实验讨论插值。一维插值已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)通过这些点,并能够求出这些点之间的值,这一过程称为一维插值。完成这一过程可以有多种方法,我们现在利用MATLAB提供的函数interp1,这个函数的调用格式为:yi=interp1(X,Y,xi,method)该命令用指定的算法找出一个一元函数,然后以给出处的值。1122{(,),(,),,(,)}nnxyxyxy12{,,,}nXxxx12{,,,}nYyyy()yfx()fxxxi可以是一个标量,也可以是一个向量,是向量时,必须单调,method可以下列方法之一:‘nearest’:最近邻点插值,直接完成计算;‘spline’:三次样条函数插值;‘linear’:线性插值(缺省方式),直接完成计算‘cubic’:三次函数插值;对于[min{xi},max{xi}]外的值,MATLAB使用外推的方法计算数值。例1:已知某产品从1900年到2010年每隔10年的产量为:75.995,91.972,105.711,123.203,131.699,150.697,179.323,203.212,226.505,249.633,256.344,267.893,计算出1995年的产量,用三次样条插值的方法,画出每隔一年的插值曲线图形,同时将原始的数据画在同一图上。解:程序如下year=1900:10:2010;product=[75.995,91.972,105.711,123.203,131.699,150.697,179.323,203.212,226.505,249.633,256.344,267.893]p1995=interp1(year,product,1995,'spline')x=1900:2010;y=interp1(year,product,x,'spline');plot(year,product,'o',x,y);计算结果为:p1995=254.4043如果用线性插值,则程序的后四行改为:p1995=interp1(year,product,1995,'linear')x=1900:2010;y=interp1(year,product,x,'linear');plot(year,product,'o',x,y);计算结果为:p1995=252.9885这两种计算方法得到的数据有微小的差异,这种差异我们从两个图形上也能够看到,主要表现在节点(那些绘制成圆点的点)的附近。前者是光滑的,后者有角点出现。二维插值已知离散点上的数据集即已知在点集上的函数值,构造一个解析函数(其图形为一曲面)通过这些点,并能够求出这些已知点以外的点的函数值,这一过程称为二维插值。MATLAB命令:Zi=interp2(X,Y,Z,Xi,Yi,method)该命令用指定的算法找出一个二元函数,然后以给出处的值。返回数据矩阵Zi,Xi,Yi是向量,且必须单调,Zi和meshgrid(Xi,Yi)是同类型的。111222{(,,),(,,),,(,,)}nnnxyzxyzxyz1122{(,),(,),,(,)}nnxyxyxy12{,,,}nzzz(,)zfxy(,)zfxy(,)fxy(,)xymethod可以下列方法之一:‘nearest’:最近邻点插值,直接完成计算;‘spline’:三次样条函数插值;‘linear’:线性插值(缺省方式),直接完成计算‘cubic’:三次函数插值;例2:已知1950年到1990年间每隔10年,服务年限从10年到30年每隔10年的劳动报酬表如下:某企业工作人员的月平均工资(元)试计算1975年时,15年工龄的工作人员平均工资。服务年限年份1020301950150.697169.592187.6521960179.323195.072250.2871970203.212239.092322.7671980226.505273.706426.7301990249.633370.281598.243解:程序如下:years=1950:10:1990;service=10:10:30;wage=[150.697169.592187.652179.323195.072250.287203.212239.092322.767226.505273.706426.730249.633370.281598.243]w=interp2(service,years,wage,15,1975)计算结果为:235.6288例3:设有数据x=1,2,3,4,5,6,y=1,2,3,4,在由x,y构成的网格上,数据为:12,10,11,11,13,1516,22,28,35,27,2018,21,26,32,28,2520,25,30,33,32,20画出原始网格图和将网格细化为间隔为0.1后的插值网格图。解:程序为:x=1:6;y=1:4;t=[12,10,11,11,13,1516,22,28,35,27,2018,21,26,32,28,25;20,25,30,33,32,20]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);结果如图。左图是给定的网格处的数据,右图是插值后的数据。例4山区地形地貌图已知某处山区地形选点测量坐标数据为:x=00.511.522.533.544.55y=00.511.522.533.544.555.56海拔高度数据为:z=8990878592919693908782929698999591898684828496989592908885848381858081828995969392898686828587989996978885828382858994959392918684888892939495898786838192929697989693958482818485858182808081859093958486819899989796958487808185828384879095868880828184858683828180828788899899979698949287山区地形地貌图程序原始地貌图程序:x=0:.5:5;y=0:.5:6;[xx,yy]=meshgrid(x,y);z=[8990878592919693908782;9296989995918986848284;9698959290888584838185;8081828995969392898686;8285879899969788858283;8285899495939291868488;8892939495898786838192;9296979896939584828184;85858182808081859093958486819899989796958487808185828384879095868880828184858683828180828788899899979698949287];mesh(xx,yy,z)加密后的地貌图x=0:.5:5;y=0:.5:6;z=[8990878592919693908782929698999591898684828496989592908885848381858081828995969392898686828587989996978885828382858994959392918684888892939495898786838192929697989693958482818485858182808081859093958486819899989796958487808185828384879095868880828184858683828180828788899899979698949287];xi=linspace(0,5,50);%加密横坐标数据到50个yi=linspace(0,6,80);%加密纵坐标数据到60个[xii,yii]=meshgrid(xi,yi);%生成网格数据zii=interp2(x,y,z,xii,yii,'cubic');%插值mesh(xii,yii,zii)%加密后的地貌图山区地形地貌图结果例5海底曲面图例:在某海域测得一些点(x,y)处的水深z由下表给出,在矩形区域(75,200)×(-50,150)内画出海底曲面的图形.X129140103.588185.5195105Y7.5141.52314722.5137.585.5Z4868688X157.5107.57781162162117.5Y-6.5-81356.5-66.584-33.5z9988949海底曲面图程序clc;clf;clearall;x=[129140103.588185.5195105157.5107.57781162162117.5];y=[7.5141.52314722.5137.585.5-6.5-81356.5-66.584-33.5];z=-[48686889988949];plot3(x,y,z,'o'),holdon%原始数据点%插值cx=75:0.5:200;cy=-70:0.5:150;cz=griddata(x,y,z,cx,cy’,’cubic‘);%三次插值meshz(cx,cy,cz)插值函数griddata格式为:cz=griddata(x,y,z,cx,cy,‘method’)用MATLAB作散点数据的插值计算要求cx取行向量,cy取为列向量。被插值点插值方法插值节点被插值点的函数值‘nearest’最邻近插值‘linear’双线性插值‘cubic’双三次插值'v4'-Matlab提供的插值方法缺省时,双线性插值海底曲面图结果三、实验内容1.已知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],利用其中的部分数据,分别用线性插值和3次插值,求x=2.0处的值。2.已知二元函数在点集上的值为,(,)zfxy{(,)|0,1,2,3,4;0,1,2,3,4}Dxyxy4040432223210123222340404其中,左上角位置表示,右下角位置表示画出原始网格图和将网格细化为间隔为0.1后的插值网格图。3.做课件中的例4和例5.4.完成实验报告。(0,0)(4,4)
本文标题:第九章插值-2014111719522614
链接地址:https://www.777doc.com/doc-2123996 .html