ADI half-sweeps, live

The Peaceman–Rachford ADI iteration attacks the 32×32 hot-rod/cold-rod Poisson problem (plate held at 0 on the boundary, +1 rod near the NW corner, −1 rod near the SE corner) by alternating two cheap exact solves: a rows pass that removes all row coupling (32 independent tridiagonal systems), then a columns pass that removes all column coupling. Drag the slider through 60 half-sweeps and watch each half-sweep wipe the error structure along its own direction — with the geometric-mean shift σ = √(λ1λn) the full double sweep contracts the error at asymptotic rate 0.826 (see report 13, §2.2).

(H + σI) xk+½ = (σIV) xk + b   (rows),  (V + σI) xk+1 = (σIH) xk+½ + b   (columns),  σ = √(λ1λn) =
self-test running…
self-test details (JS vs Python reference, 10 significant digits)

Python reference: same Peaceman–Rachford recurrences from x₀ = 0 (scipy solveh_banded + sparse matvecs), rel l₂ error vs x* after half-sweeps 1, 2, 10, 40; x* from plain CG at rel resid 10⁻¹³.

arrow keys step by one half-sweep; odd steps are ROWS passes, even steps COLUMNS passes
temperature estimate xk, fixed scale ±max|x*|
hot rod (rows 3–8, col 4)   cold rod (rows 23–28, col 27)
error field xk − x*, fixed symmetric scale from half-sweep 0

All numbers are computed in this page at load, in double precision: b built on the 32×32 grid (h = 1/33, row-major), x* by plain CG with the 5-point stencil matvec to rel resid 10⁻¹³, then 60 stored ADI half-sweeps from x₀ = 0 — the same recurrences as python/experiments/make_report13_anims.py. Back to report 13: preconditioning as decoupling.