Modern numerical methods for ordinary differential equations