mathlib-fp 1.9.0
Released: 2026-08-01.
Version 1.9.0 adds a complete portable typed path for matrices that are sparse,
compactly structured, or available only through a product. It is an additive
release: maintained 1.x APIs and defaults remain available.
User-visible additions
AlgebraLib.SparseMatrices: immutable validated CSR/CSC for single/double
real and complex scalars, deterministic triplet construction, explicit
stored-zero policy, sparse arithmetic/products/conversions, and compact
diagonal/tridiagonal/band storage.AlgebraLib.LinearOperators: one typed ordinary/adjoint product contract for
sparse, structured, dense, and user-supplied matrix-free problems; explicit
ownership and reentrancy; identity, diagonal, IC(0), and ILU(0)
preconditioners.AlgebraLib.IterativeSolvers: CG, MINRES, restarted GMRES, BiCGSTAB, and
LSQR for all four scalar paths, with shared options/results, true-residual
reporting, LSQR normal-residual convergence, explicit confirmation,
cancellation/progress, refresh counts, breakdown reasons, and reusable
workspaces.AlgebraLib.StructuredSolvers: reusable pivoted tridiagonal factors,
compact band factors, and an explicitly selected natural-order sparse LU
baseline with pivot/fill diagnostics and multiple-RHS solves.AlgebraLib.PartialEigensystems: deterministic restarted Lanczos and
Arnoldi for largest-magnitude selected eigenpairs, including independently
recomputed residuals.MathBase.Interchange: Matrix Market coordinate double-real/double-complex
sparse exchange and checksummed versioned CSR/CSC binary interchange for all
four scalar kinds, with independent stored-nonzero and per-axis dimension
limits checked before shape-sized allocation.- An end-to-end sparse Matrix Market/preconditioned-CG example and a
run-checked candidate-2.0 migration preview covering dense/sparse solves,
fitting, interpolation, optimization, DSP, and streaming statistics. - A complete classified 1.9 public-API snapshot and generated declaration
reference keyed by unit, owner, kind, name, and normalized signature, with
per-unit interface SHA-256 enforcement. - Compiler-backed execution of every self-contained published Pascal example;
all 1.9 release-facing Pascal fences are required to remain self-contained.
The sparse linear-algebra guide documents every
representation, solver-selection rule, residual formula, default, status,
ownership/aliasing contract, operation cost, reuse path, and stable limit.
Compatibility and migration
TMatrixKitSparse is unchanged and remains a compatibility path. Its legacy
storage is not silently replaced by CSR/CSC; the migration example performs an
explicit value copy and chooses a zero policy. No maintained public identifier
is removed or renamed.
The candidate 2.0 contract and
migration preview are documentation and
compile-checked 1.9 runway only. They do not activate breaking 2.0 behavior.
There are no formal deprecations in 1.9.0.
Numerical and scalability evidence
The focused suites compare all four scalar storage/operator paths with typed
dense oracles, execute every iterative method for every scalar, and cover
success, iteration limit, cancellation, invalid structure, singularity, and
numerical breakdown. Matrix Market and binary tests cover round trips plus
malformed coordinates, duplicates, explicit zeros, version/kind mismatches,
checksum corruption, truncation, nonzero limits, and dimension limits.
A 20,000-dimensional matrix-free test is a regression tripwire against an
accidental full dense allocation (which would require 3.2 GB of binary64
values). Matrix-free construction validates each vector axis independently,
so this linear-storage path is not rejected on Win32 because the hypothetical
dense product exceeds its address space. The Win64 FPC 3.2.2 -O3
qualification benchmark additionally ran:
- a 100,000-by-100,000 CSR system with 100,000 nonzeros in 125 ms initially,
then 20 warmed solves in 2,109 ms, one CG iteration/three products per solve,
zero final true residual, approximately 3,300,041 retained scalar/index
slots, and zero sampled repeated-solve peak/retained heap growth; - a 200,000-dimensional matrix-free system in 172 ms initially, then 20 warmed
solves in 3,484 ms, one CG iteration/three products per solve, zero retained
operator values, zero final true residual, approximately 5,800,041 retained
scalar slots, and zero sampled repeated-solve peak/retained heap growth.
Both used prepared Into workspaces and allocated zero elements proportional
to a full dense matrix. Repeated-solve heap measurements use a fixed 65,536-byte
regression ceiling.
Timing and heap figures are workload-, compiler-, platform-, and
machine-specific observations, not universal speed or memory guarantees. Full
commands and conditions are in the
1.9 qualification report.
Important limits
- Sparse kernels are portable serial paths. Distributed, out-of-core, GPU,
vendor-library, parallel, and SIMD sparse execution are not included. - The general band factor does not pivot. Sparse LU uses natural ordering with
row pivoting; it has no fill-reducing symbolic ordering and fill can be large. - Solvers validate types and shapes, not the caller's symmetry, definiteness,
or conditioning model. LSQR is unpreconditioned in 1.9. - Partial eigensystems target largest magnitude only. There is no shift-invert,
interior target, generalized, full nonsymmetric, Schur, or polynomial path. - Matrix Market sparse text is coordinate
real general/complex generalin
double precision and forbids duplicate and explicit-zero entries. - Advanced DSP, survival/state-space, implicit ODE, and mixed-integer/global
optimisation families remain outside this focused release.
Every remaining baseline gap is recorded in
capabilities.json.