odeset: 'Event' as a threshold not zero
6 views (last 30 days)
Show older comments
Sylvia Sullivan
on 16 Feb 2016
Commented: Sylvia Sullivan
on 17 Feb 2016
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 Comments
Accepted Answer
Walter Roberson
on 16 Feb 2016
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.
More Answers (0)
See Also
Categories
Find more on Ordinary Differential Equations 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!