Line | |
---|
1 | function X = ndsdpvar(varargin) |
---|
2 | % NDSDPVAR Constructor for multi-dimensional SDPVAR object |
---|
3 | |
---|
4 | % Author Johan Löfberg |
---|
5 | % $Id: ndsdpvar.m,v 1.9 2006/07/28 06:27:01 joloef Exp $ |
---|
6 | |
---|
7 | % Sometimes it is convenient to cast a 2D SDPVAR variables as an nD |
---|
8 | % variable |
---|
9 | if nargin == 1 & isa(varargin{1},'sdpvar') |
---|
10 | X = varargin{1}; |
---|
11 | X = struct(X); |
---|
12 | X.conicinfo = [0 0]; |
---|
13 | X = class(X,'ndsdpvar'); |
---|
14 | return |
---|
15 | end |
---|
16 | |
---|
17 | type = 'symmetric'; |
---|
18 | field = 'real'; |
---|
19 | |
---|
20 | d = 0; |
---|
21 | i = 1; |
---|
22 | while i<=nargin |
---|
23 | if isa(varargin{i},'double') |
---|
24 | d = d + 1; |
---|
25 | end |
---|
26 | i = i + 1; |
---|
27 | end |
---|
28 | |
---|
29 | n = [varargin{1:d}]; |
---|
30 | |
---|
31 | if nargin > d |
---|
32 | type = varargin{d+1}; |
---|
33 | if n(1)~=n(2) & ~isempty(strmatch(type,'symmetric')) |
---|
34 | error('non-square matrix cannot be symmetric'); |
---|
35 | end |
---|
36 | else |
---|
37 | if n(1)==n(2) |
---|
38 | type = 'symmetric'; |
---|
39 | else |
---|
40 | type = 'full'; |
---|
41 | end |
---|
42 | end |
---|
43 | if nargin > d+1 |
---|
44 | field = varargin{d+2}; |
---|
45 | end |
---|
46 | |
---|
47 | X = []; |
---|
48 | for i = 1:prod(n(3:end)) |
---|
49 | x = sdpvar(n(1),n(2),type,field); |
---|
50 | X = [X;x(:)]; |
---|
51 | end |
---|
52 | X = struct(X); |
---|
53 | X.dim = n; |
---|
54 | X = class(X,'ndsdpvar'); |
---|
55 | X = clean(X); |
---|
Note: See
TracBrowser
for help on using the repository browser.