Dynamic-Calibration/utils/YALMIP-master/@sdpvar/sos2.m

58 lines
1006 B
Mathematica
Raw Permalink Normal View History

2019-12-18 11:25:45 +00:00
function X=sos2(X,weights,dim)
%SOS2 Declare special ordered set of type 2
%
% F = sos2(p,w,dim)
%
% Input
% p : SDPVAR object
% w : Adjacency weights (optional)
% dim : Operatate along dim for matrix argument. Default 1
%
% Output
% F : CONSTRAINT object
%
% See also sos1
% Normalize arguments
if nargin < 3
dim = 1;
end
if nargin < 2
weights = [];
end
% Easy fix for column case
if dim == 2
X = sos2(X',weights);
return
end
if dim > 2
error('DIM should be 1 or 2');
end
if length(size(X))>2
error('SOS2 not support for nD arrays');
end
% Matrix case by recursive calls
if min(size(X))>1
Y = [];
for i = 1:size(X,1)
T.type = '()';
T.subs{1} = i;
T.subs{2} = ':';
Y = [Y;sos2(subsref(X,T),weights)];
end
X = Y;
return
end
if isempty(weights)
X.typeflag = 50;
X.extra.sosweights = 1:length(X);
else
X.typeflag = 50;
X.extra.sosweights = findOutWeights(X,weights)
end
X = lmi(X);