一、什麼是穩定點
二、什麼是李雅普諾夫穩定
三、李雅普諾夫第一法
四、李雅普諾夫第二法
五、MATLAB代碼

一、什麼是穩定點

一個控制系統就和一個社會一樣,穩定性是首先要解決的重要問題,是其他一切工作的基礎。穩定性問題的字面意思很好理解了,那就是系統在受到擾動後,能否能有能力在平衡態繼續工作。大家都知道,歷史上社會改革成本很高,且以失敗者居多,從控制論的角度來看,就是對社會這個大系統的穩定性研究不夠,導致擾動發生後,社會發散了。

要研究穩定,首先要研究穩定點,那什麼是穩定點呢?我們以發射火箭為例:

火箭的簡化模型可以看成是一個倒立擺,如下圖所示,在最低端施加控制力,來保持其在豎直方向的角度可控。

其狀態方程如下:

frac{d}{dt}egin{bmatrix}   	heta\ dot{	heta}end{bmatrix}= egin{bmatrix}    dot {	heta} \ frac{mgl}{J_t}sin	heta-frac{gamma}{J_t}dot {	heta}+frac{l}{J_t}cos	heta cdot u end{bmatrix}

其中 gamma 為旋轉摩擦係數, J_t=J+ml^2 , u 為施加的外力。現在我們要開始做實驗了,假設對火箭不做任何控制,即 u=0 ,這時火箭的狀態方程可進一步簡化:

frac{d}{dt}egin{bmatrix}   	heta\ dot{	heta}end{bmatrix}= egin{bmatrix}    dot {	heta} \ frac{mgl}{J_t}sin	heta-frac{gamma}{J_t}dot {	heta} end{bmatrix}

不失一般性,假設我們自己也造了一個火箭,其 mgl=J_t=1,gamma=1 ,則上述方程變為:

egin{bmatrix}   dot {x}_1(t)\  dot {x}_2(t)end{bmatrix}= egin{bmatrix}    x_2 \ sin(x_1)- x_2 end{bmatrix}

注意,這個方程雖然看著簡單,但確是一個非線性方程,解起來還是費點力氣的,我們要藉助MATLAB幫我們算一下,並畫個圖出來看一下,把 x_1 作為橫坐標, x_2 作為縱坐標,然後隨機選擇一些初始點,看看向量 egin{bmatrix}   {x_1}& {x_2}end{bmatrix} 是怎麼運動的,軌跡如下圖所示:

可見,這個圖形是比較有意思的,其中有三個比較明顯的點,貌似是旋渦中心,無論初始條件是什麼,最終都要穩定在這三個點上(實際很多,我們只計算了三個),這三個點的坐標目測是 egin{bmatrix}   {pm npi}& {0}end{bmatrix}

我們從數學上再分析一下,什麼是穩定點呢?——就是不再變化的點,那什麼是不再變化呢?——導數為零唄,怎麼樣才能讓導數為零呢?——狀態方程的左邊就是導數啊,讓右邊為零就可以了。

egin{bmatrix}    x_2 \ sin(x_1)- x_2 end{bmatrix}=egin{bmatrix}   0\  0end{bmatrix}

解這個方程還是比較容易的,它的解就是:

egin{bmatrix}   {x_1}\ {x_2}end{bmatrix}=egin{bmatrix}   {pm npi}\ {0}end{bmatrix}

但是,如果你仔細看,還有一個點, egin{bmatrix}   {0}& {0}end{bmatrix}肯定是數學解,但是似乎在圖上並沒有明顯的顯示出來,這是什麼原因呢?——這代表著火箭豎直放置,且沒有擾動,常識告訴我們這是一個極不穩定的點,就像你把鉛筆立在桌子上,稍微風吹草動就倒了,而數值求解的時候,幾乎尋找不到這個點。

那其他的穩定點又代表什麼呢?——火箭水平躺著, 	heta=pmpi ,而且不再變化, dot {	heta}=0 ,這和我們的常識也是一致的。

可見穩定點就是系統狀態不再發生變化的點,它可能不止一個,它也可能很脆弱,稍微有個擾動,就不穩定了。


二、什麼是李雅普諾夫穩定

早在1892年,俄國有一個叫李雅普諾夫的學者發表了一篇著名的文章《運動穩定性一般》問題,建立了關於運動穩定的一般理論,光看這個文章的名字就不一般,也確實,在爾後百餘年,這個理論在數學、力學和控制理論中全面開花,已經成為穩定性研究方向的基礎性理論,俄羅斯人對於數學上和工程上的直覺確實令人讚歎。

李雅普諾夫穩定性理論研究的是在擾動下穩定點的穩定性問題。

簡單來說,如果穩定狀態 x_e 受到擾動後,仍然停留在 x_e 附近,我們就稱 x_e李雅普諾夫意義下是穩定的(Lyapunov stable)。

如果更進一步,如果穩定狀態 x_e 受到擾動後,最終都會收斂到 x_e ,我們就稱 x_e 在李雅普諾夫意義下是漸進穩定的(Asymptotically stable)。

再進一步,如果穩定狀態 x_e 受到任何擾動後,最終都會收斂到x_e ,我們就稱 x_e 在李雅普諾夫意義下是大範圍內漸進穩定的(Asymptotically stable in large)

相反,如果穩定狀態 x_e 受到某種擾動後,狀態開始偏離x_e ,我們就稱 x_e 在李雅普諾夫意義下是不穩定的(Unstable)

示意圖如下:

Source:Modern Control Engineering

下面我們就分別具體看一下。

  • 什麼是李雅普諾夫意義下的穩定

請看狀態方程:

egin{bmatrix}   dot{x_1}\ dot{x_2}end{bmatrix}= egin{bmatrix}   0 &1\ -1&0 end{bmatrix}egin{bmatrix}   {x_1}\ {x_2}end{bmatrix}

很容易得到其時域的解為;

m{x}(t)=m{x}(0)egin{bmatrix}   {sin(t)}\ {cos(t)}end{bmatrix}

且穩定點為 egin{bmatrix}   {0}\ {0}end{bmatrix} ,我們隨機取一些很小的擾動,比如 m{x}(0)=egin{bmatrix}   {0.01}\ {0.01}end{bmatrix}m{x}(0)=egin{bmatrix}   {0.02}\ {0.02}end{bmatrix} 以及 m{x}(0)=egin{bmatrix}   {0.03}\ {0.03}end{bmatrix} ,把 egin{bmatrix}   {x_1}\ {x_2}end{bmatrix} 在初始條件下的軌跡畫出來,結果如下:

可以看出,如果初始擾動小,其狀態軌跡的區間也小;相反,當初始擾動大的時候,狀態軌跡的區間也變大;但是無論如何,狀態軌跡的區間都是有限的,而且,如果想減小軌跡的區間,只要保證擾動在某範圍內即可。比如對於本範例,要想 {displaystyle |x(t)-x_e |< 0.01} ,只要保證初始擾動 {displaystyle |x_{0}-x_e |< 0.01} 即可。

翻譯成嚴謹的數學語言就是:對於任意的 epsilon>0 ,存在 delta>0 ,使得如果 {displaystyle |x(0)-x_e |< delta} ,則對於所有的 t>0 ,都有 {displaystyle |x(t)-x_e |< epsilon}

我們再舉個例子看一下:

egin{equation} egin{aligned}  dot x_1(t)&=x_2+x_1(2-x_1^2-x_2^2)\ dot x_2(t)&=-x_1+x_2(2-x_1^2-x_2^2)  end{aligned} end{equation}

求解稍微複雜一點,我們直接畫出軌跡圖如下:

顯然 egin{bmatrix}   {0}\ {0}end{bmatrix} 是其穩定點。從軌跡圖中可以看出,無論是小擾動(初始點在穩定零點附近),還是大擾動,狀態軌跡最終都趨向一個固定的圓。我們套用一下李雅普諾夫穩定定義看一下,該系統是否穩定。我們不妨取 epsilon=1 ,即在零點周圍畫個半徑為1的圓,看看能否存在 delta ,使得 {displaystyle |x(0)-x_e |< delta} ,則對於所有的 t>0 ,都有 {displaystyle |x(t)-x_e |<1}。顯然, delta 是不存在的,因此,該系統是不穩定的。

  • 什麼是漸進穩定

請看如下方程:

egin{equation} egin{aligned}  dot x_1(t)&=-x_1\ dot x_2(t)&=x_1+x_2-x_2^3  end{aligned} end{equation}

egin{equation} egin{aligned}  dot x_1(t)&=0\ dot x_2(t)&=0  end{aligned} end{equation} ,很容易計算該系統的穩定點為: egin{bmatrix}   {0}\ {0}end{bmatrix}egin{bmatrix}   {0}\ {1}end{bmatrix}egin{bmatrix}   {0}\ {-1}end{bmatrix} ,其軌跡圖為:

可見,對於穩定點 egin{bmatrix}   {0}\ {1}end{bmatrix}egin{bmatrix}   {0}\ {-1}end{bmatrix} ,存在 delta>0 ,比如圖中的 delta=0.1 ,在 {displaystyle |x(t)-x_e |<0.1} 的區間內,狀態軌跡最終都收斂到這兩個穩定點上,因此是漸進穩定的。

而對於點  egin{bmatrix}   {0}\ {0}end{bmatrix} ,我們在其周圍添加小擾動,發現無論擾動多麼小,軌跡線都會偏離該穩定點,因此屬於不穩定點。

  • 什麼是大範圍漸進穩定

通過前面的例子,我們發現,同一個系統裡面,可能有漸進穩定點,也可能有不穩定點,我們還不容易確定系統是否穩定。再來看一個簡單的例子:

egin{bmatrix}   dot{x_1}\ dot{x_2}end{bmatrix}= egin{bmatrix}   1 &-3\ 5&-2end{bmatrix}egin{bmatrix}   {x_1}\ {x_2}end{bmatrix}

其軌跡圖為:

可見,對於任何擾動,最後都會收斂到一個穩定點,這就是大範圍內漸進穩定。對於線性系統來說,很容易證明,如果平衡態是漸進穩定的,也必然是大範圍漸進穩定的。

前面我們的文章說了,對於線性時不變系統,只要矩陣 A 的特徵值具有負實部,那系統就是大範圍漸進穩定的。

  • 什麼是不穩定

假設有一個系統,狀態方程如下:

egin{bmatrix}   dot{x_1}\ dot{x_2}end{bmatrix}= egin{bmatrix}   1 &3\ -5&2 end{bmatrix}egin{bmatrix}   {x_1}\ {x_2}end{bmatrix}

同樣隨機佈置一些初始點,看看狀態的軌跡如何:

很明顯,所有初始狀態的軌跡都呈現螺旋發散狀,從數學上看,特徵值 lambda=1.5pm 3.84i ,具有共軛根,但是實部是正的,因此發散。

再來看另外一個例子,狀態方程為

egin{bmatrix}   dot{x_1}\ dot{x_2}end{bmatrix}= egin{bmatrix}   4 &-2\ 1&-3 end{bmatrix}egin{bmatrix}   {x_1}\ {x_2}end{bmatrix}

狀態量的軌跡為:

貌似也呈現發散狀,但是和前面的例子有所不同,軌跡貌似呈現指數形式,計算狀態方程特徵值為 lambda=egin{bmatrix}   3.7\-2.7end{bmatrix} ,有一個不穩定的實根,導致系統發散。由以上兩例可以看出,發散的軌跡可以有多種多樣。


三、李雅普諾夫第一法

前面我們把穩定點分了幾類,我們會發現,還是線性系統比較好計算,而且性能比較好,只要保證矩陣 A 具有負實部,就是大範圍一致穩定的。因此,我們如果把方程的形式由

dot {m{x}}(t)=f(m{x}(t))

改成

dot {m{x}}(t)=Am{x}(t)

就會帶來很多方便。這就需要將非線性系統在平衡態附近線性化,然後討論線性化系統的特徵值分佈來研究原非線性系統的穩定性問題。這種方法,就是李雅普諾夫在他論文中提到的第一種方法,稱之為第一法,也叫間接法。

我們再來分析一下前面所說的倒立擺的例子:

egin{equation} egin{aligned}  dot x_1(t)&=x_2\ dot x_2(t)&=sin(x_1)-x_2  end{aligned} end{equation}

這是一個典型的非線性方程,我們前面計算過了,其有多個穩定點 egin{bmatrix}   {pm npi}& {0}end{bmatrix} ,我們不妨來研究一下 egin{bmatrix}   {pi}& {0}end{bmatrix} 這個點,其附件的狀態軌跡為:

現在將原來的非線性方程線性化,為方便起見,我們定義 z_1=x_1-pi 以及 z_2=x_2,於是可以得到:

sin(pi+z_1)=-sinz_1approx -z_1

於是,原非線性方程就變為:

egin{bmatrix}   dot{z_1}\ dot{z_2}end{bmatrix}= egin{bmatrix}   0 &1\ -1&-1 end{bmatrix}egin{bmatrix}   {z_1}\ {z_2}end{bmatrix}

在新的坐標系下,穩定變為 egin{bmatrix}   {0}\ {0}end{bmatrix} ,其軌跡為:

可見,與原軌跡還是比較接近的。一般的書上,對於李雅普諾夫第一法都是一筆帶過,其實在工程實踐中,第一法應用非常多,比如複雜的飛機飛行控制,就是將飛機模型線性化成多個線性化模型進行設計,感興趣的可參見Design an LQR Servo Controller in Simulink。

https://ch.mathworks.com


四、李雅普諾夫第二法

第二法就比較天才了,來源於一個樸素的想法:穩定的系統能量總是不斷被耗散的,李雅普諾夫通過定義一個標量函數 V(m{x}) (通常能代表廣義能量)來分析穩定性。這種方法的避免了直接求解方程,也沒有進行近似線性化,所以也一般稱之為直接法。如果 標量函數V(x) 滿足:

  • V(m{x})=0  	ext{if and only if } m{x}=0
  • V(m{x})>0  	ext{if and only if } m{x}<br />
e0
  • dot{V}(m{x})=frac{d}{dt}V(m{x})=sum_{i=1}^{n}frac{partial V}{partial x_i}f_i(x)leq 0 	ext{when}  m{x} 
e 0

則稱系統在李雅普諾夫意義下是穩定的,特別的,若 m{x} 
e 0 時,有 dot{V}(m{x}) <0 ,則系統是漸進穩定的。舉個例子:

 egin{equation} egin{aligned}  dot {x}_1(t)&=x_2-x_1(x_1^2+x_2^2)\ dot {x}_2(t)&=-x_1-x_2(x_1^2+x_2^2)  end{aligned} end{equation}

如果我們定義李雅普諾夫函數

V(m{x})=x_1^2+x_2^2

則有

egin{equation} egin{aligned} dot {V}(m{x})&=2x_1 dot x_1+2x_2 dot x_2 \ &=-2(x_1^2+x_2^2)  end{aligned} end{equation}

顯然當 m{x} 
e 0 時,有 dot {V}(m{x})<0 ,所以系統是漸進穩定的。

可見,如果能合理的選定李雅普諾夫函數,則非常容易的判斷系統的穩定性。不過遺憾的是,對於複雜的系統,李雅普諾夫函數的選擇可以稱得上一門玄學,所以,對於工程師而言,筆者還是喜歡李雅普諾夫第一法。


五、MATLAB代碼

鑒於很多知友對文章中插圖的MATLAB代碼感興趣,先將部分代碼附錄如下,其餘按格式更改即可。

首先是定義狀態方程函數:

function d=dxdt(t,x)

d=[ x(2)+x(1)*(2-x(1)^2-x(2)^2);
-x(1)+x(2)*(2-x(1)^2-x(2)^2) ];

根據狀態方程,畫出變數軌跡:

figure(color,w);
hold on
for theta=[0:20]*pi/10
x0=3*[cos(theta);sin(theta)];%定義初始值數組
[t,x]=ode45(@dxdt,[0:0.1:8],x0);
plot(x(:,1),x(:,2),linewidth,0.5)
quiver(x(:,1),x(:,2),gradient(x(:,1)),gradient(x(:,2)),linewidth,3.0);%增加軌跡方向箭頭
end
for theta=[0:2:20]*pi/10
x0=1e-5*[cos(theta);sin(theta)];
[t,x]=ode45(@dxdt3,[0:0.2:20],x0);
plot(x(:,1),x(:,2),linewidth,0.5)
quiver(x(:,1),x(:,2),gradient(x(:,1)),gradient(x(:,2)),linewidth,1.5)
xlabel(x1,FontSize,18,FontWeight,bold,Color,r);
ylabel(x2,FontSize,18,FontWeight,bold,Color,r)
title(Made by J PAN)
end

推薦閱讀:

相關文章