Dynamic-Calibration/utils/YALMIP-master/extras/@constraint/constraint.m

85 lines
2.2 KiB
Matlab
Executable File

function F = constraint(X,quantifier,Y)
% Internal class for constraint list
superiorto('sdpvar');
superiorto('double');
superiorto('logical');
% Evaluate
switch quantifier
case '>'
Z = X - Y;
case '>='
Z = X - Y;
case '<'
Z = Y - X;
case '<='
Z = Y - X;
case '=='
Z = Y - X;
otherwise
error('Quantifier not supported')
end
if isa(Z,'double')
if size(Z,1)==size(Z,2) && norm(Z-Z',inf)<1e-12 && ~isequal(quantifier,'==')
checkSDP = 1;
else
checkSDP = 0;
end
if checkSDP
if min(eig(Z))>=0
warning('SDP constraint evaluated to trivial true.')
F = [];
return
else
error('SDP constraint evaluated to trivial false (no decision variable in constraint)')
end
else
Z = Z(:);
switch quantifier
case '=='
if all(Z)==0
warning('Equality constraint evaluated to trivial true.')
F = [];
return
else
error('Equality constraint evaluated to trivial false (no decision variable in constraint)')
end
case {'<=','>='}
if all(Z>=0)
warning('Inequality constraint evaluated to trivial true.')
F = [];
return
else
error('Inequality constraint evaluated to trivial false (no decision variable in constraint)')
end
case {'<','>'}
if all(Z>0)
warning('Inequality constraint evaluated to trivial true.')
F = [];
return
else
error('Inequality constraint evaluated to trivial false (no decision variable in constraint)')
end
end
end
end
switch quantifier
case {'>','<'}
F.strict(1) = 1;
case {'>=','<=','=='}
F.strict(1) = 0;
otherwise
error('Quantifier not supported')
end
F.List={X,quantifier,Y};
F.Evaluated{1} = Z;
F.ConstraintID = yalmip('ConstraintID');
F.tag{1} = '';
F = class(F,'constraint');