#runge-kutta #ode #dense #events #numerical

nightly diffurch

Numerical solver for ordinary and delay differential equations

4 releases

Uses new Rust 2024

0.0.3 Jul 16, 2025
0.0.2 Jun 16, 2025
0.0.1 May 17, 2025
0.0.0 May 11, 2025

#8 in #runge-kutta

MIT/Apache

185KB
3.5K SLoC

Diffurch

The library, that implements numerical methods for solving ordinary and delay differential equations.

Documention

For documentation, refer to docs.rs/diffurch.


lib.rs:

diffurch is a library that implements numerical methods for ordinary and delay differential equations.

Supported types of equations

  • Continuous ODEs (Ordinary Differential Equations).
  • Non-sliding discontinuous or impulse ODEs (*).
  • Continuous or impulse (neutral) DDEs (Delay Differential Equations) with constant or variable non-vanishing delays.
  • Non-sliding discontinuous (neutral) DDEs with constant or variable non-vanishing delays (*).

(here (*) means that kind of equation is supported using an event system rather than by using discontinuous functions directly in equation)

Features

  • Event detection
  • Event filtering
  • Delay-induced discontinuity propagation
  • Dense output
  • Wide range of explicit Runge-Kutta methods with interpolation
  • (not yet) Automatic step size control

Goals

  • Peak performance: as much as possible is done at compile time, avoiding dynamic dispatch or unnecessary runtime branching.
  • Support for ODEs and DDEs, including neutral DDEs.
  • Support for discontinuous, impulse, and hybrid equations.
  • Ergonomics, minimal boilerplate: use of convenience macros to wrap closures and (not yet there) simple symbolic system.

Dependencies

~215KB