1*0 empty double row vector
8 views (last 30 days)
Show older comments
X = [-14 -12 -10. -6. -2 2. 6. 8 10 12 14 16 18];
Y = [-0.8 -1.1 -.88 -.44 0 .44 .88 1.1 1.32 1.54 1.76 1.98 1.7];
y1 = intrp(-20,X,Y)
y2 = intrp(-11,X,Y)
y3 = intrp(9,X,Y)
y4 = intrp(19,X,Y)
function out = intrp(in,X,Y)
% interpolate a 2-d function
% in: input value of x
% X: input vector
% Y: output vector
% out: output value of Y=f(X) for X = in
X = [-14 -12 -10. -6. -2 2. 6. 8 10 12 14 16 18];
Y = [-0.8 -1.1 -.88 -.44 0 .44 .88 1.1 1.32 1.54 1.76 1.98 1.7];
if (in < -14)
loc = find(in < X,1);
out = Y(loc)
elseif (in > 18)
loc = find(in < X,1);
out = Y(loc-1)
else
loc = find(in < X,1);
out = Y(loc-1)+(Y(loc)-Y(loc-1))/(X(loc)-X(loc-1))*(in-X(loc-1))
end
end
0 Comments
Answers (1)
Walter Roberson
on 17 Mar 2023
19 < X is never true, so find() is going to return empty.
What result were you hoping for in the case where the input value is greater than all of the X values?
Question: why are you passing X into your function but then ignoring the input X and re-assigning values to X inside the function?
See Also
Categories
Find more on Interpolation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!