How to use Matlab ODE solver events to stop an integration

In summary: So in summary, you are using 'Events' to stop an integration. This will cause the system of equations to converge more rapidly.
  • #1
ryan.j
Gold Member
9
0
How to use Matlab ODE solver "events" to stop an integration

I'm using Matlab's ODE solver (specifically ode15s) to solve a system of equations. The sum of the values of the equations eventually arrive at a steady state, but the time at which that occurs is dependent on several things, not known beforehand, and is one of the things I'm studying.

Consequently, I'd like to set tf in the call to the ODE solver to a value that I'm confident is beyond that time, and cause the integration to stop once a certain convergence criteria is met.

I have been unable to use 'Events' to do this effectively. Here is the function that is called by 'Events':

function [value,isterminal,direction] = Tprime_converger(t,T)

if length(t) == 1 %convergence can only be checked for t>1
value = 1;
else
value = abs(sum(T(length(t)-1,;)) - sum(T(length(t),;))) - 2*eps;
end

isterminal = 1;
direction = 0;

endAny help would be greatly appreciated.

Thanks.
-ryan
 
Last edited:
Physics news on Phys.org
  • #2


After ruminating on it through the night I came up with a solution. If someone knows of a better way to do this, by all means share it.

What I did was create a variable that was global to both the "Tprime_converger" function and the "Tprime" function, which is the function where the system of ODEs is defined.

At the end of "Tprime", I added the computation :

Taco = T - dT;

and I changed "Tprime_converger" to :

function [value,isterminal,direction] = Tprime_converger(t,T)

value = abs( sum(Taco(:)) - sum(T(:)) ) - 2*eps;

isterminal = 1;
direction = -1;

end

I checked the values against computations using the same functions without implementing any 'Events' where the ODE solver is part of a loop with its own convergence checker built in at each time step the loop iterates on, and the solutions differed with a relative difference on the order of 10^-14; essentially no difference. The upshot is that the implementation using 'Events' converges significantly more rapidly.

-ryan
 

FAQ: How to use Matlab ODE solver events to stop an integration

What is a Matlab ODE solver event?

A Matlab ODE solver event is a feature that allows the integration process to be stopped at specific points, such as when a certain condition is met or when a certain event occurs.

How do I specify an event in Matlab ODE solver?

To specify an event in Matlab ODE solver, you need to use the "events" option in the ODE solver function. This option takes in an event function that evaluates the event condition and returns a value of 0 when the event occurs.

What types of events can be specified in Matlab ODE solver?

There are several types of events that can be specified in Matlab ODE solver, such as time events, state events, and combination events. Time events occur at a specific time or after a certain amount of integration time. State events occur when a specific state variable reaches a certain value. Combination events are a combination of time and state events.

How do I stop the integration process when an event occurs?

To stop the integration process when an event occurs, you need to use the "Stop" option in the event function. This option takes a value of 1 when the integration process should be stopped and 0 when it should continue.

Can I have multiple events in a single Matlab ODE solver integration?

Yes, you can have multiple events in a single Matlab ODE solver integration. You can specify multiple event functions and their corresponding options in the "events" option of the ODE solver function. The integration process will be stopped when any of the specified events occur.

Similar threads

Replies
2
Views
1K
Replies
1
Views
2K
Replies
8
Views
2K
Replies
1
Views
4K
Replies
2
Views
3K
Replies
1
Views
2K
Replies
1
Views
3K
Replies
2
Views
2K
Back
Top