Jordan Normal Form
The canonical form for matrices that cannot be diagonalized
Historical Context
Camille Jordan introduced the canonical form bearing his name in his 1870 Traité des substitutions et des équations algébriques, though Karl Weierstrass had independently developed equivalent results for matrix pencils. The Jordan form provides the finest invariant structure theory for linear operators: it classifies all matrices up to similarity, answering the fundamental question of when two matrices represent the same linear transformation in different bases.
While the Jordan form is theoretically crucial, it is numerically unstable—small perturbations can change the Jordan structure entirely. This led to the development of the Schur form and other numerically stable alternatives. Nevertheless, the Jordan form remains indispensable for theoretical analysis of matrix functions, differential equations, and control theory.
3.1 Generalized Eigenvectors
Definition: Generalized Eigenvector
A vector $v \neq 0$ is a generalized eigenvector of $A$ corresponding to $\lambda$ of rank $m$ if $(A - \lambda I)^m v = 0$ but $(A - \lambda I)^{m-1} v \neq 0$.
A Jordan chain of length $m$ starting from $v_m$ is the sequence$v_1, v_2, \ldots, v_m$ where $v_k = (A - \lambda I)^{m-k}v_m$, satisfying$(A - \lambda I)v_1 = 0$ and $(A - \lambda I)v_{k+1} = v_k$ for each $k$.
The generalized eigenspace is $G_\lambda = \ker(A - \lambda I)^n$. The dimension of$G_\lambda$ equals the algebraic multiplicity of $\lambda$, and the entire space decomposes as $V = G_{\lambda_1} \oplus \cdots \oplus G_{\lambda_k}$.
3.2 Jordan Blocks and Jordan Matrix
Definition: Jordan Block
A Jordan block $J_m(\lambda)$ of size $m$ is the $m \times m$ matrix with$\lambda$ on the diagonal and $1$s on the superdiagonal:
Theorem (Jordan Normal Form)
Every matrix $A \in \mathbb{C}^{n \times n}$ is similar to a block-diagonal matrix$J = P^{-1}AP = \text{diag}(J_{m_1}(\lambda_1), \ldots, J_{m_r}(\lambda_r))$, where the Jordan blocks are unique up to permutation.
3.3 Computing the Jordan Form
The Jordan structure is determined by the ranks of successive powers of $(A - \lambda I)$:
- Number of Jordan blocks for $\lambda$ = $\dim\ker(A - \lambda I)$ (geometric multiplicity)
- Number of blocks of size $\geq k$ = $\dim\ker(A - \lambda I)^k - \dim\ker(A - \lambda I)^{k-1}$
- Largest block size = smallest $m$ such that $\ker(A - \lambda I)^m = G_\lambda$
The minimal polynomial $m_A(\lambda)$ is the monic polynomial of smallest degree annihilating $A$. Its factorization $m_A(\lambda) = \prod(\lambda - \lambda_i)^{s_i}$ gives the sizes of the largest Jordan blocks: $s_i$ is the size of the largest block for $\lambda_i$.
3.4 Matrix Functions via Jordan Form
For any analytic function $f$, the value on a Jordan block is:
For the matrix exponential $e^{tJ_m(\lambda)}$, the $(i,j)$ entry (with $j \geq i$) is:
This shows that defective eigenvalues produce polynomial-times-exponential behavior in ODE solutions $x(t) = e^{tA}x_0$, explaining the secular growth phenomenon in resonant systems.
3.5 Primary Decomposition Theorem
Theorem (Primary Decomposition)
If the characteristic polynomial factors as $\chi_A(\lambda) = \prod_{i=1}^k (\lambda - \lambda_i)^{n_i}$, then $V = G_{\lambda_1} \oplus \cdots \oplus G_{\lambda_k}$ where $G_{\lambda_i} = \ker(A - \lambda_i I)^{n_i}$and each $G_{\lambda_i}$ is $A$-invariant with $\dim G_{\lambda_i} = n_i$.
The primary decomposition is the conceptual foundation of the Jordan form. Each generalized eigenspace $G_{\lambda_i}$ is further decomposed into cyclic subspaces corresponding to individual Jordan chains, yielding the block diagonal structure. This decomposition is related to the Chinese Remainder Theorem in algebra and extends to modules over principal ideal domains.
Computational Laboratory
This simulation constructs Jordan blocks, computes their powers, demonstrates generalized eigenvectors, evaluates matrix exponentials via the Jordan form, and solves ODE systems with defective coefficient matrices.
Jordan Normal Form: Structure and Applications
PythonClick Run to execute the Python code
Code will be executed with Python 3 on the server