NAME
ode - numerical solution of ordinary differential equations
SYNOPSIS
ode [ options ] [ file ]
DESCRIPTION
ode is a tool that solves, by numerical integration, the initial value
problem for a specified system of first-order ordinary differential
equations. Three distinct numerical integration schemes are available:
Runge-Kutta-Fehlberg (the default), Adams-Moulton, and Euler. The
Adams-Moulton and Runge-Kutta schemes are available with adaptive step
size.
The operation of ode is specified by a program, written in its input
language. The program is simply a list of expressions for the
derivatives of the variables to be integrated, together with some
control statements. Some examples are given in the EXAMPLES section.
ode reads the program from the specified file, or from standard input
if no file name is given. If reading from standard input, ode will
stop reading and exit when it sees a single period on a line by itself.
At each time step, the values of variables specified in the program are
written to standard output. So a table of values will be produced,
with each column showing the evolution of a variable. If there are
only two columns, the output can be piped to graph(1) or a similar
plotting program.
OPTIONS
Input Options
-f file
--input-file file
Read input from file before reading from standard input. This
option makes it possible to work interactively, after reading a
program fragment that defines the system of differential
equations.
Output Options
-p prec
--precision prec
When printing numerical results, use prec significant digits
(the default is 6). If this option is given, the print format
will be scientific notation.
-t
--title
Print a title line at the head of the output, naming the
variables in each column. If this option is given, the print
format will be scientific notation.
Integration Scheme Options
The following options specify the numerical integration scheme. Only
one of the three basic options -R, -A, -E may be specified. The
default is -R (Runge-Kutta-Fehlberg).
-R [stepsize]
--runge-kutta [stepsize]
Use a fifth-order Runge-Kutta-Fehlberg algorithm, with an
adaptive stepsize unless a constant stepsize is specified. When
a constant stepsize is specified and no error analysis is
requested, then a classical fourth-order Runge-Kutta scheme is
used.
-A [stepsize]
--adams-moulton [stepsize]
Use a fourth-order Adams-Moulton predictor-corrector scheme,
with an adaptive stepsize unless a constant stepsize, stepsize,
is specified. The Runge-Kutta-Fehlberg algorithm is used to get
past ‘bad’ points (if any).
-E [stepsize]
--euler [stepsize]
Use a ‘quick and dirty’ Euler scheme, with a constant stepsize.
The default value of stepsize is 0.1. Not recommended for
serious applications.
The error bound options -r and -e (see below) may not be used if
-E is specified.
-h hmin [hmax]
--step-size-bound hmin [hmax]
Use a lower bound hmin on the stepsize. The numerical scheme
will not let the stepsize go below hmin. The default is to
allow the stepsize to shrink to the machine limit, i.e., the
minimum nonzero double-precision floating point number.
The optional argument hmax, if included, specifies a maximum
value for the stepsize. It is useful in preventing the
numerical routine from skipping quickly over an interesting
region.
Error Bound Options
-r rmax [rmin]
--relative-error-bound rmax [rmin]
The -r option sets an upper bound on the relative single-step
error. If the -r option is used, the relative single-step error
in any dependent variable will never exceed rmax (the default
for which is 10^-9). If this should occur, the solution will be
abandoned and an error message will be printed. If the stepsize
is not constant, the stepsize will be decreased ‘adaptively’, so
that the upper bound on the single-step error is not violated.
Thus, choosing a smaller upper bound on the single-step error
will cause smaller stepsizes to be chosen. A lower bound rmin
may optionally be specified, to suggest when the stepsize should
be increased (the default for rmin is rmax/1000).
-e emax [emin]
--absolute-error-bound emax [emin]
Similar to -r, but bounds the absolute rather than the relative
single-step error.
-s
--suppress-error-bound
Suppress the ceiling on single-step error, allowing ode to
continue even if this ceiling is exceeded. This may result in
large numerical errors.
Informational Options
--help Print a list of command-line options, and exit.
--version
Print the version number of ode and the plotting utilities
package, and exit.
DIAGNOSTICS
Mostly self-explanatory. The biggest exception is ‘syntax error’,
meaning there is a grammatical error. Language error messages are of
the form
ode: nnn: message...
where ‘nnn’ is the number of the input line containing the error. If
the -f option is used, the phrase "(file)" follows the ‘nnn’ for errors
encountered inside the file. Subsequently, when ode begins reading the
standard input, line numbers start over from 1.
No effort is made to recover successfully from syntactic errors in the
input. However, there is a meager effort to resynchronize so more than
one error can be found in one scan.
Run-time errors elicit a message describing the problem, and the
solution is abandoned.
EXAMPLES
The program
y’ = y
y = 1
print t, y
step 0, 1
solves an initial value problem whose solution is y=e^t. When ode runs
this program, it will write two columns of numbers to standard output.
Each line will show the value of the independent variable t, and the
variable y, as t is stepped from 0 to 1.
A more sophisticated example would be
sine’ = cosine
cosine’ = -sine
sine = 0
cosine = 1
print t, sine
step 0, 2*PI
This program solves an initial value problem for a system of two
differential equations. The initial value problem turns out to define
the sine and cosine functions. The program steps the system over a
full period.
AUTHORS
ode was written by Nicholas B. Tufillaro (nbt@reed.edu), and slightly
enhanced by Robert S. Maier (rsm@math.arizona.edu) to merge it into the
GNU plotting utilities.
SEE ALSO
"The GNU Plotting Utilities Manual".
BUGS
Email bug reports to bug-gnu-utils@gnu.org.