This open access volume explains the foundations of modern solvers for ordinary differential
equations (ODEs). Formulating and solving ODEs is an essential part of mathematical modeling
and computational science and numerous solvers are available in commercial and open source
software. However no single ODE solver is the best choice for every single problem and
choosing the right solver requires fundamental insight into how the solvers work. This book
will provide exactly that insight to enable students and researchers to select the right
solver for any ODE problem of interest or implement their own solvers if needed. The
presentation is compact and accessible and focuses on the large and widely used class of
solvers known as Runge-Kutta methods. Explicit and implicit methods are motivated and explained
as well as methods for error control and automatic time step selection and all the solvers are
implemented as a class hierarchy in Python.