Differential Equations & Scientific Computing

Supports ODEs, SDEs, DDEs, DAEs, PDEs (via MethodOfLines.jl), jump processes, stiff solvers (Rodas5P, QNDF), events/callbacks, sensitivity analysis, parameter estimation, ensemble simulations, GPU acceleration.

33.1 DifferentialEquations.jl

Supports ODEs, SDEs, DDEs, DAEs, PDEs (via MethodOfLines.jl), jump processes, stiff solvers (Rodas5P, QNDF), events/callbacks, sensitivity analysis, parameter estimation, ensemble simulations, GPU acceleration.

using DifferentialEquations, Plots

# Lotka–Volterra predator–prey system
function lotka!(du, u, p, t)
    α, β, δ, γ = p
    du[1] = α * u[1] - β * u[1] * u[2]
    du[2] = δ * u[1] * u[2] - γ * u[2]
end
u0 = [10.0, 5.0]; tspan = (0.0, 30.0); p = (1.5, 1.0, 1.0, 3.0)
prob = ODEProblem(lotka!, u0, tspan, p)
sol = solve(prob, Tsit5(); saveat=0.1)
plot(sol, labels=["prey" "predator"])
sol(12.3)                               # continuous interpolation

33.2 The SciML ecosystem

acausal symbolic modeling (like Modelica) chemical reaction networks physics-informed neural networks DiffEqFlux.jl / SciMLSensitivity.jl neural ODEs, adjoint sensitivities equation discovery (SINDy) probabilistic programming / Bayesian inference pharmacometrics (commercial) ClimaCore / Oceananigans.jl climate & ocean simulation industrial modeling platform

33.3 Probabilistic programming with Turing.jl

using Turing
@model function coinflip(y)
    p ~ Beta(1, 1)
    for i in eachindex(y)
        y[i] ~ Bernoulli(p)
    end
end
chain = sample(coinflip([1, 0, 1, 1, 1, 0]), NUTS(), 1000)