Saving each vector of an ode45 vector solution in a matrix.

2 visualizaciones (últimos 30 días)
Gabriel Venter
Gabriel Venter el 26 de Abr. de 2021
Comentada: J. Alex Lee el 27 de Abr. de 2021
I have the following code, where I am using a different value of a parameter G in my ODE system (solving it w/ ode45) and want to plot each solution on the same graph. It isnt the same as IC's, as these are the same but the parameter varies. Currently I have:
for i=1:20
G=i/20 %Saving that iterates value of G
[phi,y]=ode45(@(phi,y) odefun(phi,y,G), timerange, IC);
z(i,;)=y %
end
then I want to save all these y's without creating 20 vectors. Is there a way to save each vector y as a column of a matrix? I am very lost and any direction would be very helpful, I cannot find a thread or anythign on the helpcenter.
Thanks in advance
  3 comentarios
J. Alex Lee
J. Alex Lee el 27 de Abr. de 2021
Another important question is if "timerange" are just the 2 point limits of time, or a vector; if just the limits, each version may produce different length of y (even if it was 1D problem). In such a case, you couldn't [easily] use a matrix to store the results anyway.
Gabriel Venter
Gabriel Venter el 27 de Abr. de 2021
I have a 2D autuonomous ODE system here. And I was worried about this timestep problem since ode45 uses a variable timestep and that would be different for different G, so clearly what I was doing was stupid. Thanks!

Iniciar sesión para comentar.

Respuestas (1)

J. Alex Lee
J. Alex Lee el 27 de Abr. de 2021
Editada: J. Alex Lee el 27 de Abr. de 2021
Use a cell array instead
z = cell(1,20)
for i=1:20
G=i/20 %Saving that iterates value of G
[phi,y]=ode45(@(phi,y) odefun(phi,y,G), timerange, IC);
z{i}=y %
end
Or better yet just use the solution structure version of output
for i=20:-1:1
G=i/20 %Saving that iterates value of G
sol(i) = ode45(@(phi,y) odefun(phi,y,G), timerange, IC);
end
  2 comentarios
Gabriel Venter
Gabriel Venter el 27 de Abr. de 2021
Thank you! Lifesaver. What does the extra "20:-1:1" bit mean there, and why is it in that last loop but not the first?
J. Alex Lee
J. Alex Lee el 27 de Abr. de 2021
glad it helped!
"20:-1:1" is going backwards, so the pre-allocation of the structure array is implied. Didn't need to do it with the cell array version since it was straightforward to pre-allocate an empty cell array. You could loop backward on that example as well, and wouldn't need to do the explicit pre-allocation.

Iniciar sesión para comentar.

Categorías

Más información sobre Ordinary Differential Equations en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by