Mercurial > octave
annotate scripts/ode/ode45.m @ 20553:45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
* ode45.m: Match variable names in function to docstring.
Don't use '...' line continuation unless strictly necessary.
Remove incorrect isa check for inline function.
Use '( )' around switch statement test variable.
Use printf, rather than fprintf, where possible.
* odeget.m: Match variable names in function to docstring.
Rephrase error messages to begin with 'odeget:'.
Use try/catch blocks to speed up "fast" and "fast_not_empty" code.
Use rows() rather than "size (xxx, 1)".
Use isempty rather than "size (xxx, 1) == 0".
Use printf, rather than fprintf, where possible.
Use unwind_protect block in BIST tests to restore warning state.
* odeset.m: Match variable names in function to docstring.
Use rows() rather than "size (xxx, 1)".
Use isempty rather than "size (xxx, 1) == 0".
Use printf, rather than fprintf, where possible.
Eliminate for loop with cell2struct for odestruct initialization.
Introduce temporary vars oldstruct, newstruct to clarify code.
Restate some error messages to begin with 'odeset:'.
Use cellfun to quickl check that all field inputs are strings.
Use unwind_protect block in BIST tests to restore warning state.
author | Rik <rik@octave.org> |
---|---|
date | Mon, 05 Oct 2015 11:59:18 -0700 |
parents | e368ce72a844 |
children | a22d8a2eb0e5 |
rev | line source |
---|---|
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
1 ## Copyright (C) 2014, Jacopo Corno <jacopo.corno@gmail.com> |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
2 ## Copyright (C) 2013, Roberto Porcu' <roberto.porcu@polimi.it> |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
3 ## Copyright (C) 2006-2012, Thomas Treichl <treichl@users.sourceforge.net> |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
4 ## |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
5 ## 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
|
6 ## |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
7 ## 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
|
8 ## 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
|
9 ## 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
|
10 ## your option) any later version. |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
11 ## |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
12 ## 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
|
13 ## 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
|
14 ## 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
|
15 ## 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
|
16 ## |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
17 ## 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
|
18 ## 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
|
19 ## <http://www.gnu.org/licenses/>. |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
20 |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
21 ## -*- texinfo -*- |
20548
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
22 ## @deftypefn {Function File} {[@var{t}, @var{y}] =} ode45 (@var{fun}, @var{trange}, @var{init}) |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
23 ## @deftypefnx {Function File} {[@var{t}, @var{y}] =} ode45 (@var{fun}, @var{trange}, @var{init}, @var{opt}) |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
24 ## @deftypefnx {Function File} {[@var{t}, @var{y}] =} ode45 (@dots{}, @var{par1}, @var{par2}, @dots{}) |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
25 ## @deftypefnx {Function File} {[@var{t}, @var{y}, @var{xe}, @var{ye}, @var{ie}] =} ode45 (@dots{}) |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
26 ## @deftypefnx {Function File} {@var{sol} =} ode45 (@var{fun}, @var{trange}, @var{init}, @dots{}) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
27 ## |
20548
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
28 ## Solve a set of non-stiff Ordinary Differential Equations (non-stiff ODEs) |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
29 ## with the well known explicit Dormand-Prince method of order 4. |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
30 ## |
20548
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
31 ## The first input argument must be a function handle or inline function that |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
32 ## defines the ODE: @code{y' = f(t,y)}. The function must accept two inputs |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
33 ## where the first is time @var{t} and the second is a column vector of |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
34 ## unknowns @var{y}. |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
35 ## |
20548
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
36 ## @var{trange} specifies the time interval over which the ODE will be |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
37 ## evaluated. Usually, it is a two-element vector specifying the initial and |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
38 ## final times (@code{[tinit, tfinal]}). If there are more than two elements |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
39 ## then the solution will also be evaluated at these intermediate time |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
40 ## instances unless the integrate function called is |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
41 ## @command{integrate_n_steps}. If there is only one time value, then |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
42 ## @code{ode45} will raise an error unless the options structure has |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
43 ## non-empty fields named @var{"TimeStepNumber"} and @var{"TimeStepSize"}. |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
44 ## If the option @var{"TimeStepSize"} is not empty, then the stepper called |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
45 ## will be @command{integrate_const}. If @var{"TimeStepNumber"} is also |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
46 ## specified then the integrate function @command{integrate_n_steps} will be |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
47 ## used; otherwise, @command{integrate_adaptive} is used. For this last |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
48 ## possibility the user can set the tolerance for the timestep computation by |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
49 ## changing the option @var{"Tau"}, that has a default value of @math{1e-6}. |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
50 ## |
20548
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
51 ## The third input argument @var{init} contains the initial value for the |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
52 ## unknowns. If this is a row vector then the solution @var{y} will be a matrix |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
53 ## in which each column is the solution for the corresponding initial value |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
54 ## in @var{init}. |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
55 ## |
20548
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
56 ## If present, the fourth input argument specifies options to the ODE solver. |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
57 ## It is a structure typically generated by @code{odeset}. |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
58 ## |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
59 ## The function usually produces just two outputs. Variable @var{t} is a |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
60 ## column vector and contains the times where the solution was found. The |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
61 ## output @var{y} is a matrix in which each column refers to a different |
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
62 ## unknown of the problem and each row corresponds to a time in @var{t}. |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
63 ## |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
64 ## For example, solve an anonymous implementation of the Van der Pol equation |
20548
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
65 ## |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
66 ## @example |
20548
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
67 ## @group |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
68 ## fvdp = @@(t,y) [y(2); (1 - y(1)^2) * y(2) - y(1)]; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
69 ## [T,Y] = ode45 (fvdp, [0 20], [2 0]); |
20548
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
70 ## @end group |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
71 ## @end example |
20548
25623ef2ff4f
doc: Rewrite docstrings for ode* family of functions.
Rik <rik@octave.org>
parents:
20543
diff
changeset
|
72 ## @seealso{odeset, odeget} |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
73 ## @end deftypefn |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
74 |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
75 function varargout = ode45 (vfun, vtrange, vinit, varargin) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
76 |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
77 vorder = 5; # runge_kutta_45_dorpri uses local extrapolation |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
78 vsolver = "ode45"; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
79 |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
80 ## FIXME: Octave core function's usually do print_usage () |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
81 ## rather than displaying full help string when improperly called. |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
82 if (nargin == 0) # Check number and types of all input arguments |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
83 help (vsolver); |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
84 error ("OdePkg:InvalidArgument", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
85 "number of input arguments must be greater than zero"); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
86 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
87 |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
88 if (nargin < 3) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
89 print_usage (); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
90 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
91 |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
92 if (nargin >= 4) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
93 if (! isstruct (varargin{1})) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
94 ## varargin{1:len} are parameters for vfun |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
95 vodeoptions = odeset; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
96 vodeoptions.vfunarguments = varargin; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
97 elseif (length (varargin) > 1) |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
98 ## varargin{1} is an OdePkg options structure vopt |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
99 vodeoptions = odepkg_structure_check (varargin{1}, "ode45"); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
100 vodeoptions.vfunarguments = {varargin{2:length(varargin)}}; |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
101 else # if (isstruct (varargin{1})) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
102 vodeoptions = odepkg_structure_check (varargin{1}, "ode45"); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
103 vodeoptions.vfunarguments = {}; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
104 endif |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
105 else # nargin == 3 |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
106 vodeoptions = odeset; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
107 vodeoptions.vfunarguments = {}; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
108 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
109 |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
110 if (! isvector (vtrange) || ! isnumeric (vtrange)) |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
111 error ("OdePkg:InvalidArgument", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
112 "second input argument must be a valid vector"); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
113 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
114 |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
115 if (length (vtrange) < 2 |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
116 && (isempty (vodeoptions.TimeStepSize) |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
117 || isempty (vodeoptions.TimeStepNumber))) |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
118 error ("OdePkg:InvalidArgument", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
119 "second input argument must be a valid vector"); |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
120 elseif (vtrange(2) == vtrange(1)) |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
121 error ("OdePkg:InvalidArgument", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
122 "second input argument must be a valid vector"); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
123 else |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
124 vodeoptions.vdirection = sign (vtrange(2) - vtrange(1)); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
125 endif |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
126 vtrange = vtrange(:); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
127 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
128 if (! isvector (vinit) || ! isnumeric (vinit)) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
129 error ("OdePkg:InvalidArgument", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
130 "third input argument must be a valid numerical value"); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
131 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
132 vinit = vinit(:); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
133 |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
134 if (! (isa (vfun, "function_handle"))) |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
135 error ("OdePkg:InvalidArgument", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
136 "first input argument must be a valid function handle"); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
137 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
138 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
139 ## Start preprocessing, have a look which options are set in vodeoptions, |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
140 ## check if an invalid or unused option is set |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
141 if (isempty (vodeoptions.TimeStepNumber) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
142 && isempty (vodeoptions.TimeStepSize)) |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
143 integrate_func = "adaptive"; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
144 vodeoptions.vstepsizefixed = false; |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
145 elseif (! isempty (vodeoptions.TimeStepNumber) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
146 && ! isempty (vodeoptions.TimeStepSize)) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
147 integrate_func = "n_steps"; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
148 vodeoptions.vstepsizefixed = true; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
149 if (sign (vodeoptions.TimeStepSize) != vodeoptions.vdirection) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
150 warning ("OdePkg:InvalidArgument", |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
151 "option 'TimeStepSize' has a wrong sign", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
152 "it will be corrected automatically"); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
153 vodeoptions.TimeStepSize = (-1)*vodeoptions.TimeStepSize; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
154 endif |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
155 elseif (isempty (vodeoptions.TimeStepNumber) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
156 && ! isempty (vodeoptions.TimeStepSize)) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
157 integrate_func = "const"; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
158 vodeoptions.vstepsizefixed = true; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
159 if (sign (vodeoptions.TimeStepSize) != vodeoptions.vdirection) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
160 warning ("OdePkg:InvalidArgument", |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
161 "option 'TimeStepSize' has a wrong sign", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
162 "it will be corrected automatically"); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
163 vodeoptions.TimeStepSize = (-1)*vodeoptions.TimeStepSize; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
164 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
165 else |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
166 warning ("OdePkg:InvalidArgument", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
167 "assuming an adaptive integrate function"); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
168 integrate_func = "adaptive"; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
169 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
170 |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
171 ## Get the default options that can be set with "odeset" temporarily |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
172 vodetemp = odeset; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
173 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
174 ## Implementation of the option RelTol has been finished. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
175 ## This option can be set by the user to another value than default value. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
176 if (isempty (vodeoptions.RelTol) && ! vodeoptions.vstepsizefixed) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
177 vodeoptions.RelTol = 1e-3; |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
178 warning ("OdePkg:InvalidArgument", |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
179 "Option 'RelTol' not set, new value %f is used", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
180 vodeoptions.RelTol); |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
181 elseif (! isempty (vodeoptions.RelTol) && vodeoptions.vstepsizefixed) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
182 warning ("OdePkg:InvalidArgument", |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
183 "Option 'RelTol' will be ignored if fixed time stamps are given"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
184 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
185 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
186 ## Implementation of the option AbsTol has been finished. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
187 ## This option can be set by the user to another value than default value. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
188 if (isempty (vodeoptions.AbsTol) && ! vodeoptions.vstepsizefixed) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
189 vodeoptions.AbsTol = 1e-6; |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
190 warning ("OdePkg:InvalidArgument", |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
191 "Option 'AbsTol' not set, new value %f is used", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
192 vodeoptions.AbsTol); |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
193 elseif (! isempty (vodeoptions.AbsTol) && vodeoptions.vstepsizefixed) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
194 warning ("OdePkg:InvalidArgument", |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
195 "Option 'AbsTol' will be ignored if fixed time stamps are given"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
196 else |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
197 vodeoptions.AbsTol = vodeoptions.AbsTol(:); # Create column vector |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
198 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
199 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
200 ## Implementation of the option NormControl has been finished. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
201 ## This option can be set by the user to another value than default value. |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
202 if (strcmp (vodeoptions.NormControl, "on")) |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
203 vodeoptions.vnormcontrol = true; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
204 else |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
205 vodeoptions.vnormcontrol = false; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
206 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
207 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
208 ## Implementation of the option NonNegative has been finished. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
209 ## This option can be set by the user to another value than default value. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
210 if (! isempty (vodeoptions.NonNegative)) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
211 if (isempty (vodeoptions.Mass)) |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
212 vodeoptions.vhavenonnegative = true; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
213 else |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
214 vodeoptions.vhavenonnegative = false; |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
215 warning ("OdePkg:InvalidArgument", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
216 "Option 'NonNegative' will be ignored if mass matrix is set"); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
217 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
218 else |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
219 vodeoptions.vhavenonnegative = false; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
220 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
221 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
222 ## Implementation of the option OutputFcn has been finished. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
223 ## This option can be set by the user to another value than default value. |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
224 if (isempty (vodeoptions.OutputFcn) && nargout == 0) |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
225 vodeoptions.OutputFcn = @odeplot; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
226 vodeoptions.vhaveoutputfunction = true; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
227 elseif (isempty (vodeoptions.OutputFcn)) |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
228 vodeoptions.vhaveoutputfunction = false; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
229 else |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
230 vodeoptions.vhaveoutputfunction = true; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
231 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
232 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
233 ## Implementation of the option OutputSel has been finished. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
234 ## This option can be set by the user to another value than default value. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
235 if (! isempty (vodeoptions.OutputSel)) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
236 vodeoptions.vhaveoutputselection = true; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
237 else |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
238 vodeoptions.vhaveoutputselection = false; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
239 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
240 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
241 ## Implementation of the option OutputSave has been finished. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
242 ## This option can be set by the user to another value than default value. |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
243 if (isempty (vodeoptions.OutputSave)) |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
244 vodeoptions.OutputSave = 1; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
245 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
246 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
247 ## Implementation of the option Refine has been finished. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
248 ## This option can be set by the user to another value than default value. |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
249 if (vodeoptions.Refine > 0) |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
250 vodeoptions.vhaverefine = true; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
251 else |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
252 vodeoptions.vhaverefine = false; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
253 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
254 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
255 ## Implementation of the option Stats has been finished. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
256 ## This option can be set by the user to another value than default value. |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
257 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
258 ## Implementation of the option InitialStep has been finished. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
259 ## This option can be set by the user to another value than default value. |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
260 if (isempty (vodeoptions.InitialStep) && strcmp (integrate_func, "adaptive")) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
261 vodeoptions.InitialStep = ... |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
262 vodeoptions.vdirection * starting_stepsize (vorder, vfun, vtrange(1), |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
263 vinit, |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
264 vodeoptions.AbsTol, |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
265 vodeoptions.RelTol, |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
266 vodeoptions.vnormcontrol); |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
267 warning ("OdePkg:InvalidArgument", |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
268 "option 'InitialStep' not set, estimated value %f is used", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
269 vodeoptions.InitialStep); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
270 elseif(isempty (vodeoptions.InitialStep)) |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
271 vodeoptions.InitialStep = odeget (vodeoptions, "TimeStepSize"); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
272 endif |
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 ## Implementation of the option MaxStep has been finished. This option |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
275 ## can be set by the user to another value than default value. |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
276 if (isempty (vodeoptions.MaxStep) && ! vodeoptions.vstepsizefixed) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
277 vodeoptions.MaxStep = abs (vtrange(end) - vtrange(1)) / 10; |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
278 warning ("OdePkg:InvalidArgument", |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
279 "Option 'MaxStep' not set, new value %f is used", |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
280 vodeoptions.MaxStep); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
281 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
282 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
283 ## Implementation of the option Events has been finished. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
284 ## This option can be set by the user to another value than default value. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
285 if (! isempty (vodeoptions.Events)) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
286 vodeoptions.vhaveeventfunction = true; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
287 else |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
288 vodeoptions.vhaveeventfunction = false; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
289 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
290 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
291 ## The options "Jacobian", "JPattern" and "Vectorized" will be ignored |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
292 ## by this solver because this solver uses an explicit Runge-Kutta method |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
293 ## and therefore no Jacobian calculation is necessary. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
294 if (! isequal (vodeoptions.Jacobian, vodetemp.Jacobian)) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
295 warning ("OdePkg:InvalidArgument", |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
296 "option 'Jacobian' will be ignored by this solver"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
297 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
298 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
299 if (! isequal (vodeoptions.JPattern, vodetemp.JPattern)) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
300 warning ("OdePkg:InvalidArgument", |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
301 "option 'JPattern' will be ignored by this solver"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
302 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
303 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
304 if (! isequal (vodeoptions.Vectorized, vodetemp.Vectorized)) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
305 warning ("OdePkg:InvalidArgument", |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
306 "option 'Vectorized' will be ignored by this solver"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
307 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
308 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
309 if (! isequal (vodeoptions.NewtonTol, vodetemp.NewtonTol)) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
310 warning ("OdePkg:InvalidArgument", |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
311 "option 'NewtonTol' will be ignored by this solver"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
312 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
313 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
314 if (! isequal (vodeoptions.MaxNewtonIterations,vodetemp.MaxNewtonIterations)) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
315 warning ("OdePkg:InvalidArgument", |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
316 "option 'MaxNewtonIterations' will be ignored by this solver"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
317 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
318 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
319 ## Implementation of the option Mass has been finished. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
320 ## This option can be set by the user to another value than default value. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
321 if (! isempty (vodeoptions.Mass) && isnumeric (vodeoptions.Mass)) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
322 vhavemasshandle = false; |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
323 vmass = vodeoptions.Mass; # constant mass |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
324 elseif (isa (vodeoptions.Mass, "function_handle")) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
325 vhavemasshandle = true; # mass defined by a function handle |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
326 else # no mass matrix - creating a diag-matrix of ones for mass |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
327 vhavemasshandle = false; # vmass = diag (ones (length (vinit), 1), 0); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
328 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
329 |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
330 ## Implementation of the option MStateDependence has been finished. |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
331 ## This option can be set by the user to another value than default value. |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
332 if (strcmp (vodeoptions.MStateDependence, "none")) |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
333 vmassdependence = false; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
334 else |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
335 vmassdependence = true; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
336 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
337 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
338 ## Other options that are not used by this solver. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
339 ## Print a warning message to tell the user that the option is ignored. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
340 if (! isequal (vodeoptions.MvPattern, vodetemp.MvPattern)) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
341 warning ("OdePkg:InvalidArgument", |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
342 "option 'MvPattern' will be ignored by this solver"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
343 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
344 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
345 if (! isequal (vodeoptions.MassSingular, vodetemp.MassSingular)) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
346 warning ("OdePkg:InvalidArgument", |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
347 "option 'MassSingular' will be ignored by this solver"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
348 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
349 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
350 if (! isequal (vodeoptions.InitialSlope, vodetemp.InitialSlope)) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
351 warning ("OdePkg:InvalidArgument", |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
352 "option 'InitialSlope' will be ignored by this solver"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
353 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
354 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
355 if (! isequal (vodeoptions.MaxOrder, vodetemp.MaxOrder)) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
356 warning ("OdePkg:InvalidArgument", |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
357 "option 'MaxOrder' will be ignored by this solver"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
358 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
359 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
360 if (! isequal (vodeoptions.BDF, vodetemp.BDF)) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
361 warning ("OdePkg:InvalidArgument", |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
362 "option 'BDF' will be ignored by this solver"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
363 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
364 |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
365 ## Starting the initialisation of the core solver ode45 |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
366 SubOpts = vodeoptions; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
367 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
368 if (vhavemasshandle) # Handle only the dynamic mass matrix, |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
369 if (vmassdependence) # constant mass matrices have already |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
370 vmass = @(t,x) vodeoptions.Mass (t, x, vodeoptions.vfunarguments{:}); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
371 vfun = @(t,x) vmass (t, x, vodeoptions.vfunarguments{:}) ... |
20543
3339c9bdfe6a
Activate FSAL property in dorpri timestepper
Carlo de Falco <carlo.defalco@polimi.it>
parents:
20533
diff
changeset
|
372 \ vfun (t, x, vodeoptions.vfunarguments{:}); |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
373 else # if (vmassdependence == false) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
374 vmass = @(t) vodeoptions.Mass (t, vodeoptions.vfunarguments{:}); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
375 vfun = @(t,x) vmass (t, vodeoptions.vfunarguments{:}) ... |
20543
3339c9bdfe6a
Activate FSAL property in dorpri timestepper
Carlo de Falco <carlo.defalco@polimi.it>
parents:
20533
diff
changeset
|
376 \ vfun (t, x, vodeoptions.vfunarguments{:}); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
377 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
378 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
379 |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
380 switch (integrate_func) |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
381 case "adaptive" |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
382 solution = integrate_adaptive (@runge_kutta_45_dorpri, |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
383 vorder, vfun, vtrange, vinit, SubOpts); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
384 case "n_steps" |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
385 solution = integrate_n_steps (@runge_kutta_45_dorpri, |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
386 vfun, vtrange(1), vinit, |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
387 vodeoptions.TimeStepSize, |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
388 vodeoptions.TimeStepNumber, SubOpts); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
389 case "const" |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
390 solution = integrate_const (@runge_kutta_45_dorpri, |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
391 vfun, vtrange, vinit, |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
392 vodeoptions.TimeStepSize, SubOpts); |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
393 endswitch |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
394 |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
395 ## Postprocessing, do whatever when terminating integration algorithm |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
396 if (vodeoptions.vhaveoutputfunction) # Cleanup plotter |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
397 feval (vodeoptions.OutputFcn, solution.t(end), |
20543
3339c9bdfe6a
Activate FSAL property in dorpri timestepper
Carlo de Falco <carlo.defalco@polimi.it>
parents:
20533
diff
changeset
|
398 solution.x(end,:)', "done", vodeoptions.vfunarguments{:}); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
399 endif |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
400 if (vodeoptions.vhaveeventfunction) # Cleanup event function handling |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
401 odepkg_event_handle (vodeoptions.Events, solution.t(end), |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
402 solution.x(end,:)', "done", |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
403 vodeoptions.vfunarguments{:}); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
404 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
405 |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
406 ## Print additional information if option Stats is set |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
407 if (strcmp (vodeoptions.Stats, "on")) |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
408 vhavestats = true; |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
409 vnsteps = solution.vcntloop-2; # vcntloop from 2..end |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
410 vnfailed = (solution.vcntcycles-1)-(vnsteps)+1; # vcntcycl from 1..end |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
411 vnfevals = 7*(solution.vcntcycles-1); # number of ode evaluations |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
412 vndecomps = 0; # number of LU decompositions |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
413 vnpds = 0; # number of partial derivatives |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
414 vnlinsols = 0; # no. of linear systems solutions |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
415 ## Print cost statistics if no output argument is given |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
416 if (nargout == 0) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
417 printf ("Number of successful steps: %d\n", vnsteps); |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
418 printf ("Number of failed attempts: %d\n", vnfailed); |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
419 printf ("Number of function calls: %d\n", vnfevals); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
420 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
421 else |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
422 vhavestats = false; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
423 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
424 |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
425 if (nargout == 2) |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
426 varargout{1} = solution.t; # Time stamps are first output argument |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
427 varargout{2} = solution.x; # Results are second output argument |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
428 elseif (nargout == 1) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
429 varargout{1}.x = solution.t; # Time stamps are saved in field x |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
430 varargout{1}.y = solution.x; # Results are saved in field y |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
431 varargout{1}.solver = vsolver; # Solver name is saved in field solver |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
432 if (vodeoptions.vhaveeventfunction) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
433 varargout{1}.ie = solution.vevent{2}; # Index info which event occurred |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
434 varargout{1}.xe = solution.vevent{3}; # Time info when an event occurred |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
435 varargout{1}.ye = solution.vevent{4}; # Results when an event occurred |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
436 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
437 if (vhavestats) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
438 varargout{1}.stats = struct (); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
439 varargout{1}.stats.nsteps = vnsteps; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
440 varargout{1}.stats.nfailed = vnfailed; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
441 varargout{1}.stats.nfevals = vnfevals; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
442 varargout{1}.stats.npds = vnpds; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
443 varargout{1}.stats.ndecomps = vndecomps; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
444 varargout{1}.stats.nlinsols = vnlinsols; |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
445 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
446 elseif (nargout == 5) |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
447 varargout = cell (1,5); |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
448 varargout{1} = solution.t; |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
449 varargout{2} = solution.x; |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
450 if (vodeoptions.vhaveeventfunction) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
451 varargout{3} = solution.vevent{3}; # Time info when an event occurred |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
452 varargout{4} = solution.vevent{4}; # Results when an event occurred |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
453 varargout{5} = solution.vevent{2}; # Index info which event occurred |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
454 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
455 endif |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
456 |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
457 endfunction |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
458 |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
459 |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
460 ## We are using the "Van der Pol" implementation for all tests that are done |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
461 ## for this function. |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
462 ## For further tests we also define a reference solution (computed at high |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
463 ## accuracy) |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
464 %!function [ydot] = fpol (vt, vy) # The Van der Pol |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
465 %! ydot = [vy(2); (1 - vy(1)^2) * vy(2) - vy(1)]; |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
466 %!endfunction |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
467 %!function [vref] = fref () # The computed reference solution |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
468 %! vref = [0.32331666704577, -1.83297456798624]; |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
469 %!endfunction |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
470 %!function [vjac] = fjac (vt, vy, varargin) # its Jacobian |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
471 %! vjac = [0, 1; -1 - 2 * vy(1) * vy(2), 1 - vy(1)^2]; |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
472 %!endfunction |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
473 %!function [vjac] = fjcc (vt, vy, varargin) # sparse type |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
474 %! vjac = sparse ([0, 1; -1 - 2 * vy(1) * vy(2), 1 - vy(1)^2]) |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
475 %!endfunction |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
476 %!function [vval, vtrm, vdir] = feve (vt, vy, varargin) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
477 %! vval = fpol (vt, vy, varargin); # We use the derivatives |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
478 %! vtrm = zeros (2,1); # that's why component 2 |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
479 %! vdir = ones (2,1); # seems to not be exact |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
480 %!endfunction |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
481 %!function [vval, vtrm, vdir] = fevn (vt, vy, varargin) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
482 %! vval = fpol (vt, vy, varargin); # We use the derivatives |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
483 %! vtrm = ones (2,1); # that's why component 2 |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
484 %! vdir = ones (2,1); # seems to not be exact |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
485 %!endfunction |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
486 %!function [vmas] = fmas (vt, vy, varargin) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
487 %! vmas = [1, 0; 0, 1]; # Dummy mass matrix for tests |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
488 %!endfunction |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
489 %!function [vmas] = fmsa (vt, vy, varargin) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
490 %! vmas = sparse ([1, 0; 0, 1]); # A sparse dummy matrix |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
491 %!endfunction |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
492 %!function [vout] = fout (vt, vy, vflag, varargin) |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
493 %! if (regexp (char (vflag), 'init') == 1) |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
494 %! if (any (size (vt) != [2, 1])) error ('"fout" step "init"'); endif |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
495 %! elseif (isempty (vflag)) |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
496 %! if (any (size (vt) != [1, 1])) error ('"fout" step "calc"'); endif |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
497 %! vout = false; |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
498 %! elseif (regexp (char (vflag), 'done') == 1) |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
499 %! if (any (size (vt) != [1, 1])) error ('"fout" step "done"'); endif |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
500 %! else |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
501 %! error ('"fout" invalid vflag'); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
502 %! endif |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
503 %!endfunction |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
504 %! |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
505 %! ## Turn off output of warning messages for all tests, turn them on |
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
506 %! ## again if the last test is called |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
507 %!error # ouput argument |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
508 %! warning ("off", "OdePkg:InvalidArgument"); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
509 %! B = ode45 (1, [0 25], [3 15 1]); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
510 %!error # input argument number one |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
511 %! [vt, vy] = ode45 (1, [0 25], [3 15 1]); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
512 %!error # input argument number two |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
513 %! [vt, vy] = ode45 (@fpol, 1, [3 15 1]); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
514 %!test # two output arguments |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
515 %! [vt, vy] = ode45 (@fpol, [0 2], [2 0]); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
516 %! assert ([vt(end), vy(end,:)], [2, fref], 1e-2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
517 %!test # not too many steps |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
518 %! [vt, vy] = ode45 (@fpol, [0 2], [2 0]); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
519 %! assert (size (vt) < 20); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
520 %!test # anonymous function instead of real function |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
521 %! fvdb = @(vt,vy) [vy(2); (1 - vy(1)^2) * vy(2) - vy(1)]; |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
522 %! [vt, vy] = ode45 (fvdb, [0 2], [2 0]); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
523 %! assert ([vt(end), vy(end,:)], [2, fref], 1e-2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
524 %!test # extra input arguments passed through |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
525 %! [vt, vy] = ode45 (@fpol, [0 2], [2 0], 12, 13, "KL"); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
526 %! assert ([vt(end), vy(end,:)], [2, fref], 1e-2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
527 %!test # empty OdePkg structure *but* extra input arguments |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
528 %! vopt = odeset; |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
529 %! [vt, vy] = ode45 (@fpol, [0 2], [2 0], vopt, 12, 13, "KL"); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
530 %! assert ([vt(end), vy(end,:)], [2, fref], 1e-2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
531 %!error # strange OdePkg structure |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
532 %! vopt = struct ("foo", 1); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
533 %! [vt, vy] = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
534 %!test # Solve vdp in fixed step sizes |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
535 %! vopt = odeset("TimeStepSize", 0.1); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
536 %! [vt, vy] = ode45 (@fpol, [0,2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
537 %! assert (vt(:), [0:0.1:2]', 1e-2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
538 %!test # Solve another anonymous function below zero |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
539 %! vref = [0, 14.77810590694212]; |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
540 %! [vt, vy] = ode45 (@(t,y) y, [-2 0], 2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
541 %! assert ([vt(end), vy(end,:)], vref, 1e-1); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
542 %!test # InitialStep option |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
543 %! vopt = odeset ("InitialStep", 1e-8); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
544 %! [vt, vy] = ode45 (@fpol, [0 0.2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
545 %! assert ([vt(2)-vt(1)], [1e-8], 1e-9); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
546 %!test # MaxStep option |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
547 %! vopt = odeset ("MaxStep", 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
548 %! vsol = ode45 (@fpol, [0 0.2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
549 %! assert ([vsol.x(5)-vsol.x(4)], [1e-3], 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
550 %!test # Solve with intermidiate step |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
551 %! vsol = ode45 (@fpol, [0 1 2], [2 0]); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
552 %! assert (any((vsol.x-1) == 0)); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
553 %! assert ([vsol.x(end), vsol.y(end,:)], [2, fref], 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
554 %!test # Solve in backward direction starting at t=0 |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
555 %! vref = [-1.205364552835178, 0.951542399860817]; |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
556 %! vsol = ode45 (@fpol, [0 -2], [2 0]); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
557 %! assert ([vsol.x(end), vsol.y(end,:)], [-2, vref], 1e-2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
558 %!test # Solve in backward direction starting at t=2 |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
559 %! vref = [-1.205364552835178, 0.951542399860817]; |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
560 %! vsol = ode45 (@fpol, [2 -2], fref); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
561 %! assert ([vsol.x(end), vsol.y(end,:)], [-2, vref], 1e-2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
562 %!test # Solve in backward direction starting at t=2, with intermidiate step |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
563 %! vref = [-1.205364552835178, 0.951542399860817]; |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
564 %! vsol = ode45 (@fpol, [2 0 -2], fref); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
565 %! idx = find(vsol.x < 0, 1, "first") - 1; |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
566 %! assert ([vsol.x(idx), vsol.y(idx,:)], [0 2 0], 1e-2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
567 %! assert ([vsol.x(end), vsol.y(end,:)], [-2, vref], 1e-2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
568 %!test # Solve another anonymous function in backward direction |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
569 %! vref = [-1, 0.367879437558975]; |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
570 %! vsol = ode45 (@(t,y) y, [0 -1], 1); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
571 %! assert ([vsol.x(end), vsol.y(end,:)], vref, 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
572 %!test # Solve another anonymous function below zero |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
573 %! vref = [0, 14.77810590694212]; |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
574 %! vsol = ode45 (@(t,y) y, [-2 0], 2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
575 %! assert ([vsol.x(end), vsol.y(end,:)], vref, 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
576 %!test # Solve in backward direction starting at t=0 with MaxStep option |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
577 %! vref = [-1.205364552835178, 0.951542399860817]; |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
578 %! vopt = odeset ("MaxStep", 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
579 %! vsol = ode45 (@fpol, [0 -2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
580 %! assert ([abs(vsol.x(8)-vsol.x(7))], [1e-3], 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
581 %! assert ([vsol.x(end), vsol.y(end,:)], [-2, vref], 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
582 %!test # AbsTol option |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
583 %! vopt = odeset ("AbsTol", 1e-5); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
584 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
585 %! assert ([vsol.x(end), vsol.y(end,:)], [2, fref], 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
586 %!test # AbsTol and RelTol option |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
587 %! vopt = odeset ("AbsTol", 1e-8, "RelTol", 1e-8); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
588 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
589 %! assert ([vsol.x(end), vsol.y(end,:)], [2, fref], 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
590 %!test # RelTol and NormControl option -- higher accuracy |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
591 %! vopt = odeset ("RelTol", 1e-8, "NormControl", "on"); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
592 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
593 %! assert ([vsol.x(end), vsol.y(end,:)], [2, fref], 1e-5); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
594 %!test # Keeps initial values while integrating |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
595 %! vopt = odeset ("NonNegative", 2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
596 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
597 %! assert ([vsol.x(end), vsol.y(end,:)], [2, 2, 0], 0.5); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
598 %!test # Details of OutputSel and Refine can't be tested |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
599 %! vopt = odeset ("OutputFcn", @fout, "OutputSel", 1, "Refine", 5); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
600 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
601 %!test # Details of OutputSave can't be tested |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
602 %! vopt = odeset ("OutputSave", 1, "OutputSel", 1); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
603 %! vsla = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
604 %! vopt = odeset ("OutputSave", 2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
605 %! vslb = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
606 %! assert (length (vsla.x) + 1 >= 2 * length (vslb.x)) |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
607 %!test # Stats must add further elements in vsol |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
608 %! vopt = odeset ("Stats", "on"); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
609 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
610 %! assert (isfield (vsol, "stats")); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
611 %! assert (isfield (vsol.stats, "nsteps")); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
612 %!test # Events option add further elements in vsol |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
613 %! vopt = odeset ("Events", @feve); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
614 %! vsol = ode45 (@fpol, [0 10], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
615 %! assert (isfield (vsol, "ie")); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
616 %! assert (vsol.ie(1), 2); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
617 %! assert (isfield (vsol, "xe")); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
618 %! assert (isfield (vsol, "ye")); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
619 %!test # Events option, now stop integration |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
620 %! vopt = odeset ("Events", @fevn, "NormControl", "on"); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
621 %! vsol = ode45 (@fpol, [0 10], [2 0], vopt); |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
622 %! assert ([vsol.ie, vsol.xe, vsol.ye], |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
623 %! [2.0, 2.496110, -0.830550, -2.677589], 6e-1); |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
624 %!test # Events option, five output arguments |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
625 %! vopt = odeset ("Events", @fevn, "NormControl", "on"); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
626 %! [vt, vy, vxe, vye, vie] = ode45 (@fpol, [0 10], [2 0], vopt); |
20553
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
627 %! assert ([vie, vxe, vye], |
45151de7423f
maint: Clean up implementations of ode45.m, odeget.m, odeset.m.
Rik <rik@octave.org>
parents:
20549
diff
changeset
|
628 %! [2.0, 2.496110, -0.830550, -2.677589], 6e-1); |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
629 %!test # Jacobian option |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
630 %! vopt = odeset ("Jacobian", @fjac); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
631 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
632 %! assert ([vsol.x(end), vsol.y(end,:)], [2, fref], 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
633 %!test # Jacobian option and sparse return value |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
634 %! vopt = odeset ("Jacobian", @fjcc); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
635 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
636 %! assert ([vsol.x(end), vsol.y(end,:)], [2, fref], 1e-3); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
637 %! |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
638 %!## test for JPattern option is missing |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
639 %!## test for Vectorized option is missing |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
640 %!## test for NewtonTol option is missing |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
641 %!## test for MaxNewtonIterations option is missing |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
642 %! |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
643 %!test # Mass option as function |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
644 %! vopt = odeset ("Mass", @fmas); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
645 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
646 %! assert ([vsol.x(end), vsol.y(end,:)], [2, fref], 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
647 %!test # Mass option as matrix |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
648 %! vopt = odeset ("Mass", eye (2,2)); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
649 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
650 %! assert ([vsol.x(end), vsol.y(end,:)], [2, fref], 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
651 %!test # Mass option as sparse matrix |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
652 %! vopt = odeset ("Mass", sparse (eye (2,2))); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
653 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
654 %! assert ([vsol.x(end), vsol.y(end,:)], [2, fref], 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
655 %!test # Mass option as function and sparse matrix |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
656 %! vopt = odeset ("Mass", @fmsa); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
657 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
658 %! assert ([vsol.x(end), vsol.y(end,:)], [2, fref], 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
659 %!test # Mass option as function and MStateDependence |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
660 %! vopt = odeset ("Mass", @fmas, "MStateDependence", "strong"); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
661 %! vsol = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
662 %! assert ([vsol.x(end), vsol.y(end,:)], [2, fref], 1e-3); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
663 %!test # Set BDF option to something else than default |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
664 %! vopt = odeset ("BDF", "on"); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
665 %! [vt, vy] = ode45 (@fpol, [0 2], [2 0], vopt); |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
666 %! assert ([vt(end), vy(end,:)], [2, fref], 1e-3); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
667 %! |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
668 %!## test for MvPattern option is missing |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
669 %!## test for InitialSlope option is missing |
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
670 %!## test for MaxOrder option is missing |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
671 %! |
20549
e368ce72a844
maint: Use Octave coding conventions for ode* functions.
Rik <rik@octave.org>
parents:
20548
diff
changeset
|
672 %! warning ("on", "OdePkg:InvalidArgument"); |
20533
fcb792acab9b
Moving ode45, odeset, odeget, and levenshtein from odepkg to core.
jcorno <jacopo.corno@gmail.com>
parents:
diff
changeset
|
673 |