一位插值、二维插值
(1)测量数据的数据量较小并且数据值是准确的, 或者基本没有误差,这时我们一般用插值的方法来 解决问题。 (2)测量数据的数据量较大或者测量值与真实值 有误差,这时一般用曲线拟合的方法来解决问题。
在MATLAB中,无论是插值还是拟合,都有相应的 命令来处理。本实验讨论插值。
一维插值 已知离散点上的数据集 {( x1 , y1 ),( x2 , y2 ),,( xn , yn )},即 已知在点集 X {x1, x2 ,, xn}上的函数值 Y {y1, y2 ,, yn}, 构造一个解析函数(其图形为一曲线)通过这些点, 并能够求出这些点之间的值,这一过程称为一维插 值。完成这一过程可以有多种方法,我们现在 在MATLAB中,无论是插值还是拟合,都有相应的 命令来处理。本实验讨论插值。
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) 是同类型的。
服务年限 年份 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
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')
这两种计算方法得到的数据有微小的差异,这种差 异我们从两个图形上也能够看到,主要表现在节点 (那些绘制成圆点的点)的附近。前者是光滑的, 后者有角点出现。
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年的劳动报酬表如下: 某企业工作人员的月平均工资(元)
试计算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
一维插值 已知离散点上的数据集 {( 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 处的值。
例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;
这两种计算方法得到的数据有微小的差异,这种差 异我们从两个图形上也能够看到,主要表现在节点 (那些绘制成圆点的点)的附近。前者是光滑的, 后者有角点出现。
二维插值 已知离散点上的数据集 {( 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 如果用线性插值,则程序的后四行改为: 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软件中利用给定数据进行插值运算的 方法。
二、相关知识
在生产和科学实验中,自变量 x 与因变量 y 间的函 数关系 y f ( x) 有时不能写出解析表达式,而只能 得到函数在若干点的函数值或导数值,或者表达式 过于复杂需要较大的计算量而只能计算函数在若干 点的函数值或导数值,当要求知道其它点的函数值 时,需要估计函数值在该点的值。 为了完成这样的任务,需要构造一个比较简单的函 数 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
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
xi 可以是一个标量,也可以是一个向量,是向量时, 必须单调,method可以下列方法之一: ‘nearest’:最近邻点插值,直接完成计算; ‘spline’:三次样条函数插值; ‘linear’:线性插值(缺省方式),直接完成计算
利用MATLAB提供的函数interp1,这个函数的调用 格式为:
例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')