📄 convertquadratics.m
字号:
function [Fconv,no_changed] = convertquadratics(F)
%CONVERTQUADRATICS Internal function to extract quadratic constraints
% Author Johan L鰂berg
% $Id: convertquadratics.m,v 1.7 2004/12/21 13:22:29 johanl Exp $
% ******************************
% LINEAR?
% ******************************
%[nlmi,neq]=size(F);
%itslinear = 1;
%itssigmonial = 0;
itslinear = islinear(F);
if itslinear
Fconv = F;
no_changed = 0;
return
end
itssigmonial = issigmonial(F);
if itssigmonial
Fconv = F;
no_changed = 0;
return
end
Fconv = lmi;
no_changed = 0;
for i = 1:1:length(F)
if is(F(i),'element-wise') & ~is(F(i),'linear') & ~is(F(i),'sigmonial')
% f-c'*x-x'*Q*x>0
[Q,c,f,x,info] = quaddecomp(sdpvar(F(i)));
% [G,info]=nonlineartocone(getconstraint(F(i)));
if info==0
% Yes, quadratic, but convex?
% Change sign definitions
Q = -Q;
c = -c;
f = -f;
% Semi-definite case when only part of x in Q
% Occurs, e.g, in constraints like y'*Q*y < t
used = find(any(Q));Qred=Q(:,used);Qred = Qred(used,:);xred = x(used);
[R,p]=chol(Qred);
if p==0
% Write as second order cone
d = -c'*x-f;
if isa(d,'double') & d==1
Fconv=Fconv + lmi(cone([2*R*xred],1+d));
else
Fconv=Fconv + lmi(cone([2*R*xred;1-d],1+d));
end
no_changed = no_changed + 1;
else
Fconv = Fconv + F(i);
end
else
Fconv = Fconv + F(i);
end
else
Fconv = Fconv + F(i);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -