Ask Your Question

Is there a way to solve a differential equation in sage with adaptive step size?

asked 2010-10-10 01:04:03 +0200

Shashank gravatar image

updated 2011-05-12 23:56:38 +0200

Kelvin Li gravatar image

Is there a way to solve a differential equation in sage with adaptive step size?

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2010-10-11 08:47:29 +0200

mhampton gravatar image

Yes, the default algorithm of ode_solver is Runge-Kutta-Fehlberg 4-5, which is an adaptive step-size algorithm. The ode_solver class is wrapping routines from the GNU Scientific Library (GSL).

I recommend reading the documentation of ode_solver, there are a variety of other methods available. Here's a simple example solving a Lotka-Volterra equation:

T = ode_solver()
T.function = lambda t, y: [y[0]-y[0]*y[1], -y[1]+y[0]*y[1]]
sol_lines = Graphics()
for i in srange(0.1,1.1,.1):
    y = T.solution
    sol_lines = sol_lines + line([x[1] for x in y], rgbcolor = (i,0,1-i))
show(sol_lines+point((1,1),rgbcolor=(0,0,0)), figsize = [6,6], xmax = 6, ymax = 6)
edit flag offensive delete link more


Thanks a lot. I don't know why I was using "desolve_system_rk4". It is very slow compared to "ode_solver".

Shashank gravatar imageShashank ( 2010-10-13 16:15:27 +0200 )edit

answered 2011-12-12 13:33:17 +0200

Joaquim Puig gravatar image

If you had your solution already coded for "desolve_system_rk4" you could try "desolve_system_odeint" which has the same syntax and uses an implicit method by default (you can change the method, of course). It should be much faster than the rk4.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2010-10-10 01:04:03 +0200

Seen: 1,306 times

Last updated: Dec 12 '11