interp1' next'似乎给出了最近的'

时间:2017-03-04 18:15:36

标签: matlab interpolation

我在zk处有一系列z值Tadjust0和温度值zk。从此我想创建一系列高度Tadjust0(j)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结束。事实上,如果我将代码更改为最近的'我得到完全相同的情节。

enter image description here

1 个答案:

答案 0 :(得分:0)

我怀疑问题在于同时使用下一个邻居插值外推。您可以将插值和外推分开以确保:

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)

原始数据: enter image description here 结果: enter image description here