ode - numerical solution of ordinary differential equations
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.
- -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.
- -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.
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.
- -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.
- --help
- Print a list of command-line options, and exit.
- --version
- Print the version number of ode and the plotting utilities package,
and exit.
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.
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.
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.
"The GNU Plotting Utilities Manual".
Email bug reports to bug-gnu-utils@gnu.org.