Rev | Line | |
---|
[37] | 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.