32 lines
965 B
Mathematica
32 lines
965 B
Mathematica
|
|
function sys = semivar(varargin)
|
||
|
|
%SEMIVAR Create semicontinuous variable
|
||
|
|
%
|
||
|
|
% SEMIVAR works exactly as SDPVAR, with the only difference that
|
||
|
|
% the elements in the variable automatically will be constrained
|
||
|
|
% to be semicontinous (x = 0 or [L <= x <= U])
|
||
|
|
%
|
||
|
|
% Thwe lower and upper bounds are defined separately.
|
||
|
|
%
|
||
|
|
% See also SDPVAR, BINVAR, INTVAR, BINARY, INTEGER
|
||
|
|
|
||
|
|
all_variable_names = 1;
|
||
|
|
i = 1;
|
||
|
|
while all_variable_names & i<=nargin
|
||
|
|
all_variable_names = all_variable_names & isvarname(varargin{i});
|
||
|
|
i = i + 1;
|
||
|
|
end
|
||
|
|
if all_variable_names
|
||
|
|
for k = 1:nargin
|
||
|
|
varname = varargin{k};
|
||
|
|
assignin('caller',varname,semivar(1,1));
|
||
|
|
end
|
||
|
|
else
|
||
|
|
sys = sdpvar(varargin{:});
|
||
|
|
if isa(sys,'cell')
|
||
|
|
for i = 1:length(sys)
|
||
|
|
yalmip('setsemicontvariables',[yalmip('semicontvariables') getvariables(sys{i})]);
|
||
|
|
end
|
||
|
|
else
|
||
|
|
yalmip('setsemicontvariables',[yalmip('semicontvariables') getvariables(sys)]);
|
||
|
|
end
|
||
|
|
end
|