ODES is a scikit for Python 2.7 and 3.3-3.5 offering extra ode/dae solvers, as an extension to what is available in scipy. The documentation is available at Read The Docs, and API docs can be found at https://bmcage.github.io/odes.
ODES provides interfaces to the following solvers:
- BDF linear multistep method for stiff problems (CVODE and IDA from SUNDIALS)
- Adams-Moulton linear multistep method for nonstiff problems (CVODE and IDA from SUNDIALS)
- Explicit Runge-Kutta method of order (4)5 with stepsize control (dopri5 from
scipy.integrate
) - Explicit Runge-Kutta method of order 8(5,3) with stepsize control (dop853 from
scipy.integrate
) - Historical solvers: lsodi and ddaspk are available for comparison reasons. Use IDA instead!
A simple example solving the Van der Pol oscillator is as follows:
import matplotlib.pyplot as plt
import numpy as np
from scikits.odes import ode
t0, y0 = 1, np.array([0.5, 0.5]) # initial condition
def van_der_pol(t, y, ydot):
""" we create rhs equations for the problem"""
ydot[0] = y[1]
ydot[1] = 1000*(1.0-y[0]**2)*y[1]-y[0]
solution = ode('cvode', van_der_pol, old_api=False).solve(np.linspace(t0,500,200), y0)
plt.plot(solution.values.t, solution.values.y[:,0], label='Van der Pol oscillator')
plt.show()
For simplicity there is also a convenience function odeint
wrapping the ode solver class. See the User Guide for a simple example for odeint
, as well as simple examples for object orientated interfaces and further examples using ODES solvers.
You can learn by example from following code that uses ODES:
- Centrifuge simulation, a wrapper around the ida solver: see centrifuge-1d
You have a project using odes? Do a pull request to add your project.