# Solving large, non-linear systems of ODEs numerically: what do I need to consider in order to figure out which solver to use?

I would prefer recommendations that don't require the use of proprietary tools (such as Matlab). I know of two ODE solving options for the Python ecosystem:

1. PyDSTool (Dopri, Radau, other Runge-Kutta methods, and whatever scipy.integrate.ode has access to)
2. scipy.integrate (scipy.integrate.odeint uses lsoda from the Fortran library odepack -- solver decides whether to use a Adams method or a BDF method depending on the stiffness of the problem; dopri5, and dopri853 are also available, along with some solvers for complex ODE systems)

I like Python because I can now write C-speed code, combined with Python flexibility using Python-to-C compilers provided by packages such as Cython. Plus, everything is pretty open-source!

In my early conversations with the developer of PyDSTool, I know he brought up that Radau might be particularly good for non-linear, stiff ODE problems -- and certainly the pure C implementation included with PyDSTool would be much faster than scipy.integrate's standard ODE solvers. I wasn't really able to understand him well at the time simply due to my lack of mathematical background (I am a math undergrad, recently transferred from engineering). Could you comment on concerns like that -- in particular, what features of my problem do I need to identify in order to figure out which solver is best suited for my system of non-linear ODEs?