axiolid-numeric
Numeric substrate: bracketed and polynomial root finding, adaptive quadrature, dense least squares, and minimisation, each with error estimates.
| Latest release | 0.1.1 (2026-10-02) |
| crates.io | axiolid-numeric |
| Layer | algorithms (algorithm.numeric) |
| API documentation | rustdoc · docs.rs |
| Source | crates/algorithms/numeric/ |
Overview
General numeric routines that geometry algorithms build on: bracketed root finding (Brent) and every real root of a polynomial in an interval, adaptive Gauss-Kronrod quadrature and fixed Gauss-Legendre rules, LU, Cholesky and column-pivoted QR solves, Jacobi-preconditioned conjugate gradients on a compressed-row sparse matrix, linear least squares with and without equality constraints, Levenberg-Marquardt for nonlinear least squares, and Brent's bounded scalar minimiser. Each result carries a bracket, an error estimate or a condition estimate, and each iterative routine says whether it met its tolerance. Non-finite input, singular or rank-deficient matrices and unbracketed roots are refused by name. Values are plain f64; there are no geometry types and no dependencies.
Design notes
Polynomial roots are isolated through the roots of the derivative, and a sign is trusted only where the value exceeds a rigorous bound on its own rounding error. Where it does not (a multiple root, a cluster closer than f64 separates) the answer is an unresolved region with the most roots it can hold, not a guessed count. For exact decisions on integer polynomials use axiolid-exact.
Older inline routines elsewhere in the workspace (bisection and an 8-point Gauss-Legendre rule in axiolid-evaluate, the interpolation solve in axiolid-nurbs) are unchanged; new code should use this crate.
Changes
Latest release, 0.1.1 (2026-10-02):
Added
SparseMatrix: compressed sparse rows assembled from triplets, with duplicates summed in input order so storage and products do not depend on triplet order.conjugate_gradient: Jacobi-preconditioned conjugate gradients for a sparse symmetric positive definite system (#129). Convergence is judged on the recomputed true residual, a spent budget is reported asStatus::BudgetExhaustedand refused byconverged(), and an asymmetric matrix, a non-positive diagonal or a direction of non-positive curvature is refused by name.
Full history: crates/algorithms/numeric/CHANGELOG.md