source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/opt/yalmip/extras/@ncvar/is.m @ 37

Last change on this file since 37 was 37, checked in by (none), 14 years ago

Added original make3d

File size: 5.4 KB
Line 
1function YESNO = is(X,property,additional)
2%IS Check property of variable.
3%   d = IS(x,property) returns 1 if 'property' holds
4%
5%   Properties possible to test are: 'real', 'symmetric', 'hermitian',
6%   'scalar', 'linear', 'bilinear','quadratic','sigmonial', 'homogeneous', 'integer', 'binary'
7
8% Author Johan Löfberg
9% $Id: is.m,v 1.1 2006/08/10 18:00:20 joloef Exp $   
10
11switch property
12    case 'logic'
13        YESNO = X.typeflag==12;
14    case 'binary'
15        YESNO = any(ismember(depends(X),yalmip('binvariables')));
16    case 'integer'
17        YESNO = any(ismember(depends(X),yalmip('intvariables')));
18    case 'real'
19        YESNO = isreal(X);
20    case 'complex'
21        YESNO = ~isreal(X.basis);
22    case 'symmetric'
23        YESNO = issymmetric(X);
24    case 'hermitian'
25        YESNO = ishermitian(X);
26    case 'scalar'
27        YESNO = prod(X.dim)==1;
28    case 'compound'
29        YESNO = any(ismember(getvariables(X),yalmip('extvariables')));       
30    case 'linear'
31        variabletype = yalmip('variabletype');
32        variabletype = variabletype(X.lmi_variables);       
33        YESNO = ~any(variabletype);             
34    case 'bilinear'
35        variabletype = yalmip('variabletype');
36        variabletype = variabletype(X.lmi_variables);               
37        YESNO  = all(variabletype<=1);
38     case 'quadratic'
39         variabletype = yalmip('variabletype');
40         variabletype = variabletype(X.lmi_variables);
41         YESNO = all(variabletype<=2);
42         
43    case 'LBQS'
44        % Fast code for use in display etc.
45        % Checks linearity, bilinearity etc in one call.
46        quadratic = 0;
47        bilinear  = 0;
48        linear    = 0;
49        sigmonial = 0;
50             
51        variabletype = yalmip('variabletype');
52        variabletype = variabletype(X.lmi_variables);
53       
54        linear    = all(variabletype==0);       
55        bilinear  = all(variabletype<=1) & ~linear;       
56        quadratic = all(variabletype<=2) & ~bilinear;
57        sigmonial = any(variabletype==4);
58       
59        YESNO = full([linear bilinear quadratic sigmonial]);
60         
61         
62         
63    case 'lpcone'
64          base = X.basis;
65          YESNO = all(base(:,1)==0); % No constant
66          base = base(:,2:end);
67          YESNO = YESNO & all(sum(base,2)==1);
68          YESNO = YESNO & all(sum(base,1)==1);
69          YESNO = YESNO & all(sum(base~=0,2)==1);
70          YESNO = YESNO & all(sum(base~=0,1)==1);
71          YESNO = full(YESNO);
72
73    case 'shiftlpcone'
74          base = X.basis;         
75          base = base(:,2:end);
76          YESNO = all(sum(base,2)==1);
77          YESNO = YESNO & all(sum(base,1)==1);
78          YESNO = YESNO & all(sum(base~=0,2)==1);
79          YESNO = YESNO & all(sum(base~=0,1)==1);
80          YESNO = full(YESNO);
81                   
82    case 'sdpcone'
83        if isequal(X.conicinfo,[1 0])
84            YESNO = 1;
85            return
86        end
87        base = X.basis;
88        n = X.dim(1);
89        YESNO = full(issymmetric(X) & nnz(base)==n*n & all(sum(base,2)==1) & all(base(:,1)==0)) & length(X.lmi_variables)==n*(n+1)/2 & isreal(base);
90       
91    case 'shiftsdpcone'
92       
93        if isequal(X.conicinfo,[1 0])
94            YESNO = 1;
95            return
96        elseif isequal(X.conicinfo,[1 1])
97            YESNO = 1;
98            return
99        end
100       
101       
102        base = X.basis;
103        n = X.dim(1);
104        base(:,1)=0;
105        YESNO = full(issymmetric(X) & nnz(base)==n*n & all(sum(base,2)==1)) & length(X.lmi_variables)==n*(n+1)/2 & isreal(X);
106        if YESNO
107            % Possible case
108            % FIX : Stupidly slow and complex
109            [i,j,k] = find(base');
110            Y = reshape(1:n^2,n,n);
111            Y = tril(Y);
112            Y = (Y+Y')-diag(sparse(diag(Y)));
113            [uu,oo,pp] = unique(Y(:));
114            YESNO = isequal(i,pp+1);
115            %             YESNO = isequal(base,getbase(sdpvar(n,n)));
116        end
117       
118    case 'socone'
119        base = X.basis;
120        n = X.dim(1);
121        YESNO = X.dim(1)>1 & X.dim(2)==1 & length(X.lmi_variables)==n;
122        if YESNO
123            cb = base(:,1);
124            vb = base(:,2:end);           
125            YESNO = YESNO & (nnz(cb)==0) & (nnz(vb-speye(n))==0);
126        end   
127       
128    case 'sigmonial'
129          monomtable = yalmip('monomtable');
130          monomtable = monomtable(getvariables(X),:);
131          YESNO = any(find(any(0>monomtable,2) | any(monomtable-fix(monomtable),2)));   
132         
133    case 'general'
134        evalvariables = yalmip('evalVariables');
135        YESNO = ~isempty(intersect(getvariables(X),evalvariables));
136       
137    case 'nonlinear'
138        YESNO = ~islinear(X);   
139       
140    case 'homogeneous'   
141        [sqrList,CompressedList] = yalmip('nonlinearvariables');
142        [LinearTerms,NonlinearVariables] = getvariables(X,'both');
143        if isempty(NonlinearVariables)
144            YESNO = nnz(getbasematrix(X,0))==0;
145        else
146            % No linear terms
147            YESNO = isempty(LinearTerms);
148            % No constant terms
149            YESNO = YESNO & (nnz(getbasematrix(X,0))==0);
150            % Largest degree+1
151            maxdegree = sum(any(CompressedList(find(ismember(CompressedList,NonlinearVariables)),:),1));
152            % All same degree
153            YESNO = YESNO & all(all(CompressedList(find(ismember(CompressedList,NonlinearVariables)),2:maxdegree)>0));
154        end
155       
156    case 'sos'
157        YESNO = (X.typeflag==11); 
158       
159    otherwise
160        error('Wrong input argument.');
161end
162
163YESNO = full(YESNO);
164
165
Note: See TracBrowser for help on using the repository browser.