The matrix that is a graph

A ranking that is an eigenvector

PageRank is the stationary vector of a walk that follows links with probability α and jumps at random otherwise. The iteration and the elimination agree to 4·10⁻¹⁷. What α is set to changes which pages come third, fourth and fifth.

Worth reading first: A matrix with no numbers in it · An eigenvector that must not change sign · When the answer is a choice.

A link is not symmetric, so the graph a search engine has is directed and nothing in the previous six essays applies to it directly. There is no symmetric Laplacian, no real spectrum guaranteed by symmetry, and no quadratic form to minimise.

What there is instead is a process. Put a walker on a page; with probability α it follows a link chosen uniformly from that page’s outgoing links, and with probability 1 − α it jumps to a page chosen from a fixed distribution. Run it forever and ask where the walker spends its time. That limiting distribution is PageRank, and it is an eigenvector: the stationary vector of the matrix

G = α P + (1 − α) v 1ᵀ

where P is the column-stochastic link matrix and v is the teleport distribution.

Contracting by 0.7668 where the folk rate says 0.85The PageRank power iteration on a connected fifty-vertex graph, at α = 0.85, plotted as the change between successive iterates. The upper dashed line is αᵏ, the rate every account of the method quotes. The lower one is (α·λ₂(P))ᵏ, which is what the second eigenvalue of the Google matrix actually is: λ₂(P) = 0.90238 here. The measured contraction over the run is 0.76683. The two agree exactly when λ₂(P) = 1, which happens exactly when the link graph has more than one closed communicating class — which every real one does, and which is why a statement that is false of connected graphs has never been noticed to be. The answer is checked against one elimination of I − αP̃, which agrees to 1.04·10⁻¹⁶.01428425670849810⁻¹⁶10⁻¹⁴10⁻¹²10⁻¹⁰10⁻⁸10⁻⁶10⁻⁴10⁻²iterationchange between iteratestwo rates, one curveα0.85λ₂(P)0.9predicted rate0.77measured0.77iterations108against the solve10⁻¹⁶the upper dashed line is αᵏthe curve is on the other one
Fig. 1 The power iteration on a connected graph, with the rate it is supposed to have and the rate it has. The two are the same only when the link graph is in pieces.

Two routes, and they agree

An eigenvector for a known eigenvalue is a null space, so there are two obvious ways to get one.

The power iteration. Start uniform, apply G repeatedly, stop when successive iterates stop moving. It costs one sparse matrix–vector product a step and never forms anything.

One elimination. The eigenvector equation x = αP̃x + (1 − α)v rearranges to (I − αP̃)x = (1 − α)v, and I − αP̃ is strictly diagonally dominant for α < 1, so it is nonsingular and can be factorised directly.

On an eighty-page link graph the two agree to within 4·10⁻¹⁷ at every α tested, with the elimination’s own relative residual between 5·10⁻¹⁶ and 1.9·10⁻¹⁴:

α       iterations   |iteration − elimination|   solve residual
0.50        27            1.4·10⁻¹⁷                4.9·10⁻¹⁶
0.70        36            2.1·10⁻¹⁷                6.2·10⁻¹⁶
0.85        46            3.1·10⁻¹⁷                1.7·10⁻¹⁵
0.95        54            3.8·10⁻¹⁷                6.5·10⁻¹⁵
0.99        58            4.2·10⁻¹⁷                1.9·10⁻¹⁴

That is the site’s habit doing what it is for. Two computations sharing no arithmetic beyond the matrix, agreeing at the rounding level, on a problem whose answer nobody knows in closed form. The residual rising with α is the diagonal dominance weakening — the elimination’s matrix is I − αP̃, whose conditioning degrades as α approaches one — and it rises by a factor of forty across the range while the agreement between the routes does not move at all.

Nobody uses the elimination at scale, because the matrix has billions of rows. It is used here for exactly the reason this site uses second routes anywhere: to know that the first one is right.

What α is

The parameter is usually introduced as a technicality — something to make the chain irreducible and aperiodic so that a unique stationary distribution exists. That is true and it is not what it does to the answer.

α decides how much of the ranking comes from the link structure and how much from the teleport vector. At α = 0 the answer is v exactly and the graph is not consulted. At α = 1 the graph is everything and, on the graphs it was invented for, there is no unique answer at all.

In between it is a mixture, and the mixture is measurable. On the same eighty-page graph, the answer’s spread about the uniform distribution:

α       min entry     max entry    max ÷ min
0.50    6.7·10⁻³      2.1·10⁻²       3.18
0.85    2.8·10⁻³      2.7·10⁻²       9.65
0.99    1.3·10⁻³      2.9·10⁻²      23.32

At α = 0.5 the most important page is three times the least. At α = 0.99 it is twenty-three times. Nothing about the graph changed between those rows.

This is not a technicality; it is a regularisation in the site’s own sense of the word. The data — the link graph — does not determine a unique answer, something outside it has to be chosen, and the choice is the computation rather than a preliminary to it. The regularisation field’s opening argument transfers verbatim, with the teleport vector playing the role of the prior and α playing the role of the regularisation parameter.

And it changes the order

Whether a parameter matters depends on what is read off the answer, and what is read off this answer is a ranking. Over the same six values of α on the same graph, the top five pages come out as:

α = 0.50    69, 79, 33, 75, 18
α = 0.70    69, 79, 75, 33, 18
α = 0.85    69, 79, 75, 33, 37
α = 0.95    69, 75, 79, 33, 37
α = 0.99    69, 75, 79, 33, 37

The first place is stable. Positions two through five are not: page 75 moves from third to second, page 18 leaves the list, page 37 enters it. Three of the five places change across a range of α that every practitioner would describe as reasonable.

So the honest statement about a PageRank leaderboard is that its top entry is a property of the graph and its next several entries are a property of the graph and a constant somebody picked. The essay on what a ranking is determined by measures that against the other sources of doubt, and finds that α is not even the largest of them.

The teleport vector is the other half of the choice

α says how much of the prior to use. What the prior is gets much less attention and is the second free parameter in the definition.

The uniform vector is the default and it is a statement: every page is equally plausible a priori. Anything else is a personalisation — a distribution concentrated on one page, on a topic, on a set of trusted sites — and the machinery is identical, since v enters only as the right-hand side of (I − αP̃)x = (1 − α)v.

That linearity is worth noticing, because it makes the parameter’s role explicit. The answer is a linear function of v, so a personalised ranking is a linear combination of the personalised rankings of the pages v is supported on, and the whole family of answers over all possible priors is a convex set spanned by n basis vectors. There is not one PageRank; there is an n-dimensional family, and the uniform one is a single point in it, chosen because nobody had a better idea.

The same object is behind the dangling-node repair. A page with no outgoing links has an empty column, so the link matrix is not stochastic and the walker vanishes when it arrives. Every implementation repairs it by sending that mass to the teleport vector, which is a modelling assumption phrased as a bug fix — a walker at a dead end is assumed to behave exactly as a bored walker does. A chain with no stationary vector measures what happens without the repair, and what the repair is doing.

Where 0.85 comes from

It is worth saying plainly: nowhere in particular.

The value is the one in the original paper, chosen because it converges fast enough and gives plausible results. It is not the outcome of an optimisation, there is no data-driven rule for selecting it, and no criterion analogous to the regularisation field’s discrepancy principle or L-curve has been widely adopted for it.

That is not a criticism of the choice — a parameter that has to be set and has no principled setting is an ordinary situation, and this site has a whole field about how badly the principled rules for that problem perform when they are scored. It is a criticism of how the number is reported. A ranking published without its α is a ranking published without half its definition, and the table above is what that half is worth.

Contracting by 0.8933 where the folk rate says 0.99The PageRank power iteration on a connected fifty-vertex graph, at α = 0.99, plotted as the change between successive iterates. The upper dashed line is αᵏ, the rate every account of the method quotes. The lower one is (α·λ₂(P))ᵏ, which is what the second eigenvalue of the Google matrix actually is: λ₂(P) = 0.90238 here. The measured contraction over the run is 0.89332. The two agree exactly when λ₂(P) = 1, which happens exactly when the link graph has more than one closed communicating class — which every real one does, and which is why a statement that is false of connected graphs has never been noticed to be. The answer is checked against one elimination of I − αP̃, which agrees to 2.84·10⁻¹⁶.032649612816019222410⁻¹⁶10⁻¹⁴10⁻¹²10⁻¹⁰10⁻⁸10⁻⁶10⁻⁴10⁻²iterationchange between iteratestwo rates, one curveα0.99λ₂(P)0.9predicted rate0.89measured0.89iterations253against the solve2.8·10⁻¹⁶the upper dashed line is αᵏthe curve is on the other one
Fig. 2 The same iteration at α = 0.99, where the answer is far more concentrated and the iteration takes half as many steps again.

The cost is a function of α too

The parameter that decides the answer also decides what it costs, and in the unhelpful direction: more graph and less prior means slower convergence.

The Google matrix’s second eigenvalue is α·λ₂(P), so the power iteration contracts by that factor a step. On a link graph with more than one closed communicating class — which every real one has — λ₂(P) is exactly 1 and the rate is exactly α. Reaching 10⁻¹⁵ then takes log(10⁻¹⁵)/log(α) steps: 121 at α = 0.75, 212 at α = 0.85, 3,436 at α = 0.99.

So the answer at α = 0.99 costs sixteen times the answer at α = 0.85, and it is a different answer rather than a better one. That is the shape this site keeps finding in parameter choices — four knobs and one floor makes the general version — and it is particularly stark here because the cost and the answer move together with nothing to trade them against.

The measured rate on this site’s connected test graphs is not α but α·λ₂(P), which is smaller, because a connected undirected graph has λ₂(P) < 1. That discrepancy is the subject of the next essay, and it is the reason the published rate is right: not because the analysis is tight, but because the graph is disconnected.

What the eigenvector is guaranteed to be

Two properties come free from Perron–Frobenius, and they are worth naming because the second is usually assumed rather than checked.

The eigenvalue is exactly 1. G is column-stochastic — every column sums to one, by construction — so 1ᵀG = 1ᵀ and the spectral radius is 1 with the left eigenvector known. No computation is needed to find the eigenvalue, which is why the power iteration needs no normalisation beyond keeping the sum at one.

The eigenvector is positive. G has every entry strictly positive when v is, so Perron’s theorem applies in its strongest form: the leading eigenvalue is simple and its eigenvector is strictly positive. That is what makes the answer a distribution rather than a vector with signs in it.

The second of those is a theorem about real numbers and the computation is not performed in real numbers. An eigenvector that must not change sign is what happens when the entries a theorem guarantees to be positive fall below the level the arithmetic can represent them at — on a graph with a long tail, four of thirty-six entries of a strictly positive vector come back negative.

What the second route costs, and why it is worth having anyway

The elimination route is not competitive at scale and it is worth being precise about why, because the reason is not the one people usually give.

Forming I − αP̃ densely is out of the question for a graph of any size, but nobody would: P̃ is sparse, and a sparse direct solve on it is exactly the fill problem this site has a field about. A web graph’s elimination fills catastrophically — its structure has none of the locality that makes a mesh’s elimination affordable — so a sparse LU is not merely slower than the power iteration, it does not finish.

What the elimination gives that the iteration does not is a check. The power iteration has one failure mode that looks exactly like success: stopping early. Its stopping test compares successive iterates, and successive iterates of a slowly converging iteration are close together for the same reason the answer is far away. At α = 0.99 the contraction is 0.99 a step, so a run stopped when the change falls below 10⁻⁸ is still 10⁻⁶ from the answer — the error is the change divided by (1 − α), which is a hundred here and would be ten thousand at α = 0.9999.

That is not a hypothetical: the factor 1/(1 − α) is the condition number of I − αP̃, and it is the same number in both readings. Which is the point of computing the answer twice on a graph small enough to afford both. The agreement at 4·10⁻¹⁷ in the table above is what says the stopping test was not the thing being measured.

The vector nobody looks at

A last observation about what is actually consumed.

The stationary vector has n entries, each a probability, and on a large graph almost all of them are within a small factor of 1/n. Nobody reads them. What is read is the order, and usually only the top of it.

That changes which computations are worth doing. Accuracy in the entries is not accuracy in the order: two entries that differ by 10⁻⁸ are ordered by digits far below the level anything else in the pipeline is accurate to, and no amount of iterating settles a comparison that the data does not settle. Conversely, an entry accurate only to 10⁻⁴ is perfectly adequate if the pages either side of it are 10⁻³ away.

So the question “how accurately should PageRank be computed” has no answer without the ranking in hand, which is a nuisance and is honest. The ranking essay turns it into a measurement: how many of the top comparisons are settled by the data, and by what.

What to report with a ranking

Four things follow from the measurements above, and none of them costs more than a line of output.

α, always. The top five change across the ordinary range of it. A ranking without its teleportation parameter is a ranking whose definition is incomplete, in the same way that a regularised solution without its parameter is.

The teleport vector, if it is not uniform. The answer is a linear function of it, so a personalised ranking and a plain one are different objects and the difference is not small.

The stopping criterion, converted. The change between iterates is the quantity a run measures and it is not the error; the error is that change divided by 1 − α. Reporting the change alone understates the error by a hundred at α = 0.99 and by ten thousand at α = 0.9999, and the conversion is one division.

And how the dangling nodes were handled. Every implementation makes an assumption there, most of them make the same one, and the assumption is a statement about what a walker at a dead end does rather than a numerical detail.

None of that makes a ranking more accurate. It makes it a statement somebody else can reproduce, which is a different property and — on the evidence of the α table — the scarcer one.

At other settings

Contracting by 0.4509 where the folk rate says 0.5The PageRank power iteration on a connected fifty-vertex graph, at α = 0.5, plotted as the change between successive iterates. The upper dashed line is αᵏ, the rate every account of the method quotes. The lower one is (α·λ₂(P))ᵏ, which is what the second eigenvalue of the Google matrix actually is: λ₂(P) = 0.90238 here. The measured contraction over the run is 0.45086. The two agree exactly when λ₂(P) = 1, which happens exactly when the link graph has more than one closed communicating class — which every real one does, and which is why a statement that is false of connected graphs has never been noticed to be. The answer is checked against one elimination of I − αP̃, which agrees to 3.82·10⁻¹⁷.0510152025303510⁻¹⁶10⁻¹⁴10⁻¹²10⁻¹⁰10⁻⁸10⁻⁶10⁻⁴10⁻²iterationchange between iteratestwo rates, one curveα0.5λ₂(P)0.9predicted rate0.45measured0.45iterations36against the solve3.8·10⁻¹⁷the upper dashed line is αᵏthe curve is on the other one
Fig. 3 At α = 0.5, where the iteration finishes in half the steps and the answer is close to uniform.
Contracting by 0.6314 where the folk rate says 0.7The PageRank power iteration on a connected fifty-vertex graph, at α = 0.7, plotted as the change between successive iterates. The upper dashed line is αᵏ, the rate every account of the method quotes. The lower one is (α·λ₂(P))ᵏ, which is what the second eigenvalue of the Google matrix actually is: λ₂(P) = 0.90238 here. The measured contraction over the run is 0.63139. The two agree exactly when λ₂(P) = 1, which happens exactly when the link graph has more than one closed communicating class — which every real one does, and which is why a statement that is false of connected graphs has never been noticed to be. The answer is checked against one elimination of I − αP̃, which agrees to 6.25·10⁻¹⁷.0816243240485610⁻¹⁶10⁻¹⁴10⁻¹²10⁻¹⁰10⁻⁸10⁻⁶10⁻⁴10⁻²iterationchange between iteratestwo rates, one curveα0.7λ₂(P)0.9predicted rate0.63measured0.63iterations63against the solve6.2·10⁻¹⁷the upper dashed line is αᵏthe curve is on the other one
Fig. 4 At 0.7, where the two reference lines are still visibly apart.
Contracting by 0.8571 where the folk rate says 0.95The PageRank power iteration on a connected fifty-vertex graph, at α = 0.95, plotted as the change between successive iterates. The upper dashed line is αᵏ, the rate every account of the method quotes. The lower one is (α·λ₂(P))ᵏ, which is what the second eigenvalue of the Google matrix actually is: λ₂(P) = 0.90238 here. The measured contraction over the run is 0.85715. The two agree exactly when λ₂(P) = 1, which happens exactly when the link graph has more than one closed communicating class — which every real one does, and which is why a statement that is false of connected graphs has never been noticed to be. The answer is checked against one elimination of I − αP̃, which agrees to 1.8·10⁻¹⁶.02346699211513816118410⁻¹⁶10⁻¹⁴10⁻¹²10⁻¹⁰10⁻⁸10⁻⁶10⁻⁴10⁻²iterationchange between iteratestwo rates, one curveα0.95λ₂(P)0.9predicted rate0.86measured0.86iterations186against the solve1.8·10⁻¹⁶the upper dashed line is αᵏthe curve is on the other one
Fig. 5 At 0.95, where the curve has nearly reached the folk rate.
The published rate is α, and it is α because the graph is in piecesThe PageRank power iteration on a link graph in two closed pieces, at α = 0.85, plotted as the change between successive iterates. The upper dashed line is αᵏ, the rate every account of the method quotes. The lower one is (α·λ₂(P))ᵏ, which is what the second eigenvalue of the Google matrix actually is: λ₂(P) = 1 here. The measured contraction over the run is 0.84123. The two agree exactly when λ₂(P) = 1, which happens exactly when the link graph has more than one closed communicating class — which every real one does, and which is why a statement that is false of connected graphs has never been noticed to be. The answer is checked against one elimination of I − αP̃, which agrees to 1.39·10⁻¹⁶.02244668811013215417610⁻¹⁶10⁻¹⁴10⁻¹²10⁻¹⁰10⁻⁸10⁻⁶10⁻⁴10⁻²iterationchange between iteratestwo rates, one curveα0.85λ₂(P)1predicted rate0.85measured0.84iterations176against the solve1.4·10⁻¹⁶the upper dashed line is αᵏthe curve is on the other one
Fig. 6 On a link graph in two closed pieces, which is the shape a real one has, and where the folk rate is exact.
14 of 14 places survive the arithmetic and 3 survive one missing linkThe top 15 of a PageRank ranking on an eighty-page link graph, and how many of its 14 adjacent comparisons keep their order under three kinds of doubt. Perturbing the teleport vector at the rounding level moves every entry by at most 4.05·10⁻¹¹ and settles 14 of them. Moving α across the range everybody uses moves entries by 0.00123 and settles 11. Removing a single arc — one link that might or might not have been crawled — moves entries by 0.00443 and settles 3. The gaps between consecutive entries run from 6.28·10⁻⁵ to 0.00241, so the ordering is decided by the data at a scale ten orders above anything the arithmetic does. This is the one field on the site where the computation is not the weakest part of the answer.places settled, of 14the arithmetic14 of 14one missing link3 of 14α from 0.80 to 0.9011 of 14entries move by 4.05·10⁻¹¹entries move by 0.00443entries move by 0.00123three kinds of doubtcomparisons14smallest gap6.3·10⁻⁵largest gap0.0024arithmetic band4.1·10⁻¹¹one-link band0.0044α band0.0012the arithmetic settles nearly all of themthe data settles three
Fig. 7 How many places of the leaderboard survive three kinds of doubt, of which α is one.
122 steps to forget where it started, and λ₂ said 131A random walk on a sixty-vertex graph with two blocks joined at a density of 0.03, started at one vertex, measured as the total variation distance from its stationary distribution. It reaches 10⁻⁶ after 122 steps. The dashed line is |λ₂|ᵏ with λ₂ = 0.900071 from the walk matrix, and the number of steps that predicts is 131. The distance is not the eigenvalue: for the first several steps the walk is leaving one block and the decay is faster than the asymptote, and the two curves become parallel only once the slowest mode is all that is left. The eigenvalue is a rate, not a schedule, and the difference between them is 9.22 steps.0173451688510211910⁻⁶10⁻⁵10⁻⁴10⁻³10⁻²10⁻¹1steps of the walkdistance from stationarya rate read as a timeλ₂ of the walk0.9steps measured122steps predicted131ratio0.93the dashed line is the eigenvaluethe curve is the walk
Fig. 8 The same second eigenvalue read as a time rather than as a rate.
4 entries of a strictly positive vector are negativeThe Perron eigenvector of a twelve-vertex clique with a tail of 24, normalised to its largest entry, plotted as absolute values on a logarithmic axis. Perron–Frobenius says every entry of this vector is strictly positive, and it is a theorem about a connected nonnegative matrix rather than a statement about a good day. Each step along the tail divides the entry by about the Perron root 11.0077, so the entries fall by a decade a step and reach the rounding level after sixteen. Beyond it 4 of them are negative — the smallest at -1.507·10⁻²⁰ — and they are drawn as open circles. The bracket printed beside it is Collatz–Wielandt: for any strictly positive x, the Perron root lies between the smallest and largest of (Ax)ᵢ/xᵢ, so it is a two-sided bound that is proved, from one product, and after forty steps it is 1.2·10⁻⁴ wide.1611162126313610⁻²²10⁻¹⁹10⁻¹⁶10⁻¹³10⁻¹⁰10⁻⁷10⁻⁴10⁻¹vertex, clique first then tail|entry| relative to the largestone rounding of the largest entrya bound that is provedPerron root11bracket, low11bracket, high11bracket width1.2·10⁻⁴smallest entry-1.5·10⁻²⁰entries below zero4every entry is positiveand the picture disagrees
Fig. 9 The positivity Perron’s theorem guarantees, measured on a graph where it fails in the arithmetic.
preferential 60: 60 vertices, 117 edges, and a matrix built from themThe preferential 60 laid out at its own second and third Laplacian eigenvectors, so the picture is the same object the measurements are about. The Laplacian L = D − A is built by subtraction of integers, so every row sums to exactly zero — measured at 0, not at the rounding level — and L·1 is the zero vector with no arithmetic error anywhere in it. Its 1 zero eigenvalue counts the connected components, which breadth-first search also puts at 1; the smallest non-zero eigenvalue is 0.5861 and the largest computed zero is 4.82·10⁻¹⁷, a gap of 1.22·10¹⁶. The quadratic form xᵀLx is Σ over edges of (xᵢ − xⱼ)², which at the alternating vector is 248.the matrix, measuredvertices60edges117‖L·1‖∞0zero eigenvalues1components, by search1λ₂0.59laid out at its own eigenvectorsand the row sums are exactly zero
Fig. 10 A degree-skewed graph, which is the undirected analogue of a link graph’s shape.
Conjugate gradients at κ = 104, against the bound κ permitsA semi-logarithmic plot of the relative A-norm error against iteration count. The measured curve falls below a smooth dashed curve showing the classical condition-number bound.0408012016020024010⁻¹⁶10⁻¹³10⁻¹⁰10⁻⁷10⁻⁴10⁻¹iteration‖e‖_A / ‖e₀‖_Ameasuredκ bound119 steps40×40, spectrum spread evenly in logbound permits 1417
Fig. 11 An iteration whose rate is a spectral property, in the field that measured that first.
Jacobi, Gauss–Seidel and SOR at ω = 1.777A semi-logarithmic plot of relative residual against iteration for three stationary methods, with dashed reference curves showing the rate each is predicted to contract at.015030045060075090010⁻¹³10⁻¹¹10⁻⁹10⁻⁷10⁻⁵10⁻³10⁻¹iteration‖r‖ / ‖b‖JacobiGauss–SeidelSOR ω=1.78closed form vs measuredρ Jacobi, exact0.99ρ measured0.99ρ Gauss–Seidel, exact0.981D Laplacian, n = 24ω optimal = 1.777
Fig. 12 Stationary iterations and the rates they were predicted to have.
What the regularisation costs, and what 6 steps of refinement take backSolving [[H + δI, Aᵀ], [A, −δI]] instead of K gives the exact answer to a different problem, so its error is proportional to δ: measured at 1489·δ across six decades, which is a slope of one and not a trend. Refining against the unregularised matrix — the residual formed with K and the correction solved with the regularised factorisation — removes that term entirely, because the perturbation was never in the residual. It works while δ is below σ_min(K) = 6.797·10⁻⁴, marked on the axis, and stops working above it: the iteration's contraction factor is δ/σ_min and a fixed point needs that under one. So the trade-off curve every regularisation essay on this site has drawn — a term falling in δ against a term rising in it — has, here, a left branch that can simply be removed.-14-12-10-8-6-4-210⁻¹⁷10⁻¹⁴10⁻¹¹10⁻⁸10⁻⁵10⁻²10¹log₁₀ δrelative error against the exact answerδ = σ_min(K)no refinement6 stepsa left branch that can be removederror ÷ δ, unrefined1489σ_min(K)6.8·10⁻⁴refined at δ = 10⁻⁶3.6·10⁻¹⁶refined at δ = 10⁻²0.62the perturbation is known exactlybecause the code chose it
Fig. 13 A parameter that decides an answer the data does not, in the field named after it.
The L-curve, and where four rules put λThe norm of the solution against the norm of its residual, on logarithmic axes, as λ sweeps eight decades. The curve has a corner: to the left of it the noise is being amplified and to the right the signal is being thrown away. Four points are marked — the three rules that use only the data, and the oracle, which requires the exact answer and is not a method.10⁻¹110¹10²10³10⁴10⁵‖Ax − b‖‖x‖the oraclediscrepancyL-curvegeneralisedscored against a truth none hasoracle, relative error0.14discrepancy principle, as a multiple1L-curve corner, as a multiple1.3generalised cross-validation, as a multiple1the oracle needs the exact answer and is not a methodit is the reference the others are scored on
Fig. 14 The published rules for choosing such a parameter, scored against a truth.
Conjugate gradients on an ill-posed problem at 0.10% noiseTwo curves against the step count on a logarithmic vertical axis. The relative residual falls at every one of the 120 steps without exception. The error against the true signal falls to 0.1050 at step 44 and then climbs, reaching 0.56 by the end — 5.3 times its best value.015304560759010512010⁻³10⁻²10⁻¹1steprelative sizeleast error: 44discrepancy stop: 27errorresidualthe knob is an integerleast error, at step44error there0.11error at step 1200.56the residual falls at every stepthe error turns and keeps rising
Fig. 15 A step count acting as a regularisation parameter, which α also is.
The exact solution of a 13×13 Hilbert system beside the computed oneTwo columns of numbers: the exact answer, which is the integers one to thirteen, and the answer double-precision elimination returns, with the number of correct digits beside each.H13 x = b, b formed exactly so that x = (1, 2, …, 13)12345678910111213exact1.00002.00003.00133.97865.18864.993010.46720.048921.2657-2.575319.21478.906013.5113computed6.6 correct digits4.8 correct digits3.4 correct digits2.3 correct digits1.4 correct digit0.8 correct digitno correct digitsno correct digitsno correct digitsno correct digitsno correct digits0.6 correct digit1.4 correct digitbackward error2.2·10⁻¹⁷κ = 1.7·10¹⁸The algorithm solved a neighbouring problem perfectly. That problem's answer is this one.right-hand side built in BigInt rationalsthe truth is known
Fig. 16 A solve measured against a known answer, which this eigenvector has none of.
Backward and forward error against the condition numberA log–log plot over twelve decades of condition number. The backward error is a flat line at ten to the minus sixteen; the forward error rises in proportion to the condition number.110²10⁴10⁶10⁸10¹⁰10¹²10¹⁴10⁻¹⁷10⁻¹⁴10⁻¹¹10⁻⁸10⁻⁵10⁻²10¹condition number κ(A)relative errorforward errorbackward errorpredicted: κ · u8×8, 20 seeds per κ; dashed is the worstthe problem worsens, not the method
Fig. 17 The two errors, of which a ranking exposes neither directly.
How much a perturbation of the right-hand side is amplified, κ = 10⁶The cumulative distribution of the amplification factor over two hundred random perturbation directions, with the condition number marked as the upper limit.110¹10²10³10⁴10⁵10⁶10⁷00.250.50.751amplification of the input perturbationfraction of directions at or belowκ = 10·10⁵worst found 7.6·10⁵6×6, 200 directionsmedian reaches 0.29 of κ
Fig. 18 An amplifier belonging to the problem, which 1/(1 − α) is here.
How far a perturbation of size ε moves an eigenvalue, 8×8A log–log plot of eigenvalue movement against perturbation size. The symmetric case lies on a line of slope one; the non-symmetric case lies on a line of slope one eighth, and at a perturbation of ten to the minus sixteen it has already moved by a hundredth.10⁻¹⁶10⁻¹³10⁻¹⁰10⁻⁷10⁻⁴10⁻¹10⁻¹⁶10⁻¹³10⁻¹⁰10⁻⁷10⁻⁴10⁻¹size of the perturbation ‖δA‖how far the eigenvalues moveJordan block, ε^(1/8)symmetric, ≤ ‖δA‖rounding error alone moves it to 10⁻²six seeds per symmetric point; Jordan is closed formsymmetry beats precision
Fig. 19 How far an eigenvalue moves when its matrix does.
How close Hager's estimate is to the true κ₁, over 200 seeded 8×8 matricesFive bars. The estimate is exactly the true condition number on 81% of the sample and inside ten per cent on 87%; the worst underestimate in the whole sample returns 38% of the truth. The last bar is the matrix built to defeat it, at 7.7%, well below anything the random sample reached.each bar is a percentage — of the sample, or of the true condition numberexactly right80.5%inside 10%87.0%inside a factor of 287.0%worst in the sample, ×10037.7%the constructed matrix, ×1007.7%usually exactexact share0.81worst of the sample0.38the constructed matrix0.077a routine that is right most of the timeand never wrong in the safe direction
Fig. 20 An estimate reported as a spread, which a ranking rarely is.
The accuracy asked for, against the accuracy obtained, for two kernels on one partitionε is applied to each block against that block's own largest singular value; the error is then reported against the whole matrix's norm. The two are not the same number and the dashed diagonal is where they would be. For 1/r the obtained error is 29 times smaller than the tolerance asked for; for log r on the identical partition it is 13 times smaller. Both curves are straight and parallel to the diagonal, so the knob does what a knob should — a decade in buys a decade out — and neither of them sits on it. The factor is how much of the matrix's mass lives off the diagonal, which is a property of the kernel; it is not the number of blocks, which is 112 and would put the curves on the other side of the diagonal.10⁻¹³10⁻¹⁰10⁻⁷10⁻⁴10⁻¹10⁻¹⁵10⁻¹²10⁻⁹10⁻⁶10⁻³ε asked for, per block‖A − A_H‖ ⁄ ‖A‖ obtainedasked = obtainedlog r1 ⁄ rtwo numbers, not one1/r, obtained at 10⁻⁸3.4·10⁻¹⁰log r, obtained at 10⁻⁸7.8·10⁻¹⁰1/r, obtained ⁄ asked0.034log r, obtained ⁄ asked0.078blocks in the partition112the tolerance is per blockand the error is per matrix
Fig. 21 A tolerance asked for against one obtained, which the power iteration here is stopped by.
One system, one tolerance, and 11 different amounts of workConjugate gradients on a 200 × 200 symmetric positive definite matrix with κ = 10⁴, stopped when the relative residual falls below 10⁻¹⁰, run at each of 13 partition counts. The only thing that differs between the runs is how many pieces the two global inner products were summed in — which on a real machine is the number of workers. Iteration counts run from 674 to 690, 11 of them distinct, a spread of 2.4% of the work. Every run converged and every answer is right to the accuracy asked for; the forward errors span 6.31·10⁻¹¹ to 1.08·10⁻¹⁰, a factor of 1.72. What differs is not a digit at the end of an answer — it is the bill, and it is an integer.110¹670673676679682685688691694pieces the inner products were summed initerations to the tolerance674, the cheapest run690, the dearestthe same solve, pricedpartitionings run13distinct counts11spread, per cent2.4best forward error6.3·10⁻¹¹worst1.1·10⁻¹⁰one matrix, one toleranceand the cost is the machine's
Fig. 22 One solve with several bills, in the field about answers that are not unique.
Forward error of a 6×6 Hilbert solve at eight precisionsA bar for each significand width from 12 to 53 bits showing the relative error in the computed solution, with the condition number times the unit roundoff marked as a prediction.κ = 1.5·10⁷ · the exact answer is (1, 2, …, 6)12 bits3.316 bits0.8620 bits4.324 bits0.09330 bits7.6·10⁻⁴36 bits6.2·10⁻⁶43 bits2·10⁻⁷53 bits4.5·10⁻¹¹dashed: κ · unit roundoffone matrix, eight arithmeticsmeasured against a known answer
Fig. 23 The precision knob, which does not settle a comparison the data has not settled.
Backward error, forward error and the condition number, with measured valuesTwo boxes at the top — the problem posed and the nearby problem the algorithm answered exactly — and two answers below them, with the distances between all four labelled by numbers from a Hilbert solve.the problem you posedA = H10b = A·(1, 2, …, 10)the problem it answered exactlyA + δA, b + δb‖δ‖ / ‖A‖ = 2.3·10⁻¹⁷the answer you wantedx = (1, 2, …, 10), exactlythe answer you gotx̂, wrong by 2.7·10⁻⁴ relativebackward error 2.3·10⁻¹⁷forward error 2.7·10⁻⁴κ = 1.6·10¹³κ · η = 3.6·10⁻⁴, and the measured forward error is 2.7·10⁻⁴.The algorithm is not at fault. The problem is.H10, LU with partial pivotingresidual and error differ
Fig. 24 The identity the two-route agreement above is read against.
Growth factor under partial pivoting to n = 40: the bound, the worst case, and realityGrowth factor against matrix size on a logarithmic vertical axis. The two-to-the-n bound rises as a straight line; Wilkinson's matrix sits exactly on it; random matrices stay near one.0816243240110²10⁴10⁶10⁸10¹⁰10¹²10¹⁴matrix size ngrowth factor max|u| / max|a|the 2ⁿ⁻¹ boundworst of 30 randommedian randomWilkinson's matrix sits on the bound30 Gaussian matrices per sizeat n = 40: bound 5.5·10¹¹, worst 4.8
Fig. 25 A bound never attained, in the field that measured it first.
Past the cliff: what each method returnsLoss of orthogonality at four condition numbers past κ²u = 1. Cholesky QR returns a factor whose implied Q is 0.37 away from orthogonal at κ = 10⁸ and 1.49 at 10¹² — and at 3·10¹⁰ it refuses outright, on a pivot of -6.5·10⁻¹⁷. The sweep and the tree return a usable factorisation of every one of these matrices.‖QᵀQ − I‖ of the implied Qκ = 10⁸, Cholesky0.37κ = 10⁸, sweep8.5·10⁻⁹κ = 10¹⁰, Cholesky1.3κ = 10¹⁰, sweep3·10⁻⁷κ = 3·10¹⁰, Choleskyrefusedκ = 3·10¹⁰, sweep6.7·10⁻⁶κ = 10¹², Cholesky1.5κ = 10¹², sweep1.4·10⁻⁴the safe run is the one that failsrefusals in the range1wholly non-orthogonal returns2the pivot it refused on-6.5·10⁻¹⁷one of these outcomes is safeand it is the refusal
Fig. 26 A routine that returns something rather than refusing, which α = 1 makes this one do.
Singular values of a rank-4 matrix with noise of relative size 10⁻⁸Ten singular values on a logarithmic axis. The first four sit near one; the rest sit at the noise level, and the vertical distance between the two groups is the evidence for the rank.1234567891010⁻¹⁸10⁻¹⁵10⁻¹²10⁻⁹10⁻⁶10⁻³1indexsingular valuecutoff, σ₁ · 10⁻¹⁰numerical rank 10gap 8.2·10⁶an opiniontrue rank 410×10, built with 4 nonzero valuesrank is a decision
Fig. 27 A threshold turning a continuous quantity into an integer, which a top-k cut also is.

What links here

Computed from the collection, not written here: the essays that point at this one.

Reads more easily once this is understood

Essays that name this one as worth reading first.

Named objects

A flat tag is an object no other essay names yet.

Dangling nodePagerankParameter choicePerron frobeniusPower iterationRandom walkRegularisationStationary distributionTeleportation