1 為什么要探討線性化
注:這里所說的線性化,包括下面會用到的"Exact Linearization", 都是指基于一階泰勒展開的線性化近似,而不是基于微分幾何的全局線性化或者輸出反饋線性化。
很多人看到這個題目,或許第一感覺會是:“為什么要研究線性化?線性化不就是一階泰勒展開嗎?這再簡單不過了,用小學數學就好啦!”
在理論上,這一點也沒錯。比如我們要在原點線性化如下的非線性模型,相信大多數人不假思索的就能告訴我:線性化的結果是 y = u。
既然如此,我們為什么還要探討線性化呢? 答案很簡單,上面一個例子是理論上的,也就是經過很大程度上簡化了的,幾乎完美的。
那么實際上,工程中需要線性化的問題是什么樣的呢?
假如有這樣一個航天飛機的模型。工程師現在想把控制器參數優化一下。為此,他需要線性化從飛機控制器的輸入到導航控制器的輸入之間這個可能含有幾千個模塊,幾萬個信號的子系統。
很顯然,想要解析的泰勒展開這樣一個模型,在實際中是相當費時費力的。
那么,我們來看看難點都在哪:
1. 沒有非線性方程
理論上,動態系統總是可以用光滑的ODE來建模。而實際上,在工程應用中,系統往往是用框圖來搭建的,比如用Simulink等軟件。 用框圖來建模有非常多的好處,比如可以方便的模塊化,通過觀察某個具體的信號值來debug, 還有其他的好處就不一一列舉了。但是像這樣復雜的框圖模型是很難等價的轉化成一組非線性方程組的。甚至有些模塊,根本就不存在解析表達式。所以,很難對一個非線性方程去求偏導數來獲得泰勒一階展開項。
2. 不光滑
有些模塊或許存在解析數學表達式,但是根本不可導;有些可能存在大量的奇異點;有些甚至導數無從定義,比如enabled subsystem, triggered subsystem等。
3. 多重采樣時間
在很多實際模型里面,有些模塊是連續的,例如積分器。有些模塊是離散的,采樣時間可以是0.1秒,可以是10秒,甚至可以是無窮大,比如constant block。那么,最后線性化出來的系統到底應該是連續的,還是離散的?
4. 牽一發而動全局
假設,在最理想的情況下:我們真的把這個模型對應的非線性方程組表示出來了, 并且最終驗證了模型的準確性,然后成功的進行了線性化。可是,第二天模型的作者表示:”我把某幾個子系統里的幾條信號刪掉了,然后把其它幾條信號的連接方式重新設計了一下,你再幫我泰勒展開一下吧“。很不幸,這很大程度上意味著我們之前的解析方程組被徹底改變了,所有的工作需要重頭在來過。這樣的分析方式在實際的工程開發中是很不現實的,因為時間成本太高。
2 數值擾動
既然解析方法不行,那么應該怎么做呢?
一個比較傳統而且有效的方法是數值擾動。
來看看第一個例子:
我們可以在輸入端輸入一個常數,比如說du = 0.1。 然后, 我們測量輸出信號,發現:
dy = 0.0998
兩者相除,我們得到了一個基于數值線性化的結果:
y = 0.998*u
如果用更小的du,事實上我們可以得到更精確的結果。
現在這個方法看起來比解析方法好用了很多。在某種程度上,它的思想其實就是把整個系統當成是一個黑箱,通過輸入輸出來進行辨識。
事實上,對于比較小和比較簡單的模型,數值擾動的效果都還是不錯的。
1. 延時的處理
在這個例子中,“黑箱”里有一個隱藏的很深的延時模塊。在這種情況下,我們給這個系統提供擾動輸入,然后去測量輸出的時候,會發現輸出信號過了很久都沒有發生變化。由此,我們很有可能會錯誤的把這個系統線性化成一個0增益! 當然了,如果事先能知道其中有一個這樣的Delay block,是可以采取一些措施來進行更好的辨識的。但即使如此,自動控制原理告訴我們,在頻域上逼近一個Delay Block的一個很好的方式是用Pade Approximation。 但是這種逼近用數值擾動是很難做到的,特別是對于復雜的,含有多個具有不同時間長度的延時環節的系統。
現在,你也許已經可以看出此處存在的一個矛盾: 數值擾動是把整個模型當成一個黑箱,不需要知道黑箱里面的信息;但是我們實際上是知道這個黑箱里所有模塊的具體情況的。可是這些信息在數值擾動的過程中沒法有效的利用上。
2. 一些特殊的模塊
再看看下面這個例子:
如我們用數值擾動來線性化這個模型,那么我們會遇到兩個不同的情況:
擾動的足夠小,我們得到的是一個0增益的線性化結果;
擾動信號大到一定的程度,我們會得到一個線性的關系。
那么,哪個結果是對的呢?
答案是:都對,也都不對。這取決于用戶的具體問題。
如果用戶故意用這樣一組quantizer, 目的就是想分析在一個很小的范圍內此模型的動態。在此情況下,a是所期望的。還有一種可能,就是用戶本身是不想用Quantizer的,但是在用數字電路實現某個部件的時候,不得已的讓一個本來應該是線性增益的關系變成了這樣的Quantization的結果。那么在這種情況,b是用戶所期望的。
對于這樣一個特殊的模塊,我們的確可以通過調整干擾信號的大小來得到不同的結果。但是假設有無數多個類似這樣的模塊存在于某個模型中,有些模塊是屬于情況a,有些屬于情況b,那么整個基于數值擾動的線性化結果就無法如用戶所期望的了。
Simulink Control Design和Block-by-Block
Simulink Control Design工具箱的一大特點就是它提供了Block-by-Block的線性化方法。這個方法有時也叫Exact Linearization(不同于基于微分幾何的全局線性化)。簡單來講,在線性化的過程中,每個模塊會先被線性化,算出各自的Jacobian矩陣。然后由Simulink Control Design工具箱把這些信息有效的整合在一起(這是一個非常復雜的過程),從而計算出整個模型的線性化結果。
看下面這個例子:
線性化通路上有3個模塊,他們的Jacobian分別是cos(0) = 1, n階的pade approximation的狀態空間表達式和1。那么對于這個簡單的系統而言,整個線性化的結果就是這三個線性系統的級聯。
在第二個例子中:
用戶可以打開Quantizer的窗口:
把Treat as gain when linearizing的選項打上勾,這樣就會使得這個模塊被線性化成一個線性增益。
Simulink Control Design工具箱還帶有各種高級的功能。例如,對于一些很難線性化的模塊,用戶可以自己配置此模塊的線性化結果,用于整個模型或者子系統的線性化。
-
數字電路
+關注
關注
193文章
1605瀏覽量
80580 -
線性化
+關注
關注
1文章
14瀏覽量
11718
發布評論請先 登錄
相關推薦
評論