赞
踩
从已知的一些离散数据点及其函数值,即函数的列表法表示,推求出未知点上函数值的所谓插值方法,在科技工作中应用十分广泛,如查对数表、三解函数表中都会遇到这类插值问题。MATLAB中设有许多插值命令,以下介绍最常用的一元函数插值命令。
一元函数的插值命令
该命令的调用格式为:
(1) 输入参数x和y为已知的两个同维向量,满足函数 关系,它们是“造表”的根据。
(2)输出量 是与
对应的函数值。插值点
可以是数值、向量、矩阵,
与
维数相同。
其中y可以是矩阵,x,可以缺省,如果x缺省的话,那么默认x为自然数1到n,n为y矩阵的维数。
如果y为矩阵,那么y的各列将以x为公共的横坐标,计算多个(等于y的列数,size(y,2))插值函数。
输出值将是
维数× size(y,2)矩阵。超出范围
的
值,
将返回NaN。对于nearest与linear方法,如果插值点
在区间范围之外,则系统返回NaN(不是一个数),对于其他方法,系统将对超出范围的值进行外推运算。
yi=interp1(x,y,xi,method,'extrap') 利用指定的方法对超出范围的值进行外推计算
yi=interp1(x,y,xi,method,extrapval) 返回标量extrapval为超处范围值
pp=interp1(x,y,method,'pp') 利用指定的方法产生分段多项式
(3)用单引号括起来的method有五种方法可供选择:
① nearest:线性最近项插值,用直角折线连接各样本点
② linear:线性插值(默认),用直线依次连接各样本点,形成折线。省略‘method’时,即默认此项。
③ spline:三次样条插值,用分段三次多项式曲线光滑地连接相邻样本点,整体上具有函数、一阶和二阶导数连续性。
④ pchip:分段三次埃尔米特(Hermite)插值,用分段三次多项式Hermite插值曲线,依次连接相邻样本点。
⑤ cubic:双三次插值
这几种方法在速度、平滑性、内存使用方面有所区别,在使用时可以根据实际需要进行选择。包括:
1)最临近插值是最快的方法,但是使用它得到的结果平滑性最差。
2)线性插值要比最邻近插值占用更多的内存,运行时间略长。与最近邻插值不同,它生成的结果是连续的,但在顶点处会有坡度变化。
3)三次插值需要更多的内存,而且运行时间比最邻近法和线性插值要长。但是,在使用此法时,插值数据及其导数都是连续的。
4)三次样条插值的运行时间相对来说最长,内存消耗比三次插值略少。它生成的结果平滑性最好。
例1.利用interp1函数对y=sin(x)进行线性及样条插值。
- clear all;
- x=0:pi/4:2*pi;
- y=sin(x);
- xi=0:pi/16:2*pi;
- figure
- yi=interp1(x,y,xi); %默认线性插值
- plot(x,y,'o',xi,yi,':.');
- xlim([0 2 *pi]);
- title('默认线性插值');
- %实现样条插值
- figure
- yi2=interp1(x,y,xi,'spline'); %样条插值
- plot(x,y,'o',xi,yi2,':.');
- xlim([0 2 *pi]);
- title('样条插值');
线性插值效果:
样条插值效果:
例2.对下表的7个离散数据点分别进行最邻近插值、三次样条插值、分段三次插值,并画出相应的折线图。
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
y | 3.5 | 2.1 | 1.3 | 0.8 | 2.9 | 4.2 | 5.7 |
- x = [1 2 3 4 5 6 7];
- y = [3.5 2.1 1.3 0.8 2.9 4.2 5.7];
- xi=1:0.5:7;
- y1=interp1(x,y,xi,'nearest');
- y2=interp1(x,y,xi,'spline');
- y3=interp1(x,y,xi,'cubic');
- plot(x,y,'ro',xi,y1,xi,y2,xi,y3);
- legend('插值节点','最近邻插值','三次样条插值','分段三次插值')
运行程序效果图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。