Controllability
We can write down the dynamics \dot{x} = Ax + Bu and a cost — but
before optimising anything we must ask a blunter question: can the control reach the states we
care about at all? Controllability asks exactly this. A system is
controllable if some control u(\cdot) can steer the state from
any starting point x_0 to any target
x_1 in finite time. If not, some part of the state is forever beyond
our reach, and no controller — however clever — can move it.
The controllability matrix
Remarkably, this dynamic question has a purely algebraic answer. The control enters through
B; the dynamics then propagate that influence through
A, so the directions the control can ultimately affect are spanned
by B,
AB,
A^2B, and so on. By the Cayley–Hamilton theorem nothing new appears
past the (n-1)-th power, so we collect exactly
n blocks into the controllability matrix:
\mathcal{C} = \begin{bmatrix} B & AB & A^2B & \cdots & A^{n-1}B \end{bmatrix}.
The reachable set is the column space of \mathcal{C}. We can reach
all of \mathbb{R}^n exactly when those columns span the whole space —
that is, when \mathcal{C} has full
rank:
(A, B) \text{ controllable} \iff \operatorname{rank}\,\mathcal{C} = n.
A worked 2×2 — and one that fails
Take the system with
A = \begin{bmatrix} 0 & 1 \\ -\tfrac12 & -\tfrac32 \end{bmatrix}, \qquad B = \begin{bmatrix} 0 \\ 1 \end{bmatrix}.
Step 1 — form AB.
AB = \begin{bmatrix} 0 & 1 \\ -\tfrac12 & -\tfrac32 \end{bmatrix}\begin{bmatrix} 0 \\ 1 \end{bmatrix} = \begin{bmatrix} 1 \\ -\tfrac32 \end{bmatrix}.
Step 2 — stack and take the determinant. For a
2\times2 system \mathcal{C} = [\,B \ \ AB\,]
is square, so full rank means non-zero determinant:
\mathcal{C} = \begin{bmatrix} 0 & 1 \\ 1 & -\tfrac32 \end{bmatrix}, \qquad \det \mathcal{C} = (0)(-\tfrac32) - (1)(1) = -1 \neq 0.
Step 3 — conclude. \det \mathcal{C} \neq 0, so
\operatorname{rank}\mathcal{C} = 2 = n: the system is
controllable.
A failure. Now keep the same A but push along an
eigenvector, B = \begin{bmatrix} 1 \\ -1 \end{bmatrix}
(with A B = \begin{bmatrix} -1 \\ 1 \end{bmatrix} = -B, since
\lambda = -1 here). Then
\mathcal{C} = \begin{bmatrix} 1 & -1 \\ -1 & 1 \end{bmatrix}, \qquad \det \mathcal{C} = (1)(1) - (-1)(-1) = 0.
The rank drops to 1: every column is a multiple of
B, so the control only ever pushes the state along the single line
through (1, -1). The whole orthogonal direction is
unreachable — the system is not controllable. Pushing along an
eigenvector traps you on that eigenline.
- The controllability matrix is
\mathcal{C} = [\,B \ \ AB \ \ A^2B \ \cdots \ A^{n-1}B\,].
- (A, B) is controllable
\iff \operatorname{rank}\mathcal{C} = n (full rank).
- For a single-input 2\times2 system this is just
\det[\,B \ \ AB\,] \neq 0.
- The continuous-time version is the controllability Gramian
W_c(t) = \int_0^t e^{As} B B^{\mathsf{T}} e^{A^{\mathsf{T}}s}\,ds;
the system is controllable iff W_c(t) \succ 0.
Span the plane, or not
Fix A = \begin{bmatrix} 0 & 1 \\ -\tfrac12 & -\tfrac32 \end{bmatrix}
and steer the input vector B = (b_1, b_2) with the sliders. The
diagram draws the two reachable directions B and
AB as arrows. When they point in different directions they
span the plane — \det\mathcal{C} \neq 0, full rank, the verdict turns
green and the system is controllable. Line B up with an eigenvector
of A (try (1, -1) or
(2, -1)) and AB collapses onto
B: the arrows become collinear,
\det\mathcal{C} = 0, and a whole direction goes unreachable.
The rank condition is due to Rudolf Kálmán, who introduced controllability (and its dual,
observability) around 1960 and made them the organising concepts of modern control. Before
him, control was a frequency-domain art of transfer functions; Kálmán's state-space rank
tests turned “can this design even work?” into a finite linear-algebra
computation you run once, before spending any effort on the controller. A famous
consequence: a system can be perfectly stable yet have an uncontrollable mode you can never
influence — so checking \operatorname{rank}\mathcal{C} = n is the
honest first question to ask of any plant.