diff --git a/docs/make.jl b/docs/make.jl index b09afae73..a2c0680e8 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -8,17 +8,17 @@ makedocs( pages=[ "Home" => "index.md", "Tutorials" => [ - "Getting Started" => "getting_started.md" - "Second Order ODEs and Energy Preservation" => "dynamical_odes.md" - "Differential Algebraic Equations" => "dae.md" - "Probabilistic Exponential Integrators" => "exponential_integrators.md" - "Parameter Inference" => "fenrir.md" + "Getting Started" => "tutorials/getting_started.md" + "Second Order ODEs and Energy Preservation" => "tutorials/dynamical_odes.md" + "Differential Algebraic Equations" => "tutorials/dae.md" + "Probabilistic Exponential Integrators" => "tutorials/exponential_integrators.md" + "Parameter Inference" => "tutorials/fenrir.md" ], "Solvers and Options" => [ "solvers.md", - "diffusions.md", - "initialization.md", "priors.md", + "initialization.md", + "diffusions.md", ], "Benchmarks" => [ "Multi-Language Wrapper Benchmark" => "benchmarks/multi-language-wrappers.md", diff --git a/docs/src/index.md b/docs/src/index.md index c551b277a..392a7762f 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -8,20 +8,13 @@ The implemented _ODE filters_ solve differential equations via Bayesian filterin For a short intro video, check out our [poster presentation at JuliaCon2021](https://www.youtube.com/watch?v=EMFl6ytP3iQ). ---- - -__For more probabilistic numerics check out the [ProbNum](https://probnum.readthedocs.io/en/latest/) Python package.__ -It implements probabilistic ODE solvers, but also probabilistic linear solvers, Bayesian quadrature, and many filtering and smoothing implementations. - ---- - ## Installation Run Julia, enter `]` to bring up Julia's package manager, and add the ProbNumDiffEq.jl package: ``` julia> ] -(v1.8) pkg> add ProbNumDiffEq +(v1.9) pkg> add ProbNumDiffEq ``` ## Getting Started @@ -30,29 +23,57 @@ For a quick introduction check out the "[Solving ODEs with Probabilistic Numeric ## Features - - Two extended Kalman filtering-based probabilistic solvers: the explicit [`EK0`](@ref) and semi-implicit [`EK1`](@ref). - - Adaptive step-size selection (by default with PI control) - - On-line uncertainty calibration, for multiple different measurement models - - Dense output - - Sampling from the solution - - Callback support - - Convenient plotting through a Plots.jl recipe - - Automatic differentiation via ForwardDiff.jl - - Supports arbitrary precision numbers via BigFloats.jl - - Specialized solvers for second-order ODEs (demo will be added) - - Compatible with DAEs in mass-matrix ODE form (demo will be added) +- Two extended Kalman filtering-based probabilistic solvers: the explicit [`EK0`](@ref) and semi-implicit [`EK1`](@ref). +- Adaptive step-size selection with PI control; + fully compatible with [DifferentialEquations.jl's timestepping options](https://docs.sciml.ai/DiffEqDocs/stable/extras/timestepping/) +- Online uncertainty calibration for multiple different diffusion models (see "[Diffusion models and calibration](@ref)") +- [Dense output](@ref) +- Sampling from the solution +- Callback support +- Convenient plotting through a [Plots.jl](https://docs.juliaplots.org/latest/) recipe +- Automatic differentiation via [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl) +- Arbitrary precision via Julia's built-in [arbitrary precision arithmetic](https://docs.julialang.org/en/v1/manual/integers-and-floating-point-numbers/#Arbitrary-Precision-Arithmetic) +- Specialized solvers for second-order ODEs (see [Second Order ODEs and Energy Preservation](@ref)) +- Compatible with DAEs in mass-matrix ODE form (see [Solving DAEs with Probabilistic Numerics](@ref)) ## [References](@id references) - - N. Bosch, P. Hennig, F. Tronarp: **Probabilistic Exponential Integrators** (2023) - - N. Bosch, F. Tronarp, P. Hennig: **Pick-and-Mix Information Operators for Probabilistic ODE Solvers** (2022) - - N. Krämer, N. Bosch, J. Schmidt, P. Hennig: **Probabilistic ODE Solutions in Millions of Dimensions** (2022) - - N. Bosch, P. Hennig, F. Tronarp: **Calibrated Adaptive Probabilistic ODE Solvers** (2021) - - F. Tronarp, S. Särkkä, and P. Hennig: **Bayesian ODE Solvers: The Maximum A Posteriori Estimate** (2021) - - N. Krämer, P. Hennig: **Stable Implementation of Probabilistic ODE Solvers** (2020) - - H. Kersting, T. J. Sullivan, and P. Hennig: **Convergence Rates of Gaussian Ode Filters** (2020) - - F. Tronarp, H. Kersting, S. Särkkä, and P. Hennig: **Probabilistic Solutions To Ordinary Differential Equations As Non-Linear Bayesian Filtering: A New Perspective** (2019) - - M. Schober, S. Särkkä, and P. Hennig: **A Probabilistic Model for the Numerical Solution of Initial Value Problems** (2018) - -More references on ODE filters and on probabilistic numerics in general can be found on the [probabilistic-numerics.org homepage](https://www.probabilistic-numerics.org/research/general/). +The main references _for this package_ include: + +- N. Bosch, P. Hennig, F. Tronarp: + [**Probabilistic Exponential Integrators**](https://arxiv.org/abs/2305.14978) + (2023) +- N. Bosch, F. Tronarp, P. Hennig: + [**Pick-and-Mix Information Operators for Probabilistic ODE Solvers**](https://proceedings.mlr.press/v151/bosch22a.html) + (2022) +- N. Krämer, N. Bosch, J. Schmidt, P. Hennig: + [**Probabilistic ODE Solutions in Millions of Dimensions**](https://proceedings.mlr.press/v162/kramer22b.html) + (2022) +- N. Bosch, P. Hennig, F. Tronarp: + [**Calibrated Adaptive Probabilistic ODE Solvers**](http://proceedings.mlr.press/v130/bosch21a.html) + (2021) +- F. Tronarp, S. Särkkä, and P. Hennig: + [**Bayesian ODE Solvers: The Maximum A Posteriori Estimate**](https://link.springer.com/article/10.1007/s11222-021-09993-7) + (2021) +- N. Krämer, P. Hennig: + [**Stable Implementation of Probabilistic ODE Solvers**](https://arxiv.org/abs/2012.10106v1) + (2020) +- H. Kersting, T. J. Sullivan, and P. Hennig: + [**Convergence Rates of Gaussian Ode Filters**](https://link.springer.com/article/10.1007/s11222-020-09972-4) + (2020) +- F. Tronarp, H. Kersting, S. Särkkä, and P. Hennig: + [**Probabilistic Solutions To Ordinary Differential Equations As Non-Linear Bayesian Filtering: A New Perspective**](https://link.springer.com/article/10.1007/s11222-019-09900-1) + (2019) +- M. Schober, S. Särkkä, and P. Hennig: + [**A Probabilistic Model for the Numerical Solution of Initial Value Problems**](https://link.springer.com/article/10.1007/s11222-017-9798-7) + (2018) + +More references on ODE filters and on probabilistic numerics in general can be found on [probabilistic-numerics.org ](https://www.probabilistic-numerics.org/research/general/). + + +## Related packages + +- [probdiffeq](https://pnkraemer.github.io/probdiffeq/): Fast and feature-rich filtering-based probabilistic ODE solvers in JAX. +- [ProbNum](https://probnum.readthedocs.io/en/latest/): 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](https://github.com/nathanaelbosch/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. diff --git a/docs/src/initialization.md b/docs/src/initialization.md index 0e2741b7e..3ed5f2bc7 100644 --- a/docs/src/initialization.md +++ b/docs/src/initialization.md @@ -48,8 +48,8 @@ Y^{(0)}(0) &= y_0, \\ Y^{(1)}(0) &= f(y_0, 0). \end{aligned} ``` -And it turns out that we can also compute higher-order derivatives of ``y`` with the chain rule, -which we can use to initialize ``Y^{(i)}(0)``. +It turns out that we can also compute higher-order derivatives of ``y`` with the chain rule, +and then use these to better initialize ``Y^{(i)}(0)``. This, done efficiently with Taylor-mode autodiff by using [TaylorIntegration.jl](https://perezhz.github.io/TaylorIntegration.jl/latest/), is what [`TaylorModeInit`](@ref) does. diff --git a/docs/src/dae.md b/docs/src/tutorials/dae.md similarity index 100% rename from docs/src/dae.md rename to docs/src/tutorials/dae.md diff --git a/docs/src/dynamical_odes.md b/docs/src/tutorials/dynamical_odes.md similarity index 100% rename from docs/src/dynamical_odes.md rename to docs/src/tutorials/dynamical_odes.md diff --git a/docs/src/exponential_integrators.md b/docs/src/tutorials/exponential_integrators.md similarity index 100% rename from docs/src/exponential_integrators.md rename to docs/src/tutorials/exponential_integrators.md diff --git a/docs/src/fenrir.md b/docs/src/tutorials/fenrir.md similarity index 100% rename from docs/src/fenrir.md rename to docs/src/tutorials/fenrir.md diff --git a/docs/src/getting_started.md b/docs/src/tutorials/getting_started.md similarity index 100% rename from docs/src/getting_started.md rename to docs/src/tutorials/getting_started.md