Intuition The big picture
You have a linear system x ˙ = A x + B u \dot{x} = Ax + Bu x ˙ = A x + B u . Left alone, its behaviour is fixed by the eigenvalues of A A A (the "poles"). Maybe those poles sit in the wrong place — unstable, too slow, too oscillatory. Pole placement says: feed the state back, u = − K x u = -Kx u = − K x , so the closed-loop matrix A − B K A-BK A − B K has eigenvalues exactly where you want them . Ackermann's formula is a one-shot recipe for K K K that works for any single-input controllable system.
The solution of x ˙ = A x \dot x = Ax x ˙ = A x is built from terms e λ i t e^{\lambda_i t} e λ i t where λ i \lambda_i λ i are eigenvalues of A A A .
Re ( λ i ) > 0 \text{Re}(\lambda_i) > 0 Re ( λ i ) > 0 ⟹ blows up (unstable).
Re ( λ i ) < 0 \text{Re}(\lambda_i) < 0 Re ( λ i ) < 0 ⟹ decays (stable); more negative = faster.
Im ( λ i ) ≠ 0 \text{Im}(\lambda_i) \neq 0 Im ( λ i ) = 0 ⟹ oscillation.
So the poles are the dynamics. If we can choose them, we choose settling time, damping, everything.
Definition State feedback
Instead of an external command, drive the input from the measured state:
u = − K x , K = [ k 1 k 2 … k n ] . u = -Kx, \qquad K = [k_1\ k_2\ \dots\ k_n]. u = − K x , K = [ k 1 k 2 … k n ] .
Substituting into x ˙ = A x + B u \dot x = Ax + Bu x ˙ = A x + B u :
x ˙ = A x − B K x = ( A − B K ) x . \dot x = Ax - BKx = (A-BK)\,x. x ˙ = A x − B K x = ( A − B K ) x .
The closed-loop matrix is A c l = A − B K A_{cl} = A - BK A c l = A − B K . Its eigenvalues are what we design.
We are given desired poles μ 1 , … , μ n \mu_1,\dots,\mu_n μ 1 , … , μ n . Form the desired characteristic polynomial
α ( s ) = ( s − μ 1 ) ( s − μ 2 ) ⋯ ( s − μ n ) = s n + a n − 1 s n − 1 + ⋯ + a 1 s + a 0 . \alpha(s) = (s-\mu_1)(s-\mu_2)\cdots(s-\mu_n) = s^n + a_{n-1}s^{n-1}+\cdots+a_1 s + a_0. α ( s ) = ( s − μ 1 ) ( s − μ 2 ) ⋯ ( s − μ n ) = s n + a n − 1 s n − 1 + ⋯ + a 1 s + a 0 .
Goal: find K K K so that det ( s I − ( A − B K ) ) = α ( s ) \det(sI-(A-BK)) = \alpha(s) det ( s I − ( A − B K )) = α ( s ) .
The condition for this to work: C \mathcal{C} C must be invertible — i.e. the system is controllable . If you cannot steer some direction, you cannot place its pole.
The trick is the controllable canonical form (CCF) , where pole placement is trivial, then transform back.
Suppose A , B A,B A , B are already in CCF:
A c = [ 0 1 0 ⋯ 0 0 1 ⋯ ⋮ − a 0 ′ − a 1 ′ ⋯ − a n − 1 ′ ] , B c = [ 0 ⋮ 0 1 ] . A_c=\begin{bmatrix}0&1&0&\cdots\\0&0&1&\cdots\\ \vdots&&&\\ -a_0'&-a_1'&\cdots&-a_{n-1}'\end{bmatrix},\quad B_c=\begin{bmatrix}0\\ \vdots\\0\\1\end{bmatrix}. A c = 0 0 ⋮ − a 0 ′ 1 0 − a 1 ′ 0 1 ⋯ ⋯ ⋯ − a n − 1 ′ , B c = 0 ⋮ 0 1 .
Here det ( s I − A c ) = s n + a n − 1 ′ s n − 1 + ⋯ + a 0 ′ \det(sI-A_c)=s^n+a_{n-1}'s^{n-1}+\cdots+a_0' det ( s I − A c ) = s n + a n − 1 ′ s n − 1 + ⋯ + a 0 ′ — the coefficients live on the bottom row . Since B c B_c B c only touches the last row, feedback K c K_c K c directly overwrites that row :
A c − B c K c has bottom row [ − ( a 0 ′ + k 1 ) … ] . A_c - B_cK_c \text{ has bottom row } [-(a_0'+k_1)\ \dots]. A c − B c K c has bottom row [ − ( a 0 ′ + k 1 ) … ] .
To get desired α ( s ) \alpha(s) α ( s ) we just set k i = a i − 1 − a i − 1 ′ k_i = a_{i-1} - a_{i-1}' k i = a i − 1 − a i − 1 ′ . Easy — but only in CCF.
Every matrix satisfies its own characteristic polynomial. So α ( A c ) \alpha(A_c) α ( A c ) — using the desired polynomial — is not zero; it equals α ( A c ) − χ ( A c ) ⏟ = 0 \alpha(A_c)-\underbrace{\chi(A_c)}_{=0} α ( A c ) − = 0 χ ( A c ) where χ \chi χ is the actual char. poly. Because α \alpha α and χ \chi χ differ only in coefficients, α ( A c ) \alpha(A_c) α ( A c ) collapses so that its last row equals exactly the required feedback gains K c K_c K c , while everything above cancels. Concretely one can show
[ 0 ⋯ 0 1 ] α ( A c ) = K c . \begin{bmatrix}0&\cdots&0&1\end{bmatrix}\alpha(A_c)=K_c. [ 0 ⋯ 0 1 ] α ( A c ) = K c .
[ 0 … 0 1 ] [0\dots0\,1] [ 0 … 0 1 ] ?
In CCF, only the last coordinate is "actuated." That selector row picks out the row of α ( A c ) \alpha(A_c) α ( A c ) that Cayley–Hamilton loads the gains into. It's not magic — it's "read off the bottom row."
A general controllable ( A , B ) (A,B) ( A , B ) maps to CCF via z = T x z = Tx z = T x with T = C ~ C − 1 T = \tilde{\mathcal C}\,\mathcal C^{-1} T = C ~ C − 1 (product of canonical and actual controllability matrices). Pushing the CCF result back through T T T and simplifying, the transformation matrices merge and the general formula falls out:
K = [ 0 ⋯ 0 1 ] C − 1 α ( A ) . K = \begin{bmatrix}0&\cdots&0&1\end{bmatrix}\mathcal C^{-1}\,\alpha(A). K = [ 0 ⋯ 0 1 ] C − 1 α ( A ) .
The C − 1 \mathcal C^{-1} C − 1 is literally the "return ticket" from CCF to your coordinates.
System A = [ 0 1 0 0 ] A=\begin{bmatrix}0&1\\0&0\end{bmatrix} A = [ 0 0 1 0 ] , B = [ 0 1 ] B=\begin{bmatrix}0\\1\end{bmatrix} B = [ 0 1 ] . Place poles at μ = − 2 , − 2 \mu=-2,-2 μ = − 2 , − 2 .
Step 1 — desired polynomial. α ( s ) = ( s + 2 ) 2 = s 2 + 4 s + 4 \alpha(s)=(s+2)^2=s^2+4s+4 α ( s ) = ( s + 2 ) 2 = s 2 + 4 s + 4 , so a 1 = 4 , a 0 = 4 a_1=4,a_0=4 a 1 = 4 , a 0 = 4 .
Why: these coefficients ARE the target dynamics.
Step 2 — controllability matrix.
C = [ B A B ] = [ 0 1 1 0 ] , C − 1 = [ 0 1 1 0 ] . \mathcal C=[B\ AB]=\begin{bmatrix}0&1\\1&0\end{bmatrix},\quad \mathcal C^{-1}=\begin{bmatrix}0&1\\1&0\end{bmatrix}. C = [ B A B ] = [ 0 1 1 0 ] , C − 1 = [ 0 1 1 0 ] .
Why: need det C = − 1 ≠ 0 \det\mathcal C=-1\neq0 det C = − 1 = 0 ⟹ controllable, so Ackermann applies.
Step 3 — α ( A ) \alpha(A) α ( A ) . A 2 = [ 0 0 0 0 ] A^2=\begin{bmatrix}0&0\\0&0\end{bmatrix} A 2 = [ 0 0 0 0 ] , so
α ( A ) = A 2 + 4 A + 4 I = [ 4 4 0 4 ] . \alpha(A)=A^2+4A+4I=\begin{bmatrix}4&4\\0&4\end{bmatrix}. α ( A ) = A 2 + 4 A + 4 I = [ 4 0 4 4 ] .
Why: substitute the matrix into the desired polynomial (matrix powers, identity for constant).
Step 4 — assemble.
K = [ 0 1 ] [ 0 1 1 0 ] [ 4 4 0 4 ] = [ 0 1 ] [ 0 4 4 4 ] = [ 4 4 ] . K=[0\ 1]\begin{bmatrix}0&1\\1&0\end{bmatrix}\begin{bmatrix}4&4\\0&4\end{bmatrix}=[0\ 1]\begin{bmatrix}0&4\\4&4\end{bmatrix}=[4\ 4]. K = [ 0 1 ] [ 0 1 1 0 ] [ 4 0 4 4 ] = [ 0 1 ] [ 0 4 4 4 ] = [ 4 4 ] .
Check: A − B K = [ 0 1 − 4 − 4 ] A-BK=\begin{bmatrix}0&1\\-4&-4\end{bmatrix} A − B K = [ 0 − 4 1 − 4 ] , char. poly s 2 + 4 s + 4 s^2+4s+4 s 2 + 4 s + 4 . ✓ Poles at − 2 , − 2 -2,-2 − 2 , − 2 .
A = [ 0 1 2 − 1 ] A=\begin{bmatrix}0&1\\2&-1\end{bmatrix} A = [ 0 2 1 − 1 ] , B = [ 0 1 ] B=\begin{bmatrix}0\\1\end{bmatrix} B = [ 0 1 ] . Open-loop poles solve s 2 + s − 2 = 0 ⇒ s = 1 , − 2 s^2+s-2=0 \Rightarrow s=1,-2 s 2 + s − 2 = 0 ⇒ s = 1 , − 2 (the + 1 +1 + 1 is unstable). Place at − 1 ± j -1\pm j − 1 ± j .
Step 1. α ( s ) = ( s + 1 ) 2 + 1 = s 2 + 2 s + 2 \alpha(s)=(s+1)^2+1=s^2+2s+2 α ( s ) = ( s + 1 ) 2 + 1 = s 2 + 2 s + 2 , so a 1 = 2 , a 0 = 2 a_1=2,a_0=2 a 1 = 2 , a 0 = 2 .
Step 2. C = [ B A B ] = [ 0 1 1 − 1 ] \mathcal C=[B\ AB]=\begin{bmatrix}0&1\\1&-1\end{bmatrix} C = [ B A B ] = [ 0 1 1 − 1 ] , det = − 1 \det=-1 det = − 1 , C − 1 = [ 1 1 1 0 ] \mathcal C^{-1}=\begin{bmatrix}1&1\\1&0\end{bmatrix} C − 1 = [ 1 1 1 0 ] .
Step 3. A 2 = [ 2 − 1 − 2 3 ] A^2=\begin{bmatrix}2&-1\\-2&3\end{bmatrix} A 2 = [ 2 − 2 − 1 3 ] .
α ( A ) = A 2 + 2 A + 2 I = [ 2 − 1 − 2 3 ] + [ 0 2 4 − 2 ] + [ 2 0 0 2 ] = [ 4 1 2 3 ] . \alpha(A)=A^2+2A+2I=\begin{bmatrix}2&-1\\-2&3\end{bmatrix}+\begin{bmatrix}0&2\\4&-2\end{bmatrix}+\begin{bmatrix}2&0\\0&2\end{bmatrix}=\begin{bmatrix}4&1\\2&3\end{bmatrix}. α ( A ) = A 2 + 2 A + 2 I = [ 2 − 2 − 1 3 ] + [ 0 4 2 − 2 ] + [ 2 0 0 2 ] = [ 4 2 1 3 ] .
Step 4. K = [ 0 1 ] [ 1 1 1 0 ] [ 4 1 2 3 ] = [ 0 1 ] [ 6 4 4 1 ] = [ 4 1 ] . K=[0\ 1]\begin{bmatrix}1&1\\1&0\end{bmatrix}\begin{bmatrix}4&1\\2&3\end{bmatrix}=[0\ 1]\begin{bmatrix}6&4\\4&1\end{bmatrix}=[4\ 1]. K = [ 0 1 ] [ 1 1 1 0 ] [ 4 2 1 3 ] = [ 0 1 ] [ 6 4 4 1 ] = [ 4 1 ] .
Check: A − B K = [ 0 1 − 2 − 2 ] A-BK=\begin{bmatrix}0&1\\-2&-2\end{bmatrix} A − B K = [ 0 − 2 1 − 2 ] , char poly s 2 + 2 s + 2 s^2+2s+2 s 2 + 2 s + 2 ⟹ roots − 1 ± j -1\pm j − 1 ± j . ✓
Common mistake Steel-manned common errors
1. "Just set A − B K A-BK A − B K 's eigenvalues to μ i \mu_i μ i by eye."
Why it feels right: for tiny 2 × 2 2\times2 2 × 2 examples you can guess. The fix: it's ad hoc and fails for n ≥ 3 n\ge3 n ≥ 3 ; Ackermann is systematic and exact.
2. "Use the OPEN-loop characteristic polynomial in α ( A ) \alpha(A) α ( A ) ."
Why it feels right: Cayley–Hamilton says the actual char poly of A A A gives zero, so you half-remember plugging some polynomial into A A A . The fix: you must use the DESIRED polynomial α \alpha α . Using the actual one gives α ( A ) = 0 ⇒ K = 0 \alpha(A)=0 \Rightarrow K=0 α ( A ) = 0 ⇒ K = 0 (no feedback).
3. "It always works."
Why it feels right: the formula looks universal. The fix: it needs C \mathcal C C invertible (controllable) and single input . Multi-input needs different methods (or extra freedom).
4. Sign of K K K . With u = − K x u=-Kx u = − K x , closed loop is A − B K A-BK A − B K . If you wrote u = + K x u=+Kx u = + K x , use A + B K A+BK A + B K or you'll double the sign error.
Recall Feynman: explain to a 12-year-old
Imagine a wobbly cart on a track. How wobbly, how fast it settles — that's baked into some secret numbers called poles. Left alone the cart might tip over. But you can watch where it is and gently push it based on what you see. Ackermann's formula is a cheat sheet that tells you exactly how hard to push for each thing you measure so the cart settles the way you want — smooth, quick, no tipping. It only works if your pushes can actually reach every wobble (that's "controllable").
Mnemonic Remember the assembly order
"Zero-One, Inverse-C, Alpha-of-A" — read right to left it builds the gain:
feed A A A into the desired polynomial → un-transform with C − 1 \mathcal C^{-1} C − 1 → select the bottom row with [ 0 … 0 1 ] [0\dots0\,1] [ 0 … 0 1 ] .
What must be nonzero for Ackermann to apply? ⟹ det C \det\mathcal C det C (controllability).
Which polynomial goes into α ( A ) \alpha(A) α ( A ) ? ⟹ the desired one.
What is the closed-loop matrix? ⟹ A − B K A-BK A − B K .
What is the closed-loop system matrix under u = − K x u=-Kx u = − K x ? State Ackermann's formula for a single-input system. K = [ 0 ⋯ 0 1 ] C − 1 α ( A ) K=[0\,\cdots\,0\,1]\,\mathcal C^{-1}\,\alpha(A) K = [ 0 ⋯ 0 1 ] C − 1 α ( A ) What is C \mathcal C C (controllability matrix)? [ B A B A 2 B ⋯ A n − 1 B ] [B\ AB\ A^2B\ \cdots\ A^{n-1}B] [ B A B A 2 B ⋯ A n − 1 B ] Which polynomial is α \alpha α in α ( A ) \alpha(A) α ( A ) ? The DESIRED characteristic polynomial from target poles
μ i \mu_i μ i .
Necessary condition for arbitrary pole placement? The pair
( A , B ) (A,B) ( A , B ) is controllable (
C \mathcal C C invertible).
Why does the selector row [ 0 ⋯ 0 1 ] [0\cdots0\,1] [ 0 ⋯ 0 1 ] appear? In controllable canonical form only the last coordinate is actuated, so gains sit in the bottom row.
What theorem underlies the derivation? Cayley–Hamilton (a matrix satisfies its characteristic polynomial).
If you mistakenly use the actual char. poly of A A A , what K K K do you get? K = 0 K=0 K = 0 , since
χ ( A ) = 0 \chi(A)=0 χ ( A ) = 0 .
How do poles relate to system dynamics? Eigenvalues
λ i \lambda_i λ i give modes
e λ i t e^{\lambda_i t} e λ i t : sign of real part sets stability, imaginary part sets oscillation.
Unstable slow oscillatory
Ackermann K = e_n C-inv alpha A
Intuition Hinglish mein samjho
Dekho, kisi bhi linear system x ˙ = A x + B u \dot x = Ax + Bu x ˙ = A x + B u ka behaviour uske poles (matrix A A A ke eigenvalues) decide karte hain. Agar pole right-half plane mein hai to system unstable — cheez phat jaayegi. Hum chahte hain ki system stable ho, jaldi settle ho, zyada oscillate na kare. Iske liye hum state feedback lagate hain: u = − K x u = -Kx u = − K x . Ab closed-loop matrix ban jaata hai A − B K A - BK A − B K , aur iske eigenvalues hum apni marzi se rakh sakte hain — bas correct K K K chunna hai.
Ackermann's formula ek ready-made recipe hai us K K K ke liye: K = [ 0 ⋯ 0 1 ] C − 1 α ( A ) K = [0\,\cdots\,0\,1]\,\mathcal C^{-1}\,\alpha(A) K = [ 0 ⋯ 0 1 ] C − 1 α ( A ) . Yahan C = [ B A B ⋯ A n − 1 B ] \mathcal C = [B\ AB\ \cdots\ A^{n-1}B] C = [ B A B ⋯ A n − 1 B ] controllability matrix hai, aur α ( A ) \alpha(A) α ( A ) ka matlab hai — apni desired characteristic polynomial mein matrix A A A ko daal do. Sabse common galti yahi hoti hai ki log actual polynomial daal dete hain, jisse Cayley–Hamilton ke wajah se sab zero ho jaata hai aur K = 0 K=0 K = 0 aa jaata hai. Hamesha DESIRED polynomial use karo.
Ek zaroori condition: system controllable hona chahiye, yaani C \mathcal C C invertible ho. Agar aap system ke kisi direction ko push hi nahi kar sakte, to us pole ko move bhi nahi kar paoge — simple. GNC (rockets, satellites, drones) mein yeh core tool hai kyunki wahan attitude aur position ko exactly desired speed se stabilise karna padta hai, warna vehicle tumble kar jaayega.