source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/opt/yalmip/@sdpvar/vertcat.m

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

Added original make3d

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