Mercurial > octave-libgccjit
view scripts/optimization/optimget.m @ 18602:8d4d78285c8e
Overhaul optimset/optimget functions for Matlab compatibility (bug #41915).
* optimget.m: Rewrite docstring. Use function name in all emitted warnings.
Return the input DEFAULT when the options structure is empty rather than
returning an empty matrix (Matlab compatibility). Add more tests for function
and input validation.
* optimset.m: Rewrite docstring. Use function name in all emitted warnings.
Add more tests for function and input validation.
author | Rik <rik@octave.org> |
---|---|
date | Sat, 29 Mar 2014 11:24:59 -0700 |
parents | d63878346099 |
children |
line wrap: on
line source
## Copyright (C) 2008-2013 Jaroslav Hajek ## Copyright (C) 2009 VZLU Prague ## ## This file is part of Octave. ## ## Octave is free software; you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or (at ## your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- ## @deftypefn {Function File} {} optimget (@var{options}, @var{parname}) ## @deftypefnx {Function File} {} optimget (@var{options}, @var{parname}, @var{default}) ## Return the specific option @var{parname} from the optimization options ## structure @var{options} created by @code{optimset}. ## ## If @var{parname} is not defined then return @var{default} if supplied, ## otherwise return an empty matrix. ## @seealso{optimset} ## @end deftypefn function retval = optimget (options, parname, default) if (nargin < 2 || nargin > 4 || ! isstruct (options) || ! ischar (parname)) print_usage (); endif ## Expand partial-length names into full names opts = __all_opts__ (); idx = strncmpi (opts, parname, length (parname)); nmatch = sum (idx); if (nmatch == 1) parname = opts{idx}; elseif (nmatch == 0) warning ("optimget: unrecognized option: %s", parname); else fmt = sprintf ("optimget: ambiguous option: %%s (%s%%s)", repmat ("%s, ", 1, nmatch-1)); warning (fmt, parname, opts{idx}); endif if (isfield (options, parname) && ! isempty (options.(parname))) retval = options.(parname); elseif (nargin > 2) retval = default; else retval = []; endif endfunction %!shared opts %! opts = optimset ("tolx", 0.1, "maxit", 100); %!assert (optimget (opts, "TolX"), 0.1) %!assert (optimget (opts, "maxit"), 100) %!assert (optimget (opts, "MaxITer"), 100) %!assert (optimget (opts, "TolFun"), []) %!assert (optimget (opts, "TolFun", 1e-3), 1e-3) %% Test input validation %!error optimget () %!error optimget (1) %!error optimget (1,2,3,4,5) %!error optimget (1, "name") %!error optimget (struct (), 2) %!warning <unrecognized option: foobar> (optimget (opts, "foobar")); %!warning <ambiguous option: Max> (optimget (opts, "Max"));