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

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

Added original make3d

File size: 2.5 KB
Line 
1function y = horzcat(varargin)
2%HORZCAT (overloaded)
3
4% Author Johan Löfberg
5% $Id: horzcat.m,v 1.2 2006/08/11 11:48:15 joloef Exp $ 
6
7prenargin = nargin;
8% Fast exit
9if prenargin<2
10    y=varargin{1};
11    return
12end
13
14% Get dimensions
15n = zeros(prenargin,1);
16m = zeros(prenargin,1);
17for i = 1:prenargin
18    if isa(varargin{i},'blkvar')
19        varargin{i} = sdpvar(varargin{i});
20    end
21    if isa(varargin{i},'sdpvar')
22        varargin{i}= ncvar(struct(varargin{i}));
23    end
24
25    [n(i),m(i)]=size(varargin{i});
26end
27
28% Keep only non-empty
29keep_these = find((n.*m)~=0);
30if length(keep_these)<length(n)
31    varargin = {varargin{keep_these}};
32    n = n(keep_these);
33    m = m(keep_these);
34end;
35
36% All heights should be equal
37if any(n~=n(1))
38    error('All matrices on a row in the bracketed expression must have the same number of rows.');
39end
40
41nblocks = size(varargin,2);
42
43isasdpvar = zeros(nblocks,1);
44for i = 1:nblocks
45    isasdpvar(i) = isa(varargin{i},'ncvar');
46    isachar(i)   = isa(varargin{i},'char');
47end
48
49% Finish if this is a symbolic expression
50% including '?' operators
51if any(isachar)
52    y = blkvar;
53    for i = 1:nargin
54        if isachar(i)
55            switch varargin{i}
56                case {'i','I'}
57                    y(1,i) = 1;
58                case {'s'}
59                case 'z'
60                    y(1,i) = 0;
61                otherwise
62            end
63        else
64            y(1,i) = varargin{i};
65        end
66    end
67    return
68end
69
70% Find all free variables used
71all_lmi_variables = [];
72for i = 1:nblocks
73    if isasdpvar(i)
74        all_lmi_variables = [all_lmi_variables varargin{i}.lmi_variables];
75    end
76end
77all_lmi_variables = uniquestripped(all_lmi_variables);
78
79% Pick one of the sdpvar objects to build on...
80y = varargin{min(find(isasdpvar))};
81
82% Some indexation tricks
83n = n(1);
84
85basis_i = [];
86basis_j = [];
87basis_s = [];
88shft = 0;
89for j = 1:nblocks
90    if isasdpvar(j)
91        in_this = find(ismembc(all_lmi_variables,varargin{j}.lmi_variables));
92        dummy = [1 1+in_this];
93        [i2,j2,s2] = find(varargin{j}.basis);
94        j2 = dummy(j2);
95        add_shift = size(varargin{j}.basis,1);
96    else
97        [i2,j2,s2] = find(varargin{j}(:));
98        add_shift = size(varargin{j}(:),1);
99    end
100        basis_i = [basis_i;i2(:)+shft];
101        basis_j = [basis_j;j2(:)];
102        basis_s = [basis_s;s2(:)];
103        shft = shft + add_shift;   
104end
105basis = sparse(basis_i,basis_j,basis_s,sum(m)*n,1+length(all_lmi_variables));
106
107y.dim(1) = n;
108y.dim(2) = sum(m);
109y.basis = basis;
110y.lmi_variables = all_lmi_variables;
111% Reset info about conic terms
112y.conicinfo = [0 0];
113
Note: See TracBrowser for help on using the repository browser.