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.

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.