Expand description
§differential-equations
A Rust library for solving ODE, DDE, and SDE initial value problems.
§Overview
This library provides numerical solvers for:
- Ordinary Differential Equations (ODE): initial value problems, fixed/adaptive step, event detection, flexible output
- Differential Algebraic Equations (DAE): equations in the form M f’ = f(t,y) where M can be singular
- Delay Differential Equations (DDE): constant/state-dependent delays, same features as ODE
- Stochastic Differential Equations (SDE): drift-diffusion, user RNG, same features as ODE
§Feature Flags
polars
: Enable convertingSolution
to a Polars DataFrame withSolution::to_polars()
§Example (ODE)
use differential_equations::prelude::*;
use nalgebra::{SVector, vector};
pub struct LinearEquation {
pub a: f64,
pub b: f64,
}
impl ODE<f64, SVector<f64, 1>> for LinearEquation {
fn diff(&self, _t: f64, y: &SVector<f64, 1>, dydt: &mut SVector<f64, 1>) {
dydt[0] = self.a + self.b * y[0];
}
}
fn main() {
let system = LinearEquation { a: 1.0, b: 2.0 };
let t0 = 0.0;
let tf = 1.0;
let y0 = vector![1.0];
let problem = ODEProblem::new(system, t0, tf, y0);
let mut solver = ExplicitRungeKutta::dop853().rtol(1e-8).atol(1e-6);
let solution = match problem.solve(&mut solver) {
Ok(sol) => sol,
Err(e) => panic!("Error: {:?}", e),
};
for (t, y) in solution.iter() {
println!("t: {:.4}, y: {:.4}", t, y[0]);
}
}
§License
Copyright 2025 Ryan D. Gast
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Modules§
- control
- Control flow flags used by solvers, events, and output callbacks.
- dae
- Differential Algebraic Equations (DAE) Module
- dde
- Delay Differential Equations (DDE) module.
- derive
- error
- Errors for Differential Equations Crate
- interpolate
- Interpolation utilities used by solvers and output handlers.
- linalg
- Linear algebra types and utilities.
- methods
- Numerical Methods for Differential Equations
- ode
- Ordinary Differential Equations (ODE) module.
- prelude
- Library Prelude
- sde
- Stochastic Differential Equations (SDE) module.
- solout
- Solout trait and common implementations for controlling the output of differential equation solvers.
- solution
- Solution container for differential equation solvers.
- stats
- Statistics and performance tracking for Numerical methods
- status
- Status for solving differential equations
- tableau
- Butcher Tableau
- tolerance
- Tolerance enum for adaptive step size control
- traits
- Defines Generics for the library. Includes generics for the floating point numbers.
- utils
- Utility functions for the differential equation solvers
Macros§
- banded_
matrix - Create a banded matrix by specifying diagonals. Size and bands are inferred. Usage: banded_matrix!( 0 => [d0…], 1 => [d1…], -1 => [u1…], k => [..], … )
- matrix
- Create a full dense matrix from rows. Usage: