matlab interp插值函数

本文转载自https://www.jianshu.com/p/7d5e061747ca

什么是插值函数咧,我所理解的插值函数就是,有一些点但是直接plot出来的图,不大好看,可能是锯齿的散点的,但是你想要一个平滑的曲线,而且去掉那些不大好看的点,这就需要插值函数来解决了。

MATLAB中的插值函数为interp1,其调用格式为: yi= interp1(x,y,xi,'method')

其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 'method'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'cubic'立方插值.缺省时表示线性插值。

注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。

用指定的算法计算插值:
’nearest’:最近邻点插值,直接完成计算;
’linear’:线性插值(缺省方式),直接完成计算;
’spline’:三次样条函数插值。
’cubic’:该方法保留单调性与数据的外形;

图一因为有0值使其像个锯齿波,巨丑,而且也不适用某些仿真,插值过后顺眼多了,

 

然后就是二维三维插值函数。

命令2 interp2

功能 二维数据内插值
(1)ZI = interp2(X,Y,Z,XI,YI,method)
返回矩阵ZI,其元素包含对应于参量XI 与YI(可以是向量、或同型矩阵) 的元素, 即Zi(i,j) ←[Xi(i,j),yi(i,j)]。用户可以输入行向量和列向量Xi 与Yi,此时,输出向量Zi 与矩阵meshgrid(xi,yi)是同型的。
(2)ZI = interp2(Z,XI,YI)
缺省地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一种情形进行计算。

用指定的算法method 计算二维插值:
’linear’:双线性插值算法(缺省算法);
’nearest’:最临近插值;
’spline’:三次样条插值;
’cubic’:双三次插值。

[X,Y] = meshgrid(-3:.25:3);
Z = peaks(X,Y);
[XI,YI] = meshgrid(-3:.125:3);
ZZ = interp2(X,Y,Z,XI,YI);
surfl(X,Y,Z);hold on;
surfl(XI,YI,ZZ+15)
axis([-3 3 -3 3 -5 20]);shading flat
hold off

命令3 interp3

(4)VI = interp3(X,Y,Z,V,XI,YI,ZI,method)
找出由参量X,Y,Z决定的三元函数V=V(X,Y,Z)在点(XI,YI,ZI)的值。
%用指定的算法method 作插值计算:
‘linear’:线性插值(缺省算法);
‘cubic’:三次插值;
‘spline’:三次样条插值;
‘nearest’:最邻近插值。

[x,y,z,v] = flow(20);

[xx,yy,zz] = meshgrid(.1:.25:10, -3:.25:3, 
-3:.25:3);

vv = interp3(x,y,z,v,xx,yy,zz);

slice(xx,yy,zz,vv,[6 9.5],[1 2],[-2 .2]); shading interp;colormap cool

命令4 griddata

功能 数据格点
(1)ZI = griddata(x,y,z,XI,YI,method)
用二元函数z=f(x,y)的曲面拟合有不规则的数据向量x,y,z。griddata 将返回曲面z 在点(XI,YI)处的插值。曲面总是经过这些数据点(x,y,z)的输入参量(XI,YI)通常是规则的格点(像用命令meshgrid 生成的一样)。

用指定的算法method 计算:
‘linear’:基于三角形的线性插值(缺省算法);
‘cubic’: 基于三角形的三次插值;
‘nearest’:最邻近插值法;
‘v4’:MATLAB 4 中的griddata 算法。

命令5 spline

功能 三次样条数据插值
格式
(1)yy = spline(x,y,xx)

x = [0 2 4 5 8 12 12.8 17.2 19.9 20]; y = exp(x).*sin(x);

xx = 0:.25:20;

yy = spline(x,y,xx);

plot(x,y,'o',xx,yy)

命令6 meshgrid

功能 生成用于画三维图形的矩阵数据
格式 [X,Y] = meshgrid(x,y) 将由向量x,y(可以是不同方向的)指定的区域[min(x),max(x) , min(y) , max(y)] 用直线x=x(i),y=y(j) ( i=1,2,…,length(x) ,j=1,2,…,length(y))进行划分。这样,得到了length(x)*length(y)个点,
这些点的横坐标用矩阵X 表示,X 的每个行向量与向量x 相同;这些点的纵坐标用矩阵Y 表示,Y 的每个列向量与向量y 相同。其中X,Y可用于计算二元函数z=f(x,y)与三维图形中xy 平面矩形定义域的划分或曲面作图。

[X,Y] = meshgrid(x) %等价于[X,Y]=meshgrid(x,x)。
[X,Y,Z] = meshgrid(x,y,z) %生成三维阵列X,Y,Z,用于计算三元函数v=f(x,y,z)或三维容积图。

[X,Y] = meshgrid(1:3,10:14)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值