source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/opt/yalmip/@sdpvar/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.7 2006/07/26 20:17:58 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    [n(i),m(i)]=size(varargin{i});
22end
23
24% Keep only non-empty
25keep_these = find((n.*m)~=0);
26if length(keep_these)<length(n)
27    varargin = {varargin{keep_these}};
28    n = n(keep_these);
29    m = m(keep_these);
30end;
31
32% All heights should be equal
33if any(n~=n(1))
34    error('All matrices on a row in the bracketed expression must have the same number of rows.');
35end
36
37nblocks = size(varargin,2);
38
39isasdpvar = zeros(nblocks,1);
40for i = 1:nblocks
41    isasdpvar(i) = isa(varargin{i},'sdpvar');
42    isachar(i)   = isa(varargin{i},'char');
43end
44
45% Finish if this is a symbolic expression
46% including '?' operators
47if any(isachar)
48    y = blkvar;
49    for i = 1:nargin
50        if isachar(i)
51            switch varargin{i}
52                case {'i','I'}
53                    y(1,i) = 1;
54                case {'s'}
55                case 'z'
56                    y(1,i) = 0;
57                otherwise
58            end
59        else
60            y(1,i) = varargin{i};
61        end
62    end
63    return
64end
65
66% Find all free variables used
67all_lmi_variables = [];
68for i = 1:nblocks
69    if isasdpvar(i)
70        all_lmi_variables = [all_lmi_variables varargin{i}.lmi_variables];
71    end
72end
73all_lmi_variables = uniquestripped(all_lmi_variables);
74
75% Pick one of the sdpvar objects to build on...
76y = varargin{min(find(isasdpvar))};
77
78% Some indexation tricks
79n = n(1);
80
81basis_i = [];
82basis_j = [];
83basis_s = [];
84shft = 0;
85for j = 1:nblocks
86    if isasdpvar(j)
87        in_this = find(ismembc(all_lmi_variables,varargin{j}.lmi_variables));
88        dummy = [1 1+in_this];
89        [i2,j2,s2] = find(varargin{j}.basis);
90        j2 = dummy(j2);
91        add_shift = size(varargin{j}.basis,1);
92    else
93        [i2,j2,s2] = find(varargin{j}(:));
94        add_shift = size(varargin{j}(:),1);
95    end
96        basis_i = [basis_i;i2(:)+shft];
97        basis_j = [basis_j;j2(:)];
98        basis_s = [basis_s;s2(:)];
99        shft = shft + add_shift;   
100end
101basis = sparse(basis_i,basis_j,basis_s,sum(m)*n,1+length(all_lmi_variables));
102
103y.dim(1) = n;
104y.dim(2) = sum(m);
105y.basis = basis;
106y.lmi_variables = all_lmi_variables;
107% Reset info about conic terms
108y.conicinfo = [0 0];
109
Note: See TracBrowser for help on using the repository browser.