Expand description
§numeris
Pure-Rust numerical algorithms library — high performance with SIMD support (NEON, SSE2, AVX, AVX-512) while also supporting no-std for embedded and WASM targets. Similar in scope to SciPy.
§Quick start
use numeris::{Matrix, Vector};
// Solve a linear system Ax = b
let a = Matrix::new([
[2.0_f64, 1.0, -1.0],
[-3.0, -1.0, 2.0],
[-2.0, 1.0, 2.0],
]);
let b = Vector::from_array([8.0, -11.0, -3.0]);
let x = a.solve(&b).unwrap(); // x = [2, 3, -1]§Modules
-
matrix— Fixed-sizeMatrix<T, M, N>with const-generic dimensions. Stack-allocated[[T; M]; N]column-major storage (matches LAPACK conventions).Matrix::new()accepts row-major input and transposes internally. Includes arithmetic, indexing, norms, block operations, and iteration.Vector<T, N>andColumnVector<T, N>are type aliases for 1-row and 1-column matrices. -
dynmatrix— Heap-allocatedDynMatrix<T>with runtime dimensions (requiresallocfeature, included withstd).Vec<T>column-major storage (col * nrows + row).from_rows()accepts row-major data (transposes internally);from_slice()accepts column-major data directly. ImplementsMatrixRef/MatrixMut, so all linalg free functions work automatically.DynVector<T>newtype for single-index vector access. IncludesDynLu,DynCholesky,DynQr,DynSvd,DynSymmetricEigen,DynSchurwrapper structs. -
linalg— LU (partial pivoting), Cholesky (A = LL^H), QR (Householder), SVD (Householder bidiagonalization + Golub-Kahan implicit-shift QR), symmetric/Hermitian eigendecomposition (Householder tridiagonalization + implicit QR with Wilkinson shift), and real Schur decomposition (Hessenberg reduction + Francis double-shift QR). Each providessolve(),inverse(),det(),eigenvalues(), etc. Free functions operate on&mut impl MatrixMut<T>for in-place use; wrapper structs offer a higher-level API. Convenience methods on bothMatrixandDynMatrix. -
ode— Fixed-step RK4 and 7 adaptive Runge-Kutta solvers (RKF45, RKTS54, RKV65, RKV87, RKV98, RKV98NoInterp, RKV98Efficient). PI step-size controller with dense output / interpolation. RODAS4 L-stable Rosenbrock method for stiff systems (user-supplied or finite-difference Jacobians). Requiresodefeature. -
optim— Optimization: scalar root finding (optim::brent,optim::newton_1d), BFGS quasi-Newton minimization (optim::minimize_bfgs), Gauss-Newton (optim::least_squares_gn) and Levenberg-Marquardt (optim::least_squares_lm) nonlinear least squares. Finite-difference Jacobian and gradient utilities. Requiresoptimfeature. -
control— Digital IIR filters:control::Biquadsecond-order section andcontrol::BiquadCascadefor cascaded filters. Design functions for Butterworth and Chebyshev Type I lowpass/highpass.control::Piddiscrete-time PID controller with anti-windup.control::lead_compensatorandcontrol::lag_compensatorfor compensator design via bilinear transform. PID tuning viacontrol::FopdtModel(Ziegler-Nichols, Cohen-Coon, SIMC) andcontrol::ziegler_nichols_ultimate. Nocomplexfeature dependency. Requirescontrolfeature. -
estimate— State estimation:estimate::Ekf(Extended Kalman Filter),estimate::Ukf(Unscented Kalman Filter),estimate::SrUkf(Square-Root UKF),estimate::Ckf(Cubature Kalman Filter),estimate::rts_smooth(RTS smoother), andestimate::BatchLsq(batch least-squares). Closure-based dynamics and measurement models, Joseph-form covariance update, Merwe-scaled sigma points. EKF and BatchLsq are fully no-std; sigma-point filters and RTS requirealloc. Requiresestimatefeature. -
interp— Interpolation:interp::LinearInterp,interp::HermiteInterp,interp::LagrangeInterp(barycentric),interp::CubicSpline(natural BCs), andinterp::BilinearInterp(2D rectangular grid). Fixed-size (const N, stack-allocated, no-std) and dynamic variants (Dyn*, requiresalloc). Out-of-bounds evaluations extrapolate. Requiresinterpfeature. -
special— Special functions:special::gamma,special::lgamma,special::digamma,special::beta/special::lbeta, regularized incomplete gamma (special::gamma_inc/special::gamma_inc_upper), regularized incomplete beta (special::betainc), and error functions (special::erf/special::erfc). Generic overFloatScalar(f32/f64), fully no-std. Requiresspecialfeature. -
quad— Numerical quadrature (integration):quad::gauss_legendre(N-point Gauss-Legendre, N=1..10,15,20),quad::adaptive_simpson(automatic subdivision),quad::trapezoidandquad::simpson(composite rules). All no-alloc. Requiresquadfeature. -
stats— Statistical distributions withstats::ContinuousDistributionandstats::DiscreteDistributiontraits. Continuous:stats::Normal,stats::Uniform,stats::Exponential,stats::Gamma,stats::Beta,stats::ChiSquared,stats::StudentT. Discrete:stats::Bernoulli,stats::Binomial,stats::Poisson. Built-instats::Rng(xoshiro256++) withsample()/sample_array()on every distribution. Requiresstatsfeature (impliesspecial). -
quaternion— Unit quaternion for 3D rotations. Scalar-first[w, x, y, z]. Construct from axis-angle, Euler angles, or rotation matrices. Supports Hamilton product, vector rotation, SLERP, and conversion back to matrices. -
traits— Element trait hierarchy:Scalar— all matrix elements (Copy + PartialEq + Debug + Zero + One + Num)FloatScalar— real floats (Scalar + Float), used by quaternionsLinalgScalar— real floats and complex numbers, used by decompositions and normsMatrixRef/MatrixMut— generic read/write access for algorithms
§Complex matrices
Enable the complex feature to use decompositions with Complex<f32> /
Complex<f64>. Cholesky generalizes to Hermitian (A = LL^H), QR uses
complex Householder reflections, and norms return real values. Zero overhead
for real-only code paths.
§Cargo features
| Feature | Default | Description |
|---|---|---|
std | yes | Implies alloc. Hardware FPU via system libm |
alloc | via std | DynMatrix / DynVector (heap-allocated, runtime-sized) |
ode | yes | ODE integration (RK4, adaptive solvers) |
optim | no | Optimization (root finding, BFGS, Gauss-Newton, LM) |
control | no | Digital IIR filters, PID, lead/lag compensators, PID tuning |
estimate | no | State estimation (EKF, UKF). Implies alloc |
interp | no | Interpolation (linear, Hermite, Lagrange, cubic spline, bilinear 2D) |
quad | no | Numerical quadrature (Gauss-Legendre, adaptive Simpson, composite rules) |
special | no | Special functions (gamma, beta, erf, incomplete gamma/beta) |
stats | no | Statistical distributions (Normal, Gamma, etc.) with sampling. Implies special |
libm | baseline | Pure-Rust software float fallback |
complex | no | Complex<f32> / Complex<f64> support via num-complex |
all | no | All features |
Re-exports§
pub use matrix::vector::ColumnVector;pub use matrix::vector::ColumnVector3;pub use matrix::vector::Vector;pub use matrix::vector::Vector3;pub use matrix::Matrix;pub use matrix::aliases::Matrix1;pub use matrix::aliases::Matrix2;pub use matrix::aliases::Matrix3;pub use matrix::aliases::Matrix4;pub use matrix::aliases::Matrix5;pub use matrix::aliases::Matrix6;pub use matrix::aliases::Matrix1x2;pub use matrix::aliases::Matrix1x3;pub use matrix::aliases::Matrix1x4;pub use matrix::aliases::Matrix1x5;pub use matrix::aliases::Matrix1x6;pub use matrix::aliases::Matrix2x1;pub use matrix::aliases::Matrix2x3;pub use matrix::aliases::Matrix2x4;pub use matrix::aliases::Matrix2x5;pub use matrix::aliases::Matrix2x6;pub use matrix::aliases::Matrix3x1;pub use matrix::aliases::Matrix3x2;pub use matrix::aliases::Matrix3x4;pub use matrix::aliases::Matrix3x5;pub use matrix::aliases::Matrix3x6;pub use matrix::aliases::Matrix4x1;pub use matrix::aliases::Matrix4x2;pub use matrix::aliases::Matrix4x3;pub use matrix::aliases::Matrix4x5;pub use matrix::aliases::Matrix4x6;pub use matrix::aliases::Matrix5x1;pub use matrix::aliases::Matrix5x2;pub use matrix::aliases::Matrix5x3;pub use matrix::aliases::Matrix5x4;pub use matrix::aliases::Matrix5x6;pub use matrix::aliases::Matrix6x1;pub use matrix::aliases::Matrix6x2;pub use matrix::aliases::Matrix6x3;pub use matrix::aliases::Matrix6x4;pub use matrix::aliases::Matrix6x5;pub use matrix::aliases::Vector1;pub use matrix::aliases::Vector2;pub use matrix::aliases::Vector4;pub use matrix::aliases::Vector5;pub use matrix::aliases::Vector6;pub use matrix::aliases::ColumnVector1;pub use matrix::aliases::ColumnVector2;pub use matrix::aliases::ColumnVector4;pub use matrix::aliases::ColumnVector5;pub use matrix::aliases::ColumnVector6;pub use dynmatrix::DynMatrix;pub use dynmatrix::DynVector;pub use dynmatrix::DynMatrixf32;pub use dynmatrix::DynMatrixf64;pub use dynmatrix::DynMatrixi32;pub use dynmatrix::DynMatrixi64;pub use dynmatrix::DynMatrixu32;pub use dynmatrix::DynMatrixu64;pub use dynmatrix::DynVectorf32;pub use dynmatrix::DynVectorf64;pub use dynmatrix::DynVectori32;pub use dynmatrix::DynVectori64;pub use dynmatrix::DynVectoru32;pub use dynmatrix::DynVectoru64;pub use dynmatrix::DynMatrixz32;pub use dynmatrix::DynMatrixz64;pub use dynmatrix::DynVectorz32;pub use dynmatrix::DynVectorz64;pub use quaternion::Quaternion;pub use traits::FloatScalar;pub use traits::LinalgScalar;pub use traits::MatrixMut;pub use traits::MatrixRef;pub use traits::Scalar;
Modules§
- control
- Digital control: IIR filters, PID controller, compensator design, and tuning.
- dynmatrix
- estimate
- State estimation: EKF, UKF, SR-UKF, CKF, RTS smoother, batch least-squares.
- interp
- Interpolation: linear, Hermite, barycentric Lagrange, natural cubic spline, and bilinear (2D).
- linalg
- matrix
- ode
- ODE integration — fixed-step, adaptive, and stiff solvers.
- optim
- Optimization: root finding, unconstrained minimization, nonlinear least squares.
- quad
- Numerical quadrature (integration).
- quaternion
- special
- Special mathematical functions.
- stats
- Statistical distributions: continuous and discrete.
- traits
Structs§
- Complex
- A complex number in Cartesian form.