Generator

thick-bound

One function in the thick library, called 8 times across 7 essays. Below: what it draws at its defaults, what it draws at every value an essay asks for, the 9 claims it put to the test while drawing them, and where it stands against the rule this site is named for.

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.

The reported bound and the residual it bounds, over 10 cyclesThree 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⁻¹⁴.1234567891010⁻⁵⁵10⁻⁴⁹10⁻⁴³10⁻³⁷10⁻³¹10⁻²⁵10⁻¹⁹10⁻¹³10⁻⁷10⁻¹cyclesizethe residualrepairedthe reported boundwhat the stopping rule readsreported at the last cycle9.4·10⁻⁴¹the residual there5.7·10⁻⁵with the border recomputed3.8·10⁻¹⁴products, cheap and repaired9a bound with nothing under itand one product a cycle to fix it

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.

The reported bound and the residual it bounds, over 10 cyclesThree 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⁻¹³.1234567891010⁻⁵⁵10⁻⁴⁹10⁻⁴³10⁻³⁷10⁻³¹10⁻²⁵10⁻¹⁹10⁻¹³10⁻⁷10⁻¹cyclesizethe residualrepairedthe reported boundwhat the stopping rule readsreported at the last cycle2.7·10⁻¹³the residual there0.016with the border recomputed2.7·10⁻¹³products, cheap and repaired9a bound with nothing under itand one product a cycle to fix it

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.

The reported bound and the residual it bounds, over 10 cyclesThree 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⁻¹⁴.1234567891010⁻⁵⁵10⁻⁴⁹10⁻⁴³10⁻³⁷10⁻³¹10⁻²⁵10⁻¹⁹10⁻¹³10⁻⁷10⁻¹cyclesizethe residualrepairedthe reported boundwhat the stopping rule readsreported at the last cycle9.4·10⁻⁴¹the residual there5.7·10⁻⁵with the border recomputed3.8·10⁻¹⁴products, cheap and repaired9a bound with nothing under itand one product a cycle to fix it

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.

The reported bound and the residual it bounds, over 10 cyclesThree 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⁻⁴.1234567891010⁻⁵⁵10⁻⁴⁹10⁻⁴³10⁻³⁷10⁻³¹10⁻²⁵10⁻¹⁹10⁻¹³10⁻⁷10⁻¹cyclesizethe residualrepairedthe reported boundwhat the stopping rule readsreported at the last cycle7·10⁻⁴the residual there0.15with the border recomputed4.4·10⁻⁴products, cheap and repaired9a bound with nothing under itand one product a cycle to fix it

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.

The reported bound and the residual it bounds, over 10 cyclesThree 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⁻¹⁴.1234567891010⁻⁵⁵10⁻⁴⁹10⁻⁴³10⁻³⁷10⁻³¹10⁻²⁵10⁻¹⁹10⁻¹³10⁻⁷10⁻¹cyclesizethe residualrepairedthe reported boundwhat the stopping rule readsreported at the last cycle1.7·10⁻³⁰the residual there2.4·10⁻¹⁴with the border recomputed2.5·10⁻¹⁴products, cheap and repaired9a bound with nothing under itand one product a cycle to fix it

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.

The reported bound and the residual it bounds, over 10 cyclesThree 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⁻⁵.1234567891010⁻⁵⁵10⁻⁴⁹10⁻⁴³10⁻³⁷10⁻³¹10⁻²⁵10⁻¹⁹10⁻¹³10⁻⁷10⁻¹cyclesizethe residualrepairedthe reported boundwhat the stopping rule readsreported at the last cycle8.9·10⁻⁵the residual there0.28with the border recomputed3.1·10⁻⁵products, cheap and repaired9a bound with nothing under itand one product a cycle to fix it

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.

Two errors, and whose fault they are

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, rank

An 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, rank

Keeping 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, rank

Restarting 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, rank

The 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 apart

The 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, rank

Two 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.

The whole library · All essays · What must fail