Sometimes, a matrix is “ugly”—it is filled with dense numbers that obscure the underlying physics or logic of the system. Canonical forms are the “simplest” possible representations of a linear operator. By changing our basis, we can reveal the true nature of the transformation.
Why Canonical Forms?
If you are studying a physical system, like a vibrating string or a chemical reaction, the equations are often coupled (everything depends on everything else). A canonical form decouples the system.
The most famous canonical form is the Diagonal Form. If a matrix is diagonalizable, it means there exists a basis where the operator simply scales each axis independently.
The Jordan Normal Form
What happens if a matrix is not diagonalizable? This occurs when there are not enough eigenvectors (the matrix is “defective”).
The Jordan Normal Form (JNF) is the best we can do for any square matrix. It decomposes the operator into Jordan Blocks on the diagonal:
Everything off the block is zero. Inside the block, we have the eigenvalue on the diagonal and 1s just above it. These 1s represent “coupling” that cannot be removed.
Practical Use: Stability Analysis
In control theory, we look at the JNF to determine if a system will explode or settle.
If the eigenvalues have negative real parts, the system is stable.
If we have a Jordan block with and a 1 above it, the system might grow linearly over time (), which could be problematic!
Interactive Lab
import sympy as sp
# Define a 'defective' matrix (not diagonalizable)
A = sp.Matrix([[5, 4, 3],
[-1, 0, -3],
[1, -2, 1]])
# Compute Jordan Normal Form
P, J = A.jordan_form()
print("Original Matrix A:")
sp.pprint(A)
print("\nJordan Normal Form J:")
sp.pprint(J)
print("\nSimilarity Matrix P (Basis change):")
sp.pprint(P)
# Verify A = PJP^-1
assert A == P * J * P.inv()
print("\nVerification Successful: A = PJP^-1")
python
1import sympy as sp
2
3# Define a 'defective' matrix (not diagonalizable)
4A = sp.Matrix([[5, 4, 3],
5[-1, 0, -3],
6[1, -2, 1]])
7
8# Compute Jordan Normal Form
9P, J = A.jordan_form()
10
11print("Original Matrix A:")
12sp.pprint(A)
13
14print("\nJordan Normal Form J:")
15sp.pprint(J)
16
17print("\nSimilarity Matrix P (Basis change):")
18sp.pprint(P)
19
20# Verify A = PJP^-1
21assert A == P * J * P.inv()
22print("\nVerification Successful: A = PJP^-1")
23
Rational Canonical Form
The Jordan form requires complex numbers (to find all roots of the characteristic polynomial). If we want to stay within the field of rational numbers or real numbers , we use the Rational Canonical Form (also known as the Frobenius map).
Instead of eigenvalues, this form uses Invariant Factors—polynomials that divide each other. This is deeply connected to the structure theory of modules over a Principal Ideal Domain (PID).
Exercises
Knowledge Check
When is a matrix guaranteed to be diagonalizable?
Answer: When it has n distinct eigenvalues.
If an n x n matrix has n distinct eigenvalues, its eigenvectors are guaranteed to be linearly independent, forming a basis that diagonalizes the matrix.
When is a matrix guaranteed to be diagonalizable?
Knowledge Check
In a Jordan block, what do the 1s above the diagonal represent?
Answer: A failed removal of coupling between variables.
The super-diagonal 1s appear when the geometric multiplicity of an eigenvalue is less than its algebraic multiplicity. They represent irreducible interactions between dimensions.
In a Jordan block, what do the 1s above the diagonal represent?
Knowledge Check
Which canonical form is most useful for solving systems of linear differential equations?
Answer: Jordan Normal Form
JNF allows us to compute the matrix exponential e^{At} easily, which is the general solution to the system x' = Ax.
Which canonical form is most useful for solving systems of linear differential equations?