Can the input steer the state anywhere it likes? Kalman gave the yes/no test: stack the input direction and its echoes through the dynamics — C = [B, AB, A²B, … Aⁿ⁻¹B] — and the reach is full iff that matrix has rank n. Down the center, data flows: a system goes in, the engine computes the reachable subspace, the verdict comes out. The blue team builds and defends it; the red team tries to break it.
source Kalman, Contributions to the Theory of Optimal Control (1960), Bol. Soc. Mat. Mexicana 5, 102–119 — no stable DOI; mirror ee.iitb.ac.in/~belur/ee640/optimal-classic-paper.pdf. Rendered, not quoted.
A linear system ẋ = Ax + Bu lives in n-dimensional state space. From a standstill, one push of u moves you along B; the dynamics then carry that push into AB, then A²B, and so on. The whole set of directions you can build up is the column span of C = [B, AB, …, Aⁿ⁻¹B].
The Cayley–Hamilton theorem stops the list at n−1: higher powers add nothing new. So the reachable subspace is exactly rank(C) dimensions, and the system is controllable ⇔ rank(C) = n — every corner of the space is attainable.
Live, for the selected system:
| quantity | value |
|---|
Controllability is the reachability of the-state-space — Kalman's other 1960 gift, the idea that a system is its internal state, not just its transfer function.
It is the precondition two neighbours quietly assume: the-pole-placement can move every eigenvalue by feedback only if the pair is controllable, and the-lqr optimal regulator needs it (or at least stabilizability) for its Riccati solution to stabilize. Each sphere is the next one's licence to operate.
The blue team's live check: recompute rank(C) by exact elimination, cross-check the PBH test at every eigenvalue, and confirm the controllable pair really is full-rank while the decoupled pair is deficient. If red tampers, this badge is where it shows.
A system is a pair of matrices: A (n×n, the internal dynamics) and B (n×1 here, where the input pushes). Two 2×2 systems are wired in, both with eigenvalues −1 and −2 — same dynamics, different input coupling:
| system | A | B | coupling |
|---|---|---|---|
| controllable | [[0,1],[−2,−3]] | [0,1]ᵀ | both modes |
| uncontrollable | [[−1,0],[0,−2]] | [1,0]ᵀ | mode −2 dead |
The first is in companion form (always controllable for single input). The second is diagonal: the input touches the −1 mode and never the −2 mode — a whole direction the hand cannot reach. Feed either into the panel.
Drive from x0 = [1, 0] to xf in T = 2s, using the input built from the controllability Gramian. If the system is uncontrollable the Gramian is singular and no such input exists.
Rank, PBH ranks, Gramian and the steered trajectory are all computed on the spot — matrix powers, exact elimination, and Simpson-integrated matrix exponentials — never looked up.
What the machine proves: for the controllable pair, rank(C) = 2 = n, the PBH test holds at both eigenvalues, and a Gramian-built input drives x0 to any xf to <1e-6. For the decoupled pair, rank(C) = 1 < n, PBH fails at λ = −2, and the Gramian is singular — the −2 direction is forever out of reach.
The blue team's witness (left) confirms these ranks live; the red team (right) tries to make a rank-deficient matrix report full reach.
And controllability is a statement about the pair (A,B) over the reals only: it is silent about input saturation, state constraints, and disturbances — exactly where real control lives. "Reachable in finite time" is not "reachable within your actuator's limits."
"Controllable means you can hold the state wherever you want." Cut. Controllability is reaching a state in finite time, not holding it — that is stabilizability / regulation, a different question.
"Full rank means the system is easy to control." Cut. Rank is binary. The Gramian's smallest eigenvalue — the true difficulty — can be near zero while rank is still n.
"Controllability and observability are separate tests." Kept, corrected. They are duals: (A,C) is observable ⇔ (Aᵀ,Cᵀ) is controllable. One engine, read twice.
The red team's move: zero a column of C — making it rank-deficient — yet keep reporting the system as controllable (rank = n). The blue team's witness (window 7) recomputes the true rank and is watching.
Zero C's last column and its true rank drops to 1, but the engine still claims controllable (rank = n = 2). The witness recomputes, sees rank ≠ claim, and turns red. Nothing is faked; the attack is real and it is caught.