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

73 lines
2.2 KiB
Mathematica
Raw Permalink Normal View History

2019-12-18 11:25:45 +00:00
function x = uncertain(x,varargin)
%UNCERTAIN Declares a variable as uncertain
%
% F = UNCERTAIN(W) is used to describe the set of uncertain variables
% in an uncertain program
%
% INPUT
% W : SDPVAR object or list of constraints
% S : Optional distribution information for random uncertainty
%
% OUTPUT
% F : Constraint object
%
% Uncertain is used to declare uncertain variables in robust
% deterministic worst-case optimization. It can also be used to specify
% uncertain random variables, and their associated distribution, to be
% used in OPTIMIZER objects with the SAMPLE command.
%
% EXAMPLE
%
% Robust worst-case optimization
%
% sdpvar x w
% F = [x + w <= 1], W = [-0.5 <= w <= 0.5];
% optimize([F,W,uncertain(w)],-x)
%
% sdpvar x w
% F = [x + w <= 1], W = [-0.5 <= w <= 0.5];
% optimize([F,uncertain(W)],-x)
%
% To specify random uncertainties, you specify the distribution, and all
% distribution parameters following the syntax n the RANDOM command in
% the Statistics Toolbox
%
% sdpvar x w
% F = [x + w <= 1, uncertain(w, 'uniform',0,1)];
% P = optimizer([F,W,uncertain(w)],-x,[],w,x)
% S = sample(P,10); % Sample ten instances and concatenate models
% S([]) % Solve and return optimal x
%
% Alternatively, you can specify a function handle which generates
% samples. YALMIP will always send a trailing argument with dimensions
%
% F = [x + w <= 1, uncertain(w,@mysampler,myarguments1,...)];
%
% The standard random case above would thus be recovered with
%
% F = [x + w <= 1, uncertain(w,@random,0,1)];
%
%
% See also OPTIMIZE, ROBUSTMODEL, OPTIMIZER, SAMPLE
if nargin == 1 || ((nargin == 2) && strcmpi(varargin{1},'deterministic'))
x.typeflag = 15;
x.extra.distribution.name = 'deterministic';
x = lmi(x);
else
x.typeflag = 16;
if isa(varargin{1},'function_handle')
temp = {varargin{:},x.dim};
else
temp = {@random,varargin{:},x.dim};
end
x.extra.distribution.name = temp{1};
x.extra.distribution.parameters = {temp{2:end-1}};
try
temp = feval(temp{:});
catch
disp(lasterr);
error('Trial evaluation of attached sample generator failed.')
end
x = lmi(x);
end