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.9) 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)
Related packages
- probdiffeq: Fast and feature-rich filtering-based probabilistic ODE solvers in JAX.
- ProbNum: Probabilistic numerics in Python. It has not only probabilistic ODE solvers, but also probabilistic linear solvers, Bayesian quadrature, and many filtering and smoothing implementations.
- Fenrir.jl: Parameter-inference in ODEs with probabilistic ODE solvers. This package builds on ProbNumDiffEq.jl to provide a negative marginal log-likelihood function, which can then be used with an optimizer or with MCMC for parameter inference.