23. Adv: generalized eigenvectors and Jordan canonical form

📖 Reading · 9 min
💡 Every code box below is live — edit it and hit Run.

§19.2 named the problem: a defective matrix has some eigenvalue with \operatorname{gm}<\operatorname{am}, leaving too few eigenvectors to diagonalize. This lesson gives the best fallback available — generalized eigenvectors fill the shortfall, and the resulting Jordan canonical form is, in a precise sense, as close to diagonal as any matrix can always be made.

Generalized eigenvectors

A generalized eigenvector of rank k for eigenvalue \lambda is a nonzero vector \vec v with

(A-\lambda I)^k\vec v=\vec0\quad\text{but}\quad(A-\lambda I)^{k-1}\vec v\neq\vec0

An ordinary eigenvector is the case k=1. A Jordan chain starting from a rank-k generalized eigenvector \vec v_k is built by repeatedly applying (A-\lambda I):

\vec v_{k-1}=(A-\lambda I)\vec v_k,\quad\vec v_{k-2}=(A-\lambda I)\vec v_{k-1},\ \ \dots,\ \ \vec v_1=(A-\lambda I)\vec v_2

ending at an ordinary eigenvector \vec v_1 (rank 1). This chain of vectors is always independent, and — critically — always exists: every eigenvalue's algebraic multiplicity can be filled out with chains of generalized eigenvectors, even when ordinary eigenvectors alone fall short. This is the fact diagonalization needed and didn't always have; generalized eigenvectors restore it unconditionally.

Jordan canonical form

Collecting Jordan chains for every eigenvalue into the columns of a matrix P produces

A=PJP^{-1}

where J is block diagonal, built from Jordan blocks

J_k(\lambda)=\begin{pmatrix}\lambda&1&&\\&\lambda&1&\\&&\ddots&\ddots\\&&&\lambda\end{pmatrix}

\lambda on the diagonal, 1s directly above it, zeros elsewhere. Every square matrix has a Jordan form, unique up to the order of its blocks — this is the general structure theorem diagonalization is the special case of: A is diagonalizable exactly when every Jordan block is 1\times1 (pure \lambda, no superdiagonal 1s at all), so J=D.

Reading off the multiplicities from J: for eigenvalue \lambda, \operatorname{am}(\lambda) is the total size of all \lambda's Jordan blocks combined, and \operatorname{gm}(\lambda) is the number of separate blocks for \lambda (one ordinary eigenvector per block, regardless of block size) — making §19.2's gap completely explicit: a single 3\times3 block for \lambda contributes \operatorname{am}=3 but only \operatorname{gm}=1.

Why it still matters

Jordan form preserves the single most useful application from §19.1: A^k=PJ^kP^{-1}, and a Jordan block's power has a known closed form (each superdiagonal entry picks up a binomial coefficient) — so even a defective matrix's powers, and the differential equations built from it (§13.8's phase-plane systems, when the coefficient matrix has a repeated eigenvalue with a missing eigenvector), stay computable in closed form, just with an extra polynomial-in-t term the diagonalizable case never needs.

Doing it in Python

import sympy as sp

A = sp.Matrix([[5, 1, 0], [0, 5, 1], [0, 0, 5]])  # single Jordan block, size 3
P, J = A.jordan_form()

print("J =")
for row in J.tolist():
    print(row)
print("\nP J P^-1 == A:", (P * J * P.inv()) == A)

print("\ngeometric multiplicity of 5:", len((A - 5*sp.eye(3)).nullspace()))
print("algebraic multiplicity of 5:", A.eigenvals()[5])
J =
[5, 1, 0]
[0, 5, 1]
[0, 0, 5]

P J P^-1 == A: True

geometric multiplicity of 5: 1
algebraic multiplicity of 5: 3

A matrix with a mixed structure — one 2\times2 block and one 1\times1 block for the same eigenvalue:

import sympy as sp

A = sp.Matrix([[2, 1, 0], [0, 2, 0], [0, 0, 2]])
P, J = A.jordan_form()

print("J =")
for row in J.tolist():
    print(row)
print("geometric multiplicity:", len((A - 2*sp.eye(3)).nullspace()),
      " (two blocks -> two ordinary eigenvectors)")
J =
[2, 1, 0]
[0, 2, 0]
[0, 0, 2]
geometric multiplicity: 2  (two blocks -> two ordinary eigenvectors)

Worked example

Find a Jordan chain for A=\begin{pmatrix}3&1\\0&3\end{pmatrix}.

\lambda=3 (repeated, algebraic multiplicity 2). A-3I=\begin{pmatrix}0&1\\0&0\end{pmatrix}.

Rank-1 (ordinary eigenvector): (A-3I)\vec v_1=\vec0\Rightarrow v_2=0. \vec v_1=(1,0) — and only one independent choice (\operatorname{gm}=1<2=\operatorname{am}, defective, matching §19.2's flagged example structurally).

Rank-2 (generalized): solve (A-3I)\vec v_2=\vec v_1=(1,0): \begin{pmatrix}0&1\\0&0\end{pmatrix}\vec v_2=\begin{pmatrix}1\\0\end{pmatrix}\Rightarrow (v_2)_2=1, (v_2)_1 free — take \vec v_2=(0,1).

\boxed{P=\begin{pmatrix}1&0\\0&1\end{pmatrix},\quad J=\begin{pmatrix}3&1\\0&3\end{pmatrix}}

Sanity check. Here P=I since A is already in Jordan form exactly (no change of basis was even needed) — confirming (A-3I)\vec v_2=\vec v_1 directly: \begin{pmatrix}0&1\\0&0\end{pmatrix}\begin{pmatrix}0\\1\end{pmatrix}=\begin{pmatrix}1\\0\end{pmatrix}=\vec v_1 ✓, exactly the defining chain relationship.

Your turn

1. A matrix has Jordan form with blocks J_2(3) and J_1(3). What are \operatorname{am}(3) and \operatorname{gm}(3)?

2. True or false: if A's Jordan form has only 1\times1 blocks, A is diagonalizable.

3. A 4\times4 matrix has a single eigenvalue \lambda=7 with \operatorname{am}=4,\operatorname{gm}=2. List the possible Jordan block size combinations.

Solutions

1. \operatorname{am}(3)=2+1=3 (total block sizes), \operatorname{gm}(3)=2 (number of blocks).

2. True. Only 1\times1 blocks means J has no superdiagonal 1s at all — J is diagonal, so A=PJP^{-1} is a diagonalization; this is exactly the "A diagonalizable \iff every Jordan block is 1\times1" statement above, restated as its own check.

3. Two blocks (since \operatorname{gm}=2) summing to size 4 (since \operatorname{am}=4): either two size-2 blocks (J_2(7)\oplus J_2(7)) or one size-1 and one size-3 block (J_1(7)\oplus J_3(7)) — the only two partitions of 4 into exactly 2 parts.

Check yourself in code

Find the Jordan form of A=\begin{pmatrix}4&1&0\\0&4&0\\0&0&4\end{pmatrix} and its geometric multiplicity.

Print exactly this:

J =
[4, 1, 0]
[0, 4, 0]
[0, 0, 4]
geometric multiplicity: 2
import sympy as sp

A = sp.Matrix([[4, 1, 0], [0, 4, 0], [0, 0, 4]])
P, J = A.jordan_form()
print("J =")
for row in J.tolist():
    print(row)
# print the geometric multiplicity of eigenvalue 4
import sympy as sp

A = sp.Matrix([[4, 1, 0], [0, 4, 0], [0, 0, 4]])
P, J = A.jordan_form()
print("J =")
for row in J.tolist():
    print(row)

gm = len((A - 4*sp.eye(3)).nullspace())
print("geometric multiplicity:", gm)

A generalized eigenvector of rank k satisfies (A-\lambda I)^k\vec v=\vec0 but not for k-1, and chains of them always exist, filling whatever shortfall §19.2's ordinary eigenvectors leave. Every matrix has a Jordan form A=PJP^{-1}, block-diagonal with \lambdas on the diagonal and 1s just above; diagonalization is the special case where every block has size 1.

Next, closing Module 19 with a genuinely surprising fact: every square matrix satisfies its own characteristic equation, no eigenvector or diagonalization required at all — the Cayley-Hamilton Theorem.