Can you use ODE45 in a for loop?
조회 수: 5 (최근 30일)
이전 댓글 표시
Hi there, I am having to solve a pair of coupled 1st ODEs. I also need to change the integration time like this:
ti = 0
tf = 10
timestep = 0.1
num = (tf-ti)/timestep;
timerange = linspace(ts,tf,num);
for i = 1:length(timespan)
tt = timerange(i); %defining the integration time start.
[t,x]=ode45('func',[tt:0.01:tf],[0,0]); %solving the coupled odes.
end
So what is happening is that I am changing the start integration in the [T0 TFINAL] vector. Is there a way that I can save all of the t's and the x's as a matrix/for each iteration so that I can plot all of the solutions to the coupled odes?
Thanks
댓글 수: 0
채택된 답변
Matt Tearle
2013년 2월 4일
편집: Matt Tearle
2013년 2월 4일
Given that ode45 is a variable step solver, you don't know how many t and x values you'll get each time, so the simplest solution would be to save them all in cell arrays:
n = length(timerange);
allx = cell(n,1);
allt = cell(n,1);
for i = 1:n
...
allx{i} = x;
allt{i} = t;
end
But if all you're trying to do is plot them all, why not just plot each one as you go? Use a hold on or hold all and then plot(t,x) in the loop.
(Also, [t,x] = ode45(@func,[tt... -- function handles are cooler than strings :) )
댓글 수: 14
Matt Tearle
2013년 2월 6일
I'm guessing you're using the code I provided to define the event (using a function handle in odeset). If so, the problem might be that you're using a string to define the ODE rate equations and a function handle to define the event function. Try changing your call to ode45 to
[t,x]=ode45(@cwfield,tt:0.01:tf,[0,0],opts);
(BTW, not going through 0 isn't a problem -- it just means the event won't ever be triggered, so ode45 will integrate until tf).
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!