The matrix that is a graph

A preconditioner that is a tree

Every eigenvalue of a tree-preconditioned Laplacian is at least one and at most the total stretch — a combinatorial integer with no arithmetic in it. Measured, the bound is two to four times loose, and on a grid the preconditioner makes the conditioning worse by a factor of 1.85 at every size.

Worth reading first: A matrix with no numbers in it · Changing the condition number on purpose · A distance computed by a solve.

A preconditioner is a matrix that is cheap to solve with and resembles the one that is not. On a Laplacian there is a family of candidates with an unusual property: they are subgraphs, so the question “how good is this preconditioner” becomes a question about a graph, and it can be answered before anything is factorised.

The extreme member of the family is a spanning tree. A tree’s Laplacian is solved in linear time with no fill at all — eliminating a leaf creates no clique, because a leaf has one neighbour — so it is as cheap as a preconditioner gets.

κ is between 1 and the total stretch, and the bound is 2.28–3.47× looseThree spanning trees of the grid 5×5 used as preconditioners. For each, the bar spans the smallest and largest eigenvalue of L_T⁻¹L_G on the subspace orthogonal to the constant vector, and the tick is the total stretch — the sum over the graph's edges of the resistance of the path the tree makes them take, which is an integer for an unweighted graph and contains no arithmetic at all. The smallest eigenvalue is 1 to 2·10⁻¹⁵ on every tree, which is a theorem rather than a measurement: a tree is a subgraph, so its quadratic form is never the larger. The largest is below the stretch on every tree, by between 2.28 and 3.47. Choosing a preconditioner is therefore choosing a tree, and it can be scored without factorising anything.10⁻¹110¹10²10³1234eigenvalue of the preconditioned Laplacian, and the stretchbreadth-firstκ = 34.62randomκ = 55.17random, secondκ = 37.11the bar is the spectrumthe tick is a combinatorial bound
Fig. 1 Three spanning trees of a grid, each with the spectrum of the preconditioned Laplacian as a bar and its total stretch as a tick. Every eigenvalue is above one and below the tick.

A condition number with no arithmetic in it

The theorem is two inequalities, and both are about a purely combinatorial quantity.

The stretch of an edge over a tree is the resistance of the path the tree makes it take. For an unweighted graph that is the number of tree edges between its endpoints, an integer. The total stretch is the sum over the graph’s edges.

Then, for the generalised eigenvalues of L_G against L_T:

1  ≤  λ  ≤  total stretch of G over T

The lower bound is immediate: a tree is a subgraph, so its quadratic form is never larger than the whole graph’s, and the ratio is at least one. The upper bound is a path-counting argument — each of G’s edges is routed along its tree path, and the cost of that routing is exactly its stretch.

Measured on four graphs and two trees each, the lower bound is attained at 1.000000 to nine digits in seven of eight cases, and the upper bound is loose by:

graph          tree             stretch   λmin      λmax     slack
grid 5×5       breadth-first      120     1.000000  34.62     3.47
grid 5×5       random             126     1.000000  55.17     2.28
cycle 24       breadth-first       46     1.000000  24.00     1.92
two blocks 30  breadth-first      220     1.000000  62.25     3.53
hypercube 4    breadth-first       80     1.000000  21.64     3.70
hypercube 4    random             100     1.037772  40.93     2.54

A bound loose by a factor of two to four is a useful bound — it is in the same class as Cheeger’s upper half, which was loose by 1.4 to 13.7 — and it costs a breadth-first search per vertex rather than an eigenvalue computation.

What the bound is for

It is not for predicting how long a solve will take. A factor of three in the condition number is a factor of 1.7 in the iteration count, which is a real error in a prediction.

It is for choosing between trees, and there it is exactly right. Two trees can be compared by their total stretch without factorising either, without running a solve, and without touching a floating-point number. The tree with the smaller stretch is the better preconditioner, and on the grid above the ordering by stretch (116, 120, 126) matches the ordering by measured condition number (37.1, 34.6, 55.2) in two of three pairs — which is a caveat worth having, since the bound is a bound and not a ranking.

That is the general shape of a combinatorial bound on a spectral quantity, and it is the same shape the sparsity field’s ordering heuristics have: a cheap combinatorial proxy for an expensive numerical property, useful for choosing and not for predicting.

How the spectrum is computed, and why it is not a solve

The measurement above is a generalised eigenvalue problem, and the way it is set up is worth a paragraph because the obvious way does not work.

L_G and L_T are both singular — both are Laplacians, both annihilate the vector of ones — so the pencil (L_G, L_T) has a shared null vector and the generalised problem is singular. The eigenvalues that matter live on the complement, and the arithmetic has to be arranged so that the shared kernel is removed exactly rather than being left for the eigensolver to discover.

Grounding does it. Delete the same vertex’s row and column from both, and what is left are two positive definite matrices whose generalised eigenvalues are precisely the ones wanted, with the shared kernel gone by construction rather than by rounding. Then a Cholesky factorisation of the grounded tree, L_T = CCᵀ, turns the problem into an ordinary symmetric one: the eigenvalues of C⁻¹L_G C⁻ᵀ.

The Cholesky is the step where the tree’s cheapness shows. A tree’s grounded Laplacian factorises with no fill whatsoever — it is a tree, so an ordering by leaves eliminates every vertex without creating a clique — and the factor has exactly as many nonzeros as the tree has edges. That is the whole reason a tree is a candidate preconditioner, and it is visible in the measurement rather than merely assumed: the same construction on a denser subgraph would cost a dense factorisation.

The symmetrised matrix is checked for symmetry before the eigensolver sees it, because C⁻¹L_G C⁻ᵀ is symmetric in exact arithmetic and is assembled from two triangular solves that are not — and an eigensolver handed a nearly-symmetric matrix returns nearly-real eigenvalues without saying so.

The measurement that does not go the way it should

Here is the number the essay exists for.

graph      κ⁺(L)     tree κ    ratio (L ÷ tree)
path 48     933.11     1.00       933.1
cycle 48    233.78    48.00         4.87
cycle 36    131.65    36.00         3.66
cycle 24     58.70    24.00         2.45
grid 49      38.39    71.70         0.535
grid 36      27.86    51.52         0.541
grid 25      18.94    34.62         0.547
grid 16      11.66    21.02         0.555

On every grid the preconditioner makes the conditioning worse, by a factor of about 1.85, and the factor is nearly constant across sizes.

That is not a bug in the measurement and it is not a failure of the theorem. The theorem says the preconditioned eigenvalues lie between 1 and the stretch; it does not say the interval is narrower than the original spectrum’s. On a grid, κ⁺(L) is about 27 at thirty-six vertices while the breadth-first tree’s stretch is 210, and the resulting κ of 51 is what a bound of 210 permits.

The two families where it does pay are the ones that are nearly trees. A path is a tree, so its tree preconditioner is itself and κ is exactly 1 — a saving of the entire condition number, 933 at forty-eight vertices. A cycle is a tree plus one edge, its tree κ is exactly n while κ⁺(L) grows like n², so the win grows linearly with the size: 1.24, 2.45, 3.66, 4.87 at n = 12, 24, 36, 48.

Why the grid is the hard case

A breadth-first tree of a grid has long paths in it. Two vertices adjacent in the grid can be separated by a tree path that goes all the way to the root and back, so their stretch is of order the diameter, and there are many such edges.

The total stretch of a breadth-first tree on a k × k grid grows like k³ — 60, 120, 210, 336 at k = 4, 5, 6, 7, which is close to k³ divided by a constant — while the graph’s own condition number grows like k². So the bound gets worse relative to the thing it bounds as the graph grows, and the measured condition number does the same.

This is exactly the problem the literature on low-stretch spanning trees exists to solve. There are constructions whose total stretch is O(m log n log log n) rather than O(n^{3/2}), built by a recursive decomposition into balls rather than by a search, and with one of those the whole approach becomes competitive. The trees here — breadth-first and uniformly random — are the two anybody would try first, and they are exactly the two that do not work on a grid.

So the honest summary of this essay’s measurement is: the theorem is correct, the bound is tight enough to choose with, and the obvious trees are the wrong trees. That last part is the reason the subject has a literature.

κ is between 1 and the total stretch, and the bound is 1.92–1.92× looseThree spanning trees of the cycle 25 used as preconditioners. For each, the bar spans the smallest and largest eigenvalue of L_T⁻¹L_G on the subspace orthogonal to the constant vector, and the tick is the total stretch — the sum over the graph's edges of the resistance of the path the tree makes them take, which is an integer for an unweighted graph and contains no arithmetic at all. The smallest eigenvalue is 1 to 1.11·10⁻¹⁵ on every tree, which is a theorem rather than a measurement: a tree is a subgraph, so its quadratic form is never the larger. The largest is below the stretch on every tree, by between 1.92 and 1.92. Choosing a preconditioner is therefore choosing a tree, and it can be scored without factorising anything.10⁻¹110¹10²1234eigenvalue of the preconditioned Laplacian, and the stretchbreadth-firstκ = 25randomκ = 25random, secondκ = 25the bar is the spectrumthe tick is a combinatorial bound
Fig. 2 A cycle, where the tree preconditioner is a genuine improvement and the win grows with the size.

The lower bound is exact, and once it is not

λmin = 1 to nine digits in seven of the eight rows above. That is a theorem being observed rather than approximated, and it has a clean reason: the eigenvector for λ = 1 is any vector whose quadratic form is the same over the tree and over the graph, which exists as soon as the graph has an edge the tree does not use.

The eighth row is the exception and is worth explaining. The hypercube’s random tree gives λmin = 1.037772. The theorem says λ ≥ 1, and 1.0378 satisfies it — the bound is not attained, which happens when no vector is supported entirely on the tree’s own edges in the required way. A four-dimensional hypercube is dense enough that a random spanning tree touches every vertex in a way that leaves no such direction.

The distinction between “the bound holds” and “the bound is attained” is the whole difference between those seven rows and the eighth, and it is the kind of thing a measurement finds and a proof does not mention.

The other reading of stretch

Stretch has a second identity that ties this essay back to effective resistance, and it is not a coincidence.

The stretch of an edge over a tree is the resistance of its tree path. Summed over the graph’s edges and divided by n − 1, it is the average resistance a random edge is routed through. And by Foster’s identity, the sum of effective resistances over a graph’s own edges is exactly n − 1 — so total stretch is the same quantity computed against the tree instead of against the graph, and their ratio measures how much worse the tree is at conducting than the graph is.

That reading makes the bound less mysterious. A tree with total stretch S routes the graph’s currents along paths that are, on average, S/(n − 1) times as resistive as the graph’s own — and the preconditioned condition number is bounded by exactly that inflation.

It also explains why a low-stretch tree is possible at all. Foster’s identity says the graph’s resistances sum to n − 1 whatever the graph is, so a tree that gets close to that sum is one that routes most edges along short paths, and the existence of such trees is a statement about how much of a graph’s connectivity a spanning subgraph can capture.

What a tree cannot do at all

One limitation is structural rather than quantitative, and it is why combinatorial preconditioning is a graph subject rather than a general one.

The construction needs the matrix to be a Laplacian, or close enough to one that a subgraph makes sense. Symmetric diagonally dominant matrices qualify — they can be written as a Laplacian plus a nonnegative diagonal, so the whole apparatus transfers — and that class covers a useful amount: resistive networks, some finite-element discretisations, the normal equations of certain least-squares problems, image-processing operators.

It does not cover a general symmetric positive definite matrix, nor anything the sparsifier of an earlier anchor would be applied to outside this class. There is no subgraph of a dense covariance matrix, no path along which to route an entry, and no stretch to compute. The moment the off-diagonal signs are mixed, the quadratic form stops being a sum over edges of squared differences and every argument in this essay fails at its first line.

That is a sharper boundary than most preconditioning families have. An incomplete Cholesky applies to anything positive definite; a multigrid hierarchy applies to anything with a notion of smoothness. A tree preconditioner applies to a class defined by a sign condition, and inside that class it has a bound nothing else offers — a condition number known before any arithmetic, from a walk on a graph.

What to do with all this

Compute the stretch, always. It is a breadth-first search per vertex, it needs no arithmetic, and it is the only number available before a solve that says anything about how the solve will go — in the way a count of spanning trees is available from the same object and says something else.

Compare the tree’s κ against the graph’s own. The measurement above is two eigenvalue computations on a small instance and it is the check that the preconditioner is not making things worse — which, on four of the eight rows here, it was.

Do not use a breadth-first or a random tree on a mesh. Both have stretch growing faster than the graph’s condition number, and the result is a preconditioner that is cheap, correct, and slower than no preconditioner at all.

And remember what the tree buys when it does work. A tree solve is linear and exact, with no fill and no dropped entries, so a tree-preconditioned iteration has a cost per step that no incomplete factorisation can match. The trade is entirely in the iteration count, and the iteration count is bounded by a number that can be computed by walking the graph.

Where the whole idea came from

A closing note on why a subject exists at all, because the shape of it is instructive.

Solving a Laplacian system is the inner loop of a great deal — every finite-element solve on a diffusion problem, every step of an interior-point method on a network flow, every maximum-flow algorithm of the last decade. So the question of how fast a Laplacian system can be solved has a sharp answer worth chasing, and the answer turned out to be combinatorial rather than numerical: the fastest known methods are built from spanning trees, sparsifiers and recursive graph decompositions, and the numerical linear algebra in them is a preconditioned conjugate gradient iteration that has not changed since 1952.

That is unusual. Almost everywhere else on this site, a faster method is a better factorisation, a better ordering of the same arithmetic, or a lower precision. Here the improvements are theorems about graphs, and the arithmetic is a constant.

It also explains why the two obvious trees fail. The subject’s whole difficulty is concentrated in constructing a tree whose stretch is small, and that construction is a graph algorithm with no numerical content — a recursive decomposition into balls of bounded radius, chosen so that few edges have their endpoints in different balls. Nothing about it would occur to somebody thinking about matrices, and the reason it is needed is entirely visible in the grid rows of the table above.

At other settings

κ is between 1 and the total stretch, and the bound is 2.44–4.08× looseThree spanning trees of the grid 6×6 used as preconditioners. For each, the bar spans the smallest and largest eigenvalue of L_T⁻¹L_G on the subspace orthogonal to the constant vector, and the tick is the total stretch — the sum over the graph's edges of the resistance of the path the tree makes them take, which is an integer for an unweighted graph and contains no arithmetic at all. The smallest eigenvalue is 1 to 6.66·10⁻¹⁶ on every tree, which is a theorem rather than a measurement: a tree is a subgraph, so its quadratic form is never the larger. The largest is below the stretch on every tree, by between 2.44 and 4.08. Choosing a preconditioner is therefore choosing a tree, and it can be scored without factorising anything.10⁻¹110¹10²10³1234eigenvalue of the preconditioned Laplacian, and the stretchbreadth-firstκ = 51.52randomκ = 61.26random, secondκ = 86.82the bar is the spectrumthe tick is a combinatorial bound
Fig. 3 A larger grid, where the stretch has grown faster than the condition number.
κ is between 1 and the total stretch, and the bound is 4.12–4.69× looseThree spanning trees of the grid 7×7 used as preconditioners. For each, the bar spans the smallest and largest eigenvalue of L_T⁻¹L_G on the subspace orthogonal to the constant vector, and the tick is the total stretch — the sum over the graph's edges of the resistance of the path the tree makes them take, which is an integer for an unweighted graph and contains no arithmetic at all. The smallest eigenvalue is 1 to 3.11·10⁻¹⁵ on every tree, which is a theorem rather than a measurement: a tree is a subgraph, so its quadratic form is never the larger. The largest is below the stretch on every tree, by between 4.12 and 4.69. Choosing a preconditioner is therefore choosing a tree, and it can be scored without factorising anything.110¹10²10³1234eigenvalue of the preconditioned Laplacian, and the stretchbreadth-firstκ = 71.7randomκ = 58.23random, secondκ = 67.97the bar is the spectrumthe tick is a combinatorial bound
Fig. 4 Larger still, where the preconditioner is worse than none by the same constant factor.
κ is between 1 and the total stretch, and the bound is 2.71–5.08× looseThree spanning trees of the preferential 36 used as preconditioners. For each, the bar spans the smallest and largest eigenvalue of L_T⁻¹L_G on the subspace orthogonal to the constant vector, and the tick is the total stretch — the sum over the graph's edges of the resistance of the path the tree makes them take, which is an integer for an unweighted graph and contains no arithmetic at all. The smallest eigenvalue is 1 to 6.22·10⁻¹⁵ on every tree, which is a theorem rather than a measurement: a tree is a subgraph, so its quadratic form is never the larger. The largest is below the stretch on every tree, by between 2.71 and 5.08. Choosing a preconditioner is therefore choosing a tree, and it can be scored without factorising anything.10⁻¹110¹10²10³1234eigenvalue of the preconditioned Laplacian, and the stretchbreadth-firstκ = 30.1randomκ = 77.62random, secondκ = 67.41the bar is the spectrumthe tick is a combinatorial bound
Fig. 5 A degree-skewed graph, where the trees differ from each other more than they differ from the graph.
κ is between 1 and the total stretch, and the bound is 1.96–3.7× looseThree spanning trees of the hypercube 4 used as preconditioners. For each, the bar spans the smallest and largest eigenvalue of L_T⁻¹L_G on the subspace orthogonal to the constant vector, and the tick is the total stretch — the sum over the graph's edges of the resistance of the path the tree makes them take, which is an integer for an unweighted graph and contains no arithmetic at all. The smallest eigenvalue is 1 to 0.0378 on every tree, which is a theorem rather than a measurement: a tree is a subgraph, so its quadratic form is never the larger. The largest is below the stretch on every tree, by between 1.96 and 3.7. Choosing a preconditioner is therefore choosing a tree, and it can be scored without factorising anything.10⁻¹110¹10²10³1234eigenvalue of the preconditioned Laplacian, and the stretchbreadth-firstκ = 21.64randomκ = 39.44random, secondκ = 55.07the bar is the spectrumthe tick is a combinatorial bound
Fig. 6 A hypercube, the one graph here whose lower bound is not attained.
Same matrix, same arithmetic, 4.13× the fillGaussian elimination on the Laplacian of the grid 6×6, under five orderings, counting the edges that did not exist before. Eliminating a vertex removes it and joins its neighbours into a clique — the star–mesh transform, which is what the Schur complement of a Laplacian does — so fill is a set of edges rather than a set of nonzeros, and the matrix that remains is still a graph: symmetric, zero row sums, nonpositive off the diagonal, checked at every step and worst at 3·10⁻¹⁵. Minimum degree fills 71 edges against 293 for the worst ordering here, on a graph with 60 to start with. Nothing about the arithmetic differs between these five runs.05101520253035059118177236295vertices eliminatededges of fill so farminDegree: 71natural: 125reverse: 125random: 160maxDegree: 293fill, by orderingminDegree71natural125reverse125random160maxDegree293edges to start60eliminating a vertex makes a cliqueand the order decides how big
Fig. 7 The fill a tree preconditioner refuses to pay, in the previous essay.
Resistance to 15 vertices, against an answer that is a ratio of integersEffective resistance from vertex 0 to every other vertex of the grid 4×4, computed twice in floating point — once by grounding a vertex and eliminating, once by summing (uₖᵢ − uₖⱼ)²/λₖ over the whole spectrum — and once in BigInt rationals, where for an unweighted graph the answer is exactly a ratio of two integers and there is no rounding anywhere. The curves are the relative errors of the two floating-point routes against that exact answer: at worst 4.75·10⁻¹⁶ for the elimination and 9.98·10⁻¹⁶ for the spectral sum, which use no arithmetic in common beyond the matrix they are both handed. Foster's theorem says Σ w·R over the edges is exactly n − 1 whatever the graph is; it comes to 15 against 15.1357911131510⁻¹⁸10⁻¹⁵10⁻¹²10⁻⁹10⁻⁶10⁻³1vertexrelative error against the exact answerthree routes, one numberworst, by elimination4.8·10⁻¹⁶worst, by spectrum10·10⁻¹⁶solve residual1.5·10⁻¹⁵Foster's sum15n − 115difference3.6·10⁻¹⁵the answer is a ratio of integersso the error is known
Fig. 8 The quantity stretch is a sum of, computed exactly.
The condition number a sketched preconditioner leaves, against the condition number it was givenTwo curves against κ(A), both axes logarithmic. The matrix's own condition number climbs the diagonal from 100 to 10¹⁰; κ(AR⁻¹), where R comes from a QR of a 4n-row sketch, is 2.2284 at every one of them — the same number to ten digits, not a similar one. The reason is two lines of algebra: with G = SU the preconditioned singular values are those of (GᵀG)⁻¹, which has no spectrum of A in it at all.10²10⁴10⁶10⁸10¹⁰110²10⁴10⁶10⁸10¹⁰condition number of the matrixcondition number seen by the iterationκ(A), unchangedκ(AR⁻¹)a bound with no κ(A) in itκ(AR⁻¹), every κ(A)2.2κ(SU), the other route2.2κ(A), across the sweep10⁸κ(AR⁻¹), across the sweep1the sketch never sees the spectrumand the spectrum cancels out of the answer
Fig. 9 Changing a condition number on purpose, in the field that does it for a living.
LSQR steps to a normal residual of 10⁻¹², with and without a sketched preconditionerTwo curves against κ(A). The unpreconditioned solve takes 15, 22, 32, 59, 150 steps as the conditioning worsens, and at the worst one it does not reach the tolerance inside 150. The preconditioned solve takes 10, 10, 10, 10, 10 — flat across eight decades. Both return the same vector, to the accuracy the problem allows: the preconditioned answer and the direct one differ by about κ(A)·u at every κ, 5.7·10⁻⁶ at the worst. The SAME sketch used as an answer instead of as a preconditioner is 4.5 away.10²10⁴10⁶10⁸10¹⁰110¹10²10³condition number of the matrixLSQR steps to 10⁻¹²no preconditionersketchedthe cost, not the answersteps, preconditioned10steps, without150answer gap, preconditioned5.7·10⁻⁶κ(A)·u at the worst κ1.1·10⁻⁶answer gap, sketch-and-solve4.5one sketch, two things to do with itand only one of them moves the answer
Fig. 10 And what that buys in iterations, which is where a stretch bound is spent.
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 The iteration whose step count is the square root of the condition number.
grid 6×6: 36 vertices, 60 edges, and a matrix built from themThe grid 6×6 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.2679 and the largest computed zero is 2.36·10⁻¹⁶, a gap of 1.13·10¹⁵. The quadratic form xᵀLx is Σ over edges of (xᵢ − xⱼ)², which at the alternating vector is 120.the matrix, measuredvertices36edges60‖L·1‖∞0zero eigenvalues1components, by search1λ₂0.27laid out at its own eigenvectorsand the row sums are exactly zero
Fig. 12 The grid whose breadth-first tree has paths as long as its diameter.
cycle 24: 24 vertices, 24 edges, and a matrix built from themThe cycle 24 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.06815 and the largest computed zero is 4.87·10⁻¹⁶, a gap of 1.4·10¹⁴. The quadratic form xᵀLx is Σ over edges of (xᵢ − xⱼ)², which at the alternating vector is 96.the matrix, measuredvertices24edges24‖L·1‖∞0zero eigenvalues1components, by search1λ₂0.068laid out at its own eigenvectorsand the row sums are exactly zero
Fig. 13 A cycle, which is a tree plus one edge and is where this idea works.
The lower bound is attained and the upper one is out by 37.3×Cheeger's inequality on nine graphs of about 40 vertices each: for the normalised Laplacian's λ₂, λ₂/2 ≤ φ ≤ √(2λ₂), where φ is the conductance the sweep cut actually achieves. Each row shows the two bounds as a bar and the measured conductance as a dot inside it. The lower bound is tight on the complete at a ratio of 1. The upper bound is loosest on the barbell — by a factor of 37.3 — which is the graph in the census with a real bottleneck, and therefore the shape the inequality is always quoted about. The square root is what makes it loose: it is the price of turning a spectral quantity into a combinatorial guarantee, and it is paid where the guarantee is wanted.10⁻³10⁻²10⁻¹110¹12345678910conductance, and the two bounds on itpathcyclegridbarbelltwo blockshypercubepreferentialstarcompletethe bar is the inequalitythe dot is the graph
Fig. 14 Another combinatorial bound on a spectral quantity, measured the same way.
344 of 1225 edges keep every eigenvalue and no degreeA fifty-vertex complete graph sparsified by keeping 400 samples drawn in proportion to each edge's effective resistance and reweighted by the reciprocal of its probability, which leaves 344 distinct edges of 1225. The filled curve is the ratio of each eigenvalue of the sample's Laplacian to the original's, in ascending order: it stays between 0.432 and 1.67, so every quadratic form, every cut and every solve is preserved to that factor. The open curve is the ratio of each vertex's degree, which runs from 0.562 to 1.5 — half the graph's degrees are wrong by more than a third. And the graph's diameter goes from 1 to 3: no shortest path survives. A sparsifier preserves what the Laplacian says and nothing else about the graph, and the two are easy to confuse because they are the same object.19172533414911.251.51.752indexsample ÷ originalkept, and not keptedges kept344of1225eigenvalue ratio, low0.43high1.7degree ratio, low0.56high1.5diameter, after3filled dots are eigenvaluesopen dots are degrees
Fig. 15 A different subgraph used as an approximation, scored by a spectral band.
Twenty eigenvalues, one of them zero, and the graph has one pieceThe Laplacian spectrum of two ten-vertex paths joined by a single edge of conductance 1, plotted on a logarithmic axis so the zero end is visible. The dashed line is the threshold 10⁻¹⁰‖L‖ = 1.06·10⁻⁹, and the number of eigenvalues below it is the spectral count of connected components: 1. Breadth-first search, which performs no arithmetic on any weight, says 1. The largest computed zero is 5.81·10⁻¹⁷ and the smallest eigenvalue above the threshold is 0.02462. A count of components is therefore a rank decision at a threshold, and the bridge's conductance decides which side of it λ₂ falls on — at nine orders above the rounding level, not at it.13579111315171910⁻¹⁹10⁻¹⁶10⁻¹³10⁻¹⁰10⁻⁷10⁻⁴10⁻¹indexeigenvalue of L10⁻¹⁰‖L‖, the thresholda count that is a thresholdeigenvalues below it1components, by search1largest computed zero5.8·10⁻¹⁷smallest above it0.025ratio4.2·10¹⁴the graph is connectedat every stop of the slider
Fig. 16 The spectrum whose ends the preconditioned bound is about.
One system, 36 ways to remove its kernel, and 2.85× between themA Laplacian is singular, so a solve has to remove its kernel, and the usual way is to delete one row and column — grounding a vertex, in the electrical reading. Which vertex is a free parameter that no account of the method mentions, and it is set by whichever index the code happens to drop. Every point here is one choice on the grid 6×6: the condition number of the resulting positive definite matrix against the degree of the vertex removed. Grounding vertex 5, of degree 2, gives κ = 275.34; grounding vertex 15, of degree 4, gives 96.565 — a factor of 2.851 between two ways of solving the identical problem. The trend is that a high-degree vertex is the better ground, which has a reading: grounding a vertex fixes its potential, and fixing the potential of something the rest of the graph is strongly attached to constrains more of the graph.23410²degree of the grounded vertexcondition number of what is left96.56, the best choicea parameter nobody setsvertices tried36best κ97at degree4worst κ275at degree2spread2.9one row and column deletedand it matters which
Fig. 17 The other free choice inside the same solve.
What a rank-10 approximation can achieve, by spectrumA semi-logarithmic plot of singular value against index for three spectra — geometric decay, algebraic decay, and flat — with the rank-ten approximation error marked on each.1112131415110⁻³10⁻²10⁻¹1index jσⱼσ11geometric, 0.85ʲalgebraic, j^−1.00flatmeasured, and equal to σ₁₁rank-10 error, geometric0.2rank-10 error, algebraic0.091rank-10 error, flat160×60, spectrum chosen rather than the entriesthe matrix decides, not the method
Fig. 18 A spectrum whose shape decides an iteration’s rate.
The spectrum of C⁻¹T against T's own, n = 64, ρ = 0.8Two sorted spectra on a linear vertical axis. The unpreconditioned Toeplitz matrix spreads its eigenvalues across its whole range; the preconditioned operator puts 97% of them within a tenth of 1, with 0 below zero.08162432404856640123456789index, sortedeigenvalueT aloneC⁻¹Teigenvalues, not singular valuesfraction within 0.1 of 10.97eigenvalues below zero0λ_min of the preconditioner0.11the dashed line is 1, where the cluster formsthe solid line is zero
Fig. 19 A clustered spectrum, which is what a good preconditioner is trying to produce.
An incomplete Cholesky kept while the operator turns anisotropic, against one rebuilt at every memberThe five-point operator's two directions stop being equally weighted, ε running from 1 down to 0.0331, with the sparsity pattern unchanged throughout — so the factorisation from the first member stays applicable for the whole run, which is the situation in which it gets kept. The kept one goes from 18 iterations to 52. The rebuilt one goes from 18 to 13, because an anisotropic operator is an easier problem for a factorisation that knows about the anisotropy. The two start at the same point by construction and never meet again.0246810121416182001020304050member of the sequencepreconditioned conjugate gradient iterationskept from the first memberrebuilt every memberone operator, two policieskept, first member18kept, last member52rebuilt, first member18rebuilt, last member13ε at the last member0.033the problem got easierand the kept preconditioner got worse at it
Fig. 20 An incomplete factorisation, which is the middle option between full fill and a tree.
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. 21 The two errors, neither of which a preconditioner changes.
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. 22 An answer that is known, against which a preconditioned solve is measured.
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. 23 A bound never attained, which this essay’s upper bound is a milder version of.
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. 24 The amplifier a preconditioner is trying to shrink.
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. 25 The identity every measurement here is read against.
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. 26 The precision knob, on a solve rather than on a preconditioner.

What links here

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

Shares its objects with

Essays that name at least two of the same things, and that neither author linked.

Named objects

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

Combinatorial preconditioningConditioningEffective resistanceGeneralised eigenvalueGraph laplacianPreconditioningSpanning treeStar mesh transformStretch