Purpose

This note builds eigenvalues and diagonalization from the definition up, then uses them for the thing they are actually good at: understanding what happens when you apply the same linear map over and over. It is a reference for eigendecompositions, matrix powers, and stability. Broader matrix background lives in Matrix Theory.

Eigenpairs are invariant directions

A square matrix moves most vectors to somewhere unrelated. An eigenvector is a direction the map preserves: a nonzero with

for some scalar , the eigenvalue (ILA §5.1). Along the line spanned by , the whole action of collapses to multiplication by . That is the entire appeal. If you can find a basis of such directions, the matrix has no geometry left to hide.

Rearranging gives , so is an eigenvalue exactly when is singular, which happens exactly when

The left side is the characteristic polynomial, degree in , so has eigenvalues counted with multiplicity, possibly complex (ILA §5.2). Two multiplicities matter: the algebraic multiplicity of is its multiplicity as a root, and the geometric multiplicity is , the number of independent eigenvectors it contributes. Geometric never exceeds algebraic.

Diagonalization is a change of basis

Suppose has linearly independent eigenvectors with eigenvalues . Stack the eigenvectors as columns of and the eigenvalues into . Then column by column, and since is invertible,

Read right to left: rewrites a vector in eigenvector coordinates, scales each coordinate independently, and translates back. In the right basis, is just separate scalar multiplications.

Diagonalization is a change of basis, not a new matrix

says and are the same linear map written in different coordinates. Anything preserved by similarity, eigenvalues, determinant, trace, rank, can be read off for free. Whenever a computation involves applying repeatedly (powers, exponentials, recurrences), switch to the eigenbasis first, do scalar arithmetic, and switch back.

is diagonalizable if and only if the geometric multiplicities sum to , equivalently every eigenvalue’s geometric multiplicity equals its algebraic multiplicity (ILA §5.4). Distinct eigenvalues always give independent eigenvectors, so a matrix with distinct eigenvalues is automatically diagonalizable. The failure mode is a repeated root that comes up short on eigenvectors: has with algebraic multiplicity 2 but only one eigenvector direction, so it is defective and not diagonalizable.

Not every square matrix is diagonalizable

Having eigenvalues (with multiplicity) does not mean having independent eigenvectors. A defective matrix like has no eigenbasis, so simply does not exist for it, and any argument that starts “diagonalize …” silently fails. The repair is the Jordan form (or the Schur decomposition numerically). Nearly defective matrices are just as dangerous in floating point: exists but is close to singular, so amplifies error, a point the NumPy caveats below return to.

Symmetric matrices are the best case. If , all eigenvalues are real, eigenvectors for distinct eigenvalues are orthogonal, and there is always an orthonormal eigenbasis, giving the spectral decomposition with orthogonal (ILA chapter 5; Strang covers this in 18.06 lecture 25).

Worked 2x2 example

Take the symmetric matrix

Characteristic polynomial: , so and .

For : , whose kernel is spanned by .

For : , kernel spanned by .

The eigenvectors are orthogonal, as the spectral theorem promises. Normalizing gives and . Geometrically, stretches by 4 along the diagonal direction and by 2 along the anti-diagonal .

Matrix powers and stability

Diagonalization turns repeated application into repeated scalar multiplication:

because the inner pairs cancel. Writing an initial vector in eigencoordinates, , the dynamics become

Each mode evolves independently, and the long-run behavior is read off the eigenvalue magnitudes: modes with decay, modes with blow up, and as grows the term with the largest dominates, so aligns with the dominant eigenvector. This is Strang’s framing of difference equations in 18.06 lecture 22, and it is also why power iteration converges to the dominant eigenvector and why the spectral radius decides the stability of a linear recurrence.

NumPy and numerical caveats

import numpy as np
 
A = np.array([[3.0, 1.0], [1.0, 3.0]])
lam, P = np.linalg.eig(A)
print(lam)                                # [4.+0.j 2.+0.j] on some BLAS builds, [4. 2.] on others
print(np.allclose(P @ np.diag(lam) @ np.linalg.inv(P), A))  # True
 
k = 10  # matrix powers through the eigendecomposition
Ak = P @ np.diag(lam**k) @ np.linalg.inv(P)
print(np.allclose(Ak, np.linalg.matrix_power(A, k)))  # True

Caveats that bite in practice, per the numpy.linalg.eig docs:

  • eig does not sort eigenvalues. Here it happens to return 4 before 2; never assume an order.
  • For a real matrix with complex eigenvalues, eig returns complex arrays with conjugate pairs. A rotation matrix is the standard surprise.
  • For symmetric or Hermitian matrices, use eigh instead. It guarantees real eigenvalues sorted ascending, returns orthonormal eigenvectors, and is faster and more accurate because it exploits symmetry.
  • Nearly defective matrices are numerically hostile: when eigenvalues nearly coincide and the eigenvector matrix is close to singular, amplifies error, and computed eigenvectors of non-symmetric matrices can be ill-conditioned even when the eigenvalues are fine. The eigendecomposition of a non-symmetric matrix is not a backward-stable route to ; for symmetric matrices the orthogonal makes the reconstruction well behaved.

Sources