clc
close all
clear all
%%%% System matrices
A = [1.540, -1.067;
-1.067 -0.485];
B = [0.390, 0.088]';
F = [3.932, -2.025];
phi = (A-B*F);
[W,D] = eig(phi);
V = inv(W);
n = size(A,2);
umin = 1;
umax = 2;
%%% Define the polytope
x = sdpvar(n,1);
alpha1 = sdpvar(n,1);
alpha2 = sdpvar(n,1);
G = [V, -V]';
alpha = [alpha2, alpha1]';
z = G*x;
%%% Offline compuation of Invariant Set
D = V*phi*W;
F_tilda = F*W;
F_tildaplus = max(F_tilda,0);
F_tildaminus = min(F_tilda,0);
D_plus = max(D,0);
D_minus = min(D,0);
Pf = [F_tildaplus, -F_tildaminus;
-F_tildaminus, F_tildaplus];
Pi = [D_plus - eye(size(D_plus)), -D_minus;
-D_minus, D_plus - eye(size(D_plus))];
pf = [umin, umax]';
P = [Pf; Pi];
p = [pf; zeros(2*n,1)];
%%% Optimization to find alpha
% obj = 0;
% cvx_begin sdp
% variable x(n,1)
% z = G*x;
% for i = 1 : length(z)
% obj = obj + log(z(i));
% end
% maximize(obj)
% subject to
% z >= 0
% P*z <= p
% % cvx_solver SeDuMi
% cvx_end
objective = -log(prod(z));
constraints = [z >=0, P*z <= p];
ops = sdpsettings('solver','SeDumi');
diagnostics = optimize(constraints, objective,ops);