good books for learning linear matrix inequality with MATLAB examples

2 ビュー (過去 30 日間)
Ayesha ayub
Ayesha ayub 2018 年 11 月 14 日
回答済み: Waseem Abbasi 2019 年 7 月 3 日
Hello,
i am in my reasurch phase and badly stuck in LMI coding using matlab. can anyone suggest me some good books on LMI with matlab example please. iam trying to solve the following problem (from "Monitoring of stealthy attack in networked control systems") :
so far i have coded this but it gives me infeasible sol whereas in paper thr range of lambda is [0,0.72]:
clc
close all
clear all
%%%%%%%%%%%%%%%%%%%%%%%%%%SYSTEM DYNAMICS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
A=[0.6 0 0.34 0.35 ;
0 0.8 0 0.37 ;
0 0 0.5 0 ;
0 0 0 0.9];
B=[1 0 0; 1 0 1; 0 0 2; 0 1 1];
C=[1 0 0 0; 0 1 0 0; 0 0 0 1];
f=[0 0 1 0]';
F=A*f;
H=pinv(C*F);
Ab=A-A*F*H*C;
bta=[ 1 0 1;
2 1 1 ];
sigma=bta*(eye(3)-C*F*H);
% rank(sigma);
cb=sigma*C;
Kb =[0.0057 -0.0028;
-0.0275 0.0618;
0.0041 -0.0178;
0.0077 0.0239];
K =[0.0276 0.0230 0.0229;
0.0252 0.0612 0.0338;
0.0015 -0.0001 -0.0001;
0.0162 0.0235 0.0313 ];
%%
lambda=0;
k=1;
l=zeros(1,91);
n=zeros(1,91);
%%
%LMI PART
for i=1:91
i
setlmis([]);
Y=lmivar(1,[4,1]) ;
%defining first lmi
% |Y sqrt(1-lamda)(YA+KC) sqrt( lamda)(YA_bar+K_bar*C_bar)|
% | sqrt(1-lamda)(YA+KC)' Y 0 | >0
% | sqrt( lamda)(YA_bar+K_bar*C_bar))' 0 Y |
%%
%row 1 (% |Y sqrt(1-lamda)(YA+KC) sqrt( lamda)(YA_bar+K_bar*C_bar)|)
lmiterm([-1 1 1 Y], 1,1); % Y>0
lmiterm([-1 1 2 Y], 1,sqrt(1-lambda)*A); %sqrt(1-lmd)*(YA)
lmiterm([-1 1 2 0], sqrt(1-lambda)*K*C); %sqrt(1-lmd)*(KC)
lmiterm([-1 1 3 Y], 1,sqrt(lambda)*Ab); %sqrt(lmd)*(YA_bar)
lmiterm([-1 1 3 0], sqrt(lambda)*Kb*cb); %sqrt(lmd)*(K_bar C_bar)
%%
%row 2 (|Y 0|)
lmiterm([-1 2 2 Y], 1,1); %Y>0
lmiterm([-1 2 3 0],zeros(4,4)); %4X4 block of zeros
%%
%row 3 (| Y |)
lmiterm([-1 3 3 Y], 1,1); %Y>0
%%
% defining 2nd lmi (Y<I ) (ignoring this LMI is feasible)
lmiterm([2 1 1 Y],1,1); %Y < ...
lmiterm([-2 1 1 0],eye(4)); % ... < I
%%
syslmis=getlmis ;
[tmin,Yfes] = feasp(syslmis);
Y=dec2mat(syslmis,Yfes,Y) ;
Y1(:,:,k)=Y;
K1(:,:,k)=K;
Kb1(:,:,k)=Kb;
L(:,k)=lambda;
%%
a=Y1(:,:,i);
b=Y1(:,:,i)*A+(K1(:,:,i)*C);
c=Y1(:,:,i)*Ab+(Kb1(:,:,i)*cb);
D=[a sqrt(1-L(:,i))*b sqrt(L(:,i))*c;
sqrt(1-L(:,i))*b' a zeros(4,4);
sqrt(L(:,i))*c' zeros(4,4) a];
%%
[R1,p1] = chol(D); %p1=0 implies D>0
[R2,p2] = chol(Y); %p2=0 implies Y>0
[p1,p2]
if(p1==0 && p2==0)
display('__________________________________positive definite____________________________________________')
dummy(:,k)=k ; %for picking lamda from L with index in dummy for wich D>0 & Y>0
lmd(:,k)=lambda;
end
if(p1~=0 || p2~=0)
dummy(:,k)=0;
% lmd(:,k)=-1;s
display('__________________________________not positive definite________________________________________')
end
lambda=lambda+0.01;
k=k+1;
display('_______________________________________________________________________________________________')
end
display(' all lambdas for which Y>0 and D(Y)>0')
lmd

回答 (1 件)

Waseem Abbasi
Waseem Abbasi 2019 年 7 月 3 日
I think as far LMI are concerned its better to use Yalimp toolbox as it solve the LMI problem quite effeciently and easily.

カテゴリ

Help Center および File ExchangeLMI Solvers についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by