Chapter 2: Linear Algebra Foundations for Control
Lesson 3: Eigenvalues, Eigenvectors, and Diagonalization
This lesson formalizes eigenvalues and eigenvectors as intrinsic “directions” of a linear transformation and develops diagonalization as a coordinate change that reveals decoupled scalar actions. We emphasize rigorous proofs (existence, independence, orthogonality, and diagonalization criteria) and introduce computational workflows (including a from-scratch power iteration) that will later underpin modal reasoning in state-space models.
1. Conceptual Overview
Let \( A \in \mathbb{R}^{n\times n} \) represent a linear transformation (Lesson 2): \( T(\mathbf{x}) = A\mathbf{x} \). An eigenvector is a nonzero vector whose direction is preserved by \( A \), with only a scaling by an eigenvalue.
Eigenpair definition. A scalar \( \lambda \in \mathbb{C} \) is an eigenvalue of \( A \) if there exists \( \mathbf{v}\neq \mathbf{0} \) such that \( A\mathbf{v} = \lambda \mathbf{v} \). Then \( \mathbf{v} \) is an eigenvector associated with \( \lambda \).
In control engineering, eigenvalues will later appear as intrinsic “modes” of linear dynamics; diagonalization is the algebraic mechanism that can decouple those modes in a suitable coordinate basis (without yet invoking any state-space solution formulas).
flowchart TD
A["Input: square matrix A"] --> B["Solve det(A - lambda I) = 0"]
B --> C["Eigenvalues: lambda_1,...,lambda_m (with multiplicities)"]
C --> D["For each lambda: solve (A - lambda I) v = 0"]
D --> E["Eigenvectors / eigenspaces"]
E --> F{"Do we have n linearly \nindependent eigenvectors?"}
F -->|yes| G["Diagonalize: A = V D V^{-1}"]
F -->|no| H["Not diagonalizable (needs more structure later)"]
G --> I["Use diagonal form for powers, \nfunctions, and decoupled action"]
Throughout, we use the standard basis \( \{\mathbf{e}_1,\dots,\mathbf{e}_n\} \) and the identity matrix \( I \). We assume familiarity with determinants, rank/null space, and invertibility from Lesson 2.
2. Eigenvalues via the Characteristic Polynomial
The eigenvalue condition \( A\mathbf{v}=\lambda\mathbf{v} \) is equivalent to \( (A-\lambda I)\mathbf{v}=\mathbf{0} \) with \( \mathbf{v}\neq \mathbf{0} \). Thus, \( A-\lambda I \) must be singular.
Definition (characteristic polynomial). Define
\[ p_A(\lambda) \;=\; \det(A-\lambda I). \]
Theorem 2.1 (eigenvalues as roots). A scalar \( \lambda \) is an eigenvalue of \( A \) if and only if \( p_A(\lambda)=0 \).
Proof.
(⇒) If \( A\mathbf{v}=\lambda\mathbf{v} \) for some \( \mathbf{v}\neq \mathbf{0} \), then \( (A-\lambda I)\mathbf{v}=\mathbf{0} \), so \( A-\lambda I \) is singular and hence \( \det(A-\lambda I)=0 \).
(⇐) If \( \det(A-\lambda I)=0 \), then \( A-\lambda I \) is singular, so its null space is nontrivial: there exists \( \mathbf{v}\neq \mathbf{0} \) with \( (A-\lambda I)\mathbf{v}=\mathbf{0} \), i.e. \( A\mathbf{v}=\lambda\mathbf{v} \). □
Since \( p_A(\lambda) \) is a degree-\( n \) polynomial in \( \lambda \), the Fundamental Theorem of Algebra implies that \( A \) has \( n \) complex eigenvalues counting algebraic multiplicities.
Trace and determinant identities. If the eigenvalues (with multiplicity) are \( \lambda_1,\dots,\lambda_n \), then
\[ \operatorname{tr}(A) = \sum_{i=1}^n \lambda_i, \qquad \det(A) = \prod_{i=1}^n \lambda_i. \]
These follow by comparing coefficients of \( p_A(\lambda)=\det(A-\lambda I) \) to its factored form \( \prod_{i=1}^n (\lambda_i-\lambda) \) (up to a sign convention), a standard result from determinant expansions.
3. Eigenspaces, Multiplicity, and Linear Independence
For a fixed eigenvalue \( \lambda \), the set of all eigenvectors (plus the zero vector) forms a subspace:
Definition (eigenspace). The eigenspace associated with \( \lambda \) is
\[ \mathcal{E}_{\lambda}(A) \;=\; \ker(A-\lambda I). \]
The geometric multiplicity of \( \lambda \) is \( \dim(\mathcal{E}_\lambda(A)) \). The algebraic multiplicity is the multiplicity of \( \lambda \) as a root of \( p_A(\lambda) \).
Theorem 3.1 (basic inequality). For any eigenvalue \( \lambda \),
\[ 1 \;\le\; \dim(\mathcal{E}_{\lambda}(A)) \;\le\; \text{algmult}(\lambda). \]
The left inequality holds because an eigenvalue implies a nontrivial null space. The right inequality is deeper (and will be revisited when discussing canonical forms later); it is consistent with all standard constructions in finite-dimensional linear algebra.
Theorem 3.2 (independence of eigenvectors for distinct eigenvalues). If \( \lambda_1,\dots,\lambda_k \) are distinct eigenvalues of \( A \) with corresponding eigenvectors \( \mathbf{v}_1,\dots,\mathbf{v}_k \) (each nonzero), then \( \{\mathbf{v}_1,\dots,\mathbf{v}_k\} \) is linearly independent.
Proof. Suppose a linear combination satisfies
\[ c_1\mathbf{v}_1 + \cdots + c_k\mathbf{v}_k = \mathbf{0}. \]
Apply \( A \) to both sides and use \( A\mathbf{v}_i=\lambda_i\mathbf{v}_i \):
\[ c_1\lambda_1\mathbf{v}_1 + \cdots + c_k\lambda_k\mathbf{v}_k = \mathbf{0}. \]
Subtract \( \lambda_k \) times the original equation:
\[ c_1(\lambda_1-\lambda_k)\mathbf{v}_1 + \cdots + c_{k-1}(\lambda_{k-1}-\lambda_k)\mathbf{v}_{k-1} = \mathbf{0}. \]
Because the eigenvalues are distinct, each factor \( \lambda_i-\lambda_k \neq 0 \) for \( i=1,\dots,k-1 \). Thus we obtain a dependence relation among \( \mathbf{v}_1,\dots,\mathbf{v}_{k-1} \). By repeating this elimination step (or using induction on \( k \)), we conclude \( c_1=\cdots=c_k=0 \). Therefore the vectors are independent. □
A key takeaway is that “many distinct eigenvalues” immediately implies “many independent eigenvectors,” which is precisely what makes diagonalization likely.
4. Diagonalization: When and Why It Works
Diagonalization is a similarity representation that expresses a linear transformation in a basis of eigenvectors. It is the algebraic prototype of “decoupling” a linear action into independent scalar scalings.
Definition (diagonalizable matrix). A matrix \( A\in\mathbb{C}^{n\times n} \) is diagonalizable if there exist an invertible \( V \) and a diagonal \( D \) such that
\[ A = V D V^{-1}, \qquad D = \operatorname{diag}(\lambda_1,\dots,\lambda_n). \]
If \( V=[\mathbf{v}_1\,\cdots\,\mathbf{v}_n] \) collects eigenvectors and \( D \) collects the associated eigenvalues, then the identity \( AV=VD \) is equivalent to \( A\mathbf{v}_i = \lambda_i\mathbf{v}_i \) for each column.
Theorem 4.1 (diagonalization criterion). A matrix \( A \) is diagonalizable if and only if \( A \) has \( n \) linearly independent eigenvectors.
Proof.
(⇒) If \( A=VDV^{-1} \) with \( V \) invertible and \( D \) diagonal, write \( V=[\mathbf{v}_1\cdots\mathbf{v}_n] \). Then \( AV=VD \), so the \( i \)-th column gives \( A\mathbf{v}_i=\lambda_i\mathbf{v}_i \). Since \( V \) is invertible, its columns \( \mathbf{v}_i \) are linearly independent, hence we have \( n \) independent eigenvectors.
(⇐) If \( \mathbf{v}_1,\dots,\mathbf{v}_n \) are linearly independent eigenvectors with \( A\mathbf{v}_i=\lambda_i\mathbf{v}_i \), define \( V=[\mathbf{v}_1\cdots\mathbf{v}_n] \) and \( D=\operatorname{diag}(\lambda_1,\dots,\lambda_n) \). Then \( AV=VD \). Multiply by \( V^{-1} \) on the right to obtain \( A=VDV^{-1} \). □
Corollary 4.2 (distinct eigenvalues imply diagonalizable). If \( A \) has \( n \) distinct eigenvalues, then \( A \) is diagonalizable.
Proof. With distinct eigenvalues, Theorem 3.2 gives \( n \) linearly independent eigenvectors, and Theorem 4.1 applies. □
Algebraic payoff. If \( A=VDV^{-1} \), then for any integer \( k\ge 0 \),
\[ A^k = V D^k V^{-1}, \qquad D^k = \operatorname{diag}(\lambda_1^k,\dots,\lambda_n^k). \]
Proof is by associativity: \( A^2=(VDV^{-1})(VDV^{-1})=VD^2V^{-1} \), and induction completes the argument. This identity later becomes essential whenever matrix powers (or matrix functions) appear.
flowchart TD X["Vector x (standard coordinates)"] -->|"Change basis: z = inv(V) * x"| Z["Coordinates z (eigenvector basis)"] Z -->|"Diagonal action: w = D * z"| W["Scaled coordinates w"] W -->|"Return: y = V * w"| Y["Output y = A * x"] N["Interpretation: in eigenvector basis, \nA acts as independent scalings by lambda_i"] --- Z
5. Real Symmetric Matrices and the Spectral Theorem
A particularly important (and common) case is \( A=A^\top \). Symmetry yields stronger structure: real eigenvalues and orthogonal eigenvectors, enabling numerically stable diagonalization via orthonormal bases.
Lemma 5.1 (orthogonality for distinct eigenvalues). If \( A=A^\top \) and \( A\mathbf{v}_i=\lambda_i\mathbf{v}_i \), \( A\mathbf{v}_j=\lambda_j\mathbf{v}_j \) with \( \lambda_i\neq \lambda_j \), then \( \mathbf{v}_i^\top \mathbf{v}_j = 0 \).
Proof. Compute two ways:
\[ \mathbf{v}_i^\top A \mathbf{v}_j = \mathbf{v}_i^\top (\lambda_j \mathbf{v}_j) = \lambda_j \mathbf{v}_i^\top \mathbf{v}_j, \]
and using symmetry \( A^\top=A \):
\[ \mathbf{v}_i^\top A \mathbf{v}_j = (A^\top \mathbf{v}_i)^\top \mathbf{v}_j = (A\mathbf{v}_i)^\top \mathbf{v}_j = (\lambda_i \mathbf{v}_i)^\top \mathbf{v}_j = \lambda_i \mathbf{v}_i^\top \mathbf{v}_j. \]
Hence \( \lambda_j \mathbf{v}_i^\top \mathbf{v}_j = \lambda_i \mathbf{v}_i^\top \mathbf{v}_j \), so \( (\lambda_j-\lambda_i)\mathbf{v}_i^\top \mathbf{v}_j=0 \). Since \( \lambda_i\neq \lambda_j \), we conclude \( \mathbf{v}_i^\top \mathbf{v}_j=0 \). □
Theorem 5.2 (Spectral Theorem, real symmetric form). If \( A\in\mathbb{R}^{n\times n} \) and \( A=A^\top \), then there exists an orthogonal matrix \( Q \) (so \( Q^\top Q=I \)) and a real diagonal matrix \( \Lambda=\operatorname{diag}(\lambda_1,\dots,\lambda_n) \) such that
\[ A = Q \Lambda Q^\top. \]
Proof sketch (university-level, constructive idea).
Consider the Rayleigh quotient \( \rho(\mathbf{x})=\frac{\mathbf{x}^\top A \mathbf{x}}{\mathbf{x}^\top \mathbf{x}} \) for \( \mathbf{x}\neq \mathbf{0} \). On the unit sphere \( \{\mathbf{x}:\|\mathbf{x}\|_2=1\} \), \( \rho(\mathbf{x})=\mathbf{x}^\top A\mathbf{x} \) is continuous and attains a maximum at some \( \mathbf{q}_1 \) (compactness). Using Lagrange multipliers for the constrained maximization, one obtains \( A\mathbf{q}_1=\lambda_1 \mathbf{q}_1 \) with \( \lambda_1=\rho(\mathbf{q}_1)\in\mathbb{R} \).
Next, restrict \( A \) to the orthogonal complement of \( \mathbf{q}_1 \). By Lemma 5.1, this subspace is invariant under \( A \) in the sense needed to continue the construction. Apply the same argument inductively to obtain an orthonormal set \( \mathbf{q}_1,\dots,\mathbf{q}_n \) of eigenvectors. Let \( Q=[\mathbf{q}_1\cdots\mathbf{q}_n] \) and \( \Lambda=\operatorname{diag}(\lambda_1,\dots,\lambda_n) \). Then \( AQ=Q\Lambda \) and, since \( Q \) is orthogonal, \( A=Q\Lambda Q^\top \). □
The symmetric case is central in optimization and energy methods (later), because quadratic forms \( \mathbf{x}^\top A\mathbf{x} \) are diagonalized by orthogonal eigenbases without ill-conditioned inverses.
6. A First Iterative Algorithm: Power Iteration (From Scratch)
Beyond closed-form solutions for small matrices, eigenvalues are typically computed numerically. A conceptually simple starting point is power iteration, which approximates the dominant eigenpair under mild conditions.
Assumption (dominant eigenvalue). Suppose \( A \) has an eigenvalue \( \lambda_1 \) such that \( |\lambda_1| > |\lambda_2| \ge \cdots \ge |\lambda_n| \) (strict spectral gap), and the initial vector \( \mathbf{x}_0 \) has a nonzero component along the eigenvector associated with \( \lambda_1 \).
Algorithm (power iteration).
\[ \mathbf{x}_{k+1} \;=\; \frac{A\mathbf{x}_k}{\|A\mathbf{x}_k\|_2}, \qquad \hat{\lambda}_{k} \;=\; \mathbf{x}_k^\top A \mathbf{x}_k \quad (\text{Rayleigh estimate, symmetric case}). \]
Convergence statement (informal but precise). Under the spectral gap assumption,
\[ \mathbf{x}_k \;\rightarrow\; \pm \mathbf{v}_1 \quad\text{and}\quad \hat{\lambda}_k \;\rightarrow\; \lambda_1, \quad\text{with an error rate proportional to}\quad \left|\frac{\lambda_2}{\lambda_1}\right|^k. \]
The proof follows by expressing \( \mathbf{x}_0 \) in an eigenvector basis (when diagonalizable), observing \( A^k\mathbf{x}_0 \) scales components by \( \lambda_i^k \), and normalizing. We avoid deeper canonical-form details here; the diagonalizable case already makes the mechanism transparent via \( A^k = V D^k V^{-1} \) from Section 4.
7. Python Lab (NumPy/SciPy): Eigen-Decomposition and Power Iteration
Libraries commonly used in control workflows include
numpy and scipy.linalg. Here we: (i) compute
eigenvalues/eigenvectors, (ii) attempt diagonalization, and (iii)
implement power iteration from scratch.
import numpy as np
from numpy.linalg import norm
# Example matrix (choose one with real, distinct eigenvalues for clean diagonalization)
A = np.array([[4.0, 1.0, 0.0],
[1.0, 3.0, 1.0],
[0.0, 1.0, 2.0]])
# 1) Eigen-decomposition
w, V = np.linalg.eig(A) # w: eigenvalues, V: eigenvectors (columns)
print("Eigenvalues:", w)
print("Eigenvectors (columns):\n", V)
# 2) Diagonalization check: A ?= V D V^{-1}
D = np.diag(w)
A_recon = V @ D @ np.linalg.inv(V)
print("Reconstruction error ||A - VDV^{-1}||_F =", norm(A - A_recon, ord='fro'))
# 3) Symmetric case: orthogonal diagonalization using eigh (more stable for symmetric A)
ws, Q = np.linalg.eigh(A) # for symmetric matrices: real eigenvalues, orthonormal eigenvectors
Lambda = np.diag(ws)
A_recon2 = Q @ Lambda @ Q.T
print("Symmetric recon error ||A - QΛQ^T||_F =", norm(A - A_recon2, ord='fro'))
# 4) Power iteration (from scratch) for dominant eigenpair
def power_iteration(A, x0=None, max_iter=2000, tol=1e-10):
n = A.shape[0]
if x0 is None:
x = np.random.randn(n)
else:
x = np.array(x0, dtype=float).reshape(n)
x = x / norm(x)
lam_old = 0.0
for k in range(max_iter):
y = A @ x
x = y / norm(y)
# Rayleigh quotient estimate (works best when A is symmetric)
lam = float(x.T @ (A @ x))
if abs(lam - lam_old) < tol:
return lam, x, k+1
lam_old = lam
return lam, x, max_iter
lam_hat, v_hat, iters = power_iteration(A)
print("Power iteration: lambda_hat =", lam_hat, "iters =", iters)
print("v_hat =", v_hat)
Practical note: for real symmetric matrices, prefer
eigh (or scipy.linalg.eigh) because it
exploits symmetry for improved numerical stability and guarantees real
outputs when \( A=A^\top \).
8. C++ Lab: Eigen-Decomposition (Eigen Library) and Power Iteration
A widely used C++ linear algebra library is Eigen. The snippet below computes eigenvalues/eigenvectors for a symmetric matrix, then implements power iteration from scratch.
#include <iostream>
#include <Eigen/Dense>
int main() {
Eigen::MatrixXd A(3,3);
A << 4.0, 1.0, 0.0,
1.0, 3.0, 1.0,
0.0, 1.0, 2.0;
// 1) Symmetric eigendecomposition (spectral theorem scenario)
Eigen::SelfAdjointEigenSolver<Eigen::MatrixXd> es(A);
if (es.info() != Eigen::Success) {
std::cerr << "Eigen decomposition failed." << std::endl;
return 1;
}
std::cout << "Eigenvalues:\n" << es.eigenvalues() << "\n";
std::cout << "Eigenvectors (columns):\n" << es.eigenvectors() << "\n";
// 2) Reconstruct A = Q Λ Q^T
Eigen::MatrixXd Q = es.eigenvectors();
Eigen::MatrixXd Lambda = es.eigenvalues().asDiagonal();
Eigen::MatrixXd Arec = Q * Lambda * Q.transpose();
std::cout << "Reconstruction error (Frobenius): "
<< (A - Arec).norm() << "\n";
// 3) Power iteration from scratch
Eigen::VectorXd x = Eigen::VectorXd::Random(3);
x.normalize();
double lam_old = 0.0;
const int max_iter = 2000;
const double tol = 1e-10;
for (int k = 0; k < max_iter; ++k) {
Eigen::VectorXd y = A * x;
x = y.normalized();
double lam = x.transpose() * A * x; // Rayleigh estimate (best for symmetric A)
if (std::abs(lam - lam_old) < tol) {
std::cout << "Power iteration converged in " << (k+1) << " iterations.\n";
std::cout << "lambda_hat = " << lam << "\n";
std::cout << "v_hat^T = " << x.transpose() << "\n";
break;
}
lam_old = lam;
}
return 0;
}
Control-related libraries in C++ ecosystems often build on such linear algebra kernels; Eigen is a typical dependency for state-space tooling, simulation, estimation, and optimization stacks.
9. Java Lab: Eigen-Decomposition (EJML) and Power Iteration
In Java, a practical numerical linear algebra option is EJML. The following shows: (i) eigen-decomposition for a real matrix (general case), and (ii) a from-scratch power iteration.
import org.ejml.data.DMatrixRMaj;
import org.ejml.dense.row.CommonOps_DDRM;
import org.ejml.dense.row.NormOps_DDRM;
import org.ejml.dense.row.factory.DecompositionFactory_DDRM;
import org.ejml.interfaces.decomposition.EigenDecomposition_F64;
public class EigenLesson {
public static void main(String[] args) {
// Example matrix
DMatrixRMaj A = new DMatrixRMaj(new double[][]{
{4.0, 1.0, 0.0},
{1.0, 3.0, 1.0},
{0.0, 1.0, 2.0}
});
// 1) Eigen-decomposition (general; eigenvectors may be complex in general problems)
EigenDecomposition_F64<DMatrixRMaj> eig =
DecompositionFactory_DDRM.eig(A.numRows, true);
if (!eig.decompose(A)) {
System.out.println("Eigendecomposition failed.");
return;
}
System.out.println("Eigenvalues:");
for (int i = 0; i < A.numRows; i++) {
System.out.println(" " + eig.getEigenvalue(i));
}
// 2) Power iteration (from scratch) for dominant eigenpair (works well with spectral gap)
DMatrixRMaj x = new DMatrixRMaj(A.numRows, 1);
for (int i = 0; i < A.numRows; i++) x.set(i, 0, Math.random());
normalize2(x);
double lamOld = 0.0;
int maxIter = 2000;
double tol = 1e-10;
DMatrixRMaj y = new DMatrixRMaj(A.numRows, 1);
for (int k = 0; k < maxIter; k++) {
CommonOps_DDRM.mult(A, x, y);
normalize2(y);
// Rayleigh quotient lambda = x^T A x (reuse y = A x if desired)
CommonOps_DDRM.mult(A, y, x); // x <- A*y (temporary)
double lam = dot(y, x); // y^T (A y)
// restore x to current normalized eigenvector estimate:
x.set(y);
if (Math.abs(lam - lamOld) < tol) {
System.out.println("Power iteration converged in " + (k+1) + " iterations.");
System.out.println("lambda_hat = " + lam);
System.out.println("v_hat (approx) = ");
x.print();
break;
}
lamOld = lam;
}
}
static double dot(DMatrixRMaj a, DMatrixRMaj b) {
double s = 0.0;
for (int i = 0; i < a.getNumElements(); i++) s += a.get(i) * b.get(i);
return s;
}
static void normalize2(DMatrixRMaj v) {
double n2 = NormOps_DDRM.normF(v);
if (n2 > 0) CommonOps_DDRM.scale(1.0 / n2, v);
}
}
For control-focused Java stacks, EJML (or Apache Commons Math) typically provides the eigenvalue routines used for stability checks, model transformations, and numerical conditioning diagnostics.
10. MATLAB / Simulink Lab: eig, Orthogonal Diagonalization, and a Simple Block Workflow
MATLAB provides robust eigenvalue solvers via eig (general)
and specialized routines for symmetric matrices. Below we compute
\( A=VDV^{-1} \) and
\( A=Q\Lambda Q^\top \) (when symmetric), then
implement power iteration from scratch.
% Example matrix
A = [4 1 0;
1 3 1;
0 1 2];
% 1) General eigen-decomposition
[V,D] = eig(A);
disp('Eigenvalues (diag(D)) = '); disp(diag(D));
disp('Check ||A - VDV^{-1}||_F = '); disp(norm(A - V*D/V, 'fro'));
% 2) Symmetric case: orthogonal diagonalization (A is symmetric here)
[Q,Lambda] = eig((A + A')/2);
disp('Check ||A - QΛQ^T||_F = '); disp(norm(A - Q*Lambda*Q', 'fro'));
% 3) Power iteration from scratch
x = randn(size(A,1),1);
x = x / norm(x);
lam_old = 0;
tol = 1e-10;
maxIter = 2000;
for k = 1:maxIter
y = A*x;
x = y / norm(y);
lam = x' * A * x; % Rayleigh estimate
if abs(lam - lam_old) < tol
fprintf('Converged in %d iterations\\n', k);
fprintf('lambda_hat = %.12f\\n', lam);
disp('v_hat = '); disp(x);
break;
end
lam_old = lam;
end
Simulink note (minimal workflow consistent with this chapter).
Without requiring state-space modeling yet, you can still integrate
eigen-computation into a model: use a Constant block to
output a matrix \( A \), feed it into a
MATLAB Function block that calls eig, and
route the eigenvalues to a Display or
To Workspace block.
% MATLAB Function block code (input: A, output: lam)
function lam = fcn(A)
%#codegen
lam = eig(A);
end
Later chapters will use eigenvalues as diagnostic quantities for dynamic
matrices (e.g., checking intrinsic stability properties), but the
computational core is the same: eig or structured solvers
when symmetry or other structure is present.
11. Wolfram Mathematica Lab: Eigensystem, Diagonalization, and Verification
Mathematica provides symbolic and numeric eigen-analysis. The following demonstrates eigenpairs, diagonalization, and reconstruction checks.
A = { {4, 1, 0},
{1, 3, 1},
{0, 1, 2} };
(* 1) Eigenvalues and eigenvectors *)
{vals, vecs} = Eigensystem[A];
vals
vecs
(* 2) Construct V and D and verify A == V D V^{-1} *)
V = Transpose[vecs]; (* columns are eigenvectors *)
D = DiagonalMatrix[vals];
Arec = V . D . Inverse[V];
Norm[A - Arec, "Frobenius"]
(* 3) For symmetric A: orthonormal eigenvectors can be enforced *)
vecsOrtho = Orthogonalize[vecs];
Q = Transpose[vecsOrtho];
Lambda = DiagonalMatrix[Diagonal[Transpose[Q].A.Q]];
Norm[A - Q . Lambda . Transpose[Q], "Frobenius"]
(* 4) Power iteration from scratch *)
powerIteration[A_, x0_, maxIter_:2000, tol_:10^-10] := Module[
{x = x0/Norm[x0], lamOld = 0, lam = 0, y, k},
For[k = 1, k <= maxIter, k++,
y = A.x;
x = y/Norm[y];
lam = x.(A.x); (* Rayleigh estimate *)
If[Abs[lam - lamOld] < tol, Return[{lam, x, k}]];
lamOld = lam;
];
{lam, x, maxIter}
];
{lamHat, vHat, iters} = powerIteration[A, RandomReal[NormalDistribution[0,1], 3]];
lamHat
vHat
iters
12. Problems and Solutions
Problem 1 (Eigenvalue condition via singularity). Prove that \( \lambda \) is an eigenvalue of \( A \) if and only if \( A-\lambda I \) is singular.
Solution. If \( A\mathbf{v}=\lambda\mathbf{v} \) with \( \mathbf{v}\neq \mathbf{0} \), then \( (A-\lambda I)\mathbf{v}=\mathbf{0} \), so the null space is nontrivial and the matrix is singular. Conversely, if \( A-\lambda I \) is singular, there exists \( \mathbf{v}\neq \mathbf{0} \) with \( (A-\lambda I)\mathbf{v}=\mathbf{0} \), hence \( A\mathbf{v}=\lambda\mathbf{v} \). □
Problem 2 (Independence of distinct-eigenvalue eigenvectors). Let \( A\in\mathbb{C}^{n\times n} \) and suppose \( A\mathbf{v}_i=\lambda_i\mathbf{v}_i \) with \( \lambda_i\neq \lambda_j \) for \( i\neq j \). Prove \( \mathbf{v}_1,\dots,\mathbf{v}_k \) are linearly independent.
Solution. Use the elimination argument in Theorem 3.2: assume a dependence relation, apply \( A \), subtract \( \lambda_k \) times the original relation, and induct to conclude all coefficients are zero. □
Problem 3 (Diagonalization criterion). Show that \( A \) is diagonalizable if and only if \( \mathbb{C}^n \) has a basis of eigenvectors of \( A \).
Solution. If \( A=VDV^{-1} \), columns of \( V \) are eigenvectors forming a basis. Conversely, if eigenvectors form a basis, assemble them into \( V \), define \( D \) with corresponding eigenvalues, and obtain \( AV=VD \Rightarrow A=VDV^{-1} \). □
Problem 4 (Orthogonality in the symmetric case). Let \( A=A^\top \) and \( A\mathbf{v}_1=\lambda_1\mathbf{v}_1 \), \( A\mathbf{v}_2=\lambda_2\mathbf{v}_2 \) with \( \lambda_1\neq \lambda_2 \). Prove \( \mathbf{v}_1^\top\mathbf{v}_2=0 \).
Solution. Compare \( \mathbf{v}_1^\top A\mathbf{v}_2 \) computed as \( \lambda_2\mathbf{v}_1^\top\mathbf{v}_2 \) and via symmetry as \( (A\mathbf{v}_1)^\top\mathbf{v}_2=\lambda_1\mathbf{v}_1^\top\mathbf{v}_2 \). Subtract to get \( (\lambda_2-\lambda_1)\mathbf{v}_1^\top\mathbf{v}_2=0 \), hence orthogonality. □
Problem 5 (Power iteration rate in the diagonalizable case). Assume \( A=VDV^{-1} \) with \( D=\operatorname{diag}(\lambda_1,\dots,\lambda_n) \) and \( |\lambda_1| > |\lambda_2| \ge \cdots \). Let \( \mathbf{x}_0 \) satisfy \( \mathbf{x}_0 = V\mathbf{c} \) with \( c_1\neq 0 \). Show that the normalized iterates of power iteration converge in direction to the eigenvector of \( \lambda_1 \) at a rate proportional to \( \left|\frac{\lambda_2}{\lambda_1}\right|^k \).
Solution. Since \( \mathbf{x}_0=V\mathbf{c} \),
\[ A^k\mathbf{x}_0 = VD^kV^{-1}V\mathbf{c} = V D^k \mathbf{c} = c_1\lambda_1^k\mathbf{v}_1 + \sum_{i=2}^n c_i\lambda_i^k\mathbf{v}_i. \]
Factor out \( \lambda_1^k \):
\[ A^k\mathbf{x}_0 = \lambda_1^k\left(c_1\mathbf{v}_1 + \sum_{i=2}^n c_i\left(\frac{\lambda_i}{\lambda_1}\right)^k\mathbf{v}_i\right). \]
Because \( \left|\frac{\lambda_i}{\lambda_1}\right| \le \left|\frac{\lambda_2}{\lambda_1}\right| < 1 \) for \( i\ge 2 \), the non-dominant terms decay geometrically. Normalization removes the scalar \( \lambda_1^k \), leaving direction convergence to \( \mathbf{v}_1 \) with rate controlled by \( \left|\frac{\lambda_2}{\lambda_1}\right|^k \). □
13. Summary
We defined eigenvalues/eigenvectors via the singularity of \( A-\lambda I \), established core structural results (eigenspaces, multiplicities, independence for distinct eigenvalues), and proved the diagonalization criterion \( A=VDV^{-1} \) precisely when \( n \) independent eigenvectors exist. For symmetric matrices, we proved orthogonality and outlined the spectral theorem \( A=Q\Lambda Q^\top \). Finally, we implemented eigen-analysis across Python, C++, Java, MATLAB/Simulink, and Mathematica, including a from-scratch power iteration.
14. References
- Bauer, F.L., & Fike, C.T. (1960). Norms and exclusion theorems. Numerische Mathematik, 2, 137–141.
- Wilkinson, J.H. (1965). The Algebraic Eigenvalue Problem. Oxford University Press. (Monograph foundational to perturbation theory and eigenvalue computation.)
- Golub, G.H., & Kahan, W. (1965). Calculating the singular values and pseudo-inverse of a matrix. Journal of the Society for Industrial and Applied Mathematics, Series B: Numerical Analysis, 2(2), 205–224.
- Householder, A.S. (1958). Unitary triangularization of a nonsymmetric matrix. Journal of the ACM, 5(4), 339–342.
- Francis, J.G.F. (1961). The QR transformation: A unitary analogue to the LR transformation—Part 1. The Computer Journal, 4(3), 265–271.
- Francis, J.G.F. (1962). The QR transformation—Part 2. The Computer Journal, 4(4), 332–345.
- Kahan, W. (1966). Numerical analysis of eigenvalues and eigenvectors. Various journal contributions (early rigorous foundations of numerical stability for eigenproblems).
- Trefethen, L.N. (1997). Pseudospectra of matrices. SIAM Review, 39(3), 383–406.
- Stewart, G.W. (1990). Matrix perturbation theory. Academic Press. (Monograph; theoretical perturbation bounds and eigen-structure sensitivity.)
- Demmel, J.W. (1987). The condition number of equivalence transformations that block diagonalize matrix pencils. SIAM Journal on Numerical Analysis, 24(3), 599–610.