Mercurial > octave
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 |
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 |