Baseline comparisons¶
What it measures: SOLVAX against jax.scipy.sparse.linalg, lineax, and
scipy.sparse.linalg on the research problem families at identical tolerance
with no preconditioning anywhere — identical knobs isolate the solver
implementations (preconditioned SOLVAX numbers live in Problem-suite robustness sweeps).
Reproduce (lineax via pip install solvax[bench]; its rows skip if absent):
python -m benchmarks.benchmark_baselines --json
Record: benchmarks/results/baselines.json (rtol 1e-8, float64, CPU; SciPy
runs on NumPy arrays on the same host, so iterations are the primary
cross-library metric and its wall times carry that caveat).
Headline (grid-32 families, rtol 1e-8)¶
Iteration parity with the reference: SOLVAX’s PCG and FGMRES take exactly the SciPy iteration counts on every SPD and nonsymmetric point (e.g. 18/18 and 70/70 on anisotropic diffusion, 19/19 and 20/20 on Helmholtz) — same mathematics, verified head-to-head.
lineaxGMRES reports outer restart cycles rather than inner iterations, and its CG stops on a different criterion, so its counts are not directly comparable.Time: median time-to-best ratios over all problems —
jax.scipy1.00, SOLVAX 1.19,lineax1.96,scipy6.49. At these small unpreconditioned sizes the minimal-machinery baseline is fastest; SOLVAX’s ~20% overhead buys iteration diagnostics, convergence flags, preconditioning hooks, recycling, and the structured/bounded adjoints no baseline offers. Honest losses included:jax.scipywins most raw-time comparisons here.
Work-precision¶
The record includes achieved-residual-versus-time series across rtol {1e-4 … 1e-10} for all four solvers on three representative problems, and a SOLVAX-only solution-plus-gradient series (one fused jit through the implicit adjoint at each tolerance) — the integrated differentiable cost that baselines would hand-roll as two separate solves.