一位插值、二维插值

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


(1)测量数据的数据量较小并且数据值是准确的, 或者基本没有误差,这时我们一般用插值的方法来 解决问题。 (2)测量数据的数据量较大或者测量值与真实值 有误差,这时一般用曲线拟合的方法来解决问题。


在MATLAB中,无论是插值还是拟合,都有相应的 命令来处理。本实验讨论插值。
一维插值 已知离散点上的数据集 {( x1 , y1 ),( x2 , y2 ),,( xn , yn )},即 已知在点集 X {x1, x2 ,, xn}上的函数值 Y {y1, y2 ,, yn}, 构造一个解析函数(其图形为一曲线)通过这些点, 并能够求出这些点之间的值,这一过程称为一维插 值。完成这一过程可以有多种方法,我们现在 在MATLAB中,无论是插值还是拟合,都有相应的 命令来处理。本实验讨论插值。
实验十二
实验数据的插值
一、实验目的

学会MATLAB软件中利用给定数据进行插值运算的 方法。
二、相关知识
在生产和科学实验中,自变量 x 与因变量 y 间的函 数关系 y f ( x) 有时不能写出解析表达式,而只能 得到函数在若干点的函数值或导数值,或者表达式 过于复杂需要较大的计算量而只能计算函数在若干 点的函数值或导数值,当要求知道其它点的函数值 时,需要估计函数值在该点的值。 为了完成这样的任务,需要构造一个比较简单的函 数 y ( x) ,使函数在观测点的值等于已知的值,或 使函数在该点的导数值等于或者接近已知的值,寻 找这样的函数 y ( x) 有很多方法。根据测量数据 的类型有以下两类处理观测数据的方法。

xi 可以是一个标量,也可以是一个向量,是向量时, 必须单调,method可以下列方法之一: ‘nearest’:最近邻点插值,直接完成计算; ‘spline’:三次样条函数插值; ‘linear’:线性插值(缺省方式),直接完成计算


利用MATLAB提供的函数interp1,这个函数的调用 格式为:

method可以下列方法之一: ‘nearest’:最近邻点插值,直接完成计算; ‘spline’:三次样条函数插值; ‘linear’:线性插值(缺省方式),直接完成计算 ‘cubic’:三次函数插值;

MATLAB命令:Zi=interp2(X,Y,Z,Xi,Yi,method) 该命令用指定的算法找出一个二元函数 z f ( x, y ) , 然后以 f ( x, y) 给出 ( x, y ) 处的值。返回数据矩阵Zi, Xi,Yi是向量,且必须单调,Zi和meshgrid(Xi,Yi) 是同类型的。

二、相关知识

y (1)测量数据的数据量较小并且数据值是准确的, 或者基本没有误差,这时我们一般用插值的方法来 解决问题。

(2)测量数据的数据量较大或者测量值与真实值 有误差,这时一般用曲线拟合的方法来解决问题。 为了完成这样的任务,需要构造一个比较简单的函 数 y ( x) ,使函数在观测点的值等于已知的值,或 使函数在该点的导数值等于或者接近已知的值,寻 找这样的函数 y ( x) 有很多方法。根据测量数据 的类型有以下两类处理观测数据的方法。

例3:设有数据x=1,2,3,4,5,6,y=1,2,3,4,在由x, y构成的网格上,数据为: 12,10,11,11,13,15 16,22,28,35,27,20 18,21,26,32,28,25



203.212 239.092 322.767
226.505 273.706 426.730 249.633 370.281 598.243] w=interp2(service,years,wage,15,1975) 计算结果为:235.6288
试计算1975年时,15年工龄的工作人员平均工资。
解:程序如下: years=1950:10:1990; service=10:10:30; wage=[150.697 169.592 187.652 179.323 195.072 250.287

1960 1970 1980 1990

例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年的产量,用三次 样条插值的方法,画出每隔一年的插值曲线图形, 同时将原始的数据画在同一图上。 ‘cubic’:三次函数插值; 对于[min{xi},max{xi}]外的值,MATLAB使用外推的 方法计算数值。

服务年限 年份 1950 1960 1970 1980 1990

10 150.697 179.323 203.212 226.505 249.633
20 169.592 195.072 239.092 273.706 370.281
30 187.652 250.287 322.767 426.730 598.243

179.323 203.212 226.505 249.633
195.072 239.092 273.706 370.281
250.287 322.767 426.730 598.243
试计算1975年时,15年工龄的工作人员平均工资。
解:程序如下: years=1950:10:1990; service=10:10:30; wage=[150.697 169.592 187.652 179.323 195.072 250.287 203.212 239.092 322.767 226.505 273.706 426.730 249.633 370.281 598.243] w=interp2(service,years,wage,15,1975) 计算结果为:235.6288


这两种计算方法得到的数据有微小的差异,这种差 异我们从两个图形上也能够看到,主要表现在节点 (那些绘制成圆点的点)的附近。前者是光滑的, 后者有角点出现。
二维插值 已知离散点上的数据集 {( x1, y1, z1 ),( x2 , y2 , z2 ),,( xn , yn , zn )} 即已知在点集 {( x1, y1 ),( x2 , y2 ),,( xn , yn )} 上的函数值 {z1 , z2 ,, zn } ,构造一个解析函数 z f ( x, y) (其图形 为一曲面)通过这些点,并能够求出这些已知点以 外的点的函数值,这一过程称为二维插值。 MATLAB命令:Zi=interp2(X,Y,Z,Xi,Yi,method) 该命令用指定的算法找出一个二元函数 z f ( x, y) , 然后以 f ( x, y) 给出 ( x, y ) 处的值。返回数据矩阵Zi, Xi,Yi是向量,且必须单调,Zi和meshgrid(Xi,Yi) 是同类型的。

x=1900:2010; y=interp1(year,product,x,'spline'); plot(year,product,'o',x,y); 计算结果为:p1995=253.2278 如果用线性插值,则程序的后四行改为: 解:程序如下 year=1900:10:2010; product=[75.995,91.972,105.711,123.203, 131.699,150.697,179.323,203.212,226.505,249.6 33,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=253.2278 如果用线性插值,则程序的后四行改为: p1995=interp1(year,product,1995,'linear') x=1900:2010; y=interp1(year,product,x,'linear'); plot(year,product,'o',x,y); 计算结果为:p1995=252.9885

method可以下列方法之一: ‘nearest’:最近邻点插值,直接完成计算; ‘spline’:三次样条函数插值; ‘linear’:线性插值(缺省方式),直接完成计算 ‘cubic’:三次函数插值;

例2:已知1950年到1990年间每隔10年,服务年限 从10年到30年每隔10年的劳动报酬表如下: 某企业工作人员的月平均工资(元)


这两种计算方法得到的数据有微小的差异,这种差 异我们从两个图形上也能够看到,主要表现在节点 (那些绘制成圆点的点)的附近。前者是光滑的, 后者有角点出现。
p1995=interp1(year,product,1995,'linear') x=1900:2010; y=interp1(year,product,x,'linear'); plot(year,product,'o',x,y); 计算结果为:p1995=252.9885
ห้องสมุดไป่ตู้
例3:设有数据x=1,2,3,4,5,6,y=1,2,3,4,在由x, y构成的网格上,数据为: 12,10,11,11,13,15 16,22,28,35,27,20 18,21,26,32,28,25 20,25,30,33,32,20 画出原始网格图和将网格细化为间隔为0.1后的插 值网格图。 解:程序为: x=1:6; y=1:4;
yi=interp1(X,Y,xi,method) 该命令用指定的算法找出一个一元函数 y f ( x) , 然后以 f ( x) 给出 x 处的值。

xi 可以是一个标量,也可以是一个向量,是向量时, 必须单调,method可以下列方法之一: ‘nearest’:最近邻点插值,直接完成计算; ‘spline’:三次样条函数插值; ‘linear’:线性插值(缺省方式),直接完成计算 ‘cubic’:三次函数插值; 对于[min{xi},max{xi}]外的值,MATLAB使用外推的 方法计算数值。

一维插值 已知离散点上的数据集 {( x1 , y1 ),( x2 , y2 ),,( xn , yn )},即 已知在点集 X {x1 , x2 ,, xn }上的函数值 Y { y1 , y2 ,, yn }, 构造一个解析函数(其图形为一曲线)通过这些点, 并能够求出这些点之间的值,这一过程称为一维插 值。完成这一过程可以有多种方法,我们现在利用 MATLAB提供的函数interp1,这个函数的调用格式 为: yi=interp1(X,Y,xi,method) 该命令用指定的算法找出一个一元函数 y f ( x) , 然后以 f ( x) 给出 x 处的值。
例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.6 33,256.344,267.893] p1995=interp1(year,product,1995,'spline')
相关文档
最新文档