2017-04-15 27 views
0

H_infinityコントロールを実装する必要があります。しかし、変数gama^2の宣言方法はわかりません。 A、... Gが行列を知っているMATLAB:LMILABでLMI変数を宣言する方法

min gama 
s.t 
| P  *   *  * | 
| 0  gama^2I  *  * | > 0 
| AZ+BL  E  Z+Z'-G * | 
| CZ+DL  F  0  I | 

が、私は恒等行列であり、P、Z、Lはunknow行列である:

は、これは私の問題です。

これは私のコードです:あなたの助けを事前に

setlmis([]); 

    gama = lmivar(1,[1 1]); 
    Z = lmivar(2,[n,n]); 
    L = lmivar(2,[m,n]); 
    P = lmivar(1,[n,1]); 

    %%------------------ 

    YRL = -newlmi; 

    lmiterm([YRL 1 1 P],1,1);   % term P 
    lmiterm([YRL 2 1 0],0);    % term 0 
    >> lmiterm([YRL 2 2 0],gamaI);   % term gama2I ???? 
    lmiterm([YRL 3 1 Z],A,1);   % term AZ 
    lmiterm([YRL 3 1 L],B,1);   % term BL 
    lmiterm([YRL 3 2 0],E(:,:,i));  % term E 
    lmiterm([YRL 3 3 Z],1,1,'s');  % term Z + Z' 
    lmiterm([YRL 3 3 0],G);   % term G 
    lmiterm([YRL 4 1 Z],FC,1);   % term CZ 
    lmiterm([YRL 4 1 L],D,1)   % term DL 
    lmiterm([YRL 4 2 0],F);    % term F 
    lmiterm([YRL 4 3 0],0);    % term 0 
    lmiterm([YRL 4 4 0],I);    % term I 

    %%------------------ 

    LMISYS = getlmis; 

    nsis = decnbr(LMISYS); 
    c = zeros(nsis,1); 

    for j = 1:nsis 
     gamaj = defcx(LMISYS,j,gama); 
     c(j) = gamaj; 
    end 

    options = [1e-6 0 0 0 0]; 
    [copt,xopt] = mincx(LMISYS,c); 

    gama_sol = c'*xopt 

    K = L_sol * inv(Z_sol) 

感謝。それは

GAMMA2I= lmivar(1,[k 0]); 

として宣言されなければならないので

答えて

0

gama^2Iは、いくつかのサイズkのスカラーブロックでもコード

lmiterm([YRL 2 2 0],gamaI); 

が間違っていることに注意してください。 0[YRL 2 2 0]にあるということは、この用語が一定であることを意味します。正しいコードは

lmiterm([YRL 2 2 GAMMA2I],1,1); 
+0

私はgamaを最小化したいときに 'GAMMA2I = lmivar(1、[k 0]);を宣言できますか? – Lara

+0

とにかくそれをしなければならない – AVK

+0

MATLABが 'gama'と' gama^2'のこの関係を理解し​​ているかどうか疑いがあります。私のコードの最適化問題は正しいですか? – Lara

関連する問題