注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

数据挖掘

学习数据挖掘

 
 
 

日志

 
 

Matlab插值函数  

2012-08-27 16:11:48|  分类: Matlab |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
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可以是等距的也可以是不等距的.



ppval 计算分段多项式

  评论这张
 
阅读(12163)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017