Probabilistic Numerical Differential Equation Solvers
ProbNumDiffEq.jl provides probabilistic numerical solvers to the DifferentialEquations.jl ecosystem. The implemented ODE filters solve differential equations via Bayesian filtering and smoothing and compute not just a single point estimate of the true solution, but a posterior distribution that contains an estimate of its numerical approximation error.
For a short intro video, check out our poster presentation at JuliaCon2021.
Installation
Run Julia, enter ]
to bring up Julia's package manager, and add the ProbNumDiffEq.jl package:
julia> ]
(v1.10) pkg> add ProbNumDiffEq
Getting Started
For a quick introduction check out the "Solving ODEs with Probabilistic Numerics" tutorial.
Features
- Two extended Kalman filtering-based probabilistic solvers: the explicit
EK0
and semi-implicitEK1
. - Adaptive step-size selection with PI control; fully compatible with DifferentialEquations.jl's timestepping options
- Online uncertainty calibration for multiple different diffusion models (see "Diffusion models and calibration")
- Dense output
- Sampling from the solution
- Callback support
- Convenient plotting through a Plots.jl recipe
- Automatic differentiation via ForwardDiff.jl
- Arbitrary precision via Julia's built-in arbitrary precision arithmetic
- Specialized solvers for second-order ODEs (see Second Order ODEs and Energy Preservation)
- Compatible with DAEs in mass-matrix ODE form (see Solving DAEs with Probabilistic Numerics)
- Data likelihoods for parameter-inference in ODEs (see Parameter Inference with ProbNumDiffEq.jl)
Related packages
- ProbDiffEq is similar in scope to ProbNumDiffEq.jl and it provides fast and feature-rich probabilistic ODE solvers but is implemented in Python and built on JAX.
- ProbNum implements a wide range of probabilistic numerical methods, not only for ODEs but also for linear algebra, quadrature, and filtering/smoothing. It is implemented in Python and NumPy, and it focuses more on breadth and didactic purposes than on performance.