How to stop ode after 50th event has occurred
19 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
cgz6887
el 15 de Jul. de 2015
Respondida: Torsten
el 16 de Jul. de 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 comentarios
Respuesta aceptada
Torsten
el 16 de Jul. de 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 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Ordinary Differential Equations en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!