MATLAB: Interp1 using method ‘previous’ returns an unexpected NaN

interp1MATLABnan

x = [1 2 4]; v = [17 100 17]; xq = 1:5; vq = interp1(x,v,xq,'previous');
vq = 17 100 100 17 NaN
Why is vq(5) not equal to 17?

Best Answer

This is clearly explained in the interp1 documentation, in the section "Extrapolation strategy":
  • If you specify the 'pchip' or 'spline' interpolation methods, then the default behavior is 'extrap'.
  • All other interpolation methods return NaN by default for query points outside the domain.
Your query point is outside of the input domain (from 1 to 4), so NaN is the correct and documented output.
As the documentation states, if you want to extrapolate, then you need to specify this:
vq = interp1(x,v,xq,'previous','extrap')