odeset: 'Event' as a threshold not zero
6 次查看(过去 30 天)
显示 更早的评论
I want to halt ode execution and save the output after one of the functions drops below a certain bound. I'm trying to do this with odeset('Events',@events) as follows
function [sol,soln] = fullSScollHM8
% set parameters
options = odeset('Events',@events);
sol2 = ode15s(@fullSSfunc,[t0,tf],init,options);
end
function dy = fullSSfunc(~,y)
dy(1) = ...
dy(7) = ...
end
function [value,isterminal,direction] = events(~,y)
value = y(7) - 10^(-10);
% detect when y(7) gets too low
isterminal = 1; % halt integration
direction = 0; % any which way
end
But if I output value, the code continues to run when y(7) drops below 10^(-10) because value is never zero. It seems like it should be straightforward to define an 'Event' within odeset not with a zero but rather a threshold. Can someone help me please?
0 个评论
采纳的回答
Walter Roberson
2016-2-16
value = y(7) > 10^(-10); %false, 0, when y(7) falls far enough
Remember, a negative value is not a 0 and the termination is to occur when a 0 is detected. The documentation does imply that a crossing should be detected, but does not really state it outright.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Ordinary Differential Equations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!