Matlab插值函数

一维插值

一维插值命令interp1

1
2
3
4
5
6
7
vq = interp1(x,v,xq)
vq = interp1(x,v,xq,method)
vq = interp1(x,v,xq,method,extrapolation)
vq = interp1(v,xq)
vq = interp1(v,xq,method)
vq = interp1(v,xq,method,extrapolation)
pp = interp1(x,v,method,'pp')

method取值:
‘nearest’, ‘next’, ‘previous’, ‘linear’,’spline’,’pchip’, or ‘cubic’. The default method is ‘linear’

Issue 1 采用 interp1 插值时,出现网格矢量必须包含特征点的错误

其原因为原始数据存在单个横坐标对应多个纵坐标的情况。这种情况在大地球物理中非常常见,比如我们常用的iasp91模型,其纵波速度在某一深度处会出现阶变,而插值程序是不可能对两个横坐标相同的点,但纵坐标不同进行插值的。

对非矩阵域进行插值

原文链接:
http://blog.sciencenet.cn/blog-1103122-927602.html

1
2
3
4
5
6
>> load('x1.mat');
>> load('y1.mat')
>> load('T.mat');
>> load('Lon.mat');
>> load('Lat.mat');
>> t11=interp2(x1,y1,T,Longitude,Latitude,'cubic');

错误使用 interp2>makegriddedinterp (line 235)
输入网格为无效的 MESHGRID。

出错 interp2 (line 136)
F = makegriddedinterp(X, Y, V, method,extrap);
经查看这个帖子,发现interp2的插值数据必须是矩形域,即已知数据点(x,y)组成规则的矩阵,或称之为栅格,可使用meshgid生成。
这篇帖子中还提供了另外一个函数:griddata函数的已知数据点(X,Y)不要求规则排列,特别是对试验中随机没有规律采取的数据进行插值具有很好的效果。griddata(X,Y,XI,YI,’v4’) v4是一种插值算法,没有具体的名字,原文称为“MATLAB 4 griddata method”,是一种很圆滑的差值算法,效果很好。

1
>> t11=griddata(x1,y1,T,Longitude,Latitude,'v4');

完美实现空间内插。

您的支持将是我前进的不懈动力