Dynamic-Calibration/utils/YALMIP-master/modules/global/presolve_quadratic_psdbound.m

24 lines
818 B
Mathematica
Raw Normal View History

2019-12-18 11:25:45 +00:00
function p = presolve_quadratic_psdbound(p)
if p.K.f + p.K.l > 0
for i = 1:p.K.l + p.K.f
rhs = p.F_struc(i,1);
c = -p.F_struc(i,2:end);
if ~any(c(find(p.variabletype>4))) && all(p.c(find(p.variabletype==2)))
[Q,c] = compileQuadratic(c,p);
Q = Q(p.linears,p.linears);
c = c(p.linears);
[R,e] = chol(Q);
if ~e && nnz(c)==0
A = diag(diag(Q) - sum(abs(Q-diag(diag(Q))),2));
[R,e] = chol(A);
if ~e
U = rhs./diag(A).^.5;
L = -rhs./diag(A).^.5;
p.ub(p.linears) = min([p.ub(p.linears),U],[],2);
p.lb(p.linears) = max([p.lb(p.linears),L],[],2);
end
end
end
end
end