ODE Event - Terminal

2 views (last 30 days)
Gustavo Lunardon
Gustavo Lunardon on 17 Aug 2020
Edited: Gustavo Lunardon on 17 Aug 2020
Hello. I have a problem with my ode event. I want it to stop integration if one of the variables to be integrated is a complex number or negative. Let's call it y.
Inside the ode function I take care of this in my second event: values(2) = (isreal(y)==1), according to help the event would happen when value(i) is 0.
isterminal = [1 1]; % both events are terminal
direction = zeros(size(values)); % the zero can be approached from either direction
So it checks if is complex and if it is not then it ignores and continues to run. Problem is that there seems to be an internal loop in ode, see example below from a single integration step:
values =
1.00000000000000e+000 1.00000000000000e+000 % nothing happens, continue to integrate
y =
284.083918031355e-003 <--------------- event checked correctly, this is not complex
y =
284.083918031355e-003
y=
284.083918031355e-003
y =
284.083918031355e-003
y =
284.083917608037e-003
y =
284.083918031355e-003
y =
284.345056013165e-003 + 708.567318304124e-006i <------------------ ode runs several times without checking for the event until it reached a complex number and the code crashes
What is the problem? Is there an option to force matlab to check for events even in these internal ode loops (within the same integration step)?

Answers (0)

Categories

Find more on Programming 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!