ODE45 change y at event

4 次查看(过去 30 天)
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 个评论
darova
darova 2019-10-4
Using ode45 two times?
[t1, y1, te, ye, ie] = ode45(@dget_y, [0 500], [y_0], options, [pars]);
ye = ye/2;
[t2, y2] = ode45(@dget_y, [0 500]+t1(end), ye(:,end));
bstechel
bstechel 2019-10-14
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.

请先登录,再进行评论。

采纳的回答

Steven Lord
Steven Lord 2019-10-14
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 个评论
Corentin Dewez-Raszka
编辑:Corentin Dewez-Raszka 2020-9-24
Hey, sorry to disturb, but I have the ame problem you did, where can I get the code for ballode ?
EDIT : nevermind, found it, thx guys
bstechel
bstechel 2020-9-24
编辑:bstechel 2020-9-24
type: edit ballode

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Ordinary Differential Equations 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by