MATLAB: How to use inerpolation option with end values? If I use interp1 command it’s giving NaN as the output if input is out of the range. I want to use end values if input is out of the range

interpolation

1 120
2 5000
3 12000
My input is something like this. If i give 4 as my input currently it's giving NaN as the output but I want output to be 12000(i.e end value)

Best Answer

>> X = [1,2,3];
>> Y = [12,5000,12000];
>> interp1(X,Y,4,'nearest','extrap')
ans = 12000
>> interp1(X,Y,4,'linear','extrap')
ans = 19000
But note that you cannot pick a method like linear, spline, etc, and also limit the extrapolation to the end values:
>> interp1(X,Y,[0,1.5,4],'linear','extrap') % linear -> not end values
ans =
-4976 2506 19000
>> interp1(X,Y,[0,1.5,4],'nearest','extrap') % nearest -> not linear interpolated
ans =
12 5000 12000
But you can easily select the interpolation method and limit to the end values, by simply using max and min:
>> max(Y(1),min(Y(end),interp1(X,Y,[0,1.5,4],'linear','extrap')))
ans =
12 2506 12000
If you only need to extrapolate in one direction then you could set the extrapolation value:
>> interp1(X,Y,[1.5,4],'linear',Y(end))
ans =
2506 12000