Mercurial > octave-nkf
diff doc/interpreter/diffeq.txi @ 3294:bfe1573bd2ae
[project @ 1999-10-19 10:06:07 by jwe]
author | jwe |
---|---|
date | Tue, 19 Oct 1999 10:08:42 +0000 |
parents | |
children | 36405da8e173 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/interpreter/diffeq.txi Tue Oct 19 10:08:42 1999 +0000 @@ -0,0 +1,189 @@ +@c Copyright (C) 1996, 1997 John W. Eaton +@c This is part of the Octave manual. +@c For copying conditions, see the file gpl.texi. + +@node Differential Equations, Optimization, Quadrature, Top +@chapter Differential Equations + +Octave has two built-in functions for solving differential equations. +Both are based on reliable ODE solvers written in Fortran. + +@menu +* Ordinary Differential Equations:: +* Differential-Algebraic Equations:: +@end menu + +@cindex Differential Equations +@cindex ODE +@cindex DAE + +@node Ordinary Differential Equations, Differential-Algebraic Equations, Differential Equations, Differential Equations +@section Ordinary Differential Equations + +The function @code{lsode} can be used to solve ODEs of the form +@iftex +@tex +$$ + {dx\over dt} = f (x, t) +$$ +@end tex +@end iftex +@ifinfo + +@example +dx +-- = f (x, t) +dt +@end example +@end ifinfo + +@noindent +using Hindmarsh's ODE solver @sc{Lsode}. + +@deftypefn {Loadable Function} {} lsode (@var{fcn}, @var{x0}, @var{t}, @var{t_crit}) +Return a matrix of @var{x} as a function of @var{t}, given the initial +state of the system @var{x0}. Each row in the result matrix corresponds +to one of the elements in the vector @var{t}. The first element of +@var{t} corresponds to the initial state @var{x0}, so that the first row +of the output is @var{x0}. + +The first argument, @var{fcn}, is a string that names the function to +call to compute the vector of right hand sides for the set of equations. +It must have the form + +@example +@var{xdot} = f (@var{x}, @var{t}) +@end example + +@noindent +where @var{xdot} and @var{x} are vectors and @var{t} is a scalar. + +The fourth argument is optional, and may be used to specify a set of +times that the ODE solver should not integrate past. It is useful for +avoiding difficulties with singularities and points where there is a +discontinuity in the derivative. +@end deftypefn + +Here is an example of solving a set of three differential equations using +@code{lsode}. Given the function + +@cindex oregonator + +@example +@group +function xdot = f (x, t) + + xdot = zeros (3,1); + + xdot(1) = 77.27 * (x(2) - x(1)*x(2) + x(1) \ + - 8.375e-06*x(1)^2); + xdot(2) = (x(3) - x(1)*x(2) - x(2)) / 77.27; + xdot(3) = 0.161*(x(1) - x(3)); + +endfunction +@end group +@end example + +@noindent +and the initial condition @code{x0 = [ 4; 1.1; 4 ]}, the set of +equations can be integrated using the command + +@example +@group +t = linspace (0, 500, 1000); + +y = lsode ("f", x0, t); +@end group +@end example + +If you try this, you will see that the value of the result changes +dramatically between @var{t} = 0 and 5, and again around @var{t} = 305. +A more efficient set of output points might be + +@example +@group +t = [0, logspace (-1, log10(303), 150), \ + logspace (log10(304), log10(500), 150)]; +@end group +@end example + +@deftypefn {Loadable Function} {} lsode_options (@var{opt}, @var{val}) +When called with two arguments, this function allows you set options +parameters for the function @code{lsode}. Given one argument, +@code{lsode_options} returns the value of the corresponding option. If +no arguments are supplied, the names of all the available options and +their current values are displayed. +@end deftypefn + +See Alan C. Hindmarsh, @cite{ODEPACK, A Systematized Collection of ODE +Solvers}, in Scientific Computing, R. S. Stepleman, editor, (1983) for +more information about the inner workings of @code{lsode}. + +@node Differential-Algebraic Equations, , Ordinary Differential Equations, Differential Equations +@section Differential-Algebraic Equations + +The function @code{dassl} can be used to solve DAEs of the form +@iftex +@tex +$$ + 0 = f (\dot{x}, x, t), \qquad x(t=0) = x_0, \dot{x}(t=0) = \dot{x}_0 +$$ +@end tex +@end iftex +@ifinfo + +@example +0 = f (x-dot, x, t), x(t=0) = x_0, x-dot(t=0) = x-dot_0 +@end example +@end ifinfo + +@noindent +using Petzold's DAE solver @sc{Dassl}. + +@deftypefn {Loadable Function} {[@var{x}, @var{xdot}] =} dassl (@var{fcn}, @var{x0}, @var{xdot0}, @var{t}, @var{t_crit}) +Return a matrix of states and their first derivatives with respect to +@var{t}. Each row in the result matrices correspond to one of the +elements in the vector @var{t}. The first element of @var{t} +corresponds to the initial state @var{x0} and derivative @var{xdot0}, so +that the first row of the output @var{x} is @var{x0} and the first row +of the output @var{xdot} is @var{xdot0}. + +The first argument, @var{fcn}, is a string that names the function to +call to compute the vector of residuals for the set of equations. +It must have the form + +@example +@var{res} = f (@var{x}, @var{xdot}, @var{t}) +@end example + +@noindent +where @var{x}, @var{xdot}, and @var{res} are vectors, and @var{t} is a +scalar. + +The second and third arguments to @code{dassl} specify the initial +condition of the states and their derivatives, and the fourth argument +specifies a vector of output times at which the solution is desired, +including the time corresponding to the initial condition. + +The set of initial states and derivatives are not strictly required to +be consistent. In practice, however, @sc{Dassl} is not very good at +determining a consistent set for you, so it is best if you ensure that +the initial values result in the function evaluating to zero. + +The fifth argument is optional, and may be used to specify a set of +times that the DAE solver should not integrate past. It is useful for +avoiding difficulties with singularities and points where there is a +discontinuity in the derivative. +@end deftypefn + +@deftypefn {Loadable Function} {} dassl_options (@var{opt}, @var{val}) +When called with two arguments, this function allows you set options +parameters for the function @code{lsode}. Given one argument, +@code{dassl_options} returns the value of the corresponding option. If +no arguments are supplied, the names of all the available options and +their current values are displayed. +@end deftypefn + +See K. E. Brenan, et al., @cite{Numerical Solution of Initial-Value +Problems in Differential-Algebraic Equations}, North-Holland (1989) for +more information about the implementation of @sc{Dassl}.