How to stop ode after 50th event has occurred
19 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
cgz6887
am 15 Jul. 2015
Beantwortet: Torsten
am 16 Jul. 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
0 Kommentare
Akzeptierte Antwort
Torsten
am 16 Jul. 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.
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Ordinary Differential Equations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!