matlab中的插值计算函数,MATLAB中的插值函数|全国大学生数学建模竞赛(CUMCM)|MATLAB技术论坛 - Powered by Discuz!...

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可以是等距的也可以是不等距的.

你可能感兴趣的:(matlab中的插值计算函数)