- why do you keep searching once you do find a match?
- what if t is non-scalar ?
- why are you not using interp1() ?
Unrecognized function or variable
7 次查看(过去 30 天)
显示 更早的评论
Hello!
I am trying to perform a linear interpolation within a vector of 100 points (beta) so that I can use it in the integrations. When I try to do that matlab gives me the following error: Unrecognized function or variable 'index'.
I do this as part of an optimization program using fmincon where Ti Tf and beta are the optimized variables
I have attached my code below (t is the integration time given by ODE45). Thanks to anyone who can help me!
function [B] = interp(t)
global beta Ti Tf
p = 100;
b1 = beta;
tspan = linspace(Ti,Tf,p);
dt = (Tf-Ti)/(p-1);
for i = 1:length(tspan)
if (t>=tspan(i) && t<tspan(i)+dt)
index=i;
end
end
if index<=(p-2)
if t>=tspan(index)
B = b1(index)+(b1(index+1)-b1(index))*(t-tspan(index))/dt;
else
B = b1(index);
end
else
B = b1(index);
end
end
0 个评论
回答(1 个)
Walter Roberson
2022-1-6
编辑:Walter Roberson
2022-1-6
for i = 1:length(tspan)
if (t>=tspan(i) && t<tspan(i)+dt)
index=i;
end
end
That only sets index in the case that the if matched something . If it does not, then you never assign to index .
In particular, if t < Ti or t >= Tf or if Ti then you do not assign to index.
Questions:
6 个评论
Walter Roberson
2022-1-7
That interp1() call is doing linear interpolation. As I already explained, linear interpolation is not compatible with mathematics of ode*() .
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!