running MATLAB ode45 back-to-back
Mostrar comentarios más antiguos
Hi All,
I am curious what happens with the first solution point when we run ode45 to integrate a right hand side function. The first state solution that is returned, is it the same as the initial condition? I would assume so because the associated time point for the first solution always seems to be a zero.
Next, suppose I am to run ode45 back-to-back because a physical phenomena abruptly changes. e.g. closing a valve in gas filled tank. In this case, a final solution for the previous ode integration becomes the initial condition for the next ode integration, i.e. successive iteration. Now, for the sake of continuity in time, I want to combine the solutions from two different ode integrations. What is the best way to do this? Should we remove the initial solution from the second integration and combine with the first solution? Also, for the corresponding time, should we consider the first solution time point of the second iteration to be exactly the same as the ending time point of the first integration?
Thank you so much!
-Taehun
Respuesta aceptada
Más respuestas (1)
Bjorn Gustavsson
el 18 de En. de 2021
Well if you have a problem like this (improvising for simplicity)
ode1 = @(t,y,alpha) alpha*y; % exponential growth
t_span1 = [0,3]
t_span2 = [3,12];
y0 = 1;
[t1,y1] = ode45(@(t,y) ode1(t,y,1),t_span1,y0);
[t2,y2] = ode45(@(t,y) ode1(t,y,-1/2),t_span2,y1(end));
t_both = [t1;t2];
y_both = [y1;y2];
You should be fine, if you want you can use unique to remove identical rows:
t_y = unique([t_both,y_both],'rows');
to get rid of the duplicate points. Or you can just remove either the last of the first or the first of the second outputs when concatenating.
HTH
1 comentario
Taehun Kim
el 18 de En. de 2021
Categorías
Más información sobre Programming en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!