Eigenvalues, singular values, rank

The eigenvalues that are not there

For a normal matrix the resolvent norm is exactly one over the distance to the nearest eigenvalue, so a picture of it carries nothing the spectrum did not. Move one entry above the diagonal and the region a perturbation of 10⁻⁸ can put an eigenvalue into stops being a disc and reaches out past the unit circle, while every eigenvalue stays at 0.8.

Worth reading first: Symmetry is worth more than precision · The form a real matrix can reach.

This site has measured eigenvalue sensitivity twice. A condition number for one eigenvalue is the reciprocal of the inner product of its left and right eigenvectors, and symmetry is worth more than precision found the 8×8 Jordan block whose eigenvalues move like ε^{1/8}, so a perturbation at the level of storing the matrix shifts them by a hundredth.

Both of those are statements about a limit. They describe how far an eigenvalue moves as the perturbation goes to zero, and the second one is careful to say that the exponent means the limit is reached slowly.

The pseudospectrum is the same question asked at a perturbation size that is actually present:

Λ_ε(A)  =  { z : σ_min(zI − A) ≤ ε }
        =  { z : z is an eigenvalue of A + E for some ‖E‖₂ ≤ ε }

Those two definitions describe the same set — the second follows from the first by taking E to be the rank-one matrix built from the singular vectors — and the second is the one that says why it matters. It is the set of places an eigenvalue can be put by a perturbation the size of the rounding in the entries.

σ_min(zI − A) over the complex plane, for a bidiagonal 6×6 matrix with every eigenvalue at 0.8 and 2 above the diagonalA square of the complex plane shaded by how small σ_min(zI − A) is. Every eigenvalue is at 0.8, marked by the crosshair; the 10⁻³ level reaches out to 1.33, well outside the unit circle drawn through the picture. A perturbation of the matrix at the level of double-precision rounding can put an eigenvalue anywhere in that region.darker is smaller: 10⁻¹⁰, 10⁻⁶, 10⁻³, 10⁻¹one spectrum, two matricesspectral radius0.8reach of the 10⁻³ level1.3eigenvalues, all at0.8the circle is |z| = 1and every eigenvalue is well inside it
Fig. 1 σ_min(zI − A) over a square of the complex plane, shaded by size, for a 6×6 bidiagonal with every eigenvalue at 0.8 and 2 above the diagonal. The crosshair is the whole spectrum. The circle is |z| = 1. The 10⁻³ level reaches out to 1.33. Drag the superdiagonal to 0, where the matrix is normal.
σ_min(zI − A) over the complex plane, for a normal 6×6 matrix with every eigenvalue at 0.8A square of the complex plane shaded by how small σ_min(zI − A) is. The dark bands are circles centred on the eigenvalue at 0.8, because for a normal matrix σ_min is exactly the distance to the nearest eigenvalue and the picture says nothing the spectrum did not. The 10⁻³ level is a disc of radius 10⁻³ around the eigenvalue, which is smaller than one cell of this grid.darker is smaller: 10⁻¹⁰, 10⁻⁶, 10⁻³, 10⁻¹one spectrum, two matricesspectral radius0.8reach of the 10⁻³ level0eigenvalues, all at0.8the circle is |z| = 1and every eigenvalue is well inside it
Fig. 2 The control: a normal matrix with the same spectrum. σ_min is exactly the distance to the eigenvalue, so the shaded region is a disc of radius 10⁻³ around 0.8 — smaller than one cell of this grid, which is why the picture has nothing in it.

The control, and it is an exact identity

Set the superdiagonal to zero and the matrix is normal — AᵀA = AAᵀ, diagonalisable by an orthogonal matrix. For a normal matrix

σ_min(zI − A)  =  dist(z, Λ(A))

exactly, with no constant in front, because the singular values of zI − A are the moduli |z − λ_i|. So Λ_ε is the union of ε-discs around the eigenvalues, the picture carries nothing the spectrum did not, and there is no subject.

assertANormalMatrixHasNoPseudospectrum checks it at forty points scattered over the plane, by two routes that share no code: the smallest singular value of a 2n×2n real embedding, and the distance to the nearest eigenvalue computed from the site’s real Schur form. The worst relative departure over those forty points is 1.6·10⁻¹³.

That is the control the rest of the essay is measured as a departure from, and it is why the first stop of the slider is a normal matrix rather than a mild one.

What the shading is of, and how it is computed

Each cell carries log₁₀ σ_min(zI − A) for z at its centre. Dark means small, which means near a place an eigenvalue could be moved to.

zI − A is complex and this site has no complex arithmetic. It does not need any: a complex matrix X + iY has the same singular values, each twice, as the real [[X, −Y], [Y, X]], so the existing real one-sided Jacobi SVD computes a complex singular value with four lines of index arithmetic and no second implementation to be wrong.

That is a deliberate choice rather than an economy. A second SVD is a second thing that can be wrong, and the site has spent two phases on findings that turned out to be defects in a measuring instrument rather than in the object.

σ_min(zI − A) over the complex plane, for a bidiagonal 6×6 matrix with every eigenvalue at 0.8 and 1 above the diagonalA square of the complex plane shaded by how small σ_min(zI − A) is. Every eigenvalue is at 0.8, marked by the crosshair; the 10⁻³ level reaches out to 1.12, well outside the unit circle drawn through the picture. A perturbation of the matrix at the level of double-precision rounding can put an eigenvalue anywhere in that region.darker is smaller: 10⁻¹⁰, 10⁻⁶, 10⁻³, 10⁻¹one spectrum, two matricesspectral radius0.8reach of the 10⁻³ level1.1eigenvalues, all at0.8the circle is |z| = 1and every eigenvalue is well inside it
Fig. 3 One above the diagonal. The same spectrum, and a 10⁻³ region already reaching past the unit circle to 1.12.

The departure, measured along an axis

At every stop past the first, the spectrum is identical: one eigenvalue at 0.8, with multiplicity six. No eigenvalue solver would report any difference between the five matrices the slider draws.

What changes is how far the shaded region reaches. assertANonNormalMatrixHasOne measures the ratio of the distance-to-spectrum to σ_min at scattered points, and finds it growing with the superdiagonal: 3.6·10⁴, 1.2·10⁶, 8.7·10⁶ and 3.7·10⁷ at m = 1, 2, 3, 4.

So the resolvent norm is not one over the distance; it is up to 3.7·10⁷ times that, and the factor is a monotone function of the one parameter the spectrum cannot see.

σ_min(zI − A) over the complex plane, for a bidiagonal 6×6 matrix with every eigenvalue at 0.8 and 4 above the diagonalA square of the complex plane shaded by how small σ_min(zI − A) is. Every eigenvalue is at 0.8, marked by the crosshair; the 10⁻³ level reaches out to 1.69, well outside the unit circle drawn through the picture. A perturbation of the matrix at the level of double-precision rounding can put an eigenvalue anywhere in that region.darker is smaller: 10⁻¹⁰, 10⁻⁶, 10⁻³, 10⁻¹one spectrum, two matricesspectral radius0.8reach of the 10⁻³ level1.7eigenvalues, all at0.8the circle is |z| = 1and every eigenvalue is well inside it
Fig. 4 Four above the diagonal, where the region reaches to 1.69. Every one of these five pictures has one eigenvalue at 0.8 with multiplicity six and no solver reports a difference between them.

The same statement made by perturbing instead

A resolvent norm is a computation about a matrix. The definition it comes from is about perturbations, and the two can be checked against each other.

Where 24 perturbations of size 10⁻⁸ put the eigenvalues of two 6×6 matrices with the same spectrumTwo clouds of eigenvalues in the complex plane. Both matrices have every eigenvalue at 0.8 exactly; both were perturbed by the same 24 random matrices of norm 10⁻⁸. The normal matrix's eigenvalues stay within 8.86·10⁻⁹ of where they were — the size of the perturbation — and the bidiagonal's spread out to 0.0701, a factor of 7.9·10⁶ further on the same data.100.1750.35real partimaginary part0.8bidiagonalnormalone spectrum, two matricesthe perturbation10⁻⁸normal, furthest moved8.9·10⁻⁹bidiagonal, furthest0.07ratio7.9·10⁶the two matrices have identical eigenvaluesand one of them says so under perturbation
Fig. 5 Twenty-four random perturbations of norm 10⁻⁸ applied to two 6×6 matrices with identical spectra — every eigenvalue at 0.8 — and the eigenvalues that come out. The normal matrix’s cloud is a disc of radius 10⁻⁸ and is invisible at this scale. The bidiagonal’s spreads out to 0.07. Drag the size of the perturbation.

The normal matrix’s eigenvalues move by 8.9·10⁻⁹ at the worst — the size of the perturbation, which is Bauer–Fike with an eigenvector condition number of exactly one. The bidiagonal’s move by 0.070, a factor of 7.9·10⁶ further on the same perturbations.

And the two computations agree, which is the check that neither is wrong: every perturbed eigenvalue λ̃ is asserted to satisfy σ_min(λ̃ I − A) ≤ ε. That is the definition rather than a finding, and it is exactly why it is worth asserting — if it failed, one of the two routes has a bug in it.

Where 24 perturbations of size 10⁻⁴ put the eigenvalues of two 6×6 matrices with the same spectrumTwo clouds of eigenvalues in the complex plane. Both matrices have every eigenvalue at 0.8 exactly; both were perturbed by the same 24 random matrices of norm 10⁻⁴. The normal matrix's eigenvalues stay within 8.86·10⁻⁵ of where they were — the size of the perturbation — and the bidiagonal's spread out to 0.329, a factor of 3710 further on the same data.100.1890550.378111real partimaginary part0.8bidiagonalnormalone spectrum, two matricesthe perturbation10⁻⁴normal, furthest moved8.9·10⁻⁵bidiagonal, furthest0.33ratio3710the two matrices have identical eigenvaluesand one of them says so under perturbation
Fig. 6 The same experiment at ε = 10⁻⁴. Four decades more perturbation moves the ring by about one, which is the sixth root at work.

Why it moves like the n-th root

The cloud grows as ε^{1/n} rather than as ε, which is why four decades of ε move it by about one decade rather than four.

The reason is the characteristic polynomial. For the bidiagonal with ρ on the diagonal and m above it, det(zI − A) = (z − ρ)ⁿ, and perturbing the bottom-left corner by δ changes it to (z − ρ)ⁿ − δ·mⁿ⁻¹. The roots are ρ + (δ mⁿ⁻¹)^{1/n} times the n-th roots of unity: a ring of n points at radius proportional to δ^{1/n}, which is what the figure draws.

At n = 6 and δ = 10⁻⁸ that radius is 10⁻⁸/⁶ ≈ 0.046 times m^{5/6}, and the measured 0.070 at m = 2 is exactly that. The site’s Jordan-block measurement is the same formula at n = 8.

A fractional power is what makes this a statement about real perturbations rather than about a limit. ε^{1/6} at ε = 10⁻¹⁶ is 2·10⁻³ — so even a perturbation at the level of double-precision rounding moves these eigenvalues by two parts in a thousand, and no amount of extra precision in the solver changes that, because the perturbation is in the stored matrix.

What a solver reports, and what it means

An eigenvalue solver run on the bidiagonal returns 0.8 six times, to about 10⁻³. It is not making a mistake: it computed the exact eigenvalues of a matrix within rounding of the one it was given, which is what backward stability promises, and the eigenvalues of that nearby matrix genuinely are spread over a ring of radius 10⁻³.

So the output is correct, the algorithm is stable, and the six numbers reported are not six eigenvalues of anything in particular. The site’s identity accounts for it — forward error ⪅ condition number × backward error, with the condition number of a defective eigenvalue infinite and the ε^{1/n} law being what replaces the linear bound — and a condition number for one eigenvalue is where that number is measured.

The condition number of one eigenvalue, at an off-diagonal entry of 4A rising curve against the size of an off-diagonal entry, on logarithmic axes, with a flat line at one below it and a vertical marker at the current value.110¹10²10³110¹10²10³off-diagonal entry ccondition number of the eigenvalue√(1 + c²)decoupled: 1measuredthree routes, one number‖A − ZTZᵀ‖/‖A‖2.1·10⁻¹⁵closed form4.1computed 1/|yᵀx|4.1worst measured movement1.9four eigenvalues, two conditioning numbersthe symmetric case has one, and it is 1
Fig. 7 The condition number of a single eigenvalue, which is the linearised version of everything above. It goes to infinity as the matrix becomes defective, and the pseudospectrum is what is left when it does.
Where 24 perturbations of size 10⁻¹² put the eigenvalues of two 6×6 matrices with the same spectrumTwo clouds of eigenvalues in the complex plane. Both matrices have every eigenvalue at 0.8 exactly; both were perturbed by the same 24 random matrices of norm 10⁻¹². The normal matrix's eigenvalues stay within 6.51·10⁻¹³ of where they were — the size of the perturbation — and the bidiagonal's spread out to 0.0151, a factor of 2.3·10¹⁰ further on the same data.100.1750.35real partimaginary part0.8bidiagonalnormalone spectrum, two matricesthe perturbation10⁻¹²normal, furthest moved6.5·10⁻¹³bidiagonal, furthest0.015ratio2.3·10¹⁰the two matrices have identical eigenvaluesand one of them says so under perturbation
Fig. 8 And at 10⁻¹², four decades below double-precision rounding of a matrix of order one. The ring is still there, which is the whole content of a fractional power.

Three ways to compute one, and why the picture is a grid

Computing a pseudospectrum is computing σ_min(zI − A) at a lot of points, and how many points is the whole cost.

The direct way, which is what this figure does: one SVD per grid point. At 34×34 points and a 6×6 matrix that is 1,156 SVDs of a 12×12 real embedding, which is a fraction of a second. At a 1,000×1,000 matrix and a 200×200 grid it is forty thousand SVDs of a 2,000×2,000, which is not a computation anybody performs.

The Schur way, which is what any serious code does: reduce A to triangular form once, and note that σ_min(zI − A) = σ_min(zI − T) because a unitary similarity does not change singular values. Then each grid point is a triangular matrix, and its smallest singular value comes from a few steps of inverse iteration at O(n²) rather than O(n³). That is the algorithm behind EigTool and behind pseudospectra in every package that has one.

And the projected way, for matrices too large even for that: run a few dozen steps of Arnoldi, compute the pseudospectrum of the small Hessenberg matrix, and hope. It is a lower bound on the real one in the sense that the projected resolvent norm is smaller, so the region drawn is inside the true one — one-sided again, and again in the direction that under-reports the trouble.

The choice made here is the direct one, at a small size, because the argument is about what the object is and not about how to compute it at scale. The cost is stated at the call site rather than hidden, which is why nx and ny are arguments the figure’s assertions bound.

What the contours are not

Two readings of this picture are wrong and both are natural.

It is not a plot of where the eigenvalues “really” are. The eigenvalues are at 0.8, exactly, six times. The region says where they could be moved to, which is a statement about a family of matrices rather than about this one.

And the shaded bands are not error bars. An error bar is symmetric and describes a distribution; this region is a set, with a hard boundary, and every point inside it is achievable by some perturbation of norm ε. Whether a particular perturbation reaches a particular point is a different question, and the cloud in the perturbation figure is what its answer looks like: the achievable set is a disc and the achieved set is a ring, because a random perturbation almost never picks the rank-one direction that reaches the interior.

That gap between what is achievable and what is achieved is the same distinction the condition number is an amplifier measured for condition numbers, where a random perturbation direction gets 0.29 of the available amplification at the median.

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. 9 The site’s earlier measurement: the 8×8 Jordan block whose eigenvalues move like the eighth root of a perturbation. The pseudospectrum is that statement without the limit in it.

Where this changes an answer

Three places, and none of them is about eigenvalues being printed.

Convergence of an iteration. x_{k+1} = Ax_k decays if ρ(A) < 1 and the spectrum says nothing about what it does first. That is the next essay, a spectral radius that grows first.

Krylov methods. The spectrum that predicts nothing already measured GMRES on a matrix whose eigenvalues are all on the unit circle and which makes no progress for n − 1 steps. The pseudospectrum is the object that does predict it: GMRES’s residual is bounded by the length of the ε-pseudospectrum’s boundary divided by ε, and for a normal matrix that reduces to the eigenvalue bound everyone quotes.

Stability of a discretisation. A time-stepping scheme is stable if the amplification matrix has spectral radius below one, in the sense that solutions eventually decay. Whether they decay monotonically — which is what a physical argument usually wants — is a question about the pseudospectrum, and the Kreiss matrix theorem is the statement that connects them.

‖Aᵏ‖ for a 6×6 matrix whose spectral radius is 0.8, with 2 above the diagonalTwo curves against the power. The norm of Aᵏ rises to 19800 at step 24 before turning over and decaying to 2.5·10⁻⁵ by step 160; ρᵏ = 0.8ᵏ, drawn beside it, falls from the start. The two horizontal lines are the Kreiss bracket: the peak is at least K = 6757 and at most e·n·K = 1.1·10⁵, both computed from the resolvent norms outside the unit circle and not from the powers at all.027548110813510⁻⁶10⁻⁴10⁻²110²10⁴10⁶power‖Aᵏ‖Kreiss constant 6760e · n · K‖Aᵏ‖ρᵏtwo routes to one peakspectral radius0.8peak of ‖Aᵏ‖2·10⁴Kreiss constant6757e · n · K1.1·10⁵everything here decays in the endand one of these curves says how much first
Fig. 10 What the region costs, which is the next essay. Every eigenvalue here is 0.8 and the powers of the matrix rise by four orders of magnitude before they turn over.

What a backward-stable eigenvalue solver promises

The sentence a reader carries away from every stability discussion is that a good algorithm returns the exact answer to a nearby problem, and it is worth watching that sentence do its work here, because it does exactly what it says and the result is unhelpful.

An eigenvalue solver run on the bidiagonal returns six numbers near 0.8. What backward stability promises is that those numbers are the exact eigenvalues of A + E for some E with ‖E‖ ≤ c(n)·u·‖A‖. That promise is kept.

But this essay’s whole content is that Λ_ε(A) for ε at that size is a ring of radius 10⁻³. So the set of matrices the promise covers has eigenvalues spread over that ring, and any six numbers in it are a correct output. The algorithm is not choosing badly among them; every choice is equally correct.

Two consequences follow, and the second is the one worth carrying.

The output is not reproducible in a strong sense. Two backward-stable solvers, or one solver on two machines with different summation orders, can return numbers differing in the third digit and both be right. That is not a bug report; it is what the promise permits.

And no amount of precision fixes it. Doubling the working precision shrinks ε by 10⁻¹⁶, and the ring’s radius by the sixth root of that — a factor of 400. Which is real, and is not the sixteen digits a reader would expect from sixteen more digits of arithmetic.

Why the definition uses the 2-norm

A detail that changes the picture and is usually left implicit.

Λ_ε(A) = { z : ‖(zI − A)⁻¹‖ ≥ 1/ε } needs a norm, and the two definitions given at the top of this essay coincide only in the 2-norm. The reason is that the perturbation achieving the bound is the rank-one matrix built from the singular vectors of zI − A, and its 2-norm is exactly σ_min while its Frobenius norm and its 1-norm are not.

In another norm the set is still defined and still meaningful, and the equivalence between “the resolvent is large here” and “a perturbation of this size puts an eigenvalue here” acquires a dimensional constant. Every picture in this essay is in the 2-norm for that reason, which is also why the computation is a smallest singular value rather than anything cheaper.

What is worth carrying

For a normal matrix the pseudospectrum is a set of discs and carries nothing. That is not a caveat; it is why the object exists, and it is asserted here as an exact identity so everything else is a measured departure from it.

For a non-normal one, a perturbation the size of rounding moves the eigenvalues by a fractional power of it — the n-th root for a defective eigenvalue of multiplicity n — so the movement is enormous compared to the perturbation and gets relatively larger as the perturbation shrinks.

Two matrices with identical spectra can behave completely differently, and the spectrum is the thing every library reports.

And the eigenvalues a solver returns for such a matrix are correct and not informative. The algorithm is backward stable, the numbers are the exact eigenvalues of a nearby matrix, and nearby is doing an enormous amount of work in that sentence.

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.

Eigenvalue condition numberNon-normal matricesNon-normalityPerturbationPseudospectrumThe real Schur formResolventSingular valuesTransient growth