yalmip('clear')
clear all
load A;
load Ac;
load wo;
% Create a tiny version
A = A(:,1:3);
Ac = Ac(:,1:3);
[ThetaC,~]=size(Ac);
[ThetaSLL1,~] = size(A);
Alfa = sdpvar(1);
Beta = sdpvar(1);
x = sdpvar(size(A,2),1,'full','complex');
ripple=0.5;
Constraints=[];
X = x*x';
for i=1:ThetaC
Constraints=[Constraints, (10^(-ripple/20))^2 <=real(Ac(i,:)*X*Ac(i,:)') <= (10^(+ripple/20))^2];
end
Constraints=[Constraints, -Alfa <= real(A*x) <= Alfa,-Beta <= imag(A*x) <= Beta];
% Try different local solvers
% Takes 10 seconds when we keep 3 columns using ipopt
% Takes 20 seconds when we keep 6 columns
% Takes 80 seconds when we keep 12 columns
% Takes 65 seconds when we keep 20 columns
% Takes 107 seconds when we keep 30 columns
% Takes 172 seconds when we keep 40 columns
solvesdp(Constraints,Alfa+Beta,sdpsettings('solver','ipopt'))
solvesdp(Constraints,Alfa+Beta,sdpsettings('solver','fmincon'))
% Try global solver
% Uses undocumented hack to turn off all bound-propagation
solvesdp([Constraints, -100 <= [real(x);imag(x);Alfa;Beta] <= 100],Alfa+Beta,sdpsettings('solver','bmibnb','bmibnb.strengthscheme',[]))