First time here? Check out the FAQ!

Ask Your Question
2

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

asked 14 years ago

Shashank gravatar image

updated 13 years ago

Kelvin Li gravatar image

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

Preview: (hide)

2 Answers

Sort by » oldest newest most voted
5

answered 14 years ago

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)
Preview: (hide)
link

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 ( 14 years ago )
0

answered 13 years ago

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.

Preview: (hide)
link

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: 14 years ago

Seen: 1,410 times

Last updated: Dec 12 '11