Worked examples — Observability matrix — rank test
We only ever touch the parent's core objects: the observability matrix , its rank and null space, and — for the last example — the PBH test. Nothing new is assumed.
The scenario matrix
Every observability problem falls into one of these case classes. The goal of this page is to hit every row at least once.
| # | Case class | What's tricky about it | Hit by |
|---|---|---|---|
| A | Full-rank, distinct eigenvalues, single output | The "textbook yes" | Ex 1 |
| B | Hidden decoupled state | A whole column of dies | Ex 2 |
| C | Repeated eigenvalue, 2 eigenvectors | Scalar output cannot separate them | Ex 3 |
| D | Repeated eigenvalue, 1 eigenvector (Jordan block) | Coupling rescues observability | Ex 4 |
| E | Zero / degenerate input: | The blind sensor — limiting case | Ex 5 |
| F | system, does adding a 2nd sensor help? | Rank climbs with | Ex 6 |
| G | Real-world: spacecraft attitude + gyro bias | Word problem, physical meaning of | Ex 7 |
| H | Exam twist: rank looks full but PBH disagrees? | Cross-check two tests agree | Ex 8 |
Recall The recipe (memorise once, reuse below)
- Read off (size of ), (rows of ).
- Compute .
- Stack them into (size ).
- observable; less find the unobservable direction in .
Example 1 — Case A: the textbook "yes"
Step 1 — build the second row . Why this step? With we need exactly and — one power up, no more (recipe step 2).
Step 2 — stack. Why this step? Rows of are the directions the sensor can "see" through and its derivative.
Step 3 — rank. , so ⇒ observable. ✅ Why this step? A nonzero determinant means no direction of maps to the zero output.
Verify: the two modes have distinct eigenvalues , and has a nonzero entry on each eigenvector (). Distinct eigenvalues + touching every eigenvector is exactly the condition the PBH test wants — the two answers agree.
Example 2 — Case B: a hidden decoupled state
Step 1 — . Why this step? Recipe — grab derivative information.
Step 2 — stack & look at columns. The entire second column is zero. Why this matters: a zero column means the direction multiplies into nothing.
Step 3 — rank. ⇒ not observable. ❌
Step 4 — name the ghost. . Check: for all .
Verify: the unobservable state gives — invisible exactly as the parent note's boxed definition of an unobservable state promised.
Example 3 — Case C: repeated eigenvalue, two eigenvectors
Step 1 — .
Step 2 — stack. Row 2 Row 1. Why this matters: rows are parallel, so they span only a 1-D space.
Step 3 — rank. ⇒ ⇒ not observable. ❌
Step 4 — the ghost. : the difference of the two states is invisible.
Verify: eigenvalue has geometric multiplicity (two independent eigenvectors). A scalar output can never resolve that — you'd need rows in . Matches the parent's "modal degeneracy" warning.
Example 4 — Case D: repeated eigenvalue, ONE eigenvector (coupling rescues it)
Step 1 — . Why this step? The coupling term leaks state 2 into the derivative of the measured state 1.
Step 2 — stack.
Step 3 — rank. ⇒ ⇒ observable! ✅
Verify: the difference from Ex 3 is geometric multiplicity. A repeated eigenvalue with a single eigenvector (a genuine Jordan block) has geometric multiplicity ; the PBH test then only needs to touch that one eigenvector — which does. So repeated eigenvalues are not automatically fatal: it's the eigenvector count, not the eigenvalue count, that decides.
Example 5 — Case E: the blind sensor ()
Step 1 — . Why this step? Any power of left-multiplied by the zero row stays zero.
Step 2 — stack.
Step 3 — rank. ⇒ not observable — maximally so. ❌
Step 4 — the ghost is everything. : every initial state gives .
Verify: rank is the floor of the rank test; the "number of observable directions" equals , so zero of the states are recoverable — the correct limiting answer for a dead sensor.
Example 6 — Case F: does a second sensor help? ()
Step 1 — powers of times . Why this step? so we go up to .
Step 2 — stack for the single sensor. Observable already! Why: position → velocity → acceleration; each derivative peels off the next state.
Step 3 — the two-sensor case (does it hurt?). Why this step? Extra sensor rows can only raise or keep the rank — never lower it — but rank is capped at .
Verify: both give rank . The lesson: a chain of integrators is observable from its first state alone; the extra sensor is redundant here (rank already saturated). Adding rows never reduces observability — it just can't exceed .
Example 7 — Case G: real-world spacecraft attitude + gyro bias
Step 1 — . Why this step? The bias couples into , so the derivative of the measured angle carries information about .
Step 2 — stack.
Step 3 — verdict. Observable ✅ — the star tracker can separate attitude from bias.
Verify (physical + units): (with ), so a nonzero constant bias makes the measured angle drift linearly: . The slope of the drift reveals (units: rad/s) and the intercept reveals (rad) — two observations, two unknowns, exactly what rank guarantees. This is why a Kalman filter (Kalman Filter) can estimate and remove gyro bias from a single angle measurement.

Example 8 — Case H: exam twist, do rank test and PBH agree?
Step 1 — rank test. ⇒ not observable. ❌
Step 2 — PBH cross-check. Why this step? The PBH test checks, at each eigenvalue , whether has full column rank . At :
Step 3 — reconcile. Both tests say not observable. The student's error: is a repeated eigenvalue with two eigenvectors (it's , geometric multiplicity ), and a scalar cannot resolve two identical modes — exactly the Case C failure in disguise.
Verify: , and . The rank test and PBH must agree — they are two windows on the same geometry, as noted in the parent's connections.
Connections
- Observability matrix — rank test (parent)
- PBH test (used in Ex 8 as a cross-check)
- Kalman Filter (Ex 7 bias estimation)
- Kalman decomposition (splits out the ghost states from Ex 2, 3, 5)
- Rank and null space of a matrix (every step lives here)
- Cayley–Hamilton theorem (why we stop at throughout)
- Controllability matrix — rank test (dual)
- State-space representation