Matlab interp1和x27;下一个';似乎给出了';最近的';

Matlab interp1和x27;下一个';似乎给出了';最近的';,matlab,interpolation,Matlab,Interpolation,我在每个zk处有一系列z值zk和一个温度值Tadjust0。在此基础上,我想创建一系列从zk(j-1)到zk(j)的高度步骤 我正试图通过以下方式实现这一目标: zk=[40.41; 50.04; 59.56; 68.95; 78.22; 87.40; 99.95]; Tadjust0=[-1.1500; 1.6033; 2.4287; 3.2430; 3.8500; 3.8500; 3.8500]; zo=[1:0.01:100]; Tadjust1=interp1(zk,Tadjust0,z

我在每个
zk
处有一系列z值
zk
和一个温度值
Tadjust0
。在此基础上,我想创建一系列从
zk(j-1)
zk(j)
的高度步骤

我正试图通过以下方式实现这一目标:

zk=[40.41; 50.04; 59.56; 68.95; 78.22; 87.40; 99.95];
Tadjust0=[-1.1500; 1.6033; 2.4287; 3.2430; 3.8500; 3.8500; 3.8500];
zo=[1:0.01:100];
Tadjust1=interp1(zk,Tadjust0,zo,'next','extrap');
figure
plot(zo,Tadjust1)
figure
scatter(zk,Tadjust0)
但据我所知,插值似乎使用了“最近的”而不是“下一步”:步骤不是在
zk(j)
处结束,而是在
(zk(j)+zk(j+1))/2处结束。事实上,如果我把代码改成“最近的”,我会得到完全相同的图


我怀疑问题在于同时使用相邻插值和外推。可以将插值和外推分开,以确保:

zk=[40.41; 50.04; 59.56; 68.95; 78.22; 87.40; 99.95];
Tadjust0=[-1.1500; 1.6033; 2.4287; 3.2430; 3.8500; 3.8500; 3.8500];
zo=[1:0.01:100];

% Nearest neigbour inter-/ extrapolation
Tadjust1=interp1(zk,Tadjust0,zo,'nearest','extrap');

% Get indices of zo within the range of zk
interp_range = zo > min(zk) & zo < max(zk);

% Replace the interpolated values by next neighbour interpolation
Tadjust1(interp_range)=interp1(zk,Tadjust0,zo(interp_range),'next');

figure
plot(zo,Tadjust1)
figure
scatter(zk,Tadjust0)
zk=[40.41;50.04;59.56;68.95;78.22;87.40;99.95];
Tadjust0=[-1.1500;1.6033;2.4287;3.2430;3.8500;3.8500;3.8500];
zo=[1:0.01:100];
%最近邻区间/外推
Tadjust1=interp1(zk,Tadjust0,zo,'nearest','extrap');
%得到zk范围内zo的指数
层间范围=zo>min(zk)和zo
原始数据: 结果:

我无法在R2016a安装上复制此内容。