nw = 1; % number of process noise parcel
nv = 2; % number of measurement noise parcel
%------------- Initializing variables --------------%
TT = [eye(n) ; C]; alp1 = [eye(n) ; zeros(m,n)]; alp2 = [zeros(n,m) ; eye(m)];
PTT = (TT'*TT)\TT'; % pseudo inverse
Psi = eye(n+m) - TT*PTT;
t = sdpvar(1);
W = sdpvar(n,m,'full');
Y = sdpvar(n,n+m,'full');
P = sdpvar(n,n,'sym');
O1 = P*PTT*alp1*A + Y*Psi*alp1*A - W*C;
O2 = P*PTT*alp1*E + Y*Psi*alp1*E;
O3 = -W*F;
O4 = -P*PTT*alp2*F - Y*Psi*alp2*F;
%---------------- Constraints -----------------%
LMI = blkdiag(eye(n)-P , -t*eye(nw), -t*eye(nv), -t*eye(nv), -P);
LMI(end+1-n:end,1:n) = O1;
LMI(1:n,end+1-n:end) = O1';
LMI(end+1-n:end,n+1:n+nw) = O2;
LMI(n+1:n+nw,end+1-n:end) = O2';
LMI(end+1-n:end,n+nw+1:n+nw+nv) = O3;
LMI(n+nw+1:n+nw+nv,end+1-n:end) = O3';
LMI(end+1-n:end,n+nw+nv+1:n+nw+2*nv) = O4;
LMI(n+nw+nv+1:n+nw+2*nv,end+1-n:end) = O4';
ops = sdpsettings('solver','sedumi','sedumi.eps',1e-12,'verbose',2);
const = [sqrt(t) >= 1e-5 , P >= 0 , trace(P) == 11.0025 , LMI <= 0 , trace(LMI) == -17.17];
%---------------- Objective function ------------------%
goal = t; % to minimize
%------------------ Solution ----------------%
sol = optimize(const , goal, ops);
%----------------- Analyze error flags -----------------%
if sol.problem == 0
T = PTT*alp1 + value(P)\value(Y)*Psi*alp1
N = PTT*alp2 + value(P)\value(Y)*Psi*alp2
L = value(P)\value(W)
gamma = sqrt(value(t))