1 | function YESNO = is(F,property) |
---|
2 | %IS Check property of constraint. |
---|
3 | % d = IS(x,property) returns 1 if 'property' holds |
---|
4 | % |
---|
5 | % Properties possible to test are: 'elementwise', 'sdp', |
---|
6 | % 'socc', 'equality', 'lmi', 'linear', 'kyp', 'sos' |
---|
7 | |
---|
8 | % Author Johan Löfberg |
---|
9 | % $Id: is.m,v 1.16 2006/08/08 12:37:01 joloef Exp $ |
---|
10 | |
---|
11 | if isempty(F.clauses) |
---|
12 | YESNO = 0; |
---|
13 | else |
---|
14 | % for i = 1:length(F.clauses) |
---|
15 | % Fi = F.clauses{i}; |
---|
16 | YESNO=zeros(length(F.clauses),1); |
---|
17 | switch property |
---|
18 | case 'equality' |
---|
19 | for i = 1:length(F.clauses) |
---|
20 | Fi = F.clauses{i}; |
---|
21 | YESNO(i,1) = (Fi.type==3); |
---|
22 | end |
---|
23 | case {'element-wise','elementwise'} |
---|
24 | for i = 1:length(F.clauses) |
---|
25 | Fi = F.clauses{i}; |
---|
26 | YESNO(i,1) = (Fi.type==2); |
---|
27 | end |
---|
28 | case {'socc','socp'} |
---|
29 | for i = 1:length(F.clauses) |
---|
30 | Fi = F.clauses{i}; |
---|
31 | YESNO(i,1) = (Fi.type==4); |
---|
32 | end |
---|
33 | case 'sdp' |
---|
34 | for i = 1:length(F.clauses) |
---|
35 | Fi = F.clauses{i}; |
---|
36 | YESNO(i,1) = Fi.type==1; |
---|
37 | end |
---|
38 | case 'lmi' |
---|
39 | for i = 1:length(F.clauses) |
---|
40 | Fi = F.clauses{i}; |
---|
41 | YESNO(i,1) = full((((Fi.type==1) | (Fi.type==9)) | ((Fi.type==2) & (prod(size(Fi.data))==1))) & (islinear(Fi.data))); |
---|
42 | end |
---|
43 | case 'linear' |
---|
44 | for i = 1:length(F.clauses) |
---|
45 | Fi = F.clauses{i}; |
---|
46 | YESNO(i,1) = islinear(Fi.data); |
---|
47 | end |
---|
48 | case 'kyp' |
---|
49 | for i = 1:length(F.clauses) |
---|
50 | Fi = F.clauses{i}; |
---|
51 | YESNO(i,1) = (Fi.type==9); |
---|
52 | end |
---|
53 | case 'sos' |
---|
54 | for i = 1:length(F.clauses) |
---|
55 | Fi = F.clauses{i}; |
---|
56 | YESNO(i,1) = (Fi.type==11); |
---|
57 | end |
---|
58 | case 'eig' |
---|
59 | YESNO(i,1) = (Fi.type==10); |
---|
60 | case 'sigmonial' |
---|
61 | for i = 1:length(F.clauses) |
---|
62 | Fi = F.clauses{i}; |
---|
63 | monomtable = yalmip('monomtable'); |
---|
64 | monomtable = monomtable(getvariables(Fi.data),:); |
---|
65 | YESNO(i,1) = any(find(any(0>monomtable,2) | any(monomtable-fix(monomtable),2))); |
---|
66 | end |
---|
67 | case 'binary' |
---|
68 | for i = 1:length(F.clauses) |
---|
69 | Fi = F.clauses{i}; |
---|
70 | YESNO(i,1) = Fi.type == 8; |
---|
71 | end |
---|
72 | case 'integer' |
---|
73 | for i = 1:length(F.clauses) |
---|
74 | Fi = F.clauses{i}; |
---|
75 | YESNO(i,1) = Fi.type == 7; |
---|
76 | end |
---|
77 | case 'parametric' |
---|
78 | for i = 1:length(F.clauses) |
---|
79 | Fi = F.clauses{i}; |
---|
80 | YESNO(i,1) = Fi.type == 13; |
---|
81 | end |
---|
82 | case 'uncertain' |
---|
83 | for i = 1:length(F.clauses) |
---|
84 | Fi = F.clauses{i}; |
---|
85 | YESNO(i,1) = Fi.type == 15; |
---|
86 | end |
---|
87 | |
---|
88 | case 'logic' |
---|
89 | allextvars = yalmip('extvariables'); |
---|
90 | if isempty(allextvars) |
---|
91 | YESNO(i,1) = 0; |
---|
92 | else |
---|
93 | for i = 1:length(F.clauses) |
---|
94 | Fi = F.clauses{i}; |
---|
95 | xi = getvariables(Fi.data); |
---|
96 | lgc = find(ismembc(xi,allextvars)); |
---|
97 | if ~isempty(lgc) |
---|
98 | for j = lgc |
---|
99 | variable = xi(j); |
---|
100 | extstruct = yalmip('extstruct',11); |
---|
101 | if isequal(extstruct.fcn,'or') | isequal(extstruct.fcn,'and') |
---|
102 | YESNO(i,1) = 1; |
---|
103 | break |
---|
104 | end |
---|
105 | end |
---|
106 | end |
---|
107 | end |
---|
108 | end |
---|
109 | case 'lowrank' |
---|
110 | YESNO(i,1) = Fi.type == 14; |
---|
111 | case 'complex' |
---|
112 | for i = 1:length(F.clauses) |
---|
113 | Fi = F.clauses{i}; |
---|
114 | YESNO(i,1) = is(Fi.data,'complex'); |
---|
115 | end |
---|
116 | case 'real' |
---|
117 | for i = 1:length(F.clauses) |
---|
118 | Fi = F.clauses{i}; |
---|
119 | YESNO(i,1) = is(Fi.data,'real'); |
---|
120 | end |
---|
121 | otherwise |
---|
122 | YESNO = error('Huh?'); |
---|
123 | end |
---|
124 | % end |
---|
125 | end |
---|
126 | |
---|
127 | YESNO = full(YESNO); |
---|