Ask Your Question
2

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

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

Shashank gravatar image

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

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
5

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

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):
    T.ode_solve(y_0=[i,i],t_span=[0,10],num_points=1000)
    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

Comments

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 +0100 )edit
0

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

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

Stats

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

Seen: 1,382 times

Last updated: Dec 12 '11