Crate differential_equations

Crate differential_equations 

Source
Expand description

§differential-equations

A Rust library for solving ODE, DDE, and SDE initial value problems.

GitHub Documentation

§Overview

This library provides numerical solvers for:

§Feature Flags

  • polars: Enable converting Solution to a Polars DataFrame with Solution::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: