Computing Eigenvalues
Spelling out the characteristic polynomial of an matrix and finding its roots is not how one computes eigenvalues in practice. For above a few dozen the polynomial route is hopelessly ill-conditioned, and beyond there is no closed form at all. Practical eigensolvers iterate, and they all descend from a single geometric idea: multiplying by many times stretches a vector along the dominant direction.
Power iteration
Section titled “Power iteration”Why it works: if has a basis of eigenvectors with eigenvalues , write . Then
All ratios , so after normalization aligns with provided . The error shrinks like the rate per step.
Edit the matrix below and watch the iterate turn toward the dashed line through the dominant eigenvector. The convergence rate displayed is ; matrices with close eigenvalues converge slowly, matrices with a well-separated leading eigenvalue converge fast. Setting (a rotation) produces complex eigenvalues and no real eigenvector, and the iterate spirals.
Inverse iteration with a shift
Section titled “Inverse iteration with a shift”Power iteration finds the largest eigenvalue. To target any other one, replace with : its eigenvalues are , and the largest in modulus belongs to the closest to . Iterating
(solving a linear system each step rather than inverting explicitly) drives to the eigenvector for the eigenvalue nearest , at rate . Taking , the running Rayleigh quotient itself, gives Rayleigh quotient iteration, which is locally cubically convergent for symmetric : each step roughly cubes the digits of accuracy.
The QR algorithm
Section titled “The QR algorithm”For all the eigenvalues at once, the QR algorithm is the modern workhorse. Repeatedly factor and reassemble:
Each step is a similarity transform: , so the spectrum is preserved.
In practice, the basic algorithm is accelerated in two ways: a one-time reduction of to Hessenberg form (zeros below the first subdiagonal) makes each QR step cheap, and an eigenvalue shift at every step turns the rate into a much steeper one (cubic, with the Wilkinson shift). The combination is the algorithm of LAPACK and every modern eigensolver.
Computing the SVD
Section titled “Computing the SVD”Singular values are eigenvalues of , so any eigenvalue algorithm computes the SVD in principle. Forming explicitly is the same numerically poor idea as solving least squares by the normal equations: the condition number squares. Practical SVD codes instead bidiagonalize with Householder reflections, with upper bidiagonal, and then run an implicit QR sweep on that operates as if it were on without ever building it. The Golub–Reinsch algorithm packages this into the standard SVD routine.