# Event function for ODE solver with binary values

21 views (last 30 days)
Nicolas Mira Gebauer on 17 Sep 2021 at 8:37
Commented: Nicolas Mira Gebauer on 20 Sep 2021 at 9:12
Is there any reason why creating an event function which can only take values of 1 or 0 a bad idea? If so, why?
I ask because, as I understand it, the event function, by definition, should recognize when the variable "crosses" 0, but technically if the outputs of my function are only 1 or 0, then it would never "cross" zero. However, I have been doing this and so far I don't think I have found any issues, except one time where my example didn't work and I never understood why.
As an example, the event function that I am using is the following:
function [value,isterminal,direction] = zeroevents(t,x,D)
%The event function should also accept yp (or xp) for the ode15i solver
isterminal = 1;
direction = 0;
insideD = D(t,x);
value = 1-insideD;
end
Where D(t,x) is a piecewise function with the following structure:
function out1 = D(t,x)
if x >= something
out1 = 1.0;
else
out1 = 0.0;
end
I hope the question is clear enough.
Thanks

Walter Roberson on 17 Sep 2021 at 9:46
Edited: Walter Roberson on 17 Sep 2021 at 9:46
It is not illegal, but it makes it more difficult to find the boundary.
In the case of x < something resulting in a 0 that is then effectively negated to get a termination request, another way of writing that would be
value = something - x;
Exception: this might not produce exactly the same behaviour right at x == something. In such a case, either adding or subtracting eps(realmin) would change the behaviour, depending which side you want the case to follow.
Nicolas Mira Gebauer on 20 Sep 2021 at 9:12
Indeed, out1 = 1 would mean that I want to terminate, that's why value in zeroevents(t,x,D) is 1 - insideD.
Also, z6 can only be whether 1 or 0, but it's included in the equations of the system as diff(z6(t),t) = 0. Thus, it will be constant until an event is detected (then I will update the value after the event, but before restarting the simulation).

R2020b

### Community Treasure Hunt

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

Start Hunting!