Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Select and configure linear solvers for systems Ax=b in dense and sparse problems. Use when choosing direct vs iterative methods, diagnosing convergence issues, estimating conditioning, selecting preconditioners, or debugging stagnation in GMRES/CG/BiCGSTAB.
.claude/skills/linear-solvers/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | — | — |
| case-20 | ✗→✓ | ▲ Improved | — | — |
| case-03 | ✗→✓ | ▲ Improved | — | — |
| case-02 | ✗→✓ | ▲ Improved | — | — |
| case-14 | ✗→✓ | ▲ Improved | — | — |
Provide a universal workflow to select a solver, assess conditioning, and diagnose convergence for linear systems arising in numerical simulations.
| Input | Description | Example | |-------|-------------|---------| | Matrix size | Dimension of system | n = 1000000 | | Sparsity | Fraction of nonzeros | 0.01% | | Symmetry | Is A = Aᵀ? | yes | | Definiteness | Is A positive definite? | yes (SPD) | | Conditioning | Estimated condition number | 10⁶ |
Is matrix small (n < 5000) and dense?
├── YES → Use direct solver (LU, Cholesky)
└── NO → Is matrix symmetric?
├── YES → Is it positive definite?
│ ├── YES → Use CG with AMG/IC preconditioner
│ └── NO → Use MINRES
└── NO → Is it nearly symmetric?
├── YES → Use BiCGSTAB
└── NO → Use GMRES with ILU/AMG| Matrix Type | Solver | Preconditioner | |-------------|--------|----------------| | SPD, sparse | CG | AMG, IC | | Symmetric indefinite | MINRES | ILU | | Nonsymmetric | GMRES, BiCGSTAB | ILU, AMG | | Dense | LU, Cholesky | None | | Saddle point | Schur complement, Uzawa | Block preconditioner |
| Script | Key Outputs | |--------|-------------| | scripts/solver_selector.py | recommended, alternatives, notes | | scripts/convergence_diagnostics.py | rate, stagnation, recommended_action | | scripts/sparsity_stats.py | nnz, density, bandwidth, symmetry | | scripts/preconditioner_advisor.py | suggested, notes | | scripts/scaling_equilibration.py | row_scale, col_scale, notes | | scripts/residual_norms.py | residual_norms, relative_norms, converged |
scripts/sparsity_stats.pyscripts/solver_selector.pyscripts/preconditioner_advisor.pyscripts/scaling_equilibration.pyscripts/convergence_diagnostics.pyscripts/residual_norms.pyUser: My GMRES solver is stagnating after 50 iterations. The residual drops to 1e-3 then stops improving.
Agent workflow:
bash python3 scripts/convergence_diagnostics.py --residuals 1,0.1,0.01,0.005,0.003,0.002,0.002,0.002 --json
bash python3 scripts/preconditioner_advisor.py --matrix-type nonsymmetric --sparse --stagnation --json
bash# Analyze sparsity pattern python3 scripts/sparsity_stats.py --matrix A.npy --json # Select solver for SPD sparse system python3 scripts/solver_selector.py --symmetric --positive-definite --sparse --size 1000000 --json # Get preconditioner recommendation python3 scripts/preconditioner_advisor.py --matrix-type spd --sparse --json # Diagnose convergence from residual history python3 scripts/convergence_diagnostics.py --residuals 1,0.2,0.05,0.01 --json # Apply scaling python3 scripts/scaling_equilibration.py --matrix A.npy --symmetric --json # Compute residual norms python3 scripts/residual_norms.py --residual 1,0.1,0.01 --rhs 1,0,0 --json
| Error | Cause | Resolution | |-------|-------|------------| | Matrix file not found | Invalid path | Check file exists | | Matrix must be square | Non-square input | Verify matrix dimensions | | Residuals must be positive | Invalid residual data | Check input format |
| Rate | Meaning | Action | |------|---------|--------| | < 0.1 | Excellent | Current setup optimal | | 0.1 - 0.5 | Good | Acceptable for most problems | | 0.5 - 0.9 | Slow | Consider better preconditioner | | > 0.9 | Stagnation | Change solver or preconditioner |
| Pattern | Likely Cause | Fix | |---------|--------------|-----| | Flat residual | Poor preconditioner | Improve preconditioner | | Oscillating | Near-singular or indefinite | Check matrix, try different solver | | Very slow decay | Ill-conditioned | Apply scaling, use AMG |
references/solver_decision_tree.md - Selection logicreferences/preconditioner_catalog.md - Preconditioner optionsreferences/convergence_patterns.md - Diagnosing failuresreferences/scaling_guidelines.md - Equilibration guidance| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-23 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 22 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +43 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.