ivp

Crates.ioivp
lib.rsivp
version0.5.1
created_at2025-09-10 20:44:57.966664+00
updated_at2025-12-04 23:44:09.607872+00
descriptionA Rust library for solving initial value problems (IVPs) for ordinary differential equations (ODEs).
homepagehttps://github.com/Ryan-D-Gast/ivp
repositoryhttps://github.com/Ryan-D-Gast/ivp
max_upload_size
id1832995
size461,888
Ryan Gast (Ryan-D-Gast)

documentation

https://docs.rs/ivp

README

ivp

crates.io PyPI docs.rs

Documentation | Examples | GitHub | Crates.io | PyPI


A library of numerical methods for solving initial value problems (IVPs)
for Rust and Python.


This library provides a pure Rust implementation of SciPy's solve_ivp function with slight modifications to the API to better fit Rust's design patterns. It is also available as a Python package with a SciPy-compatible API.

Features

Currently implemented solvers:

  • DOP853: An 8th order Dormand-Prince method with step-size control and dense output.
  • DOPRI5: A 5th order Dormand-Prince method with step-size control and dense output.
  • RK4: The classic 4th order Runge-Kutta method with fixed step-size and cubic Hermite interpolation for dense output.
  • RK23: A 3rd order Runge-Kutta method with 2nd order error estimate for step-size control.
  • Radau: A 5th order implicit Runge-Kutta method of Radau IIA type with step-size control and dense output.
  • BDF: A variable-order (1 to 5) Backward Differentiation Formula method for stiff ODEs with adaptive step-size control and dense output.

Installation

Rust

cargo add ivp

Python

pip install ivp-rs

Example Usage (Python)

from ivp import solve_ivp
import numpy as np

def exponential_decay(t, y):
    return -0.5 * y

# Solve the ODE
sol = solve_ivp(exponential_decay, (0, 10), [1.0], method='RK45', rtol=1e-6, atol=1e-9)

print(f"Final time: {sol.t[-1]}")
print(f"Final state: {sol.y[:, -1]}")
Commit count: 135

cargo fmt