-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
335b7bf
commit 074b102
Showing
5 changed files
with
418 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
function OmegaVal=LMI_TAC16_rem1(A,B,C,K,h,epsilon,delta) | ||
% This MATLAB program checks the feasibility of LMIs from Remark 1 of the paper | ||
% A. Selivanov and E. Fridman, "Event-Triggered H-infinity Control: a Switching Approach," IEEE Transactions on Automatic Control, 2016. | ||
|
||
% The program uses YALMIP parser (http://users.isy.liu.se/johanl/yalmip/) | ||
% and SeDuMi solver (http://sedumi.ie.lehigh.edu/) | ||
|
||
% Input: | ||
% A,B,C - the parameters of the system (1); | ||
% K - the static controller gain; | ||
% h - the sampling time in (5); | ||
% epsilon - the event-triggering parameter from (5); | ||
% delta - a desired decay rate; | ||
|
||
% Output: | ||
% OmegaVal - the value of Omega from (5). If OmegaVal is empty, the LMIs are not feasible. | ||
|
||
n=size(A,1); | ||
l=size(C,1); | ||
|
||
%% Decision variables | ||
P=sdpvar(n); | ||
U=sdpvar(n); | ||
X=sdpvar(n,n,'f'); | ||
X1=sdpvar(n,n,'f'); | ||
P2=sdpvar(n,n,'f'); | ||
P3=sdpvar(n,n,'f'); | ||
Y1=sdpvar(n,n,'f'); | ||
Y2=sdpvar(n,n,'f'); | ||
Y3=sdpvar(n,n,'f'); | ||
Omega=sdpvar(l); | ||
|
||
%% The LMI for Xi | ||
Xi=blkvar; | ||
Xi(1,1)=P+h*(X+X')/2; | ||
Xi(1,2)=h*X1-h*X; | ||
Xi(2,2)=-h*X1-h*X1'+h*(X+X')/2; | ||
Xi=sdpvar(Xi); | ||
|
||
%% The LMI with Psi0 | ||
Psi0=blkvar; | ||
Psi0(1,1)=A'*P2+P2'*A+2*delta*P-Y1-Y1'-(1/2-delta*h)*(X+X')+epsilon*C'*Omega*C; | ||
Psi0(1,2)=P-P2'+A'*P3-Y2+h*(X+X')/2; | ||
Psi0(1,3)=Y1'-P2'*B*K*C-Y3+(1-2*delta*h)*(X-X1); | ||
Psi0(1,4)=-P2'*B*K; | ||
Psi0(2,2)=-P3-P3'+h*U; | ||
Psi0(2,3)=Y2'-P3'*B*K*C-h*(X-X1); | ||
Psi0(2,4)=-P3'*B*K; | ||
Psi0(3,3)=Y3+Y3'-(1/2-delta*h)*(X+X'-2*X1-2*X1'); | ||
Psi0(4,4)=-Omega; | ||
Psi0=sdpvar(Psi0); | ||
|
||
%% The LMI with Psi1 | ||
Psi1=blkvar; | ||
Psi1(1,1)=A'*P2+P2'*A+2*delta*P-Y1-Y1'-(X+X')/2+epsilon*C'*Omega*C; | ||
Psi1(1,2)=P-P2'+A'*P3-Y2; | ||
Psi1(1,3)=Y1'-P2'*B*K*C-Y3+X-X1; | ||
Psi1(1,4)=h*Y1'; | ||
Psi1(1,5)=-P2'*B*K; | ||
Psi1(2,2)=-P3-P3'; | ||
Psi1(2,3)=Y2'-P3'*B*K*C; | ||
Psi1(2,4)=h*Y2'; | ||
Psi1(2,5)=-P3'*B*K; | ||
Psi1(3,3)=Y3+Y3'-1/2*(X+X'-2*X1-2*X1'); | ||
Psi1(3,4)=h*Y3'; | ||
Psi1(4,4)=-h*U*exp(-2*delta*h); | ||
Psi1(5,5)=-Omega; | ||
Psi1=sdpvar(Psi1); | ||
|
||
%% Solution of LMIs | ||
LMIs=[P>=0, U>=0, Omega>=0, Xi>=0, Psi0<=0, Psi1<=0]; | ||
options=sdpsettings('solver','sedumi','verbose',0); | ||
sol=optimize(LMIs,[],options); | ||
|
||
OmegaVal=[]; | ||
if sol.problem == 0 | ||
[primal,~]=check(LMIs); | ||
if min(primal)>=0 && all(primal([1,2,4])>0) | ||
OmegaVal=double(Omega); | ||
end | ||
else | ||
yalmiperror(sol.problem); | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
function OmegaVal=LMI_TAC16_rem3(A,B1,B2,C1,D1,C2,D2,K,gamma,h,etaM,epsilon,delta) | ||
% This MATLAB program checks the feasibility of LMIs from Remark 3 of the paper | ||
% A. Selivanov and E. Fridman, "Event-Triggered H-infinity Control: a Switching Approach," IEEE Transactions on Automatic Control, 2016. | ||
|
||
% The program uses YALMIP parser (http://users.isy.liu.se/johanl/yalmip/) | ||
% and LMILAB solver of Robust Control Toolbox (http://www.mathworks.com/products/robust/) | ||
|
||
% Input: | ||
% A,B1,B2,C1, | ||
% D1,C2,D2 - the parameters of the system (15); | ||
% K - the static controller gain; | ||
% gamma - the L_2-gain from (20); | ||
% h - the sampling time in (5); | ||
% etaM - the upper bound for the overall network-induced delay; | ||
% epsilon - the event-triggering parameter from (5); | ||
% delta - a desired decay rate; | ||
|
||
% Output: | ||
% OmegaVal - the value of Omega from (5). If OmegaVal is empty, the LMIs are not feasible. | ||
|
||
n=size(A,1); | ||
l=size(C2,1); | ||
|
||
%% Decision variables | ||
P=sdpvar(n); | ||
S0=sdpvar(n); | ||
S1=sdpvar(n); | ||
R0=sdpvar(n); | ||
R1=sdpvar(n); | ||
G0=sdpvar(n,n,'f'); | ||
G1=sdpvar(n,n,'f'); | ||
Omega=sdpvar(l); | ||
|
||
%% Notations | ||
tauM=h+etaM; | ||
H=etaM^2*R0+h^2*R1; | ||
|
||
%% The LMI for Psi (tau(t)\in(etaM,tauM]) | ||
Psi=blkvar; | ||
Psi(1,1)=A'*P+P*A+2*delta*P+S0-exp(-2*delta*etaM)*R0+C1'*C1; | ||
Psi(1,2)=exp(-2*delta*etaM)*R0; | ||
Psi(1,4)=P*B2*K*C2+C1'*D1*K*C2; | ||
Psi(1,5)=P*B2*K+C1'*D1*K; | ||
Psi(1,6)=P*B1; | ||
Psi(1,7)=P*B2*K*D2+C1'*D1*K*D2; | ||
Psi(1,8)=A'*H; | ||
Psi(2,2)=exp(-2*delta*etaM)*(S1-S0-R0)-exp(-2*delta*tauM)*R1; | ||
Psi(2,3)=exp(-2*delta*tauM)*G1; | ||
Psi(2,4)=exp(-2*delta*tauM)*(R1-G1); | ||
Psi(3,3)=-exp(-2*delta*tauM)*(R1+S1); | ||
Psi(3,4)=exp(-2*delta*tauM)*(R1-G1'); | ||
Psi(4,4)=exp(-2*delta*tauM)*(G1+G1'-2*R1)+(D1*K*C2)'*D1*K*C2+epsilon*C2'*Omega*C2; | ||
Psi(4,5)=(D1*K*C2)'*D1*K; | ||
Psi(4,7)=(D1*K*C2)'*D1*K*D2+epsilon*C2'*Omega*D2; | ||
Psi(4,8)=(B2*K*C2)'*H; | ||
Psi(5,5)=(D1*K)'*D1*K-Omega; | ||
Psi(5,7)=(D1*K)'*D1*K*D2; | ||
Psi(5,8)=(B2*K)'*H; | ||
Psi(6,6)=-gamma^2*eye(size(B1,2)); | ||
Psi(6,8)=B1'*H; | ||
Psi(7,7)=(D1*K*D2)'*D1*K*D2+epsilon*D2'*Omega*D2-gamma^2*eye(size(D2,2)); | ||
Psi(7,8)=(B2*K*D2)'*H; | ||
Psi(8,8)=-H; | ||
Psi=sdpvar(Psi); | ||
|
||
%% The LMI for Phi (tau(t)\in[0,etaM]) | ||
Phi=blkvar; | ||
Phi(1,1)=A'*P+P*A+2*delta*P+S0-exp(-2*delta*etaM)*R0+C1'*C1; | ||
Phi(1,2)=exp(-2*delta*etaM)*G0; | ||
Phi(1,4)=P*B2*K*C2+exp(-2*delta*etaM)*(R0-G0)+C1'*D1*K*C2; | ||
Phi(1,5)=P*B2*K+C1'*D1*K; | ||
Phi(1,6)=P*B1; | ||
Phi(1,7)=P*B2*K*D2+C1'*D1*K*D2; | ||
Phi(1,8)=A'*H; | ||
Phi(2,2)=exp(-2*delta*etaM)*(S1-S0-R0)-exp(-2*delta*tauM)*R1; | ||
Phi(2,3)=exp(-2*delta*tauM)*R1; | ||
Phi(2,4)=exp(-2*delta*etaM)*(R0-G0'); | ||
Phi(3,3)=-exp(-2*delta*tauM)*(R1+S1); | ||
Phi(4,4)=exp(-2*delta*etaM)*(G0+G0'-2*R0)+(D1*K*C2)'*D1*K*C2+epsilon*C2'*Omega*C2; | ||
Phi(4,5)=(D1*K*C2)'*D1*K; | ||
Phi(4,7)=(D1*K*C2)'*D1*K*D2+epsilon*C2'*Omega*D2; | ||
Phi(4,8)=(B2*K*C2)'*H; | ||
Phi(5,5)=(D1*K)'*D1*K-Omega; | ||
Phi(5,7)=(D1*K)'*D1*K*D2; | ||
Phi(5,8)=(B2*K)'*H; | ||
Phi(6,6)=-gamma^2*eye(size(B1,2)); | ||
Phi(6,8)=B1'*H; | ||
Phi(7,7)=(D1*K*D2)'*D1*K*D2+epsilon*D2'*Omega*D2-gamma^2*eye(size(D2,2)); | ||
Phi(7,8)=(B2*K*D2)'*H; | ||
Phi(8,8)=-H; | ||
Phi=sdpvar(Phi); | ||
|
||
%% Park's conditions | ||
Park0=[R0 G0; G0' R0]; | ||
Park1=[R1 G1; G1' R1]; | ||
|
||
%% Solution of LMIs | ||
LMIs=[P>=0, S0>=0, S1>=0, R0>=0, R1>=0, Omega>=0, Phi<=0, Psi<=0, Park0>=0, Park1>=0]; | ||
options=sdpsettings('solver','lmilab','verbose',0); | ||
sol=optimize(LMIs,[],options); | ||
|
||
OmegaVal=[]; | ||
if sol.problem == 0 | ||
primal=check(LMIs); | ||
if min(primal)>=0 && primal(1)>0 | ||
OmegaVal=double(Omega); | ||
end | ||
else | ||
yalmiperror(sol.problem); | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
function OmegaVal=LMI_TAC16_th1(A,B,C,K,h,epsilon,delta) | ||
% This MATLAB program checks the feasibility of LMIs from Theorem 1 of the paper | ||
% A. Selivanov and E. Fridman, "Event-Triggered H-infinity Control: a Switching Approach," IEEE Transactions on Automatic Control, 2016. | ||
|
||
% The program uses YALMIP parser (http://users.isy.liu.se/johanl/yalmip/) | ||
% and SeDuMi solver (http://sedumi.ie.lehigh.edu/) | ||
|
||
% Input: | ||
% A,B,C - the parameters of the system (1); | ||
% K - the static controller gain; | ||
% h - the waiting time of (10); | ||
% epsilon - the event-triggering parameter from (10); | ||
% delta - a desired decay rate; | ||
|
||
% Output: | ||
% OmegaVal - the value of Omega from (10). If OmegaVal is empty, the LMIs are not feasible. | ||
|
||
n=size(A,1); | ||
l=size(C,1); | ||
|
||
%% Decision variables | ||
P=sdpvar(n); | ||
U=sdpvar(n); | ||
X=sdpvar(n,n,'f'); | ||
X1=sdpvar(n,n,'f'); | ||
P2=sdpvar(n,n,'f'); | ||
P3=sdpvar(n,n,'f'); | ||
Y1=sdpvar(n,n,'f'); | ||
Y2=sdpvar(n,n,'f'); | ||
Y3=sdpvar(n,n,'f'); | ||
Omega=sdpvar(l); | ||
|
||
%% The LMI for Xi | ||
Xi=blkvar; | ||
Xi(1,1)=P+h*(X+X')/2; | ||
Xi(1,2)=h*X1-h*X; | ||
Xi(2,2)=-h*X1-h*X1'+h*(X+X')/2; | ||
Xi=sdpvar(Xi); | ||
|
||
%% The LMI for Phi | ||
Phi=blkvar; | ||
Phi(1,1)=P2'*(A-B*K*C)+(A-B*K*C)'*P2+epsilon*C'*Omega*C+2*delta*P; | ||
Phi(1,2)=P+(A-B*K*C)'*P3-P2'; | ||
Phi(1,3)=-P2'*B*K; | ||
Phi(2,2)=-P3'-P3; | ||
Phi(2,3)=-P3'*B*K; | ||
Phi(3,3)=-Omega; | ||
Phi=sdpvar(Phi); | ||
|
||
%% The LMI for Psi0 | ||
Psi0=blkvar; | ||
Psi0(1,1)=A'*P2+P2'*A+2*delta*P-Y1-Y1'-(1/2-delta*h)*(X+X'); | ||
Psi0(1,2)=P-P2'+A'*P3-Y2+h*(X+X')/2; | ||
Psi0(1,3)=Y1'-P2'*B*K*C-Y3+(1-2*delta*h)*(X-X1); | ||
Psi0(2,2)=-P3-P3'+h*U; | ||
Psi0(2,3)=Y2'-P3'*B*K*C-h*(X-X1); | ||
Psi0(3,3)=Y3+Y3'-(1/2-delta*h)*(X+X'-2*X1-2*X1'); | ||
Psi0=sdpvar(Psi0); | ||
|
||
%% The LMI for Psi1 | ||
Psi1=blkvar; | ||
Psi1(1,1)=A'*P2+P2'*A+2*delta*P-Y1-Y1'-(X+X')/2; | ||
Psi1(1,2)=P-P2'+A'*P3-Y2; | ||
Psi1(1,3)=Y1'-P2'*B*K*C-Y3+X-X1; | ||
Psi1(1,4)=h*Y1'; | ||
Psi1(2,2)=-P3-P3'; | ||
Psi1(2,3)=Y2'-P3'*B*K*C; | ||
Psi1(2,4)=h*Y2'; | ||
Psi1(3,3)=Y3+Y3'-1/2*(X+X'-2*X1-2*X1'); | ||
Psi1(3,4)=h*Y3'; | ||
Psi1(4,4)=-h*U*exp(-2*delta*h); | ||
Psi1=sdpvar(Psi1); | ||
|
||
%% Solution of LMIs | ||
LMIs=[P>=0, U>=0, Omega>=0, Xi>=0, Psi0<=0, Psi1<=0, Phi<=0]; | ||
options=sdpsettings('solver','sedumi','verbose',0); | ||
sol=optimize(LMIs,[],options); | ||
|
||
OmegaVal=[]; | ||
if sol.problem == 0 | ||
[primal,~]=check(LMIs); | ||
if min(primal)>=0 && all(primal([1:2,4])>0) | ||
OmegaVal=double(Omega); | ||
end | ||
else | ||
yalmiperror(sol.problem); | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
function OmegaVal=LMI_TAC16_th2(A,B1,B2,C1,D1,C2,D2,K,gamma,h,etaM,epsilon,delta) | ||
% This MATLAB program checks the feasibility of LMIs from Theorem 2 of the paper | ||
% A. Selivanov and E. Fridman, "Event-Triggered H-infinity Control: a Switching Approach," IEEE Transactions on Automatic Control, 2016. | ||
|
||
% The program uses YALMIP parser (http://users.isy.liu.se/johanl/yalmip/) | ||
% and LMILAB solver of Robust Control Toolbox (http://www.mathworks.com/products/robust/) | ||
|
||
% Input: | ||
% A,B1,B2,C1, | ||
% D1,C2,D2 - the parameters of the system (15); | ||
% K - the static controller gain; | ||
% gamma - the L_2-gain from (20); | ||
% h - the waiting time of (10); | ||
% etaM - the upper bound for the overall network-induced delay; | ||
% epsilon - the event-triggering parameter from (10); | ||
% delta - a desired decay rate; | ||
|
||
% Output: | ||
% OmegaVal - the value of Omega from (10). If OmegaVal is empty, the LMIs are not feasible. | ||
|
||
n=size(A,1); | ||
l=size(C2,1); | ||
|
||
%% Decision variables | ||
P=sdpvar(n); | ||
S0=sdpvar(n); | ||
S1=sdpvar(n); | ||
R0=sdpvar(n); | ||
R1=sdpvar(n); | ||
G0=sdpvar(n,n,'f'); | ||
G1=sdpvar(n,n,'f'); | ||
Omega=sdpvar(l); | ||
|
||
%% Notations | ||
tauM=h+etaM; | ||
H=etaM^2*R0+h^2*R1; | ||
|
||
%% The LMI for Psi (tau(t)\in(etaM,tauM]) | ||
Psi=blkvar; | ||
Psi(1,1)=A'*P+P*A+2*delta*P+S0-exp(-2*delta*etaM)*R0+C1'*C1; | ||
Psi(1,2)=exp(-2*delta*etaM)*R0; | ||
Psi(1,4)=P*B2*K*C2+C1'*D1*K*C2; | ||
Psi(1,5)=P*B1; | ||
Psi(1,6)=P*B2*K*D2+C1'*D1*K*D2; | ||
Psi(1,7)=A'*H; | ||
Psi(2,2)=exp(-2*delta*etaM)*(S1-S0-R0)-exp(-2*delta*tauM)*R1; | ||
Psi(2,3)=exp(-2*delta*tauM)*G1; | ||
Psi(2,4)=exp(-2*delta*tauM)*(R1-G1); | ||
Psi(3,3)=-exp(-2*delta*tauM)*(R1+S1); | ||
Psi(3,4)=exp(-2*delta*tauM)*(R1-G1'); | ||
Psi(4,4)=exp(-2*delta*tauM)*(G1+G1'-2*R1)+(D1*K*C2)'*D1*K*C2; | ||
Psi(4,6)=(D1*K*C2)'*D1*K*D2; | ||
Psi(4,7)=(B2*K*C2)'*H; | ||
Psi(5,5)=-gamma^2*eye(size(B1,2)); | ||
Psi(5,7)=B1'*H; | ||
Psi(6,6)=(D1*K*D2)'*D1*K*D2-gamma^2*eye(size(D2,2)); | ||
Psi(6,7)=(B2*K*D2)'*H; | ||
Psi(7,7)=-H; | ||
Psi=sdpvar(Psi); | ||
|
||
%% The LMI for Phi (tau(t)\in[0,etaM]) | ||
Phi=blkvar; | ||
Phi(1,1)=A'*P+P*A+2*delta*P+S0-exp(-2*delta*etaM)*R0+C1'*C1; | ||
Phi(1,2)=exp(-2*delta*etaM)*G0; | ||
Phi(1,4)=P*B2*K*C2+exp(-2*delta*etaM)*(R0-G0)+C1'*D1*K*C2; | ||
Phi(1,5)=P*B2*K+C1'*D1*K; | ||
Phi(1,6)=P*B1; | ||
Phi(1,7)=P*B2*K*D2+C1'*D1*K*D2; | ||
Phi(1,8)=A'*H; | ||
Phi(2,2)=exp(-2*delta*etaM)*(S1-S0-R0)-exp(-2*delta*tauM)*R1; | ||
Phi(2,3)=exp(-2*delta*tauM)*R1; | ||
Phi(2,4)=exp(-2*delta*etaM)*(R0-G0'); | ||
Phi(3,3)=-exp(-2*delta*tauM)*(R1+S1); | ||
Phi(4,4)=exp(-2*delta*etaM)*(G0+G0'-2*R0)+(D1*K*C2)'*D1*K*C2+epsilon*C2'*Omega*C2; | ||
Phi(4,5)=(D1*K*C2)'*D1*K; | ||
Phi(4,7)=(D1*K*C2)'*D1*K*D2+epsilon*C2'*Omega*D2; | ||
Phi(4,8)=(B2*K*C2)'*H; | ||
Phi(5,5)=(D1*K)'*D1*K-Omega; | ||
Phi(5,7)=(D1*K)'*D1*K*D2; | ||
Phi(5,8)=(B2*K)'*H; | ||
Phi(6,6)=-gamma^2*eye(size(B1,2)); | ||
Phi(6,8)=B1'*H; | ||
Phi(7,7)=(D1*K*D2)'*D1*K*D2+epsilon*D2'*Omega*D2-gamma^2*eye(size(D2,2)); | ||
Phi(7,8)=(B2*K*D2)'*H; | ||
Phi(8,8)=-H; | ||
Phi=sdpvar(Phi); | ||
|
||
%% Park's conditions | ||
Park0=[R0 G0; G0' R0]; | ||
Park1=[R1 G1; G1' R1]; | ||
|
||
%% Solution of LMIs | ||
LMIs=[P>=0, S0>=0, S1>=0, R0>=0, R1>=0, Omega>=0, Psi<=0, Phi<=0, Park0>=0, Park1>=0]; | ||
options=sdpsettings('solver','lmilab','verbose',0); | ||
sol=optimize(LMIs,[],options); | ||
|
||
OmegaVal=[]; | ||
if sol.problem == 0 | ||
primal=check(LMIs); | ||
if min(primal)>=0 && primal(1)>0 | ||
OmegaVal=double(Omega); | ||
end | ||
else | ||
yalmiperror(sol.problem); | ||
end |
Oops, something went wrong.