Skip to content


Repository files navigation

RK-Opt: A Package for the Design of Numerical ODE solvers

Docs-stable License: BSD-3-Clause DOI DOI

See the full documentation here.

RK-Opt is a collection of MATLAB codes for designing optimized numerical ODE solvers. The main emphasis is on Runge-Kutta methods, but some routines deal with other classes of methods. It is primarily developed and used by the KAUST Numerical Mathematics Group. It includes the following sub-packages:

  • polyopt: Find optimal stability polynomials of a given degree and order of accuracy for a specified spectrum.
  • RK-coeff-opt: Find optimal Runge-Kutta method coefficients, for a prescribed order of accuracy and number of stages.
  • am_rad-opt: Find stability functions with optimal radius of absolute monotonicity. Includes capabilities for both multistep and multistage methods.
  • RKtools: A collection of routines for analyzing or computing various properties of Runge-Kutta methods. For a much more extensive package along these lines, see NodePy.

A common workflow for designing Runge-Kutta methods is to use polyopt to find an appropriate stability function and then RK-coeff-opt to determine the Runge-Kutta method coefficients.

To run the tests, execute the MATLAB script test.m. This requires a relatively recent version of MATLAB (tested with R2018a and later) with the following toolboxes.

  • MATLAB Optimization Toolbox
  • MATLAB Global Optimization Toolbox
  • CVX (
  • MATLAB Parallel Computing Toolbox (optional; allows faster searching for optimal methods in RK-Coeff-Opt)


If you use RK-Opt in published work, please cite the following paper:

Ketcheson et al., (2020). RK-Opt: A package for the design of numerical ODE solvers. Journal of Open Source Software, 5(54), 2514,

You can use the following bibtex entry:

  doi = {10.21105/joss.02514},
  url = {},
  year = {2020},
  publisher = {The Open Journal},
  volume = {5},
  number = {54},
  pages = {2514},
  author = {David I. Ketcheson and Matteo Parsani and Zachary J. Grant and Aron J. Ahmadia and Hendrik Ranocha},
  title = {`RK-Opt`: A package for the design of numerical ODE solvers},
  journal = {Journal of Open Source Software}


The code is primarily developed and maintained by David Ketcheson. The following people have also made important contributions to RK-Opt (listed alphabetically):

  • Aron Ahmadia: Co-developer of polyopt algorithm and routines.
  • Zachary Grant: Extension of order conditions to multistep RK with more than two stages and addition of order conditions for orders 9-11.
  • Matteo Parsani: Many improvements to RK-coeff-opt routines and organization.
  • Hendrik Ranocha: General improvements and updates, including updating the test routines.