JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

為系統加上外力:參數變易法

一個無人打擾的線性系統,由矩陣指數解出。一旦用一個輸入去推它,一條優美的公式——對 e^(At) 做卷積——就把答案交給你,它把過去每一記推力都由流帶向未來、逐一加總。

從自由系統走向受迫系統

本級到目前為止談的,全是齊次系統 x' = A x——一個完全依自身內在規則演化、無人從外推動的系統。你學到它的完整解是 x(t) = e^(At) x(0):矩陣指數把起始狀態接過去、帶向未來,這就是全部。但真實的機器會被戳。電路接上了電壓源,彈簧被一隻手搖晃,族群有移民湧入。那股外來的推力把方程變成 x' = A x + g(t),一個非齊次系統,而那條乾淨的公式便不再合身。

這裡的 g(t) 就是外力——一個已知的、隨時間變化的向量函數,也就是你餵進去的輸入。本篇指南的問題正是:給定同一個矩陣 A,但如今多了外來輸入 g(t),x(t) 是什麼?你已經知道答案的一半。在更早處理單一方程時,你遇過參數變易法:讓齊次解裡的常數隨時間漂移,藉以吸收外力。我們要做的正是這件事,只不過是針對整個系統一次完成——而其結果,將是整個微分方程學裡最常被引用的公式之一。

讓常數變動——只不過對的是向量

回想齊次解 x(t) = e^(At) c,其中 c 是起始資料的常數向量。參數變易法只有一個大膽的動作:把常數 c 換成一個未知函數 u(t),並期望 x(t) = e^(At) u(t) 能被調得去解受迫方程。我們不再假設狀態只是搭著自由流前進;而是讓那份「起始資料」u(t) 在每個瞬間被重新調校,好讓多出來的運動恰好與推力相符。整套方法,就是把這一個代換有紀律地推算到底。

用乘積法則對 x = e^(At) u(t) 求導。e^(At) 的導數是 A e^(At)——這正是矩陣指數的定義性質——於是 x' = A e^(At) u + e^(At) u'。第一項恰好就是 A x。代入 x' = A x + g(t):兩邊的 A x 相消,只剩下 e^(At) u' = g(t)。那次相消正是本法的魔力所在——選齊次流作為載體,使方程中最棘手的部分消失,倖存下來的只是一條關於 u' 的關係式。

現在解出 u'。矩陣指數永遠可逆——其逆是 e^(-At),把同一個流倒著跑——所以 u'(t) = e^(-At) g(t)。這裡沒有代數上的糾纏,沒有要費力手算反矩陣:e^(At) 的逆是白送的。把兩邊從 0 積到 t,加上積分常數以照顧起始狀態,未知的 u(t) 就被完全釘住。最後一步,是把它放回 x = e^(At) u(t)。

公式,以及藏在其中的圖像

把零件組裝起來。給定 x(0),u(t) = x(0) + 從 0 到 t 對 e^(-As) g(s) ds 的積分,整式再乘上 e^(At),便得到那條招牌結果,即矩陣卷積公式:x(t) = e^(At) x(0) + 從 0 到 t 對 e^(A(t - s)) g(s) ds 的積分。盯著這個結構看。第一項 e^(At) x(0) 恰好是自由的齊次解——若無人推動,系統會做的事。那個積分則是外力所貢獻的一切。完整的答案,就是自由響應加上受迫響應、系統自身的趨勢加上外界的干擾,乾淨地相加。

被積函數承載著一個鮮活的物理故事。在較早的瞬間 s,外力把一記小小的推力 g(s) ds 注入狀態。從那一刻到現在,經過了 t - s 秒,而系統自身的動力學把那塊注入的部分帶向未來——所帶的,恰好是那段流逝時間上的流 e^(A(t - s))。接著積分把 0 到現在之間每一記推力被帶到當下的殘餘加總起來。當下的狀態,是整段外力歷史的加權記憶,每一記過去的推力都因落下多久而老去。這種「對歷史求和」的形狀,是一條杜哈梅原理,它在整個線性動力學裡反覆出現。

free part         forced part (a convolution of the flow with the input)
  |                       |
  v                       v
x(t) = e^(At) x(0)  +  integral_0^t  e^(A(t - s)) g(s) ds
                                     \_________/  \___/
                                      carry the    the kick
                                      kick from     delivered
                                      s up to t     at time s

  e^(A(t - s))  is the state-transition matrix Phi(t, s):
      it moves a state from time s to time t along the free flow.
受迫解:起點的自由流,加上每一記過去的推力被矩陣指數帶到當下、再加總起來。

那個載體因子 e^(A(t - s)) 有它自己的名字與生命:它是狀態轉移矩陣 Phi(t, s),是把狀態沿自由動力學從時刻 s 運送到時刻 t 的算子。由於我們的系統是時間不變的——A 不依賴於 t——這個轉移只依賴於流逝的間隔 t - s,這正是為何被積函數能寫成那單一段時長上的一個真正的。對於 A(t) 隨時間變化的系統,同一副骨架仍在,但 Phi(t, s) 不再是一個簡單的指數,必須更小心地建構出來。

把配方走一遍

實務上你絕不會重新推導那個代換;你直接套用參數變易公式。唯一真正的工作,是為你那個特定的 A 算出 e^(At)——這正是上一篇指南所建立的本領,可經由對角化、Putzer 法或凱萊-漢密爾頓途徑,亦或拉普拉斯變換。一旦 e^(At) 到手,剩下的不過是積分號內的一次矩陣乘向量。整個流程陳列如下。

  1. 把系統寫成 x' = A x + g(t) 的形式;認出常數矩陣 A 與外力向量 g(t)。
  2. 算出矩陣指數 e^(At)——用對角化、Putzer 法、凱萊-漢密爾頓或拉普拉斯,看哪個對這個 A 最省事就用哪個。
  3. 組出 e^(A(t - s)) g(s)——時刻 s 的推力被流帶過 t - s 這段間隔。
  4. 把那個向量從 0 積到 t,得到受迫響應;卷積負責對歷史求和。
  5. 加上自由項 e^(At) x(0) 以滿足初始狀態,初值問題便完全解出。

對兩端做個快速的現實檢驗。在 t = 0 時,積分跑的是一個空區間、毫無貢獻,於是 x(0) = e^(A0) x(0) = I x(0) = x(0)——公式自動照顧了起始條件,無須再去湊任何額外常數。而若外力被關掉,g = 0 使積分消失,你便直接退回純齊次流 e^(At) x(0)。受迫公式把自由公式涵蓋為「外界停止推動」的那個特例。

誠實的但書,以及它換來什麼

把這個優美結果的邊界講清楚。它是一條只關於線性系統的定理。使本法奏效的那次相消——A x 兩項彼此抵銷——徹頭徹尾依賴疊加原理,而對一個非線性的 x' = f(x, t),並沒有對應的矩陣指數版本。野外的方程多半是非線性的,所以這條公式是針對一類特殊而重要的對象的利器,並非開啟萬物的萬能鑰匙;其餘的,你得退回數值與定性方法。

第二個、較溫和的但書:「閉形式」有一部分是錯覺。公式是精確的,但要得到一個明確的答案,你必須真的把 e^(A(t - s)) g(s) 的積分做出來,而對一個雜亂的 g(t),那個積分可能根本沒有初等的反導數。卷積形式依然無價——它告訴你結構、讓你能對穩定性與穩態做推理,而且即便符號拒絕化簡,把它交給電腦做數值計算也輕而易舉。形式上的精確,並不保證有一個乾淨的符號值。

它換來的東西則極為龐大。卷積結構是從微分方程通往工程的橋樑:取 g(t) 為單位脈衝,積分便塌縮成 e^(At) 本身,揭示矩陣指數正是系統的脈衝響應——它對單一瞬間推力的反應,而對「任何」輸入的響應,都由卷積從中導出。這正是你在拉普拉斯變換那裡遇過的同一個杜哈梅想法,如今它能獨立站立、無須離開時域。在本級的最後一篇、也就是下一篇指南裡,我們會退後一步,看清為何 e^(At)——同時定義自由流、生成受迫響應、又充當脈衝響應——確實就是一個線性系統的全部故事。