ProbNumDiffEq.jl
Probabilistic Numerical Differential Equation solvers via Bayesian filtering and smoothing
Install / Use
/learn @nathanaelbosch/ProbNumDiffEq.jlREADME
ProbNumDiffEq.jl
ProbNumDiffEq.jl provides probabilistic numerical ODE solvers to the DifferentialEquations.jl ecosystem. The implemented ODE filters solve differential equations via Bayesian filtering and smoothing. The filters compute not just a single point estimate of the true solution, but a posterior distribution that contains an estimate of its numerical approximation error.
Check out the ProbNumDiffEq.jl talk JuliaCon2024.
Installation
Run Julia, enter ] to bring up Julia's package manager, and add the ProbNumDiffEq.jl package:
julia> ]
(v1.8) pkg> add ProbNumDiffEq
Example: Solving the FitzHugh-Nagumo ODE
using ProbNumDiffEq
# ODE definition as in DifferentialEquations.jl
function f(du, u, p, t)
a, b, c = p
du[1] = c * (u[1] - u[1]^3 / 3 + u[2])
du[2] = -(1 / c) * (u[1] - a - b * u[2])
end
u0 = [-1.0, 1.0]
tspan = (0.0, 20.0)
p = (0.2, 0.2, 3.0)
prob = ODEProblem(f, u0, tspan, p)
# Solve the ODE with a probabilistic numerical solver: EK1
sol = solve(prob, EK1())
# Plot the solution with Plots.jl
using Plots
plot(sol, color=["#CB3C33" "#389826" "#9558B2"])
In probabilistic numerics, the solution also contains error estimates - it just happens that they are too small to be visible in the plot above. But we can just plot them directly:
using Statistics
stds = std.(sol.pu)
plot(sol.t, hcat(stds...)', color=["#CB3C33" "#389826" "#9558B2"],
label=["std(u1(t))" "std(u2(t))"], xlabel="t", ylabel="standard-deviation")
Contributing
Contributions are very welcome! Check the existing issues for ideas on how to contribute to the package. If you want to implement a new functionality/algorithm, open an issue to start a discussion.
Please open issues liberally! If there is anything that's unclear or doesn't work, we would very much like to know about it. This includes not just bugs and feature requests but also general questions about the software, feedback and suggestions.
Citing ProbNumDiffEq.jl
If you use ProbNumDiffEq.jl helpful for your research project, please cite our JOSS paper (link):
@article{Bosch2024,
doi = {10.21105/joss.07048},
url = {https://doi.org/10.21105/joss.07048},
year = 2024,
publisher = {The Open Journal},
volume = 9,
number = 101,
pages = 7048,
author = {Nathanael Bosch},
title = {ProbNumDiffEq.jl: Probabilistic Numerical Solvers for Ordinary
Differential Equations in Julia},
journal = {Journal of Open Source Software}
}
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.
Related Skills
node-connect
350.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
350.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
350.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
