為什麼非線性系統線性化一定要在平衡位置?
一般非線性系統做線性化的時候,為什麼要求一定要在平衡位置(dx/dt=0)做線性化,其他點沒法線性化么?
首先,線性化只在進行線性化那一點的附近區域比較準確,遠了就不準了。而我們最關心的區域一般都是平衡點附近,於是都是在平衡點附近做線性化。
第二,其實只要你推導一遍,或者研究一個例子,就能發現,如果想要用學過的線性控制理論知識解決問題,只有在平衡點附近的線性化是有意義的。以最簡單的一階無輸入時不變系統為例。
線性化就是將 dx/dt = f(x) 變成 dx/dt = Ax。這裡有一個初學者很容易忽略的問題,那就是上述兩個式子里的x其實是不同的(如果式子里有u,那麼兩個u也是不同的。)。後一個應該寫成 dz/dt = Az 更合適。線性化里進行了一次坐標變換,但很可惜很多時候由於我們並沒有用不同的字母來表示,所以這一點有時不是很明顯。
這個變換是什麼呢?我們先看看線性化的本質基礎:泰勒展開。我們知道一個函數g(y)在y0處展開的話,會得到這麼一個等式:g(y)=g(y0)+c1*(y-y0)+c2*(y-y0)^2+... 由於碼公式不方便,我就不寫c1、c2的表達式了。
套用一下泰勒公式,f(x)在x0處展開,得到 f(x)=f(x0)+a1*(x-x0)+a2*(x-x0)^2+... 忽略高階的部分,得到 f(x)=f(x0)+a1*(x-x0)。也就是說,線性化之後,我們得到 dx/dt = f(x0)+a1*(x-x0) 。這個式子是包含x0,也就是你要進行線性化的那個點的。
接下來就是那個常常被忽略的坐標變換了,令 z = x - x0,z是x在線性化的那個點附近的增量,於是就有了 dz/dt = f(x0) + a1*z。
假如x0是平衡點,那好了,f(x0) =0,於是 dz/dt = a1*z,完美。
假如x0不是平衡點呢,f(x0)不等於零,所以只能留在式子中,於是就得不到我們想要的 dz/dt = Az 形式,只能得到一個蹩腳的 dz/dt = Az + k。這個也算是線性化,可是這個結果通常來講實在是沒什麼用,幾乎無法直接用。
如果你看到這裡已經懂了,就不用繼續讀以下的部分了。如果你不理解為什麼 dz/dt = Az + k 不好用,或者說看到了 dz/dt = Az + k 之後不置可否,請再多讀兩段。
為了讓 dz/dt = Az + k 好用,為了能用上我們熟悉的線性控制理論的知識,最直接的方法是再進行一次坐標變換,把它變成 dx/dt = Ax 的形式。令 w = Az + k,於是 dw/dt = A(dz/dt) = Aw 。很好,問題解決。可是會有什麼新麻煩嗎?有的!我們對泰勒展開取了近似,這個近似只在離展開點近的位置是有效的,遠了就不準了。所以呢, dw/dt = Aw 其實只在 w = k = f(x0) 附近有效。試想一下好不容易得到了一個線性系統 dw/dt = Aw,可是這個線性系統只有當w在某個遠離原點的區域里時此表達式才是有效的,於是呢?你還是沒法使用你熟悉的線性控制理論的知識,因為你想用到的那些都是在包含原點的區域里才好使的。
最後,如果我不管三七二十一就是想強行用 dw/dt = Aw 怎麼辦?這當然……也可以。不過你關心的區域里總得包含至少一個平衡點吧?如果真沒有,那麼恭喜你你的問題不適合用簡單的線性化解決,請參考非線性的控制理論(seriously)。線性化不需要在平衡點進行,而是可以在狀態空間的任何一個可行點進行。
咱們先不用談控制,只談模擬。假設你有一個非線性系統dx = f(x), 和狀態空間里的一個子集O, 那麼你可以在O裡面選取有限個採樣點,在每個點上都對這個非線性系統進行線性化。這些點都不需要是平衡點。通過這樣做,可以用一組線性系統來逼近原非線性系統。
例如,你有一個系統
dx = x^2
你想在區間 xin[0, 2] 上面來研究這個系統,那麼你可以在x=0, x=1, x=2三個點上來線性化這個系統,從而得到
dx = 0 (x = 0)
dx = 2x - 1 (x = 1)dx = 4x - 4 (x = 2)那麼你現在可以用上面的三個線性系統通過適當的插值來模擬原非線性系統 dx = x^2. 注意這三個系統中只有第一個是在平衡點線性化的。
這樣的一組線性系統叫做LPV (Linear Parameter-Varying System)。在工程中使用很廣,例如在飛機姿態控制方面。使用LPV來代替原系統,可以大大提高模擬的計算速度。
關於LPV的更詳細的說明和例子,請參考http://www.mathworks.com/help/control/ug/linear-parameter-varying-models.html不一定非在平衡點線性化。
對於dot x = f(x),平衡點線性化得到線性自治系統,在非平衡點線性化有個等價的額外系統輸入。
數學上:
對於 dot x = f(x),在x_0做線性化,其實就是f(x)在x_0做泰勒展開:
f(x)=f(x_0)+c_1*(x-x_0) +c_2*(x-x_0)^2+...
所以如果x_0是平衡點,即f(x_0)=0,那麼在e=x-x_0足夠小,即c_2*(x-x_0)^2跟c_1*(x-x_0)相比足夠小時,得到了dot e=c_1*e這個自治系統;否則dot e=c_1*e+f(x_0),有f(x_0)這個等價的額外系統輸入。
物理上:
不嚴謹地說,想像一個曲面,從上往下把球(看作質點)放在某一點,如果是平衡點的話,就是曲面的平衡位置,那麼應該是放了就不動了,而且球在離開這一點一個delta x時,動態行為近似是一個自治的線性系統。如果不是平衡點的話,放了之後曲面本身還會導致一個運動的趨勢,相當於系統還要加上一個等價的輸入。
當然如果原系統本身就有輸入,dot x = f(x)+g(u),那隻需在上面的分析加入g(u)。而且有必要的話,還可以用來抵消f(x_0)。
再進一步,反饋線性化,u=h(x),即dot x = f(x)+g(h(x))。靠 f(x)與g(h(x))直接抵消。是另一個問題了。上面的g(u)抵消f(x_0),也屬於么?說不清了。
---
線性化比較準的區域,即c_2*…和以後的那些乘積項,絕對值跟c_1*…相比較小的區域。這跟離線性化那點距離,以及非線性程度(即c_2…等,絕對值相對c_1的大小)有關。
線性化完全可以在非平衡點,你還可以沿著系統的軌線線性化。
大部分時候在平衡點線性化,是因為大部分時候在研究平衡點的穩定性,所以當然要沿著平衡點線性化。首先回答「其它點沒法線性化么?」。答案是,對於一個處處可導的非線性函數,任意一點都是可以線性化的。其次回答「為什麼要在平衡點處線性化?」在回答這個問題之前,先自問自答另一個問題「為什麼要線性化?」答案是,我們對具有線性化模型的被控對象,有一套非常完整的(經典)控制理論。簡單的說,如果把一個東西線性化了,我們就容易控制了。現在回答「為什麼要在平衡點處線性化?」數學中的平衡點,從物理意義上講,就是穩態工作點。我用通俗的例子來解釋,有一棟樓(系統),你家住在10樓,那麼你會從1樓上樓,你也會到15樓串門,但不論1樓還是15樓都不是你的最終狀態,你在2樓的時候只不過是經過,最終會上到10樓,你在14樓的時候也只不過是經過,最終會下到10樓。只有到了10樓,你到家了,吃飯睡覺看電視,穩穩地待在那裡,那就是穩態工作點,如果哪天到樓下借東西或者到樓上打麻將(小信號擾動),都是暫時的,你還是會回到10樓,發現了吧,這就是dx/dt=0的地方,也就是數學中的平衡點,物理中的穩態工作點。雖然你從10樓上到20樓,越上速度越慢(非線性系統),但是你從10樓上到11樓或者下到9樓,速度可以近似為恆定(平衡點處的線性化),或許上到12樓或者下到8樓速度也可以近似為恆定(系統的非線性程度),那麼你在線性化之後對自己的行為就好控制了,比如就可以答應老婆去8樓幾分鐘之內就可以來回(擾動回復時間)等等。
假如你住在2樓,或者住在30樓,由於氧氣含量等各項因素的差別,你上一層樓或者下一層樓的速度會和住在10樓時都不一樣(有點誇張,就這麼個意思),但是根據上述的方法同樣可以對系統線性化,但是有什麼意義呢?你就是住在10樓。
平衡點這個概念是自己給定的,不一定是零點。實際上你可以在系統的任何一點進行線性化,這個在實際中有應用,例如飛機控制方法中的增益調度(gain scheduling)就是在不同的平衡點進行線性化然後對增益進行插值的。
我給Kent Zhang點了贊,但是他的答案有點小問題。
首先平衡點是什麼意思,在物理系統里,平衡點是如果你把它放在那一點,在沒有過擾動的情況下,它不會離開那一點。最常見的解釋如下,這兩個點都是平衡點, 左邊是不穩定平衡點,右邊是穩定平衡點。在控制系統里討論平衡點概念,常常討論的是閉環系統的平衡點,也就是說加了控制輸入後的閉環系統,而且通常是穩定平衡點。 比如飛機的平衡點,那是在高空中30000英尺的地方,這個點不是個自然平衡點,因為如果不控制,飛機肯定要掉下來。 平衡點的位置就是我們希望這個物理系統到達並且保持的位置。所以是現有控制目的,然後控制,然後才有平衡點。當然設計的時候屬於逆推,如果你想讓飛機在這點平痕,需要什麼樣的控制才行。
你讀教材的時候,在介紹系統的時候會說,是為了簡單而且不失一般性,採用了零點。(如果沒寫這句話的,不嚴謹,不是好書)我估計你學的線性系統會說,如果希望平衡點不在零點,我們可以通過的一個簡單的線性轉換,把平衡點換到零點。這才是為什麼穩定性證明只需要證明零點平衡的基礎,因為它具有普世性,至少對於線性系統來說。具體的線性轉化參見: Applied nonlinear control by Slotine and Li, Page 45. Sec 3.1.這裡不細說。這樣的道理同樣適用於非線性系統,即首先是我們對一個點感興趣,然後通過坐標轉換把這個點轉換為零點。
然後回歸到題主的問題,平衡位置是控制設計者關心的位置。對於系統:
來說,如果我想讓它呆在 的位置,就需要看什麼樣的控制可以讓它保持在這個位置:非線性模型線性化有兩類方法一種是對數學模型的線性化,常見的如泰勒展開,軌跡線性化等等。還有一大類是非線性模型的精確線性化,這一種方法用輸入完全抵消系統模型中的非線性因素,但是要對輸出或者狀態求多次導數,對數學模型的要求非常高。常用的李導數,李括弧判定方法,其實就是對輸出微分到出現輸入為止。另一類中的一種是在平衡點處進行線性化,其實說白了就是泰勒展開,或者也可以成為小擾動。但是並非一定要在平衡點進行線性化,比如軌跡線性化,是沿著標稱量的方向進行線性化。是對時變對象不斷進行線性化。以上內容說的並沒有用專業術語,也比如「用的李導數,李括弧判定方法」,其實沒有這麼形容的。但是說出來實際上就是這樣。
作者:無人機中的城堡,公眾號:CastleUAVStudio
MR.城堡為您提供涵蓋無人機技術分析與分享,無人機產品評測(參評、機評),行業分析等領域的專業內容
作者為環球網無人機頻道,深圳灣,UAVSNEWS等行業媒體特約撰稿人。
其它點也可以線性化啊。
舉個極端點的例子:
dx/dt=x+0.0...01(1-e^{-x}),x&>0
這裡0.0...01是個很小的數,0&<=1-e^{-x}&<1。因此可以看出這個系統的行為近似等於dx/dt=x,x&>0。
精確一點,在平衡點x=0處做線性化,dx/dt=x+0.0...01(1-1+x) =1.0...01x。
在非平衡點x=1處線性化,dx/dt=x+0.0...01e^(-1)(2-x)=0.0...02e^(-1)+(1- 0.0...01e^(-1))x。
因為0.0...01很小,所以兩處都近為dx/dt=x。線性化是有條件的。在平衡點附近線性化是因為平衡點是個穩定結構,當然穩定結構有很多種,在結構穩定的平衡態附近可以線性化,拓撲等價於原來的非線性系統。
關於把非線性系統化成線性系統,有一系列的成果,結論就是在共振情形下,充分光滑線性化是不可能的。
後面還有好多頁的證明和說明。
來源於Shilnikov.《非線性動力學定型理論方法》第一卷. 高等教育出版社看到上面各位前輩們的答案沒有涉及太深的證明,我這僅僅做個補充。必須承認我的數學功底不太好,這些內容理解的並不透徹,所以僅僅把書上的內容搬了上來,希望能有前輩從這個角度講講吧。總感覺怪怪的,今天靜下心來想,感覺有點坑啊!完全被引歪了!因為在dx0/dt != 0時,就不可能說明系統穩定。神馬其他的都是浮雲。利用小擾動線性化後得到的方程設計控制器,是希望deltax能穩定,結果就能到x0,如果x0還是變的,那就神馬都是浮雲了。這樣說的還不明白。不是有個說明穩定性的圖么,如果還有人看,等回去電腦再慢慢改好了……
沒考慮用反饋線性化?(逃
看了那麼多評論收益匪淺,其實我們把線性化換個角度看是不是更加明了,在非線性函數某點附近用線性函數進行逼近,或者想想函數的切線可能更加直觀。我們在討論線性化的時候還應該考慮另外一個問題,那就是吸引域,這個域就是某點的附近。
因為沒法研究大信號穩定性,所以你只能在平衡點線性化,研究局部穩定性。
非平衡點線性化就變成軌跡線性化了~
推薦閱讀:
※有哪些關於控制理論或應用(非線性控制、最優控制、估計、優化、機器人等等)方面的網路公開課推薦?
※人工智慧這麼火熱,控制工程看得到未來嗎?
※怎樣確定滑模變結構系統滑模面的參數?
※在生產線上給工業機器人編程是怎樣的體驗?
※lqr控制的權重函數要如何定量選取?