MATLAB Answers

ODE45 change y at event

16 views (last 30 days)
Can i influence the 'y' during an ode45 at a certain event?
I want to let the ODE45 stop at a certain event, manipulate the result at that timepoint and let it run further using the manipulated result as initial condition.A basic example is this:
spawnday=250;
function [value,isterminal,direction] = half_y_at_event(t, y, spawnday)
value = [t-spawnday];
isterminal = [1];
direction = [];
end
options=odeset('Events', @half_y_at_event, 'AbsTol', 1e-8, 'RelTol', 1e-8);
[t1, y1, te, ye, ie] = ode45(@dget_y, [0 500], [y_0], options, [pars]);
ye=ye/2;
[t2, y2] = ode45(@dget_y, [0 500], [ye], options, [pars]);
Is there a possibility to combine both ODE45 into one?
Mergin the matrices later is not an option.
  2 Comments
bstechel
bstechel on 14 Oct 2019
Using 2 ODE45 Is not convenient here since the event will occur multiple times over the total timespan of the ODE45 i'm interested in.

Sign in to comment.

Accepted Answer

Steven Lord
Steven Lord on 14 Oct 2019
You can use the ballode example as a model. That has an events function that stops the solver each time the bouncing ball touches the ground. It then changes the initial condition (based on the solution the solver gave when the event occurred) and starts the solver again with the new initial condition.
edit ballode
  3 Comments
bstechel
bstechel on 24 Sep 2020
type: edit ballode

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!