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

edit retag close merge delete

Sort by » oldest newest most voted

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-y*y, -y+y*y]
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 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)

more

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

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.

more