2 views (last 30 days)

Show older comments

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

J. Alex Lee
on 27 Apr 2021

Edited: J. Alex Lee
on 27 Apr 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

J. Alex Lee
on 27 Apr 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.

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

Start Hunting!