Skip to content

axiolid-numeric ​

Numeric substrate: bracketed and polynomial root finding, adaptive quadrature, dense least squares, and minimisation, each with error estimates.

Latest release0.1.1 (2026-10-02)
crates.ioaxiolid-numeric
Layeralgorithms (algorithm.numeric)
API documentationrustdoc · docs.rs
Sourcecrates/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 as Status::BudgetExhausted and refused by converged(), 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

Released under the Mozilla Public License 2.0.