"Qiming " <email@example.com> wrote in message <firstname.lastname@example.org>... > Hi: > > I have a question using ODE solvers (say, ode45). > > I want to save some parameter values inside the ODE function. For instance, I would like to save parameter "u" which is inside the ODE function for future use. I define the global "u", and also a counter "COUNT". > > As I know, ode45 is essentially a "loop", it integrates the ODE function as an adaptive stepsize or a pre-defined fixed step size. The functions are given as below: > > Main function: > > global u COUNT; > COUNT = 0; > > t0 = 0; tf = 5; > tSpan = [ t0, tf ]; > y0 = [ 1; 2; 3 ]; > [t y] = ode45(@myode, tSpan, y0); > > > > ODE function: > > function ydot = myode(~,y) > > global u COUNT; > COUNT = COUNT + 1; > > a = 0.01; > b = 0.1; > ydot (1) = -a*y(1)*y(2); > ydot (2) = b*y(1)*y(2)-b*y(2); > ydot (3) = b*y(2); > > u(COUNT) = y(1)+y(2)+y(3); > > ydot = [ydot (1) ydot (2) ydot (3)]'; > > The code can be ran without errors or warnings. But the things is, when I checked the workspace, "COUNT = 61", but "length(y) = 41". I also tried using a fixed stepsize, but they're still different. How come they're different?I think these two values should be the same. > > Thanks for any help. >
COUNT is always greater than "length(y)", it seems that ode45 ignores some points where the function is evaluated, it only returns a less number of points. BUT I really want to get the values at each specific points of length(y), not for all the COUNT points. How can I do that? Thanks a million.