n = 64  ·  h = 1/65  ·  sixty-four directions, each with a name  ·  32 machine checks, all PASS

Which Directions to Leave Wrong

The chain's matrix $A=\mathrm{tridiag}(-1,2,-1)/h^2$ owns sixty-four private axes. Rotate into them and solving is one division per axis; refuse to rotate and every solver becomes a budget decision — fix a few directions exactly, damp the rest, and choose where the error is allowed to live. This page runs that budget as a measured ledger.

Physics · standing waves of the chain
$v_k(i)=\sin\dfrac{ik\pi}{65}$, stiffness $\lambda_k$
Probability · principal components of the bridge
same vectors, variance $1/\lambda_k$
§1 · The modes

Sixty-four directions, each with a name

Everything on this page happens inside one matrix — the suite's 1-D stiffness-and-precision operator, here at $n=64$ interior nodes, $h=\tfrac1{65}$. Small enough to print whole (at $n=8$):

$$h^2A\big|_{n=8}=\begin{pmatrix}2&-1&&&&&&\\[-2pt]-1&2&-1&&&&&\\[-2pt]&-1&2&-1&&&&\\[-2pt]&&-1&2&-1&&&\\[-2pt]&&&-1&2&-1&&\\[-2pt]&&&&-1&2&-1&\\[-2pt]&&&&&-1&2&-1\\[-2pt]&&&&&&-1&2\end{pmatrix}$$

Report 02 derived its eigenpairs from the three-term recurrence, in closed form:

$v_k(i)=\sin\dfrac{ik\pi}{n+1},\qquad \lambda_k=\dfrac{4}{h^2}\sin^2\!\dfrac{k\pi h}{2},\qquad k=1,\dots,n.$

Verified here to $1.4\times10^{-14}$ against the matrix and to $5.4\times10^{-16}$ against eigh: the modes are pure sine waves pinned at both walls, and the eigenvalues run from $\lambda_1=9.8677$ (a whisker under $\pi^2=9.8696$) to $\lambda_{64}=16890.13$ (a whisker under $4/h^2=16900$). Their ratio is the suite's villain: $\kappa=\lambda_{64}/\lambda_1=1711.66$.

k = 1 λ₁ = 9.87 ≈ π² k = 2 λ₂ = 39.45 k = 3 λ₃ = 88.67 k = 64 · the zigzag λ₆₄ = 16890 ≈ 4/h² mode 1 wearing alternating signs; dashed: ±sin(πx) gold dots: v₁ sampled at every 4th node walls pinned: vₖ(0) = vₖ(65) = 0 k − 1 interior sign changes
The gallery. Modes $k=1,2,3$ drawn from the exact formula (curves are the continuum sines, dots the lattice samples), and the roughest mode $k=64$: since $\sin\frac{64\,i\pi}{65}=(-1)^{i+1}\sin\frac{i\pi}{65}$, the zigzag is mode 1 wearing alternating signs — the dashed gold envelope is $\pm\sin(\pi x)$. Smooth and rough are mirror images; their eigenvalues differ by a factor $\kappa=1711.66$.

The reason the whole suite keeps meeting these vectors: one number, $\lambda_k$, plays four different characters depending on which report you are standing in.

Stiffness

Bend energy $\tfrac12\lambda_k c_k^2$ per unit of mode-$k$ amplitude. The zigzag costs 1711.66× more than the arch. Report 02.

Decay rate

Under heat flow $\dot u=-Au$, mode $k$ dies as $e^{-\lambda_k t}$: half-life $\ln 2/\lambda_k$ = 0.0702 for $k{=}1$ vs 4.1×10−5 for $k{=}64$ (measured via expm; ratio exactly $\kappa$). Report 10.

Inverse variance

The Brownian bridge $u\sim\mathcal N(0,A^{-1})$ jitters with variance $1/\lambda_k$ along mode $k$: the sines are its Karhunen–Loève / PCA axes. Report 09 §4.3.

Frequency

$k$ counts half-waves, and the map $u\mapsto\hat u$ is the DST — the chain's private Fourier transform, in which $A$ is diagonal. 02 §3, 13.

§2 · The mechanism

What gradient descent actually does: 64 races at once

Run Richardson / gradient descent on $\tfrac12x^\top Ax-b^\top x$ with a single step size $\alpha$: $x_{m+1}=x_m+\alpha(b-Ax_m)$. The error obeys $e_{m+1}=(I-\alpha A)e_m$, and because the sines diagonalize $A$, the iteration never mixes modes. Each coefficient runs its own private race,

$c_k(m)\;=\;(1-\alpha\lambda_k)^m\,c_k(0),$

and "convergence rate" just means the worst racer. The optimal single step is $\alpha=2/(\lambda_1+\lambda_{64})=1.183\times10^{-4}$, which balances the two extremes at $\rho=(\kappa-1)/(\kappa+1)=0.998832$. We ran it — actual GD from a known error mix with unit amplitude in every mode, every iterate projected onto the modes by the DST — and the measured coefficients sit on the predicted $(1-\alpha\lambda_k)^m$ to $4.0\times10^{-14}$, all 64 modes, all 400 iterations:

The central mechanism, measured. Dots: DST coefficients of the actual GD error at every 10th iteration. Lines: the prediction $|1-\alpha\lambda_k|^m$. Mode 8 contracts by $0.9262$ per step and is gone by iteration $\sim$300; mode 33 contracts by $0.0242$ — its dots crash into the $\sim10^{-16}$ double-precision floor by iteration 10 and stay there (the prediction line keeps falling; the measurement honestly cannot). And the punchline of the whole page: $k=1$ and $k=64$ decay identically — because $\lambda_k+\lambda_{65-k}=4/h^2=16900$ exactly, the optimally damped iteration pairs mode $k$ with mode $65-k$; the slowest pair is $\{1,64\}$ at $0.998832$ per step, the fastest is $\{32,33\}$. Smoothest and roughest are equally hopeless: with one step size you cannot be right about both ends, only symmetrically wrong.

So $\kappa$ is not an abstract condition number; it is the length of the race between $\lambda_1$ and $\lambda_{64}$. Everything a preconditioner does on this page will be visible as surgery on this picture: move some $\lambda$'s, shorten the race.

§3 · The luxury option

Rotate all the way, and the problem falls apart

In mode coordinates $\hat x=V^\top x$ the energy is $\sum_k\bigl(\tfrac12\lambda_k\hat x_k^2-\hat b_k\hat x_k\bigr)$ — verified: $V^\top AV$ is diagonal to $3.9\times10^{-15}$ (relative), with the $\lambda_k$ on the diagonal. Sixty-four independent one-dimensional parabolas; nothing couples to anything. The whole solve is one division per axis, $\hat x_k=\hat b_k/\lambda_k$, and the rotation itself is the DST-I, a real-signal FFT costing $O(N\log N)$: transform, divide, transform back matches spsolve to $1.7\times10^{-15}$. In the probability column this same move is PCA whitening in the bridge's Karhunen–Loève basis (09 §4.3): independent components, rescaled.

That is the luxury option, and it is worth being clear about why the rest of the suite exists at all: the full rotation is only for sale on special matrices. The chain's eigenvectors are sines because the chain is translation-invariant with clean walls; perturb a coefficient (variable_poisson_2d), move to an irregular mesh, or just present a matrix you have never seen, and there is no fast transform waiting. A dense eigendecomposition costs $O(N^3)$ — more than the solve it would enable. Off the chain you cannot afford to be right about all $N$ directions. The honest question becomes: right about which ones?

§4 · Partial rotation

Deflation: buy $p$ directions, damp the rest

Suppose the budget covers only $p$ eigenvectors — the $p$ floppiest, since §2 showed the slow lane is where GD bleeds. Solve exactly inside $\mathrm{span}(V_p)$, and on the orthogonal complement fall back to the best single scalar step for what remains:

$M_p^{-1}\;=\;V_p\Lambda_p^{-1}V_p^\top\;+\;\dfrac{2}{\lambda_{p+1}+\lambda_{64}}\,\bigl(I-V_pV_p^\top\bigr).$

The measured spectrum of $M_p^{-1}A$ is exactly the promised surgery: $p$ eigenvalues sitting at $1$ (exact to $10^{-14}$) and the tail rescaled to $\alpha_p\lambda_k$, already optimally centered. The effective condition number collapses to $\kappa_{\mathrm{eff}}=\lambda_{64}/\lambda_{p+1}$, and since $\lambda_k\approx\pi^2k^2$ at the bottom of the spectrum, each unit of rank pays quadratically: $\kappa_{\mathrm{eff}}\approx\kappa/(p+1)^2$ (measured ratio 1.0000 at $p=0$ drifting only to 1.0580 at $p=16$). Drag the budget yourself:

rank budget p 4
κeff = λ₆₄/λp+1   rate   predicted iterations to 10−10   measured  
Spectrum surgery, live. Top strip: eigenvalues of $M_p^{-1}A$ — as $p$ grows, blue tail eigenvalues are bought out one by one and re-pinned at exactly $1$ (gold). Bottom: the predicted error line $\tfrac{\sqrt2}{8}\rho_p^{\,m}$ on log–log axes, $\rho_p=(\kappa_{\mathrm{eff}}-1)/(\kappa_{\mathrm{eff}}+1)$ (the $\sqrt2/8 = 0.1768$ prefactor is the share of the starting error in the two slowest modes). Gold diamonds: measured GD iteration counts at $p\in\{0,1,2,4,8,16\}$ from the checks script — prediction and measurement agree to $\pm1$ iteration at every measured $p$.
pλp+1κeff = λ₆₄/λp+1 κeff ÷ κ/(p+1)²rateGD iterations to 10−10
09.871711.661.00000.99883218224
139.45428.171.00060.9953404559
288.67190.481.00160.9895552028
4245.5468.791.00470.971341733
8786.9121.461.01570.910968229
162695.426.271.05800.72475567

Sixteen directions out of sixty-four — a quarter of the basis — and the bill drops from 18224 iterations to 67, a factor of 272. Every row is a measured run, and every row obeys the same sentence: be exactly right about the $p$ directions you paid for, be honestly, symmetrically wrong about the rest.

§5 · The stochastic caricature

The same surgery under gradient noise

One deliberately narrow detour toward optimization. Take the identical chain quadratic, but hand GD a noisy gradient: $g_m = Ax_m - b + \sigma\xi_m$ with $\xi_m\sim\mathcal N(0,I)$, $\sigma=1$, fixed seed, constant steps. Two runs, both measured. Plain: the optimal scalar step $\alpha$. Head-solved: each step, project the (noisy) gradient onto the $p=4$ floppiest modes and take the exact Newton step there — i.e. apply $M_4^{-1}$ from §4 — and the damped step on the tail.

Both trajectories measured, seed 0. Relative error $\|e_m\|/\|e_0\|$, log axes. Dashed lines: each method's own stationary noise floor, computed exactly per mode from $\mathrm{Var}=s_k^2\sigma^2/(1-(1-s_k\lambda_k)^2)$ and confirmed by the runs (measured long-run mean-square within 24% and 0.03% of the formula, respectively). Plain constant-step SGD spends 4142 iterations crossing its transient — the low-curvature modes creep at $0.998832$ per step — then flattens at a low floor. With the 4-mode head solved exactly the transient collapses to 74 iterations, a 56× shortening, but onto a floor 23.7× higher: the exact head update re-injects fresh noise as $\sigma/\lambda_k$ every step, and small $\lambda$ amplifies it. You buy speed with variance.
Truth in labeling. This is the quadratic caricature of why curvature-aware preconditioning helps stochastic optimization — a convex bowl whose Hessian we know exactly, isotropic additive noise, no minibatching, no nonconvexity, no learning-rate schedule. It shows the mechanism (slow low-curvature transients; the bias–variance price of solving them exactly) and claims nothing beyond it. The JSON carries the same disclaimer next to the numbers.
§6 · The ledger

Every preconditioner, audited in the same currency

The bridge explainer ends with a sentence this page exists to expand. Quoted exactly:

“Domain decomposition, deflation, incomplete factorizations, Nyström — all of them are strategies for choosing which few directions to leave wrong.” the coda of the bridge explainer

So: same chain, same starting error, same optimally damped Richardson/GD outer iteration, and six strategies run as preconditioners. Three measurements each: iterations to $10^{-10}$; the effective condition number $\kappa_{\mathrm{eff}}$ of $M^{-1}A$; and directions left wrong — how many of the 64 eigenvalues of the (optimally rescaled) $M^{-1}A$ land farther than 10% from $1$. The last column re-runs each method under CG, because the two solvers price wrongness differently (13): Richardson pays for the range of the spectrum, CG pays roughly one iteration per cluster.

preconditionerwrong (of 64)which directionsκeff GD itersCG iters
none (damped GD)60everything; both ends of the race 1711.661822464
Nyström rank 460the bottom — the end that mattered 1711.531825064
Nyström rank 859the bottom, still 1704.621815665
coarse averages, p=458low modes nearly right (≤36.5° off) 144.97164067
coarse averages, p=858low modes nearly right (≤41.2° off) 46.0751859
spectral deflation, p=456modes 1–4 exactly right; tail by design 68.7973358
spectral deflation, p=852modes 1–8 exactly right 21.4622943
block-Jacobi, 2 subdomains2the interface pair, 1 ± 32/33 65.006633
IC(0)0none 1.0011

Spectral deflation is the gold standard the others imitate. For a rank-$p$ correction aimed at Richardson, fixing the $p$ smallest eigenpairs is the best you can do — it is literally the surgery of §4, and the ledger shows everything else as an approximation to it. Its "56 wrong" is honest bookkeeping, not failure: the tail is deliberately spread across $[0.03,1.97]$, centered so its range, not its count, is optimized. That is why it wins the GD column at every rank while barely denting the CG column.

Coarse averages are cheap imitations of low modes — measurably good ones. Replace the four true sine modes with four flat block-averages (blocks of 16) in the same deflation formula, and the principal angles between the block-average space and the true bottom-4 eigenspace are $12.5^\circ,\,23.5^\circ,\,26.2^\circ,\,36.5^\circ$: never orthogonal, never exact. The price of imitation is precise: $\kappa_{\mathrm{eff}}$ 144.97 instead of 68.79, iterations 1640 instead of 733 — call it a factor of 2.2 for skipping the eigensolve. At $p=8$ (blocks of 8, largest angle $41.2^\circ$): 518 vs 229. This is the whole two-grid idea of 11/12 in one row: piecewise-constant functions approximately span the smooth end of the spectrum, and "approximately" costs a small constant, not the asymptotics.

Nyström leaves the wrong end wrong. The randomized sketch (python/nystrom.py, rank 8, seed 0) faithfully does its job: it captures the top of the spectrum — its eigenvalue estimates undershoot the true top eight, as Lemma 2.1 promises, with $\hat\lambda_8=9782.3$ — and deflates it. But on the Laplacian the top is the harmless end: $\kappa_{\mathrm{eff}}$ falls from 1711.66 to 1704.62, iterations from 18224 to 18156, and at rank 4 the run measures 18250 — slightly worse than nothing, transient noise included honestly. The bottom modes, where GD actually bleeds, stay exactly as wrong as before ($k=1$ is still the first wrong direction by the Rayleigh diagnostic). This is report 07's lesson relocated to 1-D and priced in the same currency as its competitors: Nyström is built for spectra that decay fast from the top (regularized ridge problems), and the chain is its adversarial case.

Domain decomposition leaves the fewest directions wrong — and the wrongest. Two exact half-solves (block-Jacobi on nodes 1–32 and 33–64) leave exactly two eigenvalues off $1$: the pair $1\pm\tfrac{32}{33}$ generated by the single severed bond, the smallest separator the suite's report 14 story ever meets. CG names those two exceptions and finishes in 3 iterations. Richardson cannot name anything: it pays the full range $\kappa_{\mathrm{eff}}=(1+\tfrac{32}{33})/(1-\tfrac{32}{33})=65=n+1$, and grinds for 663 iterations at rate $\tfrac{32}{33}=0.9697$. Same preconditioner, 221× apart — the sharpest clustering-versus-range contrast in the ledger.

IC(0) leaves nothing wrong — here. On the chain, zero-fill incomplete Cholesky is Cholesky: a path is a tree, elimination creates no fill, and the measured factor satisfies $LL^\top=A$ to $2.2\times10^{-16}$. Zero directions wrong, one iteration, by either solver. The honest caveat is that this perfection is a property of the 1-D graph, not of the method: on the 2-D grid the same pattern truncation discards real fill-in and IC(0) rejoins the imperfect field — 11 and 15 (step 5) measure exactly what that truncation costs.

Read down the "wrong" column and the coda stops being a slogan: 60, 60, 59, 58, 58, 56, 52, 2, 0 — every method is an answer to the same budget question, and where two counts tie (Nyström rank 4 against doing nothing, the two coarse ranks at 58) the "which directions" column is what still separates them. The two solver columns are two different prices for the same answer.

§7 · Crossings

Where the suite has already met these directions

Physics

02 derives the sines, the DST, and $\kappa=O(n^2)$ — this page's §1–§3 are its formulas, re-measured at $n=64$.

12 runs every preconditioner as stationary Richardson; the per-mode factor $1-\alpha\lambda_k$ of §2 is "the per-sweep fraction of structure the predictor fails to explain," one mode at a time.

Probability

09 §4.3: the eigenbasis is the bridge's KL basis; §3's fast solve is PCA whitening. The bridge explainer tells that story visually — and donates this page's coda.

The green tents read $A^{-1}$ column-wise; this page reads it axis-wise. Same inverse, two decompositions.

Synthesis

13 (decoupling; clustering vs range), 14 (separators — here, one node), 15 (IC(0) as truncated prediction, exact on the chain), 07 (Nyström's honest domain). The ledger is their shared scoreboard.

Everything above is machine-verified (python/experiments/eigenmodes_checks.py, 32 checks, all PASS, deterministic, <1 s; every quoted number exported to results/eigenmodes.json): the sine/eigenvalue formulas ($1.4\times10^{-14}$); heat half-lives via expm with ratio $\kappa$; measured GD-iterate DST coefficients $=(1-\alpha\lambda_k)^m$ to $4.0\times10^{-14}$ (400 iterations × 64 modes); the mode pairing $\lambda_k+\lambda_{65-k}=4/h^2$; $V^\top AV$ diagonal and the DST one-pass solve vs spsolve ($1.7\times10^{-15}$); the deflated spectra $\{1^{(p)}\}\cup\{\alpha_p\lambda_k\}$, $\kappa_{\mathrm{eff}}=\lambda_{64}/\lambda_{p+1}$, the $(p+1)^2$ ratio table, measured iteration counts and tail slopes for $p\in\{0,1,2,4,8,16\}$; the SGD floors against the exact stationary-variance formula and both transit times (seed 0); and the full ledger — coarse-average principal angles, Nyström Lemma-2.1 undershoot and bottom-heavy wrongness, block-Jacobi's exact $1\pm\frac{32}{33}$ pair, IC(0)$\,=\,$Cholesky on the chain. Reuses poisson.laplacian_1d, nystrom.NystromPreconditioner, preconditioners.ic0, pcg.pcg. Companion pages: 02 · eigenvalues · 09 · stiffness as precision · 13 · decoupling · the bridge explainer · the green tents.