MATLAB Answers

bstechel
0

ODE45 change y at event

bstechel
さんによって質問されました 2019 年 10 月 4 日
最新アクティビティ bstechel
さんによって コメントされました 2019 年 10 月 17 日
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
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
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.

サインイン to comment.

1 件の回答

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

  1 件のコメント

bstechel
2019 年 10 月 17 日
Ballode also loops the ode multiple times and merges the matrices. I guess there's no way around it.

サインイン to comment.



Translated by