Directions the matrix doesn't turn
A matrix mixes coordinates together, so the output generally points somewhere unrelated to the input. Eigenvectors are the exceptions — the axes along which the transformation is nothing more complicated than multiplication by a number.
λ > 1
Stretched along that direction. Repeated application grows without bound.
0 < λ < 1
Shrunk. Repeated application collapses toward the origin.
λ < 0
Flipped through the origin and scaled. Still the same line, which is what matters.
Two facts worth internalizing early
λ = 0 means the matrix is singular. There's a direction that gets crushed to nothing, so the transformation destroys information and cannot be undone. The null space is the eigenspace for λ = 0.
Eigenvectors are directions, not vectors. If v is an eigenvector then so is 2v and −v. Libraries return unit-length ones by convention, but the sign is arbitrary — and code that depends on which sign you got will work until it suddenly doesn't.
Two shortcuts that hold in any dimension
Sum of the diagonal equals sum of eigenvalues; determinant equals their product. In 2×2 that's enough to solve for both eigenvalues in your head, and in any dimension it's a free sanity check on a numerical result.
On paper, and why not in code
The characteristic equation
Rearrange Av = λv into (A − λI)v = 0. For a non-zero v to exist, that matrix must be singular:
A polynomial of degree n. Its roots are the eigenvalues; substitute each back and solve for the null space to get the eigenvectors.
The 2×2 case, by hand
The discriminant T² − 4D decides everything: positive gives two real eigenvalues, zero gives a repeated one, negative gives a complex conjugate pair and no real eigenvector at all.
When there is no direction that survives
Press "pure rotation" in the hero. The eigenvector lines vanish, because a rotation genuinely turns every vector — there is no real direction it leaves alone. The eigenvalues become a complex conjugate pair, and that is the algebra telling you the transformation rotates.
Reading a complex pair
- σ
- The real part. Growth or decay rate — how fast the spiral opens out or winds in.
- ω
- The imaginary part. Angular frequency — how fast it goes around.
- |λ|
- The magnitude. For a discrete-time system this is what decides stability.
Why they come in pairs
A real matrix has a real characteristic polynomial, and complex roots of real polynomials always appear as conjugates. So complex eigenvalues arrive two at a time, and the corresponding real motion is a spiral rather than two separate behaviours.
The case that behaves perfectly
Symmetric matrices — where A = Aᵀ — are enormously better behaved than general ones. This matters more in robotics than almost anywhere, because inertia tensors, covariance matrices, stiffness matrices and Gram matrices are all symmetric.
The spectral theorem
For any real symmetric matrix:
- All eigenvalues are real — no complex pairs, ever.
- Eigenvectors for distinct eigenvalues are orthogonal.
- There is always a full orthonormal basis of eigenvectors, even with repeated eigenvalues.
- So A = QΛQᵀ with Q orthogonal — and Q⁻¹ = Qᵀ, which is free.
Read geometrically: a symmetric matrix is a pure scaling along a set of perpendicular axes. No rotation, no shear, no funny business. Find the axes and the transformation becomes trivial.
Definiteness from the spectrum
- all λ > 0
- Positive definite. Inertia tensors and covariance matrices of non-degenerate data. Energy is always positive.
- all λ ≥ 0
- Positive semi-definite. A degenerate direction exists — rank-deficient covariance, for instance.
- mixed signs
- Indefinite. In an optimization Hessian this means a saddle point.
- all λ < 0
- Negative definite. A maximum.
Symmetric matrices you meet constantly
- Inertia tensor — eigenvectors are the principal axes (section 08)
- Covariance — eigenvectors are the uncertainty ellipsoid axes; this is PCA
- Stiffness and mass matrices — eigenvectors are vibration modes (section 09)
- Hessians — eigenvalues give the local curvature in each direction
- JJᵀ — eigenvectors are the manipulability ellipsoid axes
- Graph Laplacians — the spectrum encodes connectivity
Change basis and the problem falls apart
Put the eigenvectors in the columns of P and the eigenvalues on the diagonal of D. This says: change into the eigenbasis, scale each axis independently, change back. A complicated coupled transformation becomes a list of independent one-dimensional ones.
What it buys you
Raising a matrix to a power becomes raising numbers to a power. That is why the long-run behaviour of a repeated linear process is dominated entirely by its largest eigenvalue — every other mode decays relative to it.
When it fails
Not every matrix is diagonalizable. If an eigenvalue is repeated but doesn't supply enough independent eigenvectors, the matrix is defective — press "defective" in the hero and note that both eigenvector lines collapse onto one.
Such matrices need the Jordan form instead. In practice they're a measure-zero set that numerical noise perturbs away from, but near-defective matrices are genuinely badly conditioned and the computed eigenvectors become unreliable.
Whether a system converges or explodes
For a linear system ẋ = Ax, the solution is x(t) = eAtx(0). Diagonalize and the state decomposes into independent modes, each evolving as eλt. Stability is then entirely a question about where the eigenvalues sit.
Continuous time · ẋ = Ax
- all Re(λ) < 0
- Asymptotically stable. Every mode decays. The system returns to equilibrium.
- any Re(λ) > 0
- Unstable. One growing mode is enough; it will eventually dominate everything.
- Re(λ) = 0
- Marginally stable. Undamped oscillation. Any modelling error decides which way it actually goes.
Discrete time · xk+1 = Axk
- all |λ| < 1
- Stable. The unit circle replaces the left half plane.
- any |λ| > 1
- Unstable. Grows geometrically.
- spectral radius
- max |λ| — the single number that decides it, and the convergence rate of every iterative method too.
Every digital controller lives here. A design that's stable in continuous time can be unstable once discretized at too low a rate.
Reading response quality off the eigenvalues
For a complex pair λ = −ζωn ± jωn√(1−ζ²), the position in the plane translates directly into the behaviour you'll see on a plot.
| Quantity | From the eigenvalue | What it tells you |
|---|---|---|
| natural frequency ωn | |λ| — distance from the origin | How fast the system fundamentally is |
| damping ratio ζ | −Re(λ) / |λ| — cosine of the angle from the negative real axis | How much it oscillates |
| damped frequency ωd | |Im(λ)| | The ringing frequency you actually observe |
| settling time (2%) | ≈ 4 / |Re(λ)| | How long until it's finished |
| overshoot | exp(−πζ / √(1−ζ²)) | How far past the target it goes |
ζ < 1 · underdamped
Overshoots and rings. ζ ≈ 0.7 is the usual target — fast, with about 5% overshoot.
ζ = 1 · critically damped
Fastest approach with no overshoot. Repeated real eigenvalue.
ζ > 1 · overdamped
Two distinct real eigenvalues, no oscillation, and sluggish — the slower pole dominates.
The inertia tensor, diagonalized
Rotational inertia isn't a number, it's a symmetric 3×3 tensor — a body resists rotation differently about different axes, and in general spinning about one axis produces torque about another. The eigenvectors are the axes where that coupling disappears.
What the decomposition says
Eigenvectors = principal axes. Three mutually perpendicular directions, guaranteed orthogonal because the tensor is symmetric. Spin about one of them and the angular momentum is parallel to the angular velocity — no wobble, no gyroscopic coupling.
Eigenvalues = principal moments of inertia. In principal-axis coordinates the tensor is diagonal and Euler's equations decouple into three much simpler ones. This is why every rigid-body dynamics implementation wants inertia expressed in the principal frame.
The intermediate axis theorem
Order the three principal moments I₁ < I₂ < I₃. Spinning about the smallest-moment axis is stable. Spinning about the largest-moment axis is stable. Spinning about the intermediate axis is unstable — the smallest perturbation grows and the body tumbles, flipping periodically.
Throw a book or a tennis racket spinning about its intermediate axis and it will flip. Cosmonaut Vladimir Dzhanibekov observed the effect on a wing nut in orbit and it carries his name. The proof is a linear stability analysis of Euler's equations — the intermediate axis gives one positive eigenvalue, and section 06 already told you what that means. It's also a genuine hazard for satellite and free-flying robot attitude control.
Mode shapes and natural frequencies
An undamped structure obeys Mq̈ + Kq = 0. Look for solutions where every point moves in phase at one frequency, q = φ ejωt, and you get a generalized eigenvalue problem.
Mode 1
Three equal masses, four equal springs, ends fixed. The eigenvalues and eigenvectors below are computed live by the Jacobi method — the exact shapes are (1, √2, 1), (1, 0, −1) and (1, −√2, 1).
What the decomposition gives you
- Eigenvalues are ω² — the squared natural frequencies. Where the structure will resonate.
- Eigenvectors are mode shapes — the relative deflection pattern at that frequency.
- Modes are orthogonal (with respect to M), so they don't exchange energy. Each behaves as an independent single-degree-of-freedom oscillator.
- Any motion is a superposition of modes. Press "a real disturbance" to see all three at once — which is what you actually observe.
Eigenvalues are not singular values
These get conflated constantly. They coincide in one important case and differ everywhere else.
| Eigendecomposition | SVD | |
|---|---|---|
| applies to | Square matrices only, and not all of them | Any matrix, including rectangular |
| always exists | No — defective matrices have no full set | Yes, always |
| gives | A = PDP⁻¹, P generally not orthogonal | A = UΣVᵀ, both U and V orthogonal |
| values can be | Negative or complex | Always real and non-negative |
| relationship | Singular values of A are the square roots of the eigenvalues of AᵀA | |
| coincide when | A is symmetric positive definite — then σᵢ = λᵢ exactly | |
Manipulability
The Jacobian J is rectangular, so it has no eigenvalues. Its singular values are what you want: they're the semi-axis lengths of the manipulability ellipsoid, describing how easily the end effector can move in each direction.
A singular value approaching zero is a singularity — a direction the arm cannot move in at all. Equivalently, the eigenvalues of JJᵀ approach zero, which is the same statement squared.
Condition number
The ratio of the ellipsoid's longest to shortest axis. Large κ means near-singular: inverting amplifies error by roughly that factor. This is the number behind ill-conditioned Jacobians producing enormous joint velocities, and behind damped least squares existing at all.
The same decomposition, other names
| Where | The matrix | What the eigen-decomposition means |
|---|---|---|
| PCA | Covariance of the data | Eigenvectors are the principal components; eigenvalues are the variance along each. Keep the largest few |
| Kalman filtering | State covariance P | Eigenvectors are the uncertainty ellipsoid axes — which directions you're least sure about |
| Optimization | Hessian | Eigenvalues are curvature per direction. Their ratio is the condition number that sets gradient descent's speed |
| Point clouds | Local scatter matrix | Smallest eigenvector is the surface normal; the eigenvalue spread distinguishes planes from edges from clutter |
| PageRank | Link transition matrix | The ranking is the dominant eigenvector, found by power iteration |
| Markov chains | Transition matrix | Stationary distribution is the eigenvector for λ = 1; the second eigenvalue sets the mixing rate |
| Spectral clustering | Graph Laplacian | Eigenvectors of the smallest non-zero eigenvalues reveal the cluster structure |
| Vibration testing | Measured FRF | Experimental modal analysis recovers mode shapes and frequencies from real hardware |
How it's actually done
import numpy as np # general square matrix — eigenvalues may be complex w, V = np.linalg.eig(A) # columns of V are the eigenvectors # SYMMETRIC matrix — always use this instead. faster, and guarantees # real eigenvalues and orthogonal eigenvectors instead of near-misses w, V = np.linalg.eigh(I_tensor) # ascending order # eigenvalues only, when you don't need the vectors w = np.linalg.eigvalsh(P) # generalized problem: K φ = ω² M φ (vibration modes) from scipy.linalg import eigh w2, phi = eigh(K, M) omega_n = np.sqrt(w2) # stability check for xdot = Ax stable = np.all(np.real(np.linalg.eigvals(A)) < 0) # discrete: spectral radius under 1 stable_d = np.max(np.abs(np.linalg.eigvals(Ad))) < 1 # principal axes from a CAD inertia tensor I_principal, R = np.linalg.eigh(I_tensor) # R rotates body → principal frame # manipulability: Jacobian is rectangular, so use SVD not eig U, s, Vt = np.linalg.svd(J) condition = s[0] / s[-1] # blows up near a singularity
The algorithms underneath
- QR algorithm
- The general workhorse. Repeatedly factor and recombine until the matrix goes triangular; the diagonal is then the spectrum. Never touches the characteristic polynomial.
- Jacobi
- For symmetric matrices — rotate away the largest off-diagonal entry, repeat. Simple, accurate, and what the vibration demo above runs.
- Power iteration
- Multiply by A and normalize, repeatedly. Converges to the dominant eigenvector at a rate set by |λ₂/λ₁|. Underlies PageRank.
- Lanczos / Arnoldi
- For very large sparse matrices where you only want a handful of extreme eigenvalues.
Drills
| # | Do this | You'll know it when |
|---|---|---|
| 1 | Compute 2×2 eigenvalues by hand using trace and determinant | You can classify a system's behaviour without a computer |
| 2 | Find the eigenvectors for each and verify Av = λv | The definition is muscle memory |
| 3 | Construct a matrix with complex eigenvalues and one that's defective | You know what breaks diagonalization |
| 4 | Diagonalize a symmetric matrix and confirm the eigenvectors are orthogonal | The spectral theorem is something you've checked |
| 5 | Compute Ak by diagonalizing, and watch the dominant eigenvalue take over | Long-run behaviour is obvious to you |
| 6 | Take an inertia tensor from CAD and extract principal axes and moments | You can populate a URDF inertial block correctly |
| 7 | Simulate the intermediate axis theorem with Euler's equations | You've watched a stability eigenvalue predict a tumble |
| 8 | Build M and K for a 3-mass chain and solve the generalized problem | Mode shapes come from a computation you performed |
| 9 | Design state feedback to place closed-loop poles at chosen locations | Poles and eigenvalues are one concept in your head |
| 10 | Compute a Jacobian's singular values across a workspace and plot the condition number | Singularities are visible before you drive into one |
| 11 | Implement power iteration and confirm the convergence rate against |λ₂/λ₁| | You understand why some iterative methods crawl |
The one-paragraph summary
An eigenvector of a matrix is a direction the matrix doesn't turn — applying the matrix merely scales it, by a factor called the eigenvalue. Because the transformation reduces to independent scalings along those directions, diagonalizing turns coupled problems into lists of one-dimensional ones, which is why the same decomposition appears everywhere something spreads, transforms, or evolves. Symmetric matrices — inertia tensors, covariances, stiffness matrices, Hessians — are the well-behaved case, guaranteed real eigenvalues and orthogonal eigenvectors by the spectral theorem, so they represent pure scaling along perpendicular axes. For a linear system ẋ = Ax the solution decomposes into modes evolving as eλt, so stability is exactly the question of whether every eigenvalue has a negative real part; in discrete time the criterion becomes magnitude under one, and placing poles is literally choosing where the closed-loop eigenvalues sit. Complex pairs mean oscillation, with the real part setting decay and the imaginary part setting frequency, from which damping ratio, overshoot and settling time follow directly. The eigenvectors of an inertia tensor are the principal axes that decouple rotational dynamics — and the fact that spinning about the intermediate one is unstable is a stability eigenvalue turning positive. The eigenvectors of a structure's stiffness-mass system are its vibration modes, whose lowest frequency usually caps how much control bandwidth you can ask for. Finally, eigenvalues are not singular values: the SVD applies to any matrix, always exists, and is what you need for a rectangular Jacobian.