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

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

Added original make3d

File size: 2.1 KB
Line 
1function YESNO = ismember_internal(x,p)
2%ISMEMBER_INTERNAL Helper for ISMEMBER
3
4% Author Johan Löfberg
5% $Id: ismember_internal.m,v 1.1 2006/08/10 18:00:20 joloef Exp $
6
7if isa(x,'sdpvar') & isa(p,'polytope')
8
9    if length(p) == 1
10        [H,K] = double(p);
11        if min(size(x))>1
12            error('first argument should be a vector');
13        end
14        if length(x) == size(H,2)
15            x = reshape(x,length(x),1);
16            YESNO = set(H*x <= K);
17            return
18        else
19            error('Dimension mismatch.');
20        end
21
22    else
23        d = binvar(length(p),1);
24        YESNO = set(sum(d)==1);
25        for i = 1:length(p)
26            [H,K] = double(p(i));
27            if min(size(x))>1
28                error('first argument should be a vector');
29            end
30            if length(x) == size(H,2)
31                x = reshape(x,length(x),1);
32                lhs = H*x-K;
33                [M,m] = derivebounds(lhs);
34                YESNO = YESNO + set(H*x-K <= M.*(1-extsubsref(d,i)));
35            else
36                error('Dimension mismatch.');
37            end
38        end
39
40    end
41    return
42end
43
44if isa(x,'sdpvar') & isa(p,'double')
45
46    x = reshape(x,prod(x.dim),1);
47    p = p(:);
48
49    [M,m]=derivebounds(x);
50
51    maxp = max(p);
52    minp = min(p);
53    for i = 1:length(M)
54        M(i) = min(M(i),maxp);
55        m(i) = max(m(i),minp);
56    end
57
58    Delta = binvar(length(x),length(p),'full');
59    F = set(sum(Delta,2) == 1);
60
61    % Quick version
62    xrep = repmat(x,length(p),1);
63    prep = kron(p,ones(length(x),1));
64    mrep = repmat(m,length(p),1);
65    Mrep = repmat(M,length(p),1);
66    drep = reshape(Delta,prod(size(Delta)),1);
67    F = F + set((mrep-prep).*(1-drep) <= xrep-prep <= (Mrep - prep).*(1-drep));
68
69    % Slow version
70    %     for j = 1:length(x)
71    %         xi = extsubsref(x,j,1);
72    %        % delta = binvar(length(p),1);
73    %        % F = F + set(sum(delta) == 1);
74    %         for i = 1:length(p)
75    %             di = extsubsref(Delta,j,i);
76    %             mi = m - p(i);
77    %             Mi = M - p(i);
78    %             F = F + set(mi*(1-di) <= xi - p(i) <= Mi*(1-di));
79    %         end
80    %     end
81    YESNO = F;
82    return
83end
Note: See TracBrowser for help on using the repository browser.