source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/opt/yalmip/extras/@ncvar/vertcat.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 y = vertcat(varargin)
2%VERTCAT (overloaded)
3
4% Author Johan Löfberg
5% $Id: vertcat.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    [n(i),m(i)]=size(varargin{i});
25end
26
27% Keep only non-empty
28keep_these = find((n.*m)~=0);
29if length(keep_these)<length(n)
30    varargin = {varargin{keep_these}};
31    n = n(keep_these);
32    m = m(keep_these);
33end;
34
35% All widths should be equal
36if any(m~=m(1))
37    error('All rows in the bracketed expression must have the same number of columns.');
38end
39
40nblocks = size(varargin,2);
41isasdpvar = zeros(nblocks,1);
42% Get dimensions
43for i = 1:nblocks
44    isasdpvar(i) = isa(varargin{i},'ncvar');
45end
46
47% Find all free variables used
48all_lmi_variables = [];
49for i = 1:nblocks
50    if isasdpvar(i)
51        all_lmi_variables = [all_lmi_variables varargin{i}.lmi_variables];
52    end
53end
54all_lmi_variables = uniquestripped(all_lmi_variables);
55
56% Pick one of the sdpvar objects to build on...
57y = varargin{min(find(isasdpvar))};
58
59% Some indexation tricks...
60basis_i = [];
61basis_j = [];
62basis_s = [];
63m = m(1);
64sumn=sum(n);
65shift=[0;cumsum(n)];
66for j = 1:nblocks
67    if isasdpvar(j)
68        in_this = find(ismembc(all_lmi_variables,varargin{j}.lmi_variables));
69        dummy = [1 1+in_this];
70        [i2,j2,s2] = find(varargin{j}.basis);
71        j2 = dummy(j2);
72    else
73        [i2,j2,s2] = find(varargin{j}(:));
74    end
75    if ~isempty(j2)
76    col = 1+floor((i2-1)/n(j));
77    row = i2-(col-1)*n(j);
78    basis_i = [basis_i;row(:)+shift(j)+sumn*(col(:)-1)];
79    basis_j = [basis_j;j2(:)];
80    basis_s = [basis_s;s2(:)];
81    end
82end
83basis = sparse(basis_i,basis_j,basis_s,sum(n)*m,1+length(all_lmi_variables));
84
85y.dim(1) = sum(n);
86y.dim(2) = m;
87y.basis = basis;
88y.lmi_variables = all_lmi_variables;
89% Reset info about conic terms
90y.conicinfo = [0 0];
91
Note: See TracBrowser for help on using the repository browser.