為什麼一個轉移函數不再夠用
1960 年,魯道夫·卡爾曼(Rudolf Kálmán)發表了一篇論文,悄悄地把控制理論一分為二。在它之前的一切——Bode、Nyquist、你在第 3 與第 7 階認識的轉移函數 G(s)——如今都稱為古典控制。它優雅、直觀,圍繞著單一關係建立:一個輸入擺動,一個輸出回應。但工程師真正想駕馭的系統,並非只有一個輸入與一個輸出。火箭有推進器、萬向節與尾翼;它有位置、速度、姿態與角速度。這些量彼此糾纏——抬高機鼻會改變速度向量,進而改變氣動負載,又再次改變俯仰。單一個 G(s) 撐不起這張網。
卡爾曼的招數是:不再問「我推動輸入時,會跑出什麼?」而是問「系統需要記得什麼?」答案是一小組數字,稱為狀態。只要你知道此刻的狀態,加上從現在起的輸入,就能預測整個未來——你再也不需要回頭看過去。對一個 RLC 電路而言,狀態是電容電壓與電感電流;對無人機而言,則是位置、速度與姿態。把這些數字捆成一個行向量 x,一個糾纏的多輸入、多輸出(MIMO)系統,就塌縮成一條乾淨的矩陣方程式。
四個矩陣——以及為何 A 的特徵值正是你認識的極點
整個現代控制就濃縮在這兩行裡。第一行 ẋ = Ax + Bu 是狀態方程式:它描述狀態如何隨時刻變化。第二行 y = Cx + Du 是輸出方程式:它描述你的感測器實際回報什麼。把它們當故事讀:狀態 x 依循 A(內部動態)自行漂移,透過 B(致動器接在哪裡)被輸入 u 推動,世界則透過 C(感測器接在哪裡)窺看它。D 是罕見的直接前饋,通常為零。
The state-space model — every linear system, one shape:
ẋ = A x + B u <- how the state evolves (the dynamics)
y = C x + D u <- what the sensors measure (the readout)
x : state vector (n×1) the system's memory
u : input vector (m×1) the knobs you can turn (actuators)
y : output vector (p×1) the dials you can read (sensors)
A : n×n system matrix internal coupling — the heart of it
B : n×m input matrix where inputs push the state
C : p×n output matrix which states the sensors see
D : p×m feed-through usually 0
u ──►[ B ]──►(+)──► ẋ ──[ ∫ ]──┬──► x ──►[ C ]──►(+)──► y
▲ │ ▲
└──────[ A ]◄─────┘ [ D ]◄──┘
the feedback OF NATURE注意剛剛在「規模」上發生了什麼。若機械手臂有 6 個關節,u 是 6 維的馬達扭矩向量,y 是 6 維的關節角度向量,A 是耦合位置與速度的 12×12 矩陣。方程式並沒有變複雜——只是變大了。這正是它的超能力:同一條 ẋ = Ax + Bu 能描述恆溫器、四旋翼、電網與化學反應器。挑大樑的是線性代數,而不是一次次重新推導。這也是為什麼 MATLAB 與 Python 的控制函式庫,能用你對付玩具模型時相同的三個函式呼叫,交給你一個 50 狀態模型的控制器。
就在這一刻,古典與現代這兩個世界,揭曉其實是同一個世界。回想第 3 階你學過,轉移函數的極點是其分母的根,而它們在 s 平面上的位置決定一切:落在左半平面代表穩定,右半平面代表發散,與虛軸的距離設定衰減的快慢。在狀態空間裡,那些完全相同的數字,就是矩陣 A 的特徵值。這不是巧合、不是類比——根本就是同一組複數。
Why eigenvalues = poles (the one derivation worth doing)
Take ẋ = A x and look for a natural mode x(t) = v · e^{λt}
(v is a fixed direction, the whole vector just scales by e^{λt})
ẋ = λ v e^{λt} and A x = A v e^{λt}
Set them equal and cancel e^{λt}:
λ v = A v <- the EIGENVALUE equation
So each natural mode of the system IS an eigenvector v of A,
and it decays/grows like e^{λt} where λ is its eigenvalue.
The transfer function makes the same numbers explicit:
G(s) = C (sI − A)^{-1} B + D
└────┬────┘
poles = where det(sI − A) = 0 = eigenvalues of A
STABLE ⇔ every eigenvalue of A has Re(λ) < 0
(every pole in the left half-plane)這項統一遠不只是帳目整潔而已。它告訴你,在現代觀點裡,穩定性純粹是個線性代數問題:算出 A 的特徵值,確認每一個都落在左半平面。不需要 Routh 表、不需要 Nyquist 輪廓——一次 `eig(A)` 呼叫即可。它也告訴你,當我們設計控制器時,真正在做的是搬移特徵值。極點從來都不是受控對象的神聖屬性;它們只是 A 的特徵值,而正如下一節所示,迴授讓我們得以改寫 A。
我能操控它嗎?我能看見它嗎?可控性與可觀性
在你動手設計之前,有兩個殘酷的「是 / 否」問題,決定這個專案究竟是否可行。第一個是[[ee-controllability-observability|可控性]]:只用你手上的輸入,能否把狀態從任意起點驅動到任意目標?想像一輛有方向盤卻沒有油門的車——你能改變方向,卻永遠改不了速度。速度這個座標是不可控的:軟體再聰明也補不了一個缺席的致動器。在數學上,B 與 A 合起來必須能把狀態推往每一個方向。
第二個問題是可觀性:只憑感測器輸出,能否重建完整的內部狀態,包括那些你從未直接量測的部分?太空船可能載有讀取角*速度*的陀螺儀,卻沒有量測絕對*姿態*的感測器。你還能知道姿態嗎?若速度與姿態透過 A 相連,那就能——藉由對所見之物積分,隱藏的狀態便會現形。若它們並不相連,姿態就是不可觀的,是感測器永遠抓不到的幽靈。可觀性問的是:C 與 A 合起來,是否還留下任何看不見的狀態。
The two tests — both are rank checks on a stacked matrix:
CONTROLLABILITY (n states, can inputs reach everywhere?)
┌ ┐
𝒞 = │ B AB A²B ... A^{n-1}B │ controllable
└ ┘ ⇔ rank(𝒞) = n
OBSERVABILITY (can outputs reveal every state?)
┌ C ┐
│ CA │
𝒪 = │ CA² │ observable
│ ⋮ │ ⇔ rank(𝒪) = n
│ CA^{n-1} │
└ ┘
FULL RANK = green light. RANK DEFICIENT = a mode you
can't touch (uncontrollable) or can't see (unobservable).
Beautiful duality: (A, B) controllable ⇔ (Aᵀ, Bᵀ) observable.
Every steering theorem has a free seeing-theorem twin.支柱一:極點配置,把特徵值放到你想要的位置
現在輪到回報了。在古典迴授裡,你回授單一輸出 y,並調整一個 PID 增益,直到響應看起來可接受——那是一個你靠試誤撥動的一維旋鈕。在狀態空間裡,你回授的是整個狀態向量:u = −Kx,其中 K 是一排增益,每個狀態變數對應一個。把它代入動態,看看會發生什麼——閉迴路系統變成 ẋ = (A − BK)x。你已經把 A 換成了 A − BK,而 K 由你來選。
STATE FEEDBACK → re-write the system's eigenvalues
Plant: ẋ = A x + B u
Control law: u = −K x (feed back ALL states, gain row K)
Close the loop (substitute u):
ẋ = A x + B(−K x) = (A − BK) x
└───┬───┘
NEW system matrix
Its eigenvalues = the CLOSED-LOOP poles, and they are now
yours to set: pick desired poles → solve for K.
┌──────────────────────────────────────────────────────────┐
│ POLE-PLACEMENT THEOREM │
│ If (A, B) is CONTROLLABLE, a gain K exists that places │
│ the eigenvalues of (A − BK) at ANY locations you choose. │
└──────────────────────────────────────────────────────────┘
In code: K = place(A, B, desired_poles) # MATLAB / python-control這正是讓可控性檢查值得在意的定理。若系統可控,你就能把閉迴路極點放到 s 平面上任何位置——讓遲鈍的對象變得俐落、抑掉一個振盪、穩住一個原本發散的東西。想要 0.5 秒的安定時間且無過衝?把它換算成一對理想極點位置,呼叫 `place(A, B, poles)`,增益 K 就掉出來了。古典設計調一個迴路然後祈禱;極點配置則為每一個特徵值指名點派。
支柱二:觀測器與卡爾曼濾波器
極點配置藏著一個明擺在眼前的陷阱:u = −Kx 這條法則需要整個狀態 x。但你很少能量到整個狀態。無人機的慣性測量單元給的是角度與角速度,而非位置估計的緩慢漂移;馬達感測器給的是軸角,而非回推的負載扭矩。若可觀性說了隱藏狀態*可以*被重建,那麼觀測器就是真正動手去做的機器——它在軟體裡跑一份模型的副本,並持續用量測誤差修正自己的猜測。
THE OBSERVER (a.k.a. estimator) — a model that watches itself
Run a copy of the plant in software, state estimate x̂:
x̂̇ = A x̂ + B u + L (y − C x̂)
└─ predict ─┘ └──── correct ────┘
measured − expected output
Estimation error e = x − x̂ obeys:
ė = (A − L C) e
Choose the observer gain L so the eigenvalues of (A − LC)
are FAST and stable → x̂ rushes toward the true x,
no matter the starting guess. (place() again — by duality!)
┌──────────────────────────────────────────────────────────┐
│ SEPARATION PRINCIPLE │
│ Design K (control) and L (estimation) INDEPENDENTLY. │
│ Feed x̂ into the controller: u = −K x̂. The combined │
│ closed-loop poles = eig(A−BK) ∪ eig(A−LC). They don't │
│ interfere. Pick observer poles ~5–10× faster than │
│ the control poles, and you're done. │
└──────────────────────────────────────────────────────────┘觀測器還有一個更深的版本,讓卡爾曼在歷史上留名:卡爾曼濾波器。普通觀測器假設模型完美、感測器乾淨。真實世界兩者皆無——過程雜訊搖晃著狀態,量測雜訊汙染著 y。卡爾曼濾波器*最佳地*選擇增益 L,根據統計特性,權衡該多信任模型、又該多信任每一個帶雜訊的感測器。它仍是同一個「先預測、再修正」的迴路,只是 L 如今被重新計算,以最小化估計誤差的變異數。這個演算法引導阿波羅登月,活在每一台 GPS 接收器與手機裡,也在你窗外懸停的無人機中融合加速度計與陀螺儀。
兩種觀點、同一門手藝——以及下一道地平線
那麼,哪一個才對——第 7 階的頻域世界,還是你剛認識的狀態空間世界?兩者都對——它們是望進同一個房間的兩扇窗。轉移函數觀點在以下情境發光:你只有一個輸入與一個輸出、你只握有量測到的頻率響應資料、以及當你必須保證強健裕度(增益裕度、相位裕度)之時。狀態空間觀點則在這些情境發光:通道彼此耦合(MIMO)、內部狀態要緊、以及當你想以特徵值指派效能,並讓線性代數擴展到數十個狀態。老練的工程師在兩者間流暢往返:先用 Bode 勾勒直覺,再以狀態空間定案設計。
CLASSICAL (rung 7) STATE SPACE (rung 8)
───────────────────── ─────────────────────────
G(s) transfer function ↔ ẋ = Ax + Bu, y = Cx + Du
poles (denom. roots) ≡ eigenvalues of A
one input / one output many inputs / many outputs
Bode, Nyquist, margins eig(), place(), rank tests
loop-shaping by hand pole placement + observer
data-driven, robust model-driven, scalable
Same plant, two coordinate systems on the same truth.
NEXT HORIZON ─────────────────────────────────────────►
Pole placement asks "WHERE should the poles go?" — you
still guess. OPTIMAL CONTROL (LQR) asks instead:
minimise J = ∫ ( xᵀQx + uᵀRu ) dt
└─error─┘ └─effort─┘
Q penalises being off-target, R penalises control effort.
Solve once (the Riccati equation) → the BEST K falls out,
no pole-guessing. Pair it with a Kalman filter and you get
LQG — the workhorse of aerospace & robotics control.而那正是這道階梯所指向的前沿。極點配置給了你主導權,卻仍讓你猜該瞄向何處;線性二次調節器(LQR)則消除了這份猜測。你寫下一個成本——你有多討厭偏離目標(Q),相對於你有多討厭耗費控制施力(R)——數學便交給你那唯一最佳的增益 K,自動化解我們先前點出的效能對施力的張力。把 LQR 與卡爾曼濾波器結合,就得到 LQG,那個讓火箭著陸、讓客機飛行的控制器。你已抵達精通的前沿:從第 1 階一個電阻—電容迴路,一路走到今日操控真實機器的矩陣機械。