MATLAB插值函数
2012-08-27 16:11:48| 分类: Matlab |举报|字号 订阅
matlab中常用的差值函数:
interp1 ,interplq ,interpft, spline, intep2, interp3, interpN.
2012a中有interp1,interp1q, interpft, spline, pchip, interp2, interp3, interpn, ppval
interp1
其调用格式为: yi= interp1(x,y,xi,'method')
其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 'method'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'cubic'立方插值.缺省时表示线性插值
interpft 利用FFT插值
interp1q函数
作用:形成线性插值函数。
格式: z=interp1q( x , y , xi)
它返回一个列向量,其中值为一元线性插值函数z在点xi的对应值,列向量x,y确定控制点下的水平和垂直坐标,x中的元素值必须单调递增,向量z的长度与x的相等。
例如:>>z=interp1q([0 255]’,[0 255]’,[0:255]’)
>>plot([0 255],[0 255],'o',[0:255],z)
会产生一个有256个元素的一对一的映射来连接控制点(0,0)和(255,255)——即,z=[0 1 2…255]’。
interpft()
在MATLAB中,一维快速傅立叶插值通过函数interpft()来实现,该函数利用傅立叶变换将输入数据变换到频域,然后用更多点的傅立叶逆变换,变换回时域,其结果是对数据进行增采样。调用格式如下。
y=interpft(x, n):对x进行傅立叶变换,然后采用n点傅立叶反变换,变回到时域。如果x是一个向量,数据x的长度为m,采样间隔为dx,则数据y的采样间隔是dx×m/n,其中n必须大于m。如果x是矩阵,该函数对矩阵x的列进行操作,其返回的结果y与x具有相同的列,行数为n。
y=interpft(x, n, dim):在dim指定的维度上进行操作。
【例5-13】 利用一维快速傅立叶插值实现数据增采样,其实现的MATLAB代码如下:
clear all;
x=0:1.1:8;
y=sin(x);
n=2*length(x); %增采样1倍
yi=interpft(y,n); %采用一维快速傅立叶插值
xi=0:0.55:8.3; %要插值的数据
figure; %画图显示
hold on;
plot(x,y,'ro',xi,yi,'b-');
legend('原始数据','插值后结果');
spline函数
作用:形成三次插值(cubic spline interpolation )
格式: z=spline(x , y ,xi)
列向量x,y确定控制点下的水平和垂直坐标,x中的元素值必须单调递增,向量z的长度与x的相等
----------------------------------另---------------------
在MATLAB中,三次样条插值可以采用函数spline(),该函数的调用格式如下。
yi=spline(x, y, xi):通过初始数据 产生插值函数 ,然后对数据xi进 行插值,返回值 。采用这种调用方式时,其相当于yi=interp1(x, y, xi, 'spline')。
pp=spline(x, y):该函数通过对初始数据x和y产生插值函数,并进行返回。然后利用函数ppval()对数据xi进行插值计算,其调用方式为yi=ppval(pp, xi),其中pp为插值函数。
--------------------------------------------------------------
例子:>>x = 0:10;
>>y = sin(x);
>>xx = 0:.25:10;
>>yi = interp1(x,y,xx); %interp1 q是interp1的特例
>>plot(x,y, ‘0’,xx,yi)
>>yy = spline(x,y,xx);
>>plot(x,y,'o',xx,yy)
interp2()进行二维插值,其调用格式如下。
zi=interp2(x, y, z, xi, yi):通过初始数据x、y和z产生插值函数y = f(x, y),返回值zi是(xi, yi)在函数f(x, y)上的值。
zi=interp2(x, y, z, xi, yi, method):其中method为可疑采用的插值方法。二维插值采用的方法有4种,分别是'nearest'、'linear'、'spline'和'cubic',其中线性插值为默认的插值方法。
zi=interp2(x, y, z, xi, yi, method, extrapval):当数据超过原始数据范围时,用extraval进行替代的一种外推方法。
【例5-14】 二维插值函数实例分析,分别采用'nearest'、'linear'、'spline'和'cubic'进行二维插值,并绘制三维表面图。其实现的MATLAB代码如下:
>> clear all;
[x,y]=meshgrid(-4:0.8:4); %原始数据
z=peaks(x,y);
[xi,yi]=meshgrid(-4:0.2:4); %插值数据
zi_nearest=interp2(x,y,z,xi,yi,'nearest'); %临近点插值
zi_linear=interp2(x,y,z,xi,yi); %系统默认为线性插值
zi_spline=interp2(x,y,z,xi,yi,'spline'); %三次样条插值
zi_cubic=interp2(x,y,z,xi,yi,'cubic'); %三次多项式插值
figure; %数据显示
hold on;
subplot(321);
surf(x,y,z); %绘制原始数据点
title('原始数据');
subplot(322);
surf(xi,yi,zi_nearest); %绘制临近点插值的结果
title('临近点插值');
subplot(323);
surf(xi,yi,zi_linear); %绘制线性插值的结果
title('线性插值');
subplot(324);
surf(xi,yi,zi_spline); %绘制三次样条插值的结果
title('三次样条插值');
subplot(325);
surf(xi,yi,zi_cubic); %绘制三次多项式插值的结果
title('三次多项式插值');
interp3()
在MATLAB中,采用函数interp3()进行三维插值,该函数的调用格式如下。
vi=interp3(x, y, z, v, xi, yi, zi):该函数通过初始数据 产生插值函数 ,然后对数据 进行插值,返回值为vi。
vi=interp3(x, y, z, v, xi, yi, zi, method):该函数中method为可以采用的插值方法,共有4种,分别是'nearest'、'linear'、'spline'和'cubic',其中线性插值为默认的插值方法。
【例5-16】 利用函数interp3()进行三维插值,代码如下:
clear all;
[x,y,z,v]=flow(10);
[xi,yi,zi]=meshgrid(.1:.25:10,-3:.25:3,-3:.25:3); %创建网格数据
vi = interp3(x,y,z,v,xi,yi,zi); % vi为25*40*25
slice(xi,yi,zi,vi,[6 9.5],2,[-2 .2]);
shading flat
N维插值函数 interpN( )
其中N可以为2,3,…,如N=2为二维插值,调用格式为
zi=interp2(x,y,z,Xi,Yi,’method’)
其中x,y为横纵坐标上的坐标点,{(x,y)}=mashgrid(x,y)生成平面网格点,z为观测到的在网格点上的二元函数值.{(x,y,z)}构成空间插值节点.引入两个向量xi,yi.xi为横坐标上的插值点,yi为纵坐标上的插值点.便可给出
[Xi,Yi]=meshgrid(xi,yi)
zi为新的或者是加细了的网格点上产生的插值结果(函数值).
'method' 表示采用的插值方法.`nearest` 最邻近插值,`linear`线性插值,`cubic`双三次插值.缺省时表示线性插值.所有的插值方法都要求x和y是单调的网格,x和y可以是等距的也可以是不等距的.