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?
65 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Parthiban C
el 7 de Ag. de 2018
Comentada: Christian
el 19 de Abr. de 2021
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)
0 comentarios
Respuesta aceptada
Stephen23
el 7 de Ag. de 2018
Editada: Stephen23
el 7 de Ag. de 2018
>> 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
2 comentarios
Christian
el 19 de Abr. de 2021
This min/max stuff does not work that way, if Y is not monotonously increasing, let's say
>> Y = [12,5000,4000];
Then I get this:
>> max(Y(1),min(Y(end),interp1(X,Y,[0,1.5,4],'linear','extrap')))
ans =
12 2506 3000
And I guess for X=4 we want to see 4000 instead of 3000.
In general monotony assumptions should only be made towards X, not towards Y.
Más respuestas (0)
Ver también
Categorías
Más información sobre Interpolation en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!