The matrix that is a graph

A partition decided in the last digit

On a graph with a symmetry there is no Fiedler vector — there is a plane, and every vector in it is an exact eigenvector. Twenty-four runs with the edge weights nudged by 10⁻¹² return ten different partitions of a cycle and, on a hypercube, two different qualities of answer.

Worth reading first: The vector that has to be rounded · A matrix that depends on its own eigenvalue · The plane survives what its vectors do not.

Everything in this anchor so far has assumed there is a Fiedler vector. There often is not.

The sweep assumes there is a vector to sort. An eigenvector belonging to a repeated eigenvalue is not determined. What is determined is the subspace, and any unit vector in it is as exact an eigenvector as any other. A graph whose second Laplacian eigenvalue is repeated therefore has no second eigenvector; it has an eigenplane, and the spectral partitioner picks a direction in that plane by a mechanism that has nothing to do with the graph.

One graph, nudged by 10⁻¹², and 3 different partitionsThree seven-vertex cliques joined in a triangle by three single edges, one of whose conductances is raised by 0. When all three are equal the graph has a three-fold symmetry, λ₂ and λ₃ coincide — measured here at a gap of 1.72·10⁻¹⁵ — and there is no Fiedler vector: there is a plane, and every unit vector in it is an exact eigenvector. Eight runs on this graph with its edge weights nudged by a relative 10⁻¹² — four orders above the rounding, and far below anything anybody would call a difference in the data — return 3 distinct partitions, at conductances 0.0455. All of them are correct answers to the relaxation, and on a symmetric graph they are equally good ones. Which one a library returns is decided by its starting vector, and the site has an essay about a plane surviving what its vectors do not.14710131619110¹indexeigenvalue of Lan eigenvalue with no vectorλ₂0.35λ₃0.35gap1.7·10⁻¹⁵partitions found3best conductance0.045worst0.045two eigenvalues, one valueand the answer is not a function of the graph
Fig. 1 Three seven-vertex cliques joined in a triangle. λ₂ and λ₃ agree to 1.7·10⁻¹⁵, and eight runs with the edge weights nudged at the rounding level return three different partitions.

That is not a pathology of contrived examples. It is what a symmetry does, and graphs with symmetries are the ordinary case rather than the exception: a cycle, a hypercube, a grid, a mesh with a repeated motif, any structure assembled from identical parts.

Why a symmetry forces a repeated eigenvalue

If a permutation of the vertices maps the graph to itself, the corresponding permutation matrix commutes with the Laplacian. Commuting matrices share eigenspaces, so each Laplacian eigenspace is invariant under the whole automorphism group — and a group with a representation of dimension greater than one forces an eigenspace of that dimension.

The matrices involved are the ones the second essay in this field distinguishes, and the degeneracy is a property of both. Concretely: a cycle of n has a rotation group, whose two-dimensional representations are the sine and cosine modes at each frequency, so every non-zero eigenvalue of a cycle is double. A hypercube of dimension d has an automorphism group that permutes coordinates, so its eigenvalue 2 has multiplicity d. Three identical cliques joined in a triangle have a three-fold rotation, and λ₂ is double.

The last of those is worth contrasting with the case that does not work. Three identical cliques joined in a chain also look symmetric — the two ends are exchangeable — but the group has order two and has no two-dimensional representation, so λ₂ and λ₃ come out at 0.1125 and 0.3467 and are comfortably apart. Degeneracy is a property of the group rather than of how symmetric a picture looks, and guessing from the picture gets it wrong.

What that does to the answer

The measurement is straightforward: nudge every edge weight by a relative 10⁻¹², which is four orders above the unit roundoff and far below anything anybody would call a difference in the data, recompute the Fiedler vector, sweep, and count how many distinct partitions come back over twenty-four runs.

graph              λ₂           λ₃           gap        partitions   conductances found
cycle 24           0.068148     0.068148    4.0·10⁻¹⁶       10        0.083333
triangle cliques   0.346688     0.346688    1.7·10⁻¹⁵        4        0.045455
hypercube 4        2.000000     2.000000    1.8·10⁻¹⁵        8        0.250000, 0.375000
grid 6×7           0.198062     0.267949    7.0·10⁻²         4        0.098592, 0.100000
barbell 10         0.169048    10.000000    9.8              1        0.010989
two blocks 60      2.553807     9.551710    7.0              1        0.089820

The two rows at the bottom are the reassuring case: a graph with a real gap returns one partition every time, and the perturbation does nothing. The four above them do not.

The cycle returns ten different partitions out of twenty-four runs. That is exactly right and should not be alarming on its own: a cycle has no distinguished place to cut, every cut across two antipodal edges is as good as every other, and the ten answers all have conductance 0.083333. The method is reporting the truth, which is that there are twelve equally good answers and it has no grounds to prefer one.

The case where the quality differs too

The hypercube’s row is the one that is not benign.

Eight distinct partitions came back, and their conductances are 0.25 or 0.375 — a difference of fifty per cent in the quality of the answer, decided by a perturbation of 10⁻¹².

The natural cut of a four-dimensional hypercube is along one coordinate: eight edges cross, each half has volume 32, and the conductance is 0.25. That cut is one of the four directions in the eigenspace of λ₂ = 2. The other directions in that eigenspace are combinations of coordinates, and sweeping one of those produces a set that is not a coordinate half-space and cuts twelve edges instead of eight.

So on this graph the degeneracy is not “several equally good answers”; it is “several answers, some of which are half again as bad”, and which one a run returns is decided by where the eigensolver’s starting vector happened to land inside a four-dimensional space. Nothing in the output distinguishes the two cases. Both are exact eigenvectors, both sweeps are correct sweeps, and both conductances are inside Cheeger’s bracket.

hypercube 5: 32 vertices, 80 edges, and a matrix built from themThe hypercube 5 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 2 and the largest computed zero is 2.7·10⁻¹⁷, a gap of 7.42·10¹⁶. The quadratic form xᵀLx is Σ over edges of (xᵢ − xⱼ)², which at the alternating vector is 64.the matrix, measuredvertices32edges80‖L·1‖∞0zero eigenvalues1components, by search1λ₂2laid out at its own eigenvectorsand the row sums are exactly zero
Fig. 2 A hypercube, whose second eigenvalue has multiplicity equal to its dimension.

The second mechanism, which is not degeneracy at all

The grid’s row is the strange one. Its λ₂ and λ₃ are 0.198 and 0.268 — a gap of seven per cent, which is enormous by the standards of this table — and it still returns four different partitions.

The eigenvalue is simple, so the eigenvector is determined up to sign, and the perturbation moves it by about 10⁻¹². What is not determined is the sort order, because a 6 × 7 grid’s second eigenvector is constant along the short axis: six vertices share each value, exactly, in exact arithmetic. The sweep sorts by that vector, and ties in a sort are broken by whatever the last bits were.

That is a genuinely different failure. The eigenvalue problem is well posed, the eigenvector is accurate to fourteen digits, and the rounding step downstream of it is the thing that is underdetermined. Two of the four partitions returned have conductance 0.098592 and two have 0.100000, so here too the quality is not the same across the answers.

It is worth naming the distinction because a diagnostic that checks for repeated eigenvalues will miss it entirely. A tie in the spectrum is visible in the eigenvalues. A tie in the entries of an eigenvector is visible nowhere except in the sort, and a symmetric graph will usually have both.

Nothing is wrong with the arithmetic

It is worth closing off the reading that this is an accuracy problem, because it is the reading a numerical analyst reaches for first and it is wrong in every case above.

Each of the eigenvectors involved is exact to the level the eigensolver delivers. Feeding one back through the matrix gives a residual ‖Lx − λx‖ of about 10⁻¹⁴ relative to ‖L‖, which is what a Jacobi sweep on a matrix of that norm produces and is as good as binary64 allows. The eigenvalues agree with their closed forms — the cycle’s to 2.6·10⁻¹⁴, the hypercube’s exactly, since 2 is representable — so nothing about the spectrum is being computed badly.

The perturbation is not doing damage either. Nudging the edge weights by a relative 10⁻¹² changes λ₂ by at most 2·10⁻¹² by Weyl’s inequality, which is nothing. It changes the direction the solver picks inside the eigenplane by an amount of order one, because that direction is not a continuous function of the matrix when the eigenvalue is repeated — and that discontinuity is a property of the eigenvalue problem, not of the solver.

So the correct summary is that a well-conditioned computation has been performed on a problem whose answer is not unique, and the non-uniqueness has been resolved by whatever was smallest. Improving the arithmetic improves nothing. Running in higher precision would move the crossover in the skew table by however many digits were added and would leave the exactly symmetric case exactly as it is, because the eigenvalues there are equal in every precision.

What this is, in the site’s existing vocabulary

The first mechanism is the one the plane survives what its vectors do not is about, arriving here with a discrete consequence. There, a cluster of eigenvalues means the individual eigenvectors are meaningless while the invariant subspace they span is computed to full accuracy — and the repair is to report the subspace rather than the vectors. That repair is available here as a diagnosis and not as a fix: the eigenplane is well conditioned and is exactly what the graph determines, and a caller who wanted a partition cannot be handed a plane.

The second mechanism is closer to a rank that depends on the thread count — a comparison of two nearly equal floating-point numbers deciding a discrete outcome, with no last digits for the disagreement to hide in. There the comparison was against a threshold; here it is between two entries of one vector.

And both are instances of the machine field’s general statement, which is that a verdict has no continuum for an error to be small in. What is new here is that the underdetermination is a property of the object rather than of the implementation. A hypercube genuinely does not have one best bisection direction. No amount of care in the arithmetic changes that, and an implementation that returned the same answer every time would be concealing it.

Why this does not show up in the literature

The effect is easy to reproduce and hard to find written down, and the reason is worth a paragraph because it explains what kind of graphs a method gets tested on.

Almost every empirical study of spectral partitioning runs on graphs from applications: finite element meshes, road networks, social graphs, matrices from sparse-matrix collections. Every one of those has irregular local structure, so its automorphism group is trivial, so no eigenvalue is repeated for a structural reason and the whole phenomenon is absent. A study of a hundred such graphs would report perfect run-to-run agreement and would be right about the graphs it looked at.

The graphs that do have symmetry are the ones used for illustration — the cycle, the grid, the hypercube, the ring of cliques — and those are precisely the ones nobody runs a determinism study on, because they are the pictures rather than the data.

That is a familiar shape on this site. The vector that hides it makes the same observation about parallel summation: the effect is invisible on positive data, positive data is what a synthetic benchmark generates, and so a real phenomenon acquired a reputation for being a curiosity. The mechanism here is the same one — the demonstration set and the difficult set are disjoint — and the consequence is that a partitioner which has never been observed to disagree with itself may simply never have been shown a symmetric graph.

How much of a gap is enough

The perturbation and the gap compete, and the crossover is measurable. Skewing one of the three joins in the triangle of cliques opens the gap linearly:

skew        λ₃ − λ₂        distinct partitions
0           1.7·10⁻¹⁵            3
0.001       1.9·10⁻⁴             1
0.01        1.9·10⁻³             1
0.05        9.2·10⁻³             1

A skew of one part in a thousand — a gap of 1.9·10⁻⁴, which is twelve orders above the perturbation — is already enough to settle the answer completely. There is no delicate regime in between: either the gap dominates the perturbation and the partition is a function of the graph, or it does not and the partition is a function of the afternoon.

That is the practically useful form of the result. The number to check is not whether λ₂ and λ₃ are “close” in some absolute sense; it is whether λ₃ − λ₂ is large compared with the uncertainty in the graph — which for a graph built from measurements is the measurement error, and for a graph built exactly is the eigensolver’s own accuracy, around 10⁻¹⁴ times the norm.

A gap of 1.85·10⁻⁴ is enough to decide itThree seven-vertex cliques joined in a triangle by three single edges, one of whose conductances is raised by 0.001. When all three are equal the graph has a three-fold symmetry, λ₂ and λ₃ coincide — measured here at a gap of 1.85·10⁻⁴ — and there is no Fiedler vector: there is a plane, and every unit vector in it is an exact eigenvector. Eight runs on this graph with its edge weights nudged by a relative 10⁻¹² — four orders above the rounding, and far below anything anybody would call a difference in the data — return 1 distinct partition, at conductances 0.0455. All of them are correct answers to the relaxation, and on a symmetric graph they are equally good ones. Which one a library returns is decided by its starting vector, and the site has an essay about a plane surviving what its vectors do not.14710131619110¹indexeigenvalue of Lan eigenvalue with no vectorλ₂0.35λ₃0.35gap1.9·10⁻⁴partitions found1best conductance0.045worst0.045two eigenvalues, one valueand the answer is settled
Fig. 3 The same graph with one join raised by a thousandth. The gap is 1.9·10⁻⁴ and every run returns the same partition.

A note on which vertex ends up where

One consequence is easy to overlook and bites in practice: on a degenerate graph the labels of the two sides are arbitrary as well as the sides themselves.

A partition is a set and its complement, and nothing in the eigenvector says which is which — the eigenvector’s sign is undetermined even when the eigenvector is, so half the runs return the set and half return the complement. Downstream code that treats “side A” as meaningful, or that assigns the two sides to two machines and expects the assignment to be stable across runs, is relying on a sign that was never determined.

This is separate from everything else in the essay and it applies to every graph, symmetric or not. The cheap repair is a convention that is about the problem — the side containing the lowest-numbered vertex, or the larger side, or the side containing a named vertex — applied after the sweep. It costs one comparison and it removes an entire class of irreproducibility that has nothing to do with eigenvalues.

What an implementation should do about it

Three things, in order of how much they cost.

Report the gap. λ₃ − λ₂ is already computed by any solver that produced λ₂, or is one more iteration away. A partition returned without it is a partition whose determinacy the caller cannot check, and the check is a single comparison.

Report the conductance rather than trusting the partition, which is also the number Cheeger’s bracket is about. The hypercube’s eight answers differ by fifty per cent in quality and the difference is visible in one pass over the edge list. A caller given the conductance can tell a 0.25 answer from a 0.375 one; a caller given only the vertex sets cannot.

Do not chase determinism, which the machine field’s reproducible summation already prices. It is tempting, on discovering that runs disagree, to fix the eigensolver’s starting vector and declare the problem solved. That produces the same answer every time and it is the wrong answer as often as before — it has replaced an honest report of an underdetermined problem with a reproducible arbitrary choice. The machine field makes the general version of this argument about reproducible summation: agreement and accuracy are different properties, and buying the first does not buy the second.

If a single partition is genuinely needed, the honest way to get one is to break the tie with something that is about the problem — a vertex ordering with a meaning, a secondary objective, a preference for balance — rather than with something that is about the arithmetic.

What is worth carrying out of this

A symmetric graph has an underdetermined spectral partition, and symmetry is common. Cycles, hypercubes, meshes and anything assembled from repeated parts all have repeated Laplacian eigenvalues, and every one of them has more than one equally exact answer.

Sometimes the answers are equally good and sometimes they are not. The cycle’s ten partitions all have conductance 0.083333. The hypercube’s eight have 0.25 or 0.375. Nothing in the eigenvalue problem distinguishes the two situations, and only measuring the conductance does.

A repeated eigenvalue is not the only way to get there. The grid has a comfortable spectral gap and still returns four partitions, because its eigenvector has exactly tied entries and the sweep sorts them. A check for degenerate eigenvalues will not see it.

And the fix is a measurement, not a determinism. Print the gap, print the conductance, and let the caller see that the problem has several answers — which it does.

At other settings

A gap of 0.00185 is enough to decide itThree seven-vertex cliques joined in a triangle by three single edges, one of whose conductances is raised by 0.01. When all three are equal the graph has a three-fold symmetry, λ₂ and λ₃ coincide — measured here at a gap of 0.00185 — and there is no Fiedler vector: there is a plane, and every unit vector in it is an exact eigenvector. Eight runs on this graph with its edge weights nudged by a relative 10⁻¹² — four orders above the rounding, and far below anything anybody would call a difference in the data — return 1 distinct partition, at conductances 0.0455. All of them are correct answers to the relaxation, and on a symmetric graph they are equally good ones. Which one a library returns is decided by its starting vector, and the site has an essay about a plane surviving what its vectors do not.14710131619110¹indexeigenvalue of Lan eigenvalue with no vectorλ₂0.35λ₃0.35gap0.0018partitions found1best conductance0.045worst0.045two eigenvalues, one valueand the answer is settled
Fig. 4 A skew of one per cent, where the gap is 1.9·10⁻³ and the answer is settled.
A gap of 0.00916 is enough to decide itThree seven-vertex cliques joined in a triangle by three single edges, one of whose conductances is raised by 0.05. When all three are equal the graph has a three-fold symmetry, λ₂ and λ₃ coincide — measured here at a gap of 0.00916 — and there is no Fiedler vector: there is a plane, and every unit vector in it is an exact eigenvector. Eight runs on this graph with its edge weights nudged by a relative 10⁻¹² — four orders above the rounding, and far below anything anybody would call a difference in the data — return 1 distinct partition, at conductances 0.0455. All of them are correct answers to the relaxation, and on a symmetric graph they are equally good ones. Which one a library returns is decided by its starting vector, and the site has an essay about a plane surviving what its vectors do not.14710131619110¹indexeigenvalue of Lan eigenvalue with no vectorλ₂0.35λ₃0.36gap0.0092partitions found1best conductance0.045worst0.045two eigenvalues, one valueand the answer is settled
Fig. 5 Five per cent, where the two eigenvalues are visibly apart on the plot.
A gap of 0.0355 is enough to decide itThree seven-vertex cliques joined in a triangle by three single edges, one of whose conductances is raised by 0.2. When all three are equal the graph has a three-fold symmetry, λ₂ and λ₃ coincide — measured here at a gap of 0.0355 — and there is no Fiedler vector: there is a plane, and every unit vector in it is an exact eigenvector. Eight runs on this graph with its edge weights nudged by a relative 10⁻¹² — four orders above the rounding, and far below anything anybody would call a difference in the data — return 1 distinct partition, at conductances 0.0455. All of them are correct answers to the relaxation, and on a symmetric graph they are equally good ones. Which one a library returns is decided by its starting vector, and the site has an essay about a plane surviving what its vectors do not.14710131619110¹indexeigenvalue of Lan eigenvalue with no vectorλ₂0.35λ₃0.38gap0.035partitions found1best conductance0.045worst0.045two eigenvalues, one valueand the answer is settled
Fig. 6 Twenty per cent, where nothing about the graph is symmetric any more.
A gap of 0.0681 is enough to decide itThree seven-vertex cliques joined in a triangle by three single edges, one of whose conductances is raised by 0.4. When all three are equal the graph has a three-fold symmetry, λ₂ and λ₃ coincide — measured here at a gap of 0.0681 — and there is no Fiedler vector: there is a plane, and every unit vector in it is an exact eigenvector. Eight runs on this graph with its edge weights nudged by a relative 10⁻¹² — four orders above the rounding, and far below anything anybody would call a difference in the data — return 1 distinct partition, at conductances 0.0455. All of them are correct answers to the relaxation, and on a symmetric graph they are equally good ones. Which one a library returns is decided by its starting vector, and the site has an essay about a plane surviving what its vectors do not.14710131619110¹indexeigenvalue of Lan eigenvalue with no vectorλ₂0.35λ₃0.41gap0.068partitions found1best conductance0.045worst0.045two eigenvalues, one valueand the answer is settled
Fig. 7 And forty, where the third clique is attached quite differently from the other two.
One real vector, 39 candidate cuts, and the best of them is number 20The Fiedler vector of the cycle 40, its entries sorted, drawn as the pale rising curve against the right-hand scale; and against the logarithmic left-hand scale, the conductance of the cut that takes the first k vertices in that order. λ₂ = 0.024623. The eigenvector is a real vector and the answer wanted is a subset, so something has to round it: the sweep takes every prefix and keeps the best, which here is k = 20 at a conductance of 0.05 against a worst prefix of 1 — a factor of 20 between the best cut this vector offers and the worst. Nothing in the eigenvalue problem chose k; the sorting did.071421283510⁻¹1vertices on the smaller sideconductance of the prefix cut0.05, the best prefixthe rounding stepλ₂0.025cuts considered39best conductance0.05at k =20worst prefix1the dashed curve is the eigenvectorthe solid one is what it costs
Fig. 8 The cycle, whose every non-zero eigenvalue is double and whose cuts are all equally good.
One real vector, 35 candidate cuts, and the best of them is number 18The Fiedler vector of the grid 6×6, its entries sorted, drawn as the pale rising curve against the right-hand scale; and against the logarithmic left-hand scale, the conductance of the cut that takes the first k vertices in that order. λ₂ = 0.26795. The eigenvector is a real vector and the answer wanted is a subset, so something has to round it: the sweep takes every prefix and keeps the best, which here is k = 18 at a conductance of 0.1 against a worst prefix of 1 — a factor of 10 between the best cut this vector offers and the worst. Nothing in the eigenvalue problem chose k; the sorting did.06121824303610⁻¹1vertices on the smaller sideconductance of the prefix cut0.1, the best prefixthe rounding stepλ₂0.27cuts considered35best conductance0.1at k =18worst prefix1the dashed curve is the eigenvectorthe solid one is what it costs
Fig. 9 The grid, whose eigenvector has tied entries and whose sweep therefore has ties in its sort.
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. 10 A cycle laid out at its own eigenvectors, which recovers the circle because they are the sine modes.
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. 11 The grid, whose second eigenvector is constant along its short axis.
complete 20: 20 vertices, 190 edges, and a matrix built from themThe complete 20 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 20 and the largest computed zero is 7.22·10⁻¹⁶, a gap of 2.77·10¹⁶. The quadratic form xᵀLx is Σ over edges of (xᵢ − xⱼ)², which at the alternating vector is 400.the matrix, measuredvertices20edges190‖L·1‖∞0zero eigenvalues1components, by search1λ₂20laid out at its own eigenvectorsand the row sums are exactly zero
Fig. 12 The extreme case: every non-zero eigenvalue equal, so the whole orthogonal complement is one eigenspace.
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. 13 The bracket, which holds for every one of the answers a degenerate graph returns.
Three perturbations of 10⁻¹⁴, three eigenvectors, one planeA circle with three radii at widely different angles, one for each perturbation, and a table of their residuals showing all three satisfy the eigenvalue equation.every radius is an eigenvectorseed 11: 2.0°seed 23: 60.5°seed 41: 18.2°none of them is wrongspread of the returned angles1spread of the returned planes1.3·10⁻¹⁵worst ‖Ax − λx‖5·10⁻¹⁵an exactly repeated eigenvalueno correct answer to fail to return
Fig. 14 An eigenvector with no gap to define it, in the field that measured that first.
What a perturbation of 10⁻⁶ moves, against the gap it is applied acrossThree curves against the gap between two eigenvalues, both axes logarithmic. Two are flat; the third rises steeply as the gap closes and then levels off.10⁻⁹10⁻⁷10⁻⁵10⁻³10⁻⁸10⁻⁵10⁻²gap between the two eigenvalueshow far it movedthe eigenvectorsthe eigenvaluestheir plane‖E‖ / gapone perturbation, three answerseigenvalue shift, spread over the sweep1plane angle, spread over the sweep1eigenvector angle, spread1.6·10⁵the dashed line is Davis–Kahan's ‖E‖/gaptwo of the three never noticed
Fig. 15 How a gap decides an eigenvector, which is the continuous version of this essay.
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. 16 How far an eigenvalue moves when the matrix does, which sets the scale a gap is measured against.
The numerical rank of one matrix is 10, 12, or somewhere betweenSingular values of one 60 × 14 matrix whose spectrum falls by a fixed factor per index, so there is no gap anywhere and the threshold decides the rank. Each curve is the same matrix, its Gram matrix formed with the inner products summed in a different number of pieces. The curves lie on top of each other for the first several values and separate below about 7.3·10⁻¹³, which is where forming AᵀA has put the rounding. The dashed line is the threshold, σ₁ · 10⁻¹⁴. Counting the values above it gives 12 at p = 1, 12 at p = 2, 12 at p = 4, 10 at p = 8, 10 at p = 16, 11 at p = 32, 11 at p = 60 — the rank of one matrix, as a function of how many workers were available. Not a digit of an answer: the number of columns a model built from this matrix would have.13579111310⁻¹⁴10⁻¹¹10⁻⁸10⁻⁵10⁻²10¹index ksingular valueσ₁ · 10⁻¹⁴, the thresholdone matrix, three rankspartitionings7lowest rank10highest rank12threshold7.3·10⁻¹⁴σ₁7.3the curves separate in the noiseand the threshold is drawn through it
Fig. 17 One matrix with three numerical ranks, which is the same shape with a threshold instead of a plane.
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. 18 One solve with thirteen different bills, in the field about answers that are not unique.
The same 4096 numbers, added up 26 ways, 21 different answersEach dot is one reduction of one vector of 4096 binary64 numbers whose summation condition number is 1.01·10⁸: the vector is cut into p contiguous pieces, each piece summed left to right, and the pieces combined in a tree. The vertical position is the distance from the exactly rounded sum, relative. Filled dots are the static split a fixed thread count gives; open dots are unequal splits, which is what a work-stealing scheduler produces at the same p. 21 of the 26 runs returned distinct values, spanning 1.55·10⁻¹³ — 2.3·10⁷ ulps of the answer. The dashed line is the classical bound γ₍ₙ₋₁₎Σ|xᵢ|, which every one of them satisfies with 2.58·10⁴ to spare, and which is the same number for all of them: it contains n and Σ|xᵢ| and nothing about the order.110¹10⁻¹¹10⁻⁸10⁻⁵pieces the vector was divided intodistance from the exact sum, relativethe published boundκ · uone vector, one algorithmdistinct answers21runs26spread, in ulps2.3·10⁷κ of the sum10⁸bound ÷ worst error2.6·10⁴nobody chose pand no answer is the answer
Fig. 19 Twenty-one answers from one program, which is the machine field’s version of this.
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. 20 A threshold turning a spectrum into an integer.
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. 21 A cluster of eigenvalues, which is what a symmetry produces exactly rather than approximately.
The residual basis of conjugate gradients, at κ = 106A semi-logarithmic plot against iteration count showing the loss of orthogonality among the residual vectors rising while the relative residual falls.05101520253010⁻¹⁷10⁻¹⁴10⁻¹¹10⁻⁸10⁻⁵10⁻²10¹iteration‖RᵀR − I‖ and ‖r‖/‖b‖step n‖RᵀR − I‖residual30×30, run for exactly n stepsexact arithmetic would end here
Fig. 22 Orthogonality lost in a Krylov space, which is how a degenerate pair is usually first noticed.
What the solver reported, and what it achievedFinal relative residual and final relative error against the working precision, on a logarithmic vertical axis. The residual sits at the stopping tolerance at every precision — the method converged, by every test available to it. The error runs from 1.4·10⁻¹³ at 53 bits to 0.00597 at 8, tracking the unit roundoff, which is drawn beside it.614223038465410⁻¹³10⁻¹⁰10⁻⁷10⁻⁴working significand bitsrelative sizeerrorresidualuthe gap the solver cannot seeerror ÷ residual at 24 bits1.5·10⁶error ÷ residual at 16 bits2.3·10⁷error ÷ residual at 8 bits2.4·10¹⁰every convergence test passesand the answer is wrong in proportion to u
Fig. 23 A residual that cannot see the error, which an eigenvector residual here also cannot.
One system, 20 ways to remove its kernel, and 1.29× 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 barbell 10: the condition number of the resulting positive definite matrix against the degree of the vertex removed. Grounding vertex 11, of degree 9, gives κ = 153.78; grounding vertex 10, of degree 10, gives 118.99 — a factor of 1.292 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.91010²degree of the grounded vertexcondition number of what is left119, the best choicea parameter nobody setsvertices tried20best κ119at degree10worst κ154at degree9spread1.3one row and column deletedand it matters which
Fig. 24 A discrete choice inside a solve, on a graph whose spectral gap is large.
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. 25 The spectrum whose second and third entries this essay is about the distance between.
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. 26 An estimate reported as a spread, which is what a degenerate partition should be.
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. 27 The two errors, neither of which is what goes wrong here.
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. 28 The precision knob, which does not settle any of the partitions in this essay.
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. 29 An answer that is known, which a degenerate partition problem does not have one of.

What links here

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

Named objects

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

ConductanceFiedler vectorGraph automorphismInvariant subspaceRepeated eigenvalueRun-to-run variationSpectral partitionSweep cut