Lyapunov、Sylvester和Riccati方程的Matlab求解

一、Lyapunov方程

1、連續Lyapunov方程

連續Lyapunov方程可以表示爲

                                                                    

Lyapunov方程來源與微分方程穩定性理論,其中要求C爲對稱正定的n×n方陣,從而可以證明X亦爲n×n對稱矩陣,這類方程直接求解比較困難,不過有了Matlab中lyap()函數,就簡單多了。

>> A=[1 2 3;4 5 6;7 8 0]

   C=-[10 5 4;5 6 7;4 7 9]

>> X=lyap(A,C)

 

2、Lyapunov方程的解析解

利用Kroncecker乘積的表示方法,可以將Lyapunov方程寫爲

                                                                

可見,方程有唯一解的條件不侷限於C對稱正定,只要滿足非奇異即可保證方程唯一解。同時也打破了傳統觀念,C必須對稱正定的。

function x=lyap2(A,C)

%Lyapunov方程的符號解法

n=size(C,1);

A0=kron(A,eye(n))+kron(eye(n),A);

c=C(:);

x0=-inv(A0)*c;

x=reshape(x0,n,n)

 

下面看一個示例,體會下符號解法:

>>A=[1 2 3;4 5 6;7 8 0];

>>C=-[10 5 4;5 6 7;4 7 9];

>>x=lyap2(sym(A),sym(C))

x =

[ -71/18,   35/9,   7/18]

[  35/9,   -25/9,   2/9]

[  7/18,    2/9,   -1/9]

 

3、離散Lyapunov方程

離散Lyapunov方程的一般形式爲:

                                                                      

Matlab中直接提供了dlyap()函數求解該方程:X=dlyap(A,Q)

其實,如果A矩陣非奇異,則等式兩邊同時右乘得到:

                                                                    

就可以將其變換成連續的Sylvester方程

                                                                      

其中 

Sylvester方程廣義Lyapunov方程,故離散的Lyapunov方程還可以使用下面的方法求解:

B=-inv(A’)

C=Q*inv(A’)

X=lyap(A,B,C)

下面總結下我們上面的講到的知識點:

X=lyap(A,C)                                 連續Lyapunov方程數值解法

X=lyap2(A,C)                               連續Lyapunov方程符號解法

X=lyap(A,B,C)                          廣義Lyapunov方程,即Sylvester方程

X=dlyap(A,Q)或者X=lyap(A,-inv(A),Q*inv(A))    離散Lyapunov方程

 

二、Sylvester方程Matlab求解

Sylvester方程的一般形式爲

                                                                             

該方程又稱爲廣義的Lyapunov方程,式中An×n方陣Bm×m方陣,X和C是n×m矩陣。Matlab控制工具箱提供了直接的求解該方程的lyap()函數:

A=[8 1 6;3 5 7;4 9 2]

B=[2 3;4 5]

C=[1 2;3 4;5 6]

X=lyap(A,B,C)

 

同理,我們使用Kronecker乘機的形式將原方程進行如下變化:

                                                                         

Lyapunov、Sylvester和Riccati方程的Matlab求解

故可以編寫Sylvester方程的解析解函數:

function X=lyap3(A,B,C)

%Sylvester方程的解析解法

%rewrited by dynamic

%more information

If nargin==2,C=B;B=A';end

[nr,nc]=size(C);

A0=kron(A,eye(nc))+kron(eye(nr),B');

try

    C1=C';

    X0=-inv(A0)*C1(:);

    X=reshape(X0,nc,nr);

catch

    error('Matlabsky提醒您:矩陣奇異!');

end

使用上面的數據,我們試驗下該解析解法

>>X=lyap3(sym(A),B,C)

X =

[   2853/14186,    557/14186,  -9119/14186]

[  11441/56744,   8817/56744,  -50879/56744]

 

 

三、Riccati方程的Matlab求解

Riccati方程是一類很著名的二次型矩陣形式,其一般形式爲

                                                                                   

由於含有矩陣X的二次項,所有Riccati方程求解要Lyapunov方程更難,Matlab控制工具箱提供了are()函數,可以直接求解該函數:

A=[-2 1 -3;-1 0 -2;0 -1 -2]

B=[2 2 -2;-1 5 -2;-1 1 2]

C=[5 -4 4;1 0 4;1 -1 5]

X=are(A,B,C)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章