Numbers stored per unknown, against the size of the matrix, at 10⁻⁸
At its defaults it draws numbers stored per unknown, against the size of the matrix, at 10⁻⁸. The dense matrix stores n numbers per unknown, which is the straight line through the origin and doubles whenever n does. The hierarchical representations store 54, 79, 106, 133 and 50, 70, 94, 120, adding about 26 per doubling — a constant per doubling is a logarithm, and it is the whole claim. At n = 512 that is 26 and 23 per cent of the dense matrix, and the share falls at every size. The exponent between consecutive sizes is 1.55, 1.42, 1.33, falling towards one and never arriving, which is what a logarithm looks like from inside.
storage-size is one function in lib/figures/hodlr.js —
the partition — a rule that reads four numbers a pair and no entry of the matrix. 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 dense matrix stores n numbers per unknown, which is the straight line through the origin and doubles whenever n does. The hierarchical representations store 54, 79, 106, 133 and 50, 70, 94, 120, adding about 26 per doubling — a constant per doubling is a logarithm, and it is the whole claim. At n = 512 that is 26 and 23 per cent of the dense matrix, and the share falls at every size. The exponent between consecutive sizes is 1.55, 1.42, 1.33, falling towards one and never arriving, which is what a logarithm looks like from inside.
show: "eta"
The arguments are the ones A geometry setting that is a second accuracy passes. A value nobody placed would be a picture no essay asked for and no claim was ever checked against.
Against the constant that decides how far apart two clusters must be before their block may be compressed, at n = 512 and a leaf of 16: the numbers stored per unknown, and the mean rank of the compressed blocks drawn on the same axis as a fraction of its height. Loosening it from 0.2 to 1.4 takes the block count from 592 to 94 and the mean rank from 3.25 to 8.94 — both at once, which is what neither of the other two settings does. The storage falls the whole way, from 224.9 to 120.0 per unknown, and the error against the dense matrix rises from 3.27·10⁻¹⁰ to 1.13·10⁻⁹ although the tolerance never changed. The curve is a staircase rather than a slope because the ratios a balanced tree over evenly spaced points can offer are a discrete set.
show: "rank"
The arguments are the ones A geometry setting that is a second accuracy passes. A value nobody placed would be a picture no essay asked for and no claim was ever checked against.
The growth in numbers stored per unknown per doubling, against the mean rank of the low-rank blocks, at six tolerances from 10⁻² to 10⁻¹². The partition is identical at every one — 250 blocks, 156 low-rank and 94 dense — because it is decided by geometry before any tolerance is applied. The mean rank rises by one per two decades of accuracy: 1.67, 2.67, 3.67, 4.67, 5.67, 6.67. The slopes are 10.9, 16.0, 21.1, 26.3, 31.4, 36.5, and the line through them has gradient 5.13 numbers per unknown per doubling per unit of rank, with a worst residual of 0.00.
show: "eta", logEps: -12
The arguments are the ones A geometry setting that is a second accuracy passes. A value nobody placed would be a picture no essay asked for and no claim was ever checked against.
Against the constant that decides how far apart two clusters must be before their block may be compressed, at n = 512 and a leaf of 16: the numbers stored per unknown, and the mean rank of the compressed blocks drawn on the same axis as a fraction of its height. Loosening it from 0.2 to 1.4 takes the block count from 592 to 94 and the mean rank from 4.90 to 11.68 — both at once, which is what neither of the other two settings does. The storage falls the whole way, from 270.3 to 156.0 per unknown, and the error against the dense matrix rises from 1.09·10⁻¹⁴ to 1.57·10⁻¹³ although the tolerance never changed. The curve is a staircase rather than a slope because the ratios a balanced tree over evenly spaced points can offer are a discrete set.
show: "eta", logEps: -2
The arguments are the ones A geometry setting that is a second accuracy passes. A value nobody placed would be a picture no essay asked for and no claim was ever checked against.
Against the constant that decides how far apart two clusters must be before their block may be compressed, at n = 512 and a leaf of 16: the numbers stored per unknown, and the mean rank of the compressed blocks drawn on the same axis as a fraction of its height. Loosening it from 0.2 to 1.4 takes the block count from 592 to 94 and the mean rank from 1.00 to 3.10 — both at once, which is what neither of the other two settings does. The storage falls the whole way, from 161.8 to 50.0 per unknown, and the error against the dense matrix rises from 2.15·10⁻⁴ to 0.00183 although the tolerance never changed. The curve is a staircase rather than a slope because the ratios a balanced tree over evenly spaced points can offer are a discrete set.
show: "plateaus"
The arguments are the ones A geometry setting that is a second accuracy passes. A value nobody placed would be a picture no essay asked for and no claim was ever checked against.
The number of blocks against the separation constant, over the whole range the constant is allowed. There are 58 genuinely different partitions in it and the curve between them is flat, so the constant is a selector rather than a dial. They are not evenly spread: the widest runs from 0.996 upward and holds 50 per cent of the range at 94 blocks, the next holds 22 per cent at 250, and the two together hold 72 per cent. The remaining 56 are crammed below the middle of the range, so a sweep on an even grid returns two answers three times in four and never sees the rest.
What it checked while drawing
Every figure above checked its own claims on the way to being drawn, and a claim that failed
would have stopped the picture rather than shipped a wrong one. Those checks 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.
63 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.
the partition is the same at ε = 0.01 — checked 6 times
the mean rank rises by one from 2 digits to 4 — checked 5 times
the product reads every stored number once at leaf 4 — checked 5 times
and every size is still the matrix at n = 64 — checked 4 times
leaf 32 overtakes leaf 16 only at a positive overhead — checked 2 times
no positive overhead makes leaf 4 beat leaf 8 — checked 2 times
a cell the probe measures
a frequency the offsets are measured at
a guess this figure draws
a kernel this file defines
a leaf the halving reaches by halving
a looser separation never stores more
a partition rule this file defines
a per-block overhead between none and ten thousand operations
a power of two, so the bisection is exact at every level
a rank guess that is a number
a roughness view this figure draws
a shift inside the range the matrix stays positive definite and the geometry stays the geometry
a size the dense reference below is affordable at
a storage view this figure draws
a tolerance the dial draws
a tolerance the leaf sweep measures
an accuracy every frequency has singular values across
an accuracy every one of the four kernels has singular values across
an accuracy the blocks have singular values across
an accuracy, not a rank
an admissibility constant inside the range the expansion converges over
and is substantially worse
and just past the first crossover it does not
and never carries a smaller mean rank
and so is the split between low-rank and dense
and the crossovers come in order
and the highest reaches it
and the ranks do not move with the leaf
and the slope is linear in the mean rank
and there is a leaf above the optimum to be overtaken
and two of them hold more than half the range
at about five numbers per unknown per doubling per unit of rank
at no overhead the storage optimum stands
matmul shapes agree
no frequency passes twice the smooth kernel's rank
so the two objectives choose the same leaf
the constant selects among many partitions
the largest leaf is never the best
the storage per unknown grows by a constant per doubling, which is a logarithm
Against the rule
It draws a decomposition and prints its residual. It calls
storageAgainstSize,
and every figure above carries the badge — which residualcheck verifies by looking
for it in the emitted SVG rather than by finding the call that builds one. A badge that is
constructed and then left out of the body is the failure that check exists for.
Across the library: the rule bites on 217
of 397 generators —
199 print a residual and
18 are exempt with a published reason;
180 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 geometry setting that is a second accuracy
The tolerance raises every rank and moves no block; the leaf moves every block and no rank. The constant that decides how far apart two clusters must be before their block may be compressed moves both — 592 blocks at mean rank 3.25 at one end and 94 at mean rank 8.94 at the other — and the storage falls the whole way while the error against the dense matrix rises by a factor of 3.5, at a tolerance that never changed. It has no best setting, and it is not a third knob on the storage.
Neither sparse nor denseA prediction that arrives a decade late
A rougher kernel raises every rank, a higher rank raises the side at which compressing a block stops paying, so the leaf that stores least should rise. Across four kernels whose largest rank runs 5, 5, 9 and 10, it is 16 on three of them and a tie between 8 and 16 on the fourth. The prediction is right in sign and out by a decade of tolerance, and the reason is a ceiling: an oscillation multiplies the rank by exactly two — 3 and 6, 4 and 8, 5 and 10, 6 and 12, 7 and 14 — at any frequency, because a cosine of a difference is a rank-two function.
Neither sparse nor denseA quarter of the leaf
The leaf that stores a hierarchical matrix most cheaply had been read off a table of nine points, with the suggestion that it depends on the mean rank alone. Across six kernels at five tolerances — thirty cells — it does, once the mean rank is read in the right place. Plotted against the mean rank at a fixed leaf of 16, two cells a tenth of a rank apart want leaves of 8 and 16. Plotted against the rank of the blocks a halving would create, one rule — halve the leaf while that rank is below a quarter of the leaf — predicts the best leaf on 28 of the 30, and the two it misses are the two whose rank sits within three per cent of the threshold. The fractional power the last measurement expected to be rough is smoother than 1/r.
Neither sparse nor denseA second objective that is the first one doubled
Counting the operations a hierarchical product does was supposed to give the leaf size a second optimum, somewhere other than where the storage puts it. The count is 160,128, 139,904, 135,936, 155,136 and 216,064 against stored totals of 80,064, 69,952, 67,968, 77,568 and 108,032 — twice each, at every leaf, exactly. The two objectives cannot disagree, and what separates the leaf that stores least from the leaf that runs fastest is a charge of about 139 operations for reaching a block at all.
Neither sparse nor denseAn offset that bends twice
A hierarchical matrix's cheapest leaf can be named by one build at a leaf of 8, and a rank guessed from the tolerance alone names it on smooth kernels and misses on oscillatory ones. The repair proposed was a term in the frequency: the oscillatory kernels sat two thirds of a rank and one and a half ranks above 1/r at frequencies 40 and 120, and the prediction was a fixed step each time the frequency triples. On five frequencies from 13⅓ to 1,080 the step is a third of a rank, then one, then one and a half, then a third again — a curve that bends twice. The last bend is the smallest blocks filling up: at the tightest tolerance every 8-wide block is at full rank from 360 on. No fixed term reproduces it, and the one build that reads it directly still names the cheapest leaf on thirteen cells of fifteen, never storing two per cent too much, where the uncorrected guess misses seven by up to nine.
Neither sparse nor denseEach halving reads its own width
A hierarchical matrix's cheapest leaf is found by halving it while the blocks the halving creates have rank below a quarter of the leaf. The proposal was to probe only the near blocks of one compression at a leaf of 8, predicted to do at least as well as the whole compression. It does worse: twelve cells of fifteen against thirteen, every miss naming 16 where 32 is cheapest, because the decision between 32 and 16 turns on whether a block reaches rank 8 and an 8-wide block cannot exceed it. Read each halving off the blocks of its own width instead and the probe names the cheapest leaf on all fifteen oscillatory cells and all thirty cells of six kernels, beating even the rule with every leaf compressed, from eighteen small blocks at under one per cent of the work of the compression it replaces.
Neither sparse nor denseOne build tells the leaf
The rule that picks a hierarchical matrix's cheapest leaf — halve it while the rank at half the leaf is below a quarter of the leaf — reads ranks that exist only after the matrix has been built at every candidate leaf. Fed instead the rank a code can guess from the tolerance alone, one rank per two decades, it names the best leaf on twenty-three cells of thirty, and on the rank-one kernel it cannot see it stores up to seventy-two per cent too much. Doubling the guess for an oscillation, as earlier measurements suggested, makes it worse: eighteen of thirty. Building once, at a single leaf, and holding that build's mean rank fixed names the best leaf on twenty-nine — one more than the rule that builds at all five — and never stores three per cent more than the least.
Neither sparse nor denseThe offset that moved the slope
The accuracy is supposed to lift a storage curve and leave its growth alone. Measured at seven tolerances, the strong partition adds 10.9 numbers per unknown per doubling at two digits and 36.5 at twelve — the growth rate more than triples, so ten decades of accuracy cost 33 per cent more storage at 64 unknowns and 118 per cent at 512.
Neither sparse nor denseThe partition that does not move
The storage curve's growth rate more than triples between two digits and twelve, and the earlier measurement said so without saying what moves it. There are two candidates and the measurement separates them decisively: the partition is identical at every tolerance — 250 blocks, 156 of them low-rank, 94 dense — and the mean rank rises by exactly one per two decades of accuracy. The slope is 5.11 numbers per unknown per doubling per unit of rank, with a worst residual of 0.03 over six tolerances.
Neither sparse nor denseThe test that costs what it saves
The partition that refuses to compress a touching pair keeps every rank at five while the other lets them climb from nine to thirteen. It also stores more numbers at every size measured — 67,968 against 61,440 at n = 512 — and which of those two facts matters is a question about how large the problem is going to get.
Neither sparse nor denseTwo knobs on one number
The tolerance raises every block's rank and leaves the partition alone. The leaf size does the opposite — it changes how many blocks there are and does not move a single rank. Both act on the same storage, and only one of them has a best setting: at eight digits the least storage is at a leaf of 16 and the largest leaf tried costs 59 per cent more. The best leaf rises with the accuracy, from 4 at two digits to 16 at twelve, and the influence runs only that way.