1 | function varargout=sort(varargin) |
---|
2 | %SORT (overloaded) |
---|
3 | % |
---|
4 | % [t,loc] = sort(x) |
---|
5 | % |
---|
6 | % The variable t will be the sorted version of x. |
---|
7 | % |
---|
8 | % SORT is implemented in the nonlinear operator framework using a big-M |
---|
9 | % model. |
---|
10 | |
---|
11 | |
---|
12 | % Author Johan Löfberg |
---|
13 | % $Id: sort.m,v 1.1 2006/08/10 18:00:22 joloef Exp $ |
---|
14 | |
---|
15 | switch class(varargin{1}) |
---|
16 | |
---|
17 | case 'double' |
---|
18 | error('Overloaded SDPVAR/SORT CALLED WITH DOUBLE. Report error') |
---|
19 | |
---|
20 | case 'sdpvar' % Overloaded operator for SDPVAR objects. Pass on args and save them. |
---|
21 | |
---|
22 | if nargin > 1 | min(size(varargin{1}))>1 |
---|
23 | error('SDPVAR/SORT only supports simple 1-D sorting'), |
---|
24 | end |
---|
25 | |
---|
26 | x = varargin{1}; |
---|
27 | data.D = binvar(length(x),length(x),'full'); |
---|
28 | data.V = sdpvar(length(x),length(x),'full'); |
---|
29 | y = []; |
---|
30 | |
---|
31 | for i = 1:length(x) |
---|
32 | data.i = i; |
---|
33 | data.isthisloc = 0; |
---|
34 | y = [y;yalmip('addextendedvariable',mfilename,x,data)];%i,P,V)]; |
---|
35 | end |
---|
36 | loc = []; |
---|
37 | for i = 1:length(x) |
---|
38 | data.i = i; |
---|
39 | data.isthisloc = 1; |
---|
40 | loc = [loc;yalmip('addextendedvariable',mfilename,x,data)]; |
---|
41 | end |
---|
42 | varargout{1} = y; |
---|
43 | varargout{2} = loc; |
---|
44 | |
---|
45 | case 'char' % YALMIP send 'graph' when it wants the epigraph or hypograph |
---|
46 | switch varargin{1} |
---|
47 | case {'milp','graph'} |
---|
48 | % Description using epigraphs |
---|
49 | t = varargin{2}; |
---|
50 | X = varargin{3}; |
---|
51 | data = varargin{4}; |
---|
52 | %i = varargin{4}; |
---|
53 | %D = varargin{5}; |
---|
54 | %V = varargin{6}; |
---|
55 | |
---|
56 | % Call external to allow subsrefs in classs |
---|
57 | [F,vars] = sort_internal(t,X,data);%i,D,V); |
---|
58 | |
---|
59 | varargout{1} = F; |
---|
60 | varargout{2} = struct('convexity','milp','monotonicity','milp','definiteness','milp'); |
---|
61 | varargout{3} = X; |
---|
62 | |
---|
63 | % Currently a hack, gneral feature coming soon... |
---|
64 | varargout{2}.models = vars; |
---|
65 | |
---|
66 | otherwise |
---|
67 | error('SDPVAR/SORT called with CHAR argument?'); |
---|
68 | end |
---|
69 | otherwise |
---|
70 | error('Strange type on first argument in SDPVAR/SORT'); |
---|
71 | end |
---|