Dynamic-Calibration/utils/YALMIP-master/extras/@lmi/is.m

208 lines
6.7 KiB
Matlab
Executable File

function YESNO = is(F,property)
%IS Check property of constraint.
% d = IS(x,property) returns 1 if 'property' holds
%
% Properties possible to test are: 'elementwise', 'sdp',
% 'socc', 'equality', 'lmi', 'linear', 'kyp', 'sos'
if length(F.LMIid)==0
YESNO = 0;
else
F = flatten(F);
YESNO=zeros(length(F.LMIid),1);
switch property
case 'dualized'
YESNO = F.dualized == 1;
case 'chance'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = ~isempty(Fi.confidencelevel);
end
case 'meta'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==56);
end
case 'equality'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==3);
end
case {'element-wise','elementwise'}
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==2);
end
case {'socc','socp'}
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==4);
end
case {'vecsocp'}
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==54);
end
case 'pcone'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==20);
end
case 'sdpcone'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = is(Fi.data,'sdpcone');
end
case 'realsdpcone'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = is(Fi.data,'realsdpcone');
end
case 'complexsdpcone'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = is(Fi.data,'complexsdpcone');
end
case 'sdp'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = Fi.type==1;
end
case 'lmi'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = full((((Fi.type==1) | (Fi.type==9)) | ((Fi.type==2) & (prod(size(Fi.data))==1))) & (islinear(Fi.data)));
end
case 'linear'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = islinear(Fi.data);
end
case 'kyp'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==9);
end
case 'sos2'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==50);
end
case 'sos1'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==51);
end
case 'semivar'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==52);
end
case 'semiintvar'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==53);
end
case 'complementarity'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==55);
end
case 'sos'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = (Fi.type==11);
end
case 'eig'
YESNO(i,1) = (Fi.type==10);
case 'sigmonial'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
monomtable = yalmip('monomtable');
monomtable = monomtable(getvariables(Fi.data),:);
YESNO(i,1) = any(find(any(0>monomtable,2) | any(monomtable-fix(monomtable),2)));
end
case 'binary'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = Fi.type == 8;
end
case 'integer'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = Fi.type == 7;
end
case 'parametric'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = Fi.type == 13;
end
case 'uncertain'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = Fi.type == 15;
end
case 'random'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = Fi.type == 16;
end
case 'logic'
allextvars = yalmip('extvariables');
if isempty(allextvars)
YESNO(i,1) = 0;
else
for i = 1:length(F.clauses)
Fi = F.clauses{i};
xi = getvariables(Fi.data);
lgc = find(ismembc(xi,allextvars));
if ~isempty(lgc)
for j = lgc
variable = xi(j);
extstruct = yalmip('extstruct',11);
if isequal(extstruct.fcn,'or') | isequal(extstruct.fcn,'and')
YESNO(i,1) = 1;
break
end
end
end
end
end
case 'lowrank'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = Fi.type == 14;
% YESNO(i,1) = is(Fi.data,'complex');
end
case 'complex'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = isa(Fi.data,'sdpvar') && is(Fi.data,'complex');
end
case 'interval'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = isa(Fi.data,'sdpvar') && is(Fi.data,'interval');
end
case 'real'
for i = 1:length(F.clauses)
Fi = F.clauses{i};
YESNO(i,1) = isa(Fi.data,'sdpvar') && is(Fi.data,'real');
end
otherwise
YESNO = error('Huh?');
end
% end
end
YESNO = full(YESNO);