annotate scripts/ode/odeset.m @ 20585:e5f36a7854a5

Remove fuzzy matching from odeset/odeget. * levenshtein.cc: Deleted file. * libinterp/corefcn/module.mk: Remove levenshtein.cc from build system. * fuzzy_compare.m: Deleted file. * scripts/ode/module.mk: Remove fuzzy_compare.m from build system * odeget.m: Reword docstring. Use a persistent cellstr variable to keep track of all options. Replace fuzzy_compare() calls with combination of strcmpi and strncmpi. Report errors relative to function odeget rather than OdePkg. Rewrite and extend BIST tests. Add input validation BIST tests. * odeset.m: Reword docstring. Use a persistent cellstr variable to keep track of all options. Replace fuzzy_compare() calls with combination of strcmpi and strncmpi. Report errors relative to function odeset rather than OdePkg. Use more meaningful variables names and create intermediate variables with logical names to help make code readable. Remove interactive input when multiple property names match and just issue an error. Rewrite BIST tests. * ode_struct_value_check.m: Remove input checking for private function which must always be invoked correctly by caller. Use intermediate variables opt and val to make the code more understandable. Consolidate checks on values into single if statements. Use 'val == fix (val)' to check for integer. * __unimplemented__.m: Removed odeset, odeget, ode45 from list.
author Rik <rik@octave.org>
date Fri, 09 Oct 2015 12:03:23 -0700
parents 45151de7423f
children 00caf63edcdf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
1 ## Copyright (C) 2013, Roberto Porcu' <roberto.porcu@polimi.it>
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
2 ## Copyright (C) 2006-2012, Thomas Treichl <treichl@users.sourceforge.net>
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
3 ##
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
4 ## This file is part of Octave.
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
5 ##
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
6 ## Octave is free software; you can redistribute it and/or modify it
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
7 ## under the terms of the GNU General Public License as published by
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
8 ## the Free Software Foundation; either version 3 of the License, or (at
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
9 ## your option) any later version.
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
10 ##
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
11 ## Octave is distributed in the hope that it will be useful, but
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
12 ## WITHOUT ANY WARRANTY; without even the implied warranty of
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
13 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
14 ## General Public License for more details.
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
15 ##
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
16 ## You should have received a copy of the GNU General Public License
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
17 ## along with Octave; see the file COPYING. If not, see
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
18 ## <http://www.gnu.org/licenses/>.
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
19
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
20 ## -*- texinfo -*-
20548
25623ef2ff4f doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents: 20533
diff changeset
21 ## @deftypefn {Function File} {} odeset ()
25623ef2ff4f doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents: 20533
diff changeset
22 ## @deftypefnx {Function File} {@var{odestruct} =} odeset (@var{"field1"}, @var{value1}, @var{"field2"}, @var{value2}, @dots{})
25623ef2ff4f doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents: 20533
diff changeset
23 ## @deftypefnx {Function File} {@var{odestruct} =} odeset (@var{oldstruct}, @var{"field1"}, @var{value1}, @var{"field2"}, @var{value2}, @dots{})
25623ef2ff4f doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents: 20533
diff changeset
24 ## @deftypefnx {Function File} {@var{odestruct} =} odeset (@var{oldstruct}, @var{newstruct})
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
25 ##
20548
25623ef2ff4f doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents: 20533
diff changeset
26 ## Create or modify an ODE options structure.
25623ef2ff4f doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents: 20533
diff changeset
27 ##
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
28 ## When called without an input argument, return a new ODE options structure
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
29 ## that contains all possible fields initialized to their default values.
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
30 ##
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
31 ## If called with string input arguments @var{"field1"}, @var{"field2"},
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
32 ## @dots{} identifying valid ODE options then return a new ODE options
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
33 ## structure with all possible fields initialized @strong{and} set the values
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
34 ## of the fields @var{"field1"}, @var{"field2"}, @dots{} to the values
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
35 ## @var{value1}, @var{value2}, @dots{}
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
36 ##
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
37 ## If called with an input structure @var{oldstruct} then overwrite the values
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
38 ## of the options @var{"field1"}, @var{"field2"}, @dots{} with new values
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
39 ## @var{value1}, @var{value2}, @dots{} and return the modified structure.
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
40 ##
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
41 ## When called with two input ODE options structures @var{oldstruct} and
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
42 ## @var{newstruct} overwrite all values from the structure @var{oldstruct} with
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
43 ## new values from the structure @var{newstruct}. Empty values in
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
44 ## @var{newstruct} will not overwrite values in @var{oldstruct}.
20548
25623ef2ff4f doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents: 20533
diff changeset
45 ## @seealso{odeget}
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
46 ## @end deftypefn
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
47
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
48 function odestruct = odeset (varargin)
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
49
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
50 ## Special calling syntax to display defaults
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
51 if (nargin == 0 && nargout == 0)
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
52 print_options ();
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
53 return;
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
54 endif
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
55
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
56 ## Column vector of all possible OdePkg options
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
57 persistent options = {"AbsTol"; "Algorithm"; "BDF"; "Choice"; "Eta"; "Events";
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
58 "Explicit"; "InexactSolver"; "InitialSlope";
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
59 "InitialStep"; "Jacobian"; "JConstant"; "JPattern";
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
60 "Mass"; "MassConstant"; "MassSingular";
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
61 "MaxNewtonIterations"; "MaxOrder"; "MaxStep";
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
62 "MStateDependence"; "MvPattern"; "NewtonTol";
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
63 "NonNegative"; "NormControl"; "OutputFcn"; "OutputSave";
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
64 "OutputSel"; "PolynomialDegree"; "QuadratureOrder";
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
65 "Refine"; "RelTol"; "Restart"; "Stats";
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
66 "TimeStepNumber"; "TimeStepSize"; "UseJacobian";
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
67 "Vectorized"};
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
68
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
69 ## initialize output
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
70 odestruct = cell2struct (cell (numel (options), 1), options);
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
71
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
72 if (nargin == 0)
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
73 return;
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
74 endif
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
75
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
76 if (isstruct (varargin{1}))
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
77 oldstruct = varargin{1};
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
78 ode_struct_value_check (oldstruct);
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
79
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
80 oldstruct_fldnames = (fieldnames (oldstruct)).';
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
81
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
82 ## Copy oldstruct values into output odestruct
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
83 for fldname = oldstruct_fldnames
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
84 name = lower (fldname{1});
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
85
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
86 exactmatch = true;
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
87 match = find (strcmpi (name, options));
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
88 if (isempty (match))
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
89 match = find (strncmpi (name, options, length (name)));
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
90 exactmatch = false;
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
91 endif
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
92
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
93 if (isempty (match))
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
94 error ("odeset: invalid property '%s'", fldname{1});
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
95 elseif (numel (match) == 1)
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
96 if (! exactmatch)
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
97 warning ("odeset:NoExactMatching",
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
98 "no exact match for '%s'. Assuming '%s'.",
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
99 name, options{match});
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
100 endif
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
101 odestruct.(options{match}) = oldstruct.(fldname{1});
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
102 else
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
103 error ("odeset: no exact match for '%s'. Possible fields found: %s.",
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
104 name, strjoin (options(match), ", "));
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
105 endif
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
106 endfor
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
107
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
108 ## At this point, odestruct has been initialized with default values,
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
109 ## and if oldstruct was present it has overwritten fields in odestruct.
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
110
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
111 if (nargin == 2 && isstruct (varargin{2}))
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
112 newstruct = varargin{2};
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
113 ode_struct_value_check (newstruct);
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
114
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
115 newstruct_fldnames = (fieldnames (newstruct)).';
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
116
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
117 ## Update the first struct with the values from the second one
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
118 for fldname = newstruct_fldnames
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
119 name = lower (fldname{1});
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
120
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
121 exactmatch = true;
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
122 match = find (strcmpi (name, options));
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
123 if (isempty (match))
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
124 match = find (strncmpi (name, options, length (name)));
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
125 exactmatch = false;
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
126 endif
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
127
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
128 if (isempty (match))
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
129 error ("odeset: invalid property '%s'", fldname{1});
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
130 elseif (numel (match) == 1)
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
131 if (! exactmatch)
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
132 warning ("odeset:NoExactMatching",
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
133 "no exact match for '%s'. Assuming '%s'.",
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
134 name, options{match});
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
135 endif
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
136 odestruct.(options{match}) = newstruct.(fldname{1});
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
137 else
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
138 error ("odeset: no exact match for '%s'. Possible fields found: %s.",
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
139 name, strjoin (options(match), ", "));
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
140 endif
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
141 endfor
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
142
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
143 ## Done copying newstruct to oldstruct
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
144 return;
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
145 endif
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
146
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
147 ## Second argument is not a struct
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
148 if (mod (nargin, 2) != 1)
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
149 error ("odeset: FIELD/VALUE arguments must occur in pairs");
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
150 endif
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
151 if (! all (cellfun ("isclass", varargin(2:2:end), "char")))
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
152 error ("odeset: All FIELD names must be strings");
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
153 endif
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
154
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
155 ## Write new field/value pairs into odestruct
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
156 for i = 2:2:nargin
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
157 name = lower (varargin{i});
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
158
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
159 exactmatch = true;
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
160 match = find (strcmpi (name, options));
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
161 if (isempty (match))
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
162 match = find (strncmpi (name, options, length (name)));
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
163 exactmatch = false;
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
164 endif
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
165
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
166 if (isempty (match))
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
167 error ("odeset: invalid property '%s'", varargin{i});
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
168 elseif (numel (match) == 1)
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
169 if (! exactmatch)
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
170 warning ("odeset:NoExactMatching",
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
171 "no exact match for '%s'. Assuming '%s'.",
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
172 name, options{match});
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
173 endif
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
174 odestruct.(options{match}) = varargin{i+1};
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
175 else
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
176 error ("odeset: no exact match for '%s'. Possible fields found: %s.",
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
177 name, strjoin (options(match), ", "));
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
178 endif
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
179 endfor
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
180
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
181 ## Check if all changes have resulted in a valid OdePkg struct
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
182 ode_struct_value_check (odestruct);
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
183
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
184 else
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
185 ## First input argument was not a struct, must be field/value pairs
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
186 if (mod (nargin, 2) != 0)
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
187 error ("odeset: FIELD/VALUE arguments must occur in pairs");
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
188 elseif (! all (cellfun ("isclass", varargin(1:2:end), "char")))
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
189 error ("odeset: All FIELD names must be strings");
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
190 endif
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
191
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
192 for i = 1:2:nargin
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
193 name = lower (varargin{i});
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
194
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
195 exactmatch = true;
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
196 match = find (strcmpi (name, options));
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
197 if (isempty (match))
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
198 match = find (strncmpi (name, options, length (name)));
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
199 exactmatch = false;
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
200 endif
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
201
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
202 if (isempty (match))
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
203 error ("odeset: invalid property '%s'", varargin{i});
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
204 elseif (numel (match) == 1)
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
205 if (! exactmatch)
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
206 warning ("odeset:NoExactMatching",
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
207 "no exact match for '%s'. Assuming '%s'.",
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
208 name, options{match});
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
209 endif
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
210 odestruct.(options{match}) = varargin{i+1};
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
211 else
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
212 error ("odeset: no exact match for '%s'. Possible fields found: %s.",
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
213 name, strjoin (options(match), ", "));
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
214 endif
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
215 endfor
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
216
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
217 ## Check if all changes have resulted in a valid OdePkg struct
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
218 ode_struct_value_check (odestruct);
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
219
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
220 endif
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
221
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
222 endfunction
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
223
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
224 ## function useful to print all the possible options
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
225 function print_options ()
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
226
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
227 disp ("List of all possible ODE solver options.");
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
228 disp ("Default values are in square brackets.");
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
229 disp ("");
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
230 disp (" AbsTol: scalar or vector, >0, [1e-6]");
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
231 disp (" Algorithm: string, {['gmres'], 'pcg', 'bicgstab'}");
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
232 disp (" BDF: binary, {'on', ['off']}");
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
233 disp (" Choice: switch, {[1], 2}");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
234 disp (" Eta: scalar, >=0, <1, [0.5]");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
235 disp (" Events: function_handle, []");
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
236 disp (" Explicit: binary, {'yes', ['no']}");
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
237 disp (" InexactSolver: string, {'inexact_newton', 'fsolve', []}");
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
238 disp (" InitialSlope: vector, []");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
239 disp (" InitialStep: scalar, >0, []");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
240 disp (" Jacobian: matrix or function_handle, []");
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
241 disp (" JConstant: binary, {'on', ['off']}");
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
242 disp (" JPattern: sparse matrix, []");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
243 disp (" Mass: matrix or function_handle, []");
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
244 disp (" MassConstant: binary, {'on', ['off']}");
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
245 disp (" MassSingular: switch, {'yes', ['maybe'], 'no'}");
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
246 disp ("MaxNewtonIterations: scalar, integer, >0, [1e3]");
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
247 disp (" MaxOrder: switch, {1, 2, 3, 4, [5]}");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
248 disp (" MaxStep: scalar, >0, []");
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
249 disp (" MStateDependence: switch, {'none', ['weak'], 'strong'}");
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
250 disp (" MvPattern: sparse matrix, []");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
251 disp (" NewtonTol: scalar or vector, >0, []");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
252 disp (" NonNegative: vector of integers, []");
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
253 disp (" NormControl: binary, {'on', ['off']}");
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
254 disp (" OutputFcn: function_handle, []");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
255 disp (" OutputSave: scalar, integer, >0, []");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
256 disp (" OutputSel: scalar or vector, []");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
257 disp (" PolynomialDegree: scalar, integer, >0, []");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
258 disp (" QuadratureOrder: scalar, integer, >0, []");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
259 disp (" Refine: scalar, integer, >0, []");
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
260 disp (" RelTol: scalar, >0, [1e-3]");
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
261 disp (" Restart: scalar, integer, >0, [20]");
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
262 disp (" Stats: binary, {'on', ['off']}");
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
263 disp (" TimeStepNumber: scalar, integer, >0, []");
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
264 disp (" TimeStepSize: scalar, >0, []");
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
265 disp (" UseJacobian: binary, {'yes', ['no']}");
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
266 disp (" Vectorized: binary, {'on', ['off']}");
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
267
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
268 endfunction
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
269
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
270
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
271 %!demo
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
272 %! # A new OdePkg options structure with default values is created.
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
273 %!
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
274 %! odeoptA = odeset ();
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
275
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
276 %!demo
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
277 %! # A new OdePkg options structure with manually set options
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
278 %! # for "AbsTol" and "RelTol" is created.
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
279 %!
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
280 %! odeoptB = odeset ("AbsTol", 1e-2, "RelTol", 1e-1);
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
281
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
282 %!demo
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
283 %! # A new OdePkg options structure is created from odeoptB with
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
284 %! # a modified value for option "NormControl".
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
285 %!
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
286 %! odeoptB = odeset ("AbsTol", 1e-2, "RelTol", 1e-1);
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
287 %! odeoptC = odeset (odeoptB, "NormControl", "on");
20533
fcb792acab9b Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff changeset
288
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
289 ## All tests that are needed to check if a correct resp. valid option
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
290 ## has been set are implemented in ode_struct_value_check.m.
20553
45151de7423f maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents: 20549
diff changeset
291 %!test
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
292 %! odeoptA = odeset ();
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
293 %! assert (isstruct (odeoptA));
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
294 %! fields = fieldnames (odeoptA);
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
295 %! assert (numel (fields), 37);
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
296 %! assert (all (structfun ("isempty", odeoptA)));
20549
e368ce72a844 maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents: 20548
diff changeset
297
20585
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
298 %!shared odeoptB, odeoptC
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
299 %!test
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
300 %! odeoptB = odeset ("ABSTOL", 1e-2, "reltol", 1e-1);
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
301 %! assert (odeoptB.AbsTol, 1e-2); # Check canonicalization of name
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
302 %! assert (odeoptB.RelTol, 1e-1);
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
303
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
304 %!test
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
305 %! odeoptC = odeset (odeoptB, "NormControl", "on");
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
306 %! assert (odeoptC.AbsTol, 1e-2); # check values from first struct copied
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
307 %! assert (odeoptC.NormControl, "on"); # check new values override old ones
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
308
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
309 %!test
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
310 %! odeoptD = odeset (odeoptB, odeoptC);
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
311 %! assert (odeoptD, odeoptC);
e5f36a7854a5 Remove fuzzy matching from odeset/odeget.
Rik <rik@octave.org>
parents: 20553
diff changeset
312