📄 optimset.m
字号:
else
msg = sprintf('Ambiguous parameter name ''%s'' ', arg);
msg = [msg '(' Names{j(1),:}];
for k = j(2:length(j))'
msg = [msg ', ' Names{k,:}];
end
msg = sprintf('%s).', msg);
error('MATLAB:optimset:AmbiguousParamName', msg);
end
end
expectval = 1; % we expect a value next
else
if ischar(arg)
arg = lower(deblank(arg));
end
checkfield(Names{j,:},arg,optimtbx);
options.(Names{j,:}) = arg;
expectval = 0;
end
i = i + 1;
end
if expectval
error('MATLAB:optimset:NoValueForParam',...
'Expected value for parameter ''%s''.', arg);
end
%-------------------------------------------------
function checkfield(field,value,optimtbx)
%CHECKFIELD Check validity of structure field contents.
% CHECKFIELD('field',V,OPTIMTBX) checks the contents of the specified
% value V to be valid for the field 'field'. OPTIMTBX indicates if
% the Optimization Toolbox is on the path.
%
% empty matrix is always valid
if isempty(value)
return
end
% See if it is one of the valid MATLAB fields. It may be both an Optim
% and MATLAB field, e.g. MaxFunEvals, in which case the MATLAB valid
% test may fail and the Optim one may pass.
validfield = true;
switch field
case {'TolFun'} % real scalar
[validvalue, errmsg, errid] = nonNegReal(field,value);
case {'TolX'} % real scalar
% this string is for LSQNONNEG
[validvalue, errmsg, errid] = nonNegReal(field,value,'10*eps*norm(c,1)*length(c)');
case {'Display'} % off,none,iter,final,notify,testing
[validvalue, errmsg, errid] = displayType(field,value);
case {'MaxFunEvals','MaxIter'} % integer including inf or default string
% this string is for FMINSEARCH
[validvalue, errmsg, errid] = nonNegInteger(field,value,'200*numberofvariables');
case {'FunValCheck'} % off,on
[validvalue, errmsg, errid] = onOffType(field,value);
case {'OutputFcn'}% function
[validvalue, errmsg, errid] = functionType(field,value);
otherwise
validfield = false;
validvalue = false;
errmsg = sprintf('Unrecognized parameter name ''%s''.', field);
errid = 'MATLAB:optimset:checkfield:InvalidParamName';
end
if validvalue
return;
elseif ~optimtbx && validfield
% Throw the MATLAB invalid value error
error(errid, errmsg);
else % Check if valid for Optim Tbx
[optvalidvalue, opterrmsg, opterrid, optvalidfield] = optimoptioncheckfield(field,value);
if optvalidvalue
return;
elseif optvalidfield
% Throw the Optim invalid value error
error(opterrid, opterrmsg)
else % Neither field nor value is valid for Optim
% Throw the MATLAB invalid value error (can't be invalid field for
% MATLAB & Optim or would have errored already in optimset).
error(errid, errmsg)
end
end
%-----------------------------------------------------------------------------------------
function [valid, errmsg, errid] = nonNegReal(field,value,string)
% Any nonnegative real scalar or sometimes a special string
valid = isreal(value) && isscalar(value) && (value >= 0) ;
if nargin > 2
valid = valid || isequal(value,string);
end
if ~valid
if ischar(value)
errid = 'MATLAB:funfun:optimset:NonNegReal:negativeNum';
errmsg = sprintf('Invalid value for OPTIONS parameter %s: must be a real non-negative scalar (not a string).',field);
else
errid = 'MATLAB:funfun:optimset:NonNegReal:negativeNum';
errmsg = sprintf('Invalid value for OPTIONS parameter %s: must be a real non-negative scalar.',field);
end
else
errid = '';
errmsg = '';
end
%-----------------------------------------------------------------------------------------
function [valid, errmsg, errid] = nonNegInteger(field,value,string)
% Any nonnegative real integer scalar or sometimes a special string
valid = isreal(value) && isscalar(value) && (value >= 0) && value == floor(value) ;
if nargin > 2
valid = valid || isequal(value,string);
end
if ~valid
if ischar(value)
errid = 'MATLAB:funfun:optimset:nonNegInteger:notANonNegInteger';
errmsg = sprintf('Invalid value for OPTIONS parameter %s: must be a real non-negative integer (not a string).',field);
else
errid = 'MATLAB:funfun:optimset:nonNegInteger:notANonNegInteger';
errmsg = sprintf('Invalid value for OPTIONS parameter %s: must be a real non-negative integer.',field);
end
else
errid = '';
errmsg = '';
end
%-----------------------------------------------------------------------------------------
function [valid, errmsg, errid] = displayType(field,value)
% One of these strings: on, off, none, iter, final, notify
valid = ischar(value) && any(strcmp(value,{'on';'off';'none';'iter';'final';'notify';'testing'}));
if ~valid
errid = 'MATLAB:funfun:optimset:displayType:notADisplayType';
errmsg = sprintf('Invalid value for OPTIONS parameter %s: must be ''off'',''on'',''iter'',''notify'', or ''final''.',field);
else
errid = '';
errmsg = '';
end
%-----------------------------------------------------------------------------------------
function [valid, errmsg, errid] = onOffType(field,value)
% One of these strings: on, off
valid = ischar(value) && any(strcmp(value,{'on';'off'}));
if ~valid
errid = 'MATLAB:funfun:optimset:onOffType:notOnOffType';
errmsg = sprintf('Invalid value for OPTIONS parameter %s: must be ''off'' or ''on''.',field);
else
errid = '';
errmsg = '';
end
%-----------------------------------------------------------------------------------------
function [valid, errmsg, errid] = functionType(field,value)
% Any function handle or string (we do not test if the string is a function name)
valid = ischar(value) || isa(value, 'function_handle');
if ~valid
errid = 'MATLAB:funfun:optimset:functionType:notAFunction';
errmsg = sprintf('Invalid value for OPTIONS parameter %s: must be a function.',field);
else
errid = '';
errmsg = '';
end
%--------------------------------------------------------------------------------
function [wasinmatlab, optionname] = checkoptimonlylist(lowArg);
% Check if the user is trying to set an option that is only used by
% Optimization Toolbox functions -- this used to have no effect.
% Now it will warn. In a future release, it will error.
names = {...
'ActiveConstrTol'; ...
'NoStopIfFlatInfeas'; ...
'BranchStrategy'; ...
'DerivativeCheck'; ...
'Diagnostics'; ...
'DiffMaxChange'; ...
'DiffMinChange'; ...
'GoalsExactAchieve'; ...
'GradConstr'; ...
'GradObj'; ...
'Hessian'; ...
'HessMult'; ...
'HessPattern'; ...
'HessUpdate'; ...
'InitialHessType'; ...
'InitialHessMatrix'; ...
'Jacobian'; ...
'JacobMult'; ...
'JacobPattern'; ...
'LargeScale'; ...
'LevenbergMarquardt'; ...
'LineSearchType'; ...
'MaxNodes'; ...
'MaxPCGIter'; ...
'MaxRLPIter'; ...
'MaxSQPIter'; ...
'MaxTime'; ...
'MeritFunction'; ...
'MinAbsMax'; ...
'NodeDisplayInterval'; ...
'NodeSearchStrategy'; ...
'NonlEqnAlgorithm'; ...
'PhaseOneTotalScaling'; ...
'Preconditioner'; ...
'PrecondBandWidth'; ...
'RelLineSrchBnd'; ...
'RelLineSrchBndDuration'; ...
'ShowStatusWindow'; ...
'Simplex'; ...
'TolCon'; ...
'TolPCG'; ...
'TolRLPFun'; ...
'TolXInteger'; ...
'TypicalX'};
lowernames = lower(names);
k = strmatch(lowArg,lowernames);
wasinmatlab = ~isempty(k);
if wasinmatlab
optionname = names{k};
else
optionname = '';
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -