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?
71 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Stephen23
le 7 Août 2018
Modifié(e) : Stephen23
le 7 Août 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 commentaires
Christian
le 19 Avr 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.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Interpolation dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!