Dynamic-Calibration/utils/YALMIP-master/solvers/callstrul.m

30 lines
932 B
Mathematica
Raw Normal View History

2019-12-18 11:25:45 +00:00
function diagnostic = callstrul(F,h,options)
F_new = [];
for i = 1:length(F)
if ~is(F(i),'lmi')
F_new = F_new + F(i);
else
X = sdpvar(F(i));
[l,m,r]=factors(X);
if isempty(m)
F_new = F_new + F(i);
else
[L1,R1,A1,M1,negated_cont1,negated_disc1,epsilon1,delta1,numpos1,xindicies,Pindicies] = preprocess_constraint(X);
F_new = F_new + assignschur(F(i),'HKM_schur_LR_structure',L1,R1,A1,M1,negated_cont1,negated_disc1,epsilon1,delta1,numpos1,xindicies,Pindicies);
end
end
end
if nargin < 2
% Equalities are converted internally in SDPT3 to double-sided
% inequalities. This messes up our Schur compiler, hence we do it
% already outside SDPT3
options = sdpsettings('solver','sdpt3','removeequalities',-1);
else
options.solver = 'sdpt3';
options.removeequalities = -1;
end
diagnostic = solvesdp(F_new,h,options);