thick-bound
At its defaults it draws the reported bound and the residual it bounds, over 10 cycles. Three quantities against the cycle count on a logarithmic vertical axis. The residual bound the method reports falls without limit, reaching 9.41·10⁻⁴¹. The residual it claims to bound stops at 5.68·10⁻⁵ and does not move. Recomputing the arrowhead's border entries, at one extra product with A a cycle, takes the residual to 3.81·10⁻¹⁴.
thick-bound is one function in lib/figures/thick.js —
keeping the vectors — a third of the products, and the bound that stops bounding. Everything below came out of it during this build, at
arguments taken from the essays rather than invented for this page. A figure here is the
figure a reader meets in an essay, and if the generator changes, this page changes with it.
At its defaults
Drawn even though every essay passes arguments — which on this site is every essay, at 100% of placements since the standard pass. A default nothing exercises is a trap for the next essay to call this with none, and this is the page where a default that has drifted from the figures around it becomes visible.
Three quantities against the cycle count on a logarithmic vertical axis. The residual bound the method reports falls without limit, reaching 9.41·10⁻⁴¹. The residual it claims to bound stops at 5.68·10⁻⁵ and does not move. Recomputing the arrowhead's border entries, at one extra product with A a cycle, takes the residual to 3.81·10⁻¹⁴.
k: 2
The arguments are the ones A small residual is not a small error passes. A value drawn at the generator's defaults instead would be a picture no essay asked for and no assertion has been run against.
Three quantities against the cycle count on a logarithmic vertical axis. The residual bound the method reports falls without limit, reaching 2.66·10⁻¹³. The residual it claims to bound stops at 0.0155 and does not move. Recomputing the arrowhead's border entries, at one extra product with A a cycle, takes the residual to 2.72·10⁻¹³.
k: 4
The arguments are the ones An eigenvalue one vector cannot see passes. A value drawn at the generator's defaults instead would be a picture no essay asked for and no assertion has been run against.
Three quantities against the cycle count on a logarithmic vertical axis. The residual bound the method reports falls without limit, reaching 9.41·10⁻⁴¹. The residual it claims to bound stops at 5.68·10⁻⁵ and does not move. Recomputing the arrowhead's border entries, at one extra product with A a cycle, takes the residual to 3.81·10⁻¹⁴.
k: 6
The arguments are the ones The algorithm the libraries actually run passes. A value drawn at the generator's defaults instead would be a picture no essay asked for and no assertion has been run against.
Three quantities against the cycle count on a logarithmic vertical axis. The residual bound the method reports falls without limit, reaching 6.99·10⁻⁴. The residual it claims to bound stops at 0.151 and does not move. Recomputing the arrowhead's border entries, at one extra product with A a cycle, takes the residual to 4.36·10⁻⁴.
k: 3
The arguments are the ones The part of a solver that may be rounded passes. A value drawn at the generator's defaults instead would be a picture no essay asked for and no assertion has been run against.
Three quantities against the cycle count on a logarithmic vertical axis. The residual bound the method reports falls without limit, reaching 1.73·10⁻³⁰. The residual it claims to bound stops at 2.44·10⁻¹⁴ and does not move. Recomputing the arrowhead's border entries, at one extra product with A a cycle, takes the residual to 2.48·10⁻¹⁴.
k: 5
The arguments are the ones Two shifts that are never formed passes. A value drawn at the generator's defaults instead would be a picture no essay asked for and no assertion has been run against.
Three quantities against the cycle count on a logarithmic vertical axis. The residual bound the method reports falls without limit, reaching 8.85·10⁻⁵. The residual it claims to bound stops at 0.284 and does not move. Recomputing the arrowhead's border entries, at one extra product with A a cycle, takes the residual to 3.13·10⁻⁵.
What it checked while drawing
Every figure above asserted its own claims on the way to being drawn, and a claim that failed
would have failed the build rather than drawn a wrong picture. Those assertions used to leave
no trace at all: a passing one returned true and the only evidence the figure had
checked anything was that nothing crashed. The list below is what they actually said, collected
by running this generator with an observer installed — not a description of
what it is believed to check.
9 distinct claims across 6 sets of arguments, grouped below by shape — because most of them are one sentence with a different number in it, and how many separate times that sentence was put to the test is the informative part.
a number of retained vectors the method needs
a size the dense reference eigensolve is affordable at
and is orders of magnitude below it by the last
and the repaired run's residual is never the larger
enough cycles for the bound to leave the residual behind
Jacobi needs a symmetric matrix
matmul shapes agree
the bound is the residual at the first cycle
with the gap widening every cycle
Against the rule
The rule does not apply to it. It factorises nothing, so there is no residual it could be withholding. That is worth stating rather than leaving blank: a site that reported the rule as satisfied by every generator would be counting mostly generators the rule never reached.
Across the library: the rule bites on 70
of 151 generators —
55 print a residual and
15 are exempt with a published reason;
81 factorise nothing.
Read from lib/residual-rule.js, which is the same body the gate enforces from,
and the gate's last check fails the build if this page and it disagree about any generator.
Where it is called
Changing this generator changes every figure on this list. That is what makes the list worth publishing rather than keeping in a check script.
A small residual is not a small error
Substituting the answer back and finding that it fits is the most natural check there is, and it verifies the wrong thing. A residual of 10⁻¹⁷ is entirely compatible with an answer whose second digit is wrong.
Eigenvalues, singular values, rankAn eigenvalue one vector cannot see
A matrix with an exactly doubled eigenvalue at 10. Twelve Lanczos steps find it once; twenty-four find it once, on a Krylov space of dimension 23 in a 24-dimensional problem. A block of two vectors finds it twice. This is not slow convergence — the second copy is not in the space.
Eigenvalues, singular values, rankKeeping the vectors, and losing the bound
Thick restarting keeps the Ritz vectors instead of filtering the starting vector — the same eigenvalues for a third of the products with A. Its residual bound reaches 9.4·10⁻⁴¹ while the residual it bounds sits at 5.7·10⁻⁵, and the eigenvalues are correct to 4.3·10⁻¹⁴ the whole time, so nothing reports it.
Eigenvalues, singular values, rankRestarting is a filter
A restart throws away the Ritz values it does not want and begins again from a new starting vector. Written in the eigenbasis, that vector's components have been multiplied by a polynomial with its roots at the discarded values — measured component by component, and agreeing with the polynomial to rounding.
Eigenvalues, singular values, rankThe algorithm the libraries actually run
Factorise, multiply the factors back in the other order, repeat. That description is complete and correct and produces something nobody would use — on a matrix with eigenvalues +1 and −1 it does not converge at all, and the subdiagonal entry does not move by so much as a rounding error.
Methods that were designed apartThe part of a solver that may be rounded
A preconditioner computed and applied with a three-bit significand still returns thirteen correct digits — it costs seventeen extra iterations and nothing else. Round the working arithmetic instead and the step count barely moves while the answer loses exactly the digits the format dropped.
Eigenvalues, singular values, rankTwo shifts that are never formed
The double shift is defined as a factorisation of (A − μI)(A − μ̄I), which nobody computes. What is computed is the first column of that product — three numbers — and the bulge those three numbers create, pushed down the subdiagonal by n − 2 reflectors until it falls off the bottom.