%D111111111111111111111
clear all; clc;
% =======================
% Matrices du système
% =======================
A = [0 1; -2 -3];
B = [0; 1];
Bw = [0; 1];
C = [1 0];
D = 0;
Dw = 0;
% =======================
% Définition des LMIs
% =======================
setlmis([]);
% Variables de décision
alpha = lmivar(1,[1 1]); % gamma^2
X = lmivar(1,[2 1]); % X sym 2×2
Y = lmivar(2,[1 2]); % Y libre 1×2 (K = Y/X)
% =======================
% 1) Grande LMI H∞
% =======================
L = newlmi;
% Bloc (1,1): AX + BY + X A' + Y' B'
lmiterm([L 1 1 X], A, 1, 's'); % A'X + XA
lmiterm([L 1 1 Y], B, 1, 's'); % BY + Y'B'
% Bloc (1,2): Bw
lmiterm([L 1 2 0], Bw);
% Bloc (1,3): X*C' + Y'*D'
lmiterm([L 1 3 X], 1, C');
lmiterm([L 1 3 -Y], 1, D');
% Bloc (2,2): -gamma^2 I
lmiterm([L 2 2 alpha], -1, 1);
% Bloc (2,3): Dw'
lmiterm([L 2 3 0], Dw');
% Bloc (3,3): -I
lmiterm([L 3 3 0], -1);
% =======================
% 2) X > 0
% =======================
PX = newlmi;
lmiterm([-PX 1 1 X], 1, 1);
% =======================
% 3) alpha > 0
% =======================
Pa = newlmi;
lmiterm([-Pa 1 1 alpha], 1, 1);
% =======================
% Résolution
% =======================
lmi = getlmis;
disp("==== Feasibility test ====")
[tm, xfeas] = feasp(lmi);
tm
% =======================
% Minimisation de gamma^2
% =======================
c = [1 zeros(1, decnbr(lmi)-1)];
[gamma2, xopt] = mincx(lmi, c);
alpha_sol = dec2mat(lmi, xopt, alpha);
gamma = sqrt(alpha_sol)
Xsol = dec2mat(lmi, xopt, X)
Ysol = dec2mat(lmi, xopt, Y)
% Gain H∞ optimal
K = Ysol * inv(Xsol)
DO