How to stop ode after 50th event has occurred

19 vues (au cours des 30 derniers jours)
cgz6887
cgz6887 le 15 Juil 2015
Réponse apportée : Torsten le 16 Juil 2015
I am trying to run ode45 once using an event function, but have it stop after the 50th event has occurred. I am currently using a persistent counter to keep track of events, but am missing the logic to update the counter. Below is the code for my event function. I do not want to call ode45 50 times by updating the initial conditions with the terminal conditions from the previous call.
function [value,isterminal,direction] = y0eventPoincare(t,y)
persistent icount
if (isempty(icount))
icount=0;
end
if icount<50
value=y(2);
isterminal=0;
direction=1;
if (**Missing Logic**) %Event has occured
icount=icount+1;
end
end
if icount==50
value=y(2);
if true
% code
end
isterminal=1;
direction=1;
end
end

Réponse acceptée

Torsten
Torsten le 16 Juil 2015
Not each call to y0eventPoincare means that a new event has occured. Thus it is not possible to keep track of the number of events within the event function.
I don't see another way to count the number of events in the routine calling the ODE solver (thus to go the way you wanted to avoid).
Best wishes
Torsten.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by