<?xml-stylesheet type="text/xsl" href="../styles/pmathml.xsl"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dsi="http://www.w3.org/1999/xlink" xml:space="preserve"><head>
<!-- saved from url=(0014)about:internet -->
<title>
    NAG C Library Manual, Mark 8 : 
   d02 Chapter Introduction</title><link rel="stylesheet" href="../styles/libdoc.css" type="text/css"/><script type="text/javascript">
   function showLevel(_levelId){
    var thisLevel = document.getElementById(_levelId);
    var thisplus = document.getElementById( _levelId.concat('plus'));
    var thisminus = document.getElementById( _levelId.concat('minus'));
    if(thisLevel.style.display != "block"){
     thisLevel.style.display = "block";
     thisplus.style.display = "none";
     thisminus.style.display = "inline";
     }
    else{
     thisLevel.style.display = "none";
     thisminus.style.display = "none";
     thisplus.style.display = "inline";
     }
    }
  </script></head><body><hr/><div><a href="../../pdf/D02/d02_intro.pdf">d02 Chapter Introduction (pdf version)</a></div><div><a href="d02_conts.xml">Chapter Contents</a></div>
<div><a href="../mark8.xml">NAG C Library Manual</a></div><hr/><h1 class="libdoc">NAG C Library  Chapter Introduction<br/><br/>d02 &#8212; Ordinary Differential Equations</h1>
<div class="toc"><h3>Contents</h3>
<h2 class="toc"><a class="rtnref" href="#scope">1&#160;&#160;Scope of the Chapter</a></h2>
<h2 class="toc"><a class="rtnref" href="#background">2&#160;&#160;Background to the Problems</a></h2>
<h3 class="toc"><a class="rtnref" href="#background1">2.1&#160;&#160;Initial Value Problems</a></h3>
<h3 class="toc"><a class="rtnref" href="#background2">2.2&#160;&#160;Boundary Value Problems</a></h3>
<h4 class="toc"><a class="rtnref" href="#background23">2.2.1&#160;&#160;Finite-difference methods</a></h4>
<h2 class="toc"><a class="rtnref" href="#available">3&#160;&#160;Recommendations on Choice and Use of Available Functions</a></h2>
<h3 class="toc"><a class="rtnref" href="#recomm_1">3.1&#160;&#160;Initial Value Problems</a></h3>
<h4 class="toc"><a class="rtnref" href="#recomm_11">3.1.1&#160;&#160;Runge&#8211;Kutta functions</a></h4>
<h4 class="toc"><a class="rtnref" href="#recomm_12">3.1.2&#160;&#160;Adams functions</a></h4>
<h4 class="toc"><a class="rtnref" href="#recomm_13">3.1.3&#160;&#160;BDF functions</a></h4>
<h3 class="toc"><a class="rtnref" href="#recomm_2">3.2&#160;&#160;Boundary Value Problems</a></h3>
<h4 class="toc"><a class="rtnref" href="#recomm_23">3.2.1&#160;&#160;Finite-difference methods</a></h4>
<h3 class="toc"><a class="rtnref" href="#recomm_5">3.3&#160;&#160;Summary of Recommended Functions</a></h3>
<h2 class="toc"><a class="rtnref" href="#dtree">4&#160;&#160;Decision Trees</a></h2>
<h2 class="toc"><a class="rtnref" href="#index">5&#160;&#160;Index</a></h2>
<h2 class="toc"><a class="rtnref" href="#withdrawn">6&#160;&#160;Functions Withdrawn or Scheduled for Withdrawal</a></h2>
<h2 class="toc"><a class="rtnref" href="#references">7&#160;&#160;References</a></h2></div><h2><a name="scope" id="scope"/>1&#160;&#160;Scope of the Chapter</h2><div class="paramtext">This chapter is concerned with the numerical solution of ordinary differential equations.  There are two main types of problem: those in which all boundary conditions are specified at one point (initial value problems), and those in which the boundary conditions are distributed between two or more points (boundary-value problems and eigenvalue problems).  Functions are available for initial value problems, two-point boundary-value problems and Sturm&#8211;Liouville eigenvalue problems.</div><h2><a name="background" id="background"/>2&#160;&#160;Background to the Problems</h2><div class="paramtext">For most of the functions in this chapter a system of ordinary differential equations must be written in the form
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" display="block">
<m:mtable columnalign="left">
 <m:mtr>
  <m:mtd><m:msubsup><m:mi>y</m:mi><m:mn>1</m:mn><m:mo>&#8242;</m:mo></m:msubsup><m:mo>=</m:mo><m:msub><m:mi>f</m:mi><m:mn>1</m:mn></m:msub><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mn>1</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>n</m:mi></m:msub></m:mfenced><m:mtext>,</m:mtext></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd/></m:mtr><m:mtr>
  <m:mtd><m:msubsup><m:mi>y</m:mi><m:mn>2</m:mn><m:mo>&#8242;</m:mo></m:msubsup><m:mo>=</m:mo><m:msub><m:mi>f</m:mi><m:mn>2</m:mn></m:msub><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mn>1</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>n</m:mi></m:msub></m:mfenced><m:mtext>,</m:mtext></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mo>&#8942;</m:mo></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:msubsup><m:mi>y</m:mi><m:mi>n</m:mi><m:mo>&#8242;</m:mo></m:msubsup><m:mo>=</m:mo><m:msub><m:mi>f</m:mi><m:mi>n</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mn>1</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>n</m:mi></m:msub></m:mfenced><m:mtext>,</m:mtext></m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
that is the system must be given in first-order form.  The <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mi>n</m:mi></m:math>&#160; dependent variables (also, the solution) <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:msub><m:mi>y</m:mi><m:mn>1</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>n</m:mi></m:msub></m:math>&#160; are functions of the independent variable <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mi>x</m:mi></m:math>, and the differential equations give expressions for the first derivatives <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:msubsup><m:mi>y</m:mi><m:mi>i</m:mi><m:mo>&#8242;</m:mo></m:msubsup><m:mo>=</m:mo><m:mfrac><m:mrow><m:mi>d</m:mi><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:mrow>
  <m:mrow><m:mi>d</m:mi><m:mi>x</m:mi></m:mrow>
 </m:mfrac>
</m:math>&#160;in terms of <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mi>x</m:mi></m:math>&#160; and <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:msub><m:mi>y</m:mi><m:mn>1</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>n</m:mi></m:msub></m:math>.  For a system of <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mi>n</m:mi></m:math>&#160; first-order equations, <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mi>n</m:mi></m:math>&#160;associated boundary conditions are usually required to define the solution.</div>
<div class="paramtext">A more general system may contain derivatives of higher order, but such systems can almost always be reduced to the first-order form by introducing new variables.  For example, suppose we have the third-order equation
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" display="block">
<m:msup><m:mi>z</m:mi><m:mrow><m:mo>&#8242;</m:mo><m:mo>&#8242;</m:mo><m:mo>&#8242;</m:mo></m:mrow></m:msup><m:mo>+</m:mo><m:mi>z</m:mi><m:msup><m:mi>z</m:mi><m:mrow><m:mo>&#8242;</m:mo><m:mo>&#8242;</m:mo></m:mrow></m:msup><m:mo>+</m:mo><m:mi>k</m:mi><m:mfenced separators=""><m:mi>l</m:mi><m:mo>-</m:mo><m:msup><m:msup><m:mi>z</m:mi><m:mo>&#8242;</m:mo></m:msup><m:mn>2</m:mn></m:msup></m:mfenced><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
We write <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:msub><m:mi>y</m:mi><m:mn>1</m:mn></m:msub><m:mo>=</m:mo><m:mi>z</m:mi></m:math>, <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub><m:mo>=</m:mo><m:msup><m:mi>z</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>,  <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:msub><m:mi>y</m:mi><m:mn>3</m:mn></m:msub><m:mo>=</m:mo><m:msup><m:mi>z</m:mi><m:mrow><m:mo>&#8242;</m:mo><m:mo>&#8242;</m:mo></m:mrow></m:msup></m:math>, and the third-order equation may then be written as the system of first-order equations
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" display="block">
<m:mtable columnalign="left">
 <m:mtr>
  <m:mtd><m:msubsup><m:mi>y</m:mi><m:mn>1</m:mn><m:mo>&#8242;</m:mo></m:msubsup><m:mo>=</m:mo><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd/></m:mtr><m:mtr>
  <m:mtd><m:msubsup><m:mi>y</m:mi><m:mn>2</m:mn><m:mo>&#8242;</m:mo></m:msubsup><m:mo>=</m:mo><m:msub><m:mi>y</m:mi><m:mn>3</m:mn></m:msub></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd/></m:mtr><m:mtr>
  <m:mtd><m:msubsup><m:mi>y</m:mi><m:mn>3</m:mn><m:mo>&#8242;</m:mo></m:msubsup><m:mo>=</m:mo><m:mo>-</m:mo><m:msub><m:mi>y</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>y</m:mi><m:mn>3</m:mn></m:msub><m:mo>-</m:mo><m:mi>k</m:mi><m:mfenced separators=""><m:mi>l</m:mi><m:mo>-</m:mo><m:msubsup><m:mi>y</m:mi><m:mn>2</m:mn><m:mn>2</m:mn></m:msubsup></m:mfenced><m:mtext>.</m:mtext></m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
For this system <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mi>n</m:mi><m:mo>=</m:mo><m:mn>3</m:mn></m:math>&#160;and we require 3 boundary conditions in order to define the solution.  These conditions must specify values of the dependent variables at certain points.  For example, we have an <b>initial value problem</b> if the conditions are
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" display="block">
<m:mtable columnalign="left">
 <m:mtr>
  <m:mtd><m:msub><m:mi>y</m:mi><m:mn>1</m:mn></m:msub><m:mo>=</m:mo><m:mn>0</m:mn><m:mphantom><m:mn>.1</m:mn></m:mphantom><m:mtext>&#8195; at &#8203;</m:mtext><m:mi>x</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub><m:mo>=</m:mo><m:mn>0</m:mn><m:mphantom><m:mn>.1</m:mn></m:mphantom><m:mtext>&#8195; at &#8203;</m:mtext><m:mi>x</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:msub><m:mi>y</m:mi><m:mn>3</m:mn></m:msub><m:mo>=</m:mo><m:mn>0.1</m:mn><m:mtext>&#8195; at &#8203;</m:mtext><m:mi>x</m:mi><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>.</m:mtext></m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
These conditions would enable us to integrate the equations numerically from the point <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mi>x</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;to some specified end point.  We have a <b>boundary-value problem</b> if the conditions are
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" display="block">
<m:mtable columnalign="left">
 <m:mtr>
  <m:mtd><m:msub><m:mi>y</m:mi><m:mn>1</m:mn></m:msub><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>&#8195; at &#8203;</m:mtext><m:mi>x</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>&#8195; at &#8203;</m:mtext><m:mi>x</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub><m:mo>=</m:mo><m:mn>1</m:mn><m:mtext>&#8195; at &#8203;</m:mtext><m:mi>x</m:mi><m:mo>=</m:mo><m:mn>10</m:mn><m:mtext>.</m:mtext></m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
These conditions would be sufficient to define a solution in the range <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:mi>x</m:mi><m:mo>&#8804;</m:mo><m:mn>10</m:mn></m:math>, but the problem could not be solved by direct integration (see Section <a class="secref" href="#background2">2.2</a>).  More general boundary conditions are permitted in the boundary-value case.</div><h3><a name="background1" id="background1"/>2.1&#160;&#160;Initial Value Problems</h3><div class="paramtext">To solve first-order systems, initial values of the dependent variables <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:math>, for <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi></m:math>, must be supplied at a given point, <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mi>a</m:mi></m:math>.  Also a point, <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mi>b</m:mi></m:math>, at which the values of the dependent variables are required, must be specified.  The numerical solution is then obtained by a step-by-step calculation which approximates values of the variables <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:math>, for  <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi></m:math>, at finite intervals over the required range  <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mfenced separators="" open="[" close="]"><m:mi>a</m:mi><m:mo>,</m:mo><m:mi>b</m:mi></m:mfenced></m:math>.  The functions in this chapter adjust the step length automatically to meet specified accuracy tolerances.  Although the accuracy tests used are reliable over each step individually, in general an accuracy requirement cannot be guaranteed over a long range.  For many problems there may be no serious accumulation of error, but for unstable systems small perturbations of the solution will often lead to rapid divergence of the calculated values from the true values.  A simple check for stability is to carry out trial calculations with different tolerances; if the results differ appreciably the system is probably unstable.  Over a short range, the difficulty may possibly be overcome by taking sufficiently small tolerances,  but over a long range it may be better to try to reformulate the problem.</div>
<div class="paramtext">A special class of initial value problems are those for which the solutions contain rapidly decaying transient terms.  Such problems are called <b>stiff</b>; an alternative way of describing them is to say that certain eigenvalues of the Jacobian matrix  <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
<m:mfenced separators=""><m:mfrac other="display">
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub></m:mrow>
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>y</m:mi><m:mi>j</m:mi></m:msub></m:mrow>
 </m:mfrac></m:mfenced>
</m:math>&#160; have large negative real parts when compared to others.  These problems require special methods for efficient numerical solution; the methods designed for non-stiff problems when applied to stiff problems tend to be very slow, because they need small step lengths to avoid numerical instability.  A full discussion is given in <a class="litref" href="#ref024">Hall  and Watt (1976)</a>  and a discussion of the methods for stiff problems is given in  <a class="litref" href="#ref516">Berzins <i>et al.</i> (1988)</a>.</div><h3><a name="background2" id="background2"/>2.2&#160;&#160;Boundary Value Problems</h3><div class="paramtext">In general, a system of nonlinear differential equations with boundary conditions at two or more points cannot be guaranteed to have a solution.  The solution, if it exists, has to be determined iteratively.  A comprehensive treatment of the numerical solution of boundary-value problems can be found in <a class="litref" href="#ref554">Ascher <i>et al.</i> (1988)</a> and <a class="litref" href="#ref561">Keller (1992)</a>.  The methods for this chapter are discussed in  <a class="litref" href="#ref555">Ascher <i>et al.</i> (1979)</a>, <a class="litref" href="#ref556">Ascher  and Bader (1987)</a> and <a class="litref" href="#ref209">Gladwell (1987)</a>.</div><h4><a name="background23" id="background23"/>2.2.1&#160;&#160;Finite-difference methods</h4><div class="paramtext">If a boundary-value problem seems insoluble by the above methods and a good estimate for the solution of the problem is known at all points of the range then a finite-difference method may be used.  Finite-difference equations are set up on a mesh of points and estimated values for the solution at the grid points are chosen.  Using these estimated values as starting values a Newton iteration is used to solve the finite-difference equations.  The accuracy of the solution is then improved by deferred corrections or the addition of points to the mesh or a combination of both.  The method does not suffer from the difficulties associated with the shooting method but good initial estimates of the solution may be required in some cases and the method is unlikely to be successful when the solution varies very rapidly over short ranges.  A discussion is given in Chapters 9 and 11 of <a class="litref" href="#ref210">Gladwell  and Sayers (1980)</a>  and Chapter 4 of <a class="litref" href="#ref025">Gladwell (1979a)</a>.</div><h2><a name="available" id="available"/>3&#160;&#160;Recommendations on Choice and Use of Available Functions</h2><div class="paramtext">There are no functions which deal directly with COMPLEX equations.  These may however be transformed to larger systems of real equations of the required form.  Split each equation into its real and imaginary parts and solve for the real and imaginary parts of each component of the solution.  Whilst this process doubles the size of the system and may not always be appropriate it does make available for use the full range of functions provided presently.</div><h3><a name="recomm_1" id="recomm_1"/>3.1&#160;&#160;Initial Value Problems</h3><div class="paramtext">In general, for non-stiff first-order systems, Runge&#8211;Kutta (RK) functions should be used.  For the usual requirement of integrating across a range the appropriate functions are <a class="rtnref" href="../D02/d02pvc.xml">nag_ode_ivp_rk_setup (d02pvc)</a> and <a class="rtnref" href="../D02/d02pcc.xml">nag_ode_ivp_rk_range (d02pcc)</a>; <a class="rtnref" href="../D02/d02pvc.xml">nag_ode_ivp_rk_setup (d02pvc)</a> is a setup function for <a class="rtnref" href="../D02/d02pcc.xml">nag_ode_ivp_rk_range (d02pcc)</a>.  For more complex tasks there are a further 

four related functions: <a class="rtnref" href="../D02/d02pdc.xml">nag_ode_ivp_rk_onestep (d02pdc)</a>, <a class="rtnref" href="../D02/d02pwc.xml">nag_ode_ivp_rk_reset_tend (d02pwc)</a>, <a class="rtnref" href="../D02/d02pxc.xml">nag_ode_ivp_rk_interp (d02pxc)</a> and <a class="rtnref" href="../D02/d02pzc.xml">nag_ode_ivp_rk_errass (d02pzc)</a>.
  When a system is to be integrated over a long range or with relatively high accuracy requirements the variable-order, variable-step Adams codes may be more efficient.  The appropriate function in this case is <a class="rtnref" href="../D02/d02cjc.xml">nag_ode_ivp_adams_gen (d02cjc)</a>.  For more complex tasks using an Adams code there are a further 

four related functions: <a class="rtnref" href="../D02/d02qfc.xml">nag_ode_ivp_adams_roots (d02qfc)</a>, <a class="rtnref" href="../D02/d02qwc.xml">nag_ode_ivp_adams_setup (d02qwc)</a>, <a class="rtnref" href="../D02/d02qyc.xml">nag_ode_ivp_adams_free (d02qyc)</a> and <a class="rtnref" href="../D02/d02qzc.xml">nag_ode_ivp_adams_interp (d02qzc)</a>.</div>
<div class="paramtext">For stiff systems, that is those which usually contain rapidly decaying transient components, the Backward Differentiation Formula (BDF) variable-order, variable-step codes should be used.  The appropriate function in this case is <a class="rtnref" href="../D02/d02ejc.xml">nag_ode_ivp_bdf_gen (d02ejc)</a>.  

</div>
<div class="paramtext">If you are not sure how to classify a problem, you are advised to perform some preliminary calculations with <a class="rtnref" href="../D02/d02pcc.xml">nag_ode_ivp_rk_range (d02pcc)</a>, which can indicate whether the system is stiff.  We also advise performing some trial calculations with <a class="rtnref" href="../D02/d02pcc.xml">nag_ode_ivp_rk_range (d02pcc)</a> (RK), <a class="rtnref" href="../D02/d02cjc.xml">nag_ode_ivp_adams_gen (d02cjc)</a>  (Adams) and <a class="rtnref" href="../D02/d02ejc.xml">nag_ode_ivp_bdf_gen (d02ejc)</a> (BDF) so as to determine which type of  function is best applied to the problem.  The conclusions should be based on the computer time used and the number of evaluations of the derivative function <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub></m:math>.  See <a class="litref" href="#ref208">Gladwell (1979b)</a> for more details.</div><h4><a name="recomm_11" id="recomm_11"/>3.1.1&#160;&#160;Runge&#8211;Kutta functions</h4><div class="paramtext">The basic RK function is <a class="rtnref" href="../D02/d02pdc.xml">nag_ode_ivp_rk_onestep (d02pdc)</a> which takes one integration step at a time.  An alternative is <a class="rtnref" href="../D02/d02pcc.xml">nag_ode_ivp_rk_range (d02pcc)</a>,  which provides output at user-specified points.  The initialization of either <a class="rtnref" href="../D02/d02pcc.xml">nag_ode_ivp_rk_range (d02pcc)</a> or <a class="rtnref" href="../D02/d02pdc.xml">nag_ode_ivp_rk_onestep (d02pdc)</a>  and the setting of optional inputs, including choice of method, is made by a call to the setup function <a class="rtnref" href="../D02/d02pvc.xml">nag_ode_ivp_rk_setup (d02pvc)</a>.  

 Optional output information about error assessment, can be obtained by calls to the diagnostic function <a class="rtnref" href="../D02/d02pzc.xml">nag_ode_ivp_rk_errass (d02pzc)</a>.
 <a class="rtnref" href="../D02/d02pxc.xml">nag_ode_ivp_rk_interp (d02pxc)</a> may be used to interpolate on information produced by <a class="rtnref" href="../D02/d02pdc.xml">nag_ode_ivp_rk_onestep (d02pdc)</a>  to give solution and derivative values between the integration points.  <a class="rtnref" href="../D02/d02pwc.xml">nag_ode_ivp_rk_reset_tend (d02pwc)</a> may be used to reset the end of the integration range whilst integrating using <a class="rtnref" href="../D02/d02pdc.xml">nag_ode_ivp_rk_onestep (d02pdc)</a>.</div><h4><a name="recomm_12" id="recomm_12"/>3.1.2&#160;&#160;Adams functions</h4><div class="paramtext">The general Adams variable-order variable-step function is  <a class="rtnref" href="../D02/d02qfc.xml">nag_ode_ivp_adams_roots (d02qfc)</a>, which provides a choice of automatic error control and the option of a sophisticated root-finding technique.  


The initialization of <a class="rtnref" href="../D02/d02qfc.xml">nag_ode_ivp_adams_roots (d02qfc)</a> and the setting of optional inputs is made by a call to the setup function <a class="rtnref" href="../D02/d02qwc.xml">nag_ode_ivp_adams_setup (d02qwc)</a>.
  
<a class="rtnref" href="../D02/d02qzc.xml">nag_ode_ivp_adams_interp (d02qzc)</a> may be used to interpolate on information produced by 

<a class="rtnref" href="../D02/d02qfc.xml">nag_ode_ivp_adams_roots (d02qfc)</a>
  to give solution and derivative values between the integration points.</div>
<div class="paramtext">There is a simple driving function <a class="rtnref" href="../D02/d02cjc.xml">nag_ode_ivp_adams_gen (d02cjc)</a>, which integrates a system over a range and, optionally, computes intermediate output and/or determines the position where a specified function of the solution is zero.</div><h4><a name="recomm_13" id="recomm_13"/>3.1.3&#160;&#160;BDF functions</h4><div class="paramtext">There is a simple driving function <a class="rtnref" href="../D02/d02ejc.xml">nag_ode_ivp_bdf_gen (d02ejc)</a>, which integrates a system over a range and, optionally, computes intermediate output and/or determines the position where a specified function of the solution is zero.  It has a specification similar to the Adams function  <a class="rtnref" href="../D02/d02cjc.xml">nag_ode_ivp_adams_gen (d02cjc)</a> except that to solve the equations arising in the BDF method an approximation to the Jacobian  <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
<m:mfenced separators=""><m:mfrac other="display">
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub></m:mrow>
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>y</m:mi><m:mi>j</m:mi></m:msub></m:mrow>
 </m:mfrac></m:mfenced>
</m:math>&#160; is required.  This approximation can be calculated internally but you may supply an analytic expression.  In most cases supplying a correct analytic expression will reduce the amount of computer time used.</div><h3><a name="recomm_2" id="recomm_2"/>3.2&#160;&#160;Boundary Value Problems</h3><div class="paramtext">For simple boundary-value problems with assigned boundary-values you may prefer to use a code based on the finite difference method for which there is a function with simple calling sequence (<a class="rtnref" href="../D02/d02gac.xml">nag_ode_bvp_fd_nonlin_fixedbc (d02gac)</a>).</div>
<div class="paramtext">For difficult boundary-value problems, where you need to exercise some control over the calculation, and where the collocation method proves unsuccessful, you may wish to try the alternative 

method of 
finite-differences (<a class="rtnref" href="../D02/d02rac.xml">nag_ode_bvp_fd_nonlin_gen (d02rac)</a>).</div>
<div class="paramtext">Note that it is not possible to make a fully automatic boundary-value function, and you should be prepared to experiment with different starting values or a different function if the problem is at all difficult.</div><h4><a name="recomm_23" id="recomm_23"/>3.2.1&#160;&#160;Finite-difference methods</h4><div class="paramtext"><a class="rtnref" href="../D02/d02gac.xml">nag_ode_bvp_fd_nonlin_fixedbc (d02gac)</a> may be used for simple boundary-value problems with assigned boundary-values.  

</div>
<div class="paramtext">You may find that convergence is difficult to achieve using  <a class="rtnref" href="../D02/d02gac.xml">nag_ode_bvp_fd_nonlin_fixedbc (d02gac)</a> since only specifying the unknown boundary-values and the position of the finite-difference mesh is permitted.  In such cases you may use <a class="rtnref" href="../D02/d02rac.xml">nag_ode_bvp_fd_nonlin_gen (d02rac)</a>, which permits specification of an initial estimate for the solution at all mesh points and allows the calculation to be influenced in other ways too.  <a class="rtnref" href="../D02/d02rac.xml">nag_ode_bvp_fd_nonlin_gen (d02rac)</a>  is designed to solve a general nonlinear two-point boundary-value problem with nonlinear boundary conditions.</div>
<div class="paramtext">A function, <a class="rtnref" href="../D02/d02gbc.xml">nag_ode_bvp_fd_lin_gen (d02gbc)</a>, is also supplied specifically for the general linear two-point boundary-value problem written in a standard &#8216;textbook&#8217; form.</div>
<div class="paramtext">You are advised to use interpolation functions from Chapter <a class="secref" href="../E01/e01_conts.xml">e01</a> to obtain solution values at points not on the final mesh.</div><h3><a name="recomm_5" id="recomm_5"/>3.3&#160;&#160;Summary of Recommended Functions</h3><div class="paramtext">
</div><div class="tablediv"><table border="3" cellpadding="2">
  
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="center"><b>Problem</b></td>
    <td class="libdoc" valign="top" align="center" colspan="3"><b>Function</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="center">RK Method</td>
    <td class="libdoc" valign="top" align="center">Adams Method</td>
    <td class="libdoc" valign="top" align="center">BDF Method</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><b>Initial-value Problems<br/>Driver Functions</b></td>
    <td class="libdoc" valign="top" align="center">&#160;</td>
    <td class="libdoc" valign="top" align="center">&#160;</td>
    <td class="libdoc" valign="top" align="center">&#160;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Integration over a range with optional intermediate output and optional determination of position where a function of the solution becomes zero</td>
    <td class="libdoc" valign="top" align="center">&#160;</td>
    <td class="libdoc" valign="top" align="center"><a class="rtnref" href="../D02/d02cjc.xml">d02cjc</a></td>
    <td class="libdoc" valign="top" align="center"><a class="rtnref" href="../D02/d02ejc.xml">d02ejc</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Integration of a range with intermediate output</td>
    <td class="libdoc" valign="top" align="center">&#160;</td>
    <td class="libdoc" valign="top" align="center"><a class="rtnref" href="../D02/d02cjc.xml">d02cjc</a></td>
    <td class="libdoc" valign="top" align="center"><a class="rtnref" href="../D02/d02ejc.xml">d02ejc</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Integration of a range until function of solution becomes zero</td>
    <td class="libdoc" valign="top" align="center">&#160;</td>
    <td class="libdoc" valign="top" align="center"><a class="rtnref" href="../D02/d02cjc.xml">d02cjc</a></td>
    <td class="libdoc" valign="top" align="center"><a class="rtnref" href="../D02/d02ejc.xml">d02ejc</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><b>Comprehensive Integration Functions</b></td>
    <td class="libdoc" valign="top" align="center">
                       <a class="rtnref" href="../D02/d02pcc.xml">d02pcc</a>, <a class="rtnref" href="../D02/d02pdc.xml">d02pdc</a>, <a class="rtnref" href="../D02/d02pvc.xml">d02pvc</a>, <a class="rtnref" href="../D02/d02pwc.xml">d02pwc</a> and <a class="rtnref" href="../D02/d02pxc.xml">d02pxc</a></td>
    <td class="libdoc" valign="top" align="center">
     <a class="rtnref" href="../D02/d02qfc.xml">d02qfc</a>, <a class="rtnref" href="../D02/d02qwc.xml">d02qwc</a> and <a class="rtnref" href="../D02/d02qzc.xml">d02qzc</a></td>
    <td class="libdoc" valign="top" align="center">&#160;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><b>Package for Solving Second-order Systems of Special Form</b></td>
    <td class="libdoc" valign="top" align="center" colspan="3">D02L functions</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><b>Boundary-value Problems<br/>
     Finite-difference Method</b></td>
    <td class="libdoc" valign="top" colspan="3">&#160;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">linear problem</td>
    <td class="libdoc" valign="top" align="center" colspan="3"><a class="rtnref" href="../D02/d02gbc.xml">d02gbc</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">full nonlinear problem</td>
    <td class="libdoc" valign="top" align="center" colspan="3"><a class="rtnref" href="../D02/d02rac.xml">d02rac</a></td>
   </tr>
  </tbody>
 </table></div><div class="paramtext">
</div><h2><a name="dtree" id="dtree"/>4&#160;&#160;Decision Trees</h2><h4><a name="tree1" id="tree1"/>Tree 1: Initial Value Problems
</h4>
<table class="dtree">
<tr>
<td class="dtentry">If the problem is not first order convert to first order.<br/>
 Is the problem known to be stiff?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rtnref" href="../D02/d02ejc.xml">d02ejc</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Backward Difference Formula: <a class="rtnref" href="../D02/d02ejc.xml">d02ejc</a>.<br/>
Adams method with driver function: <a class="rtnref" href="../D02/d02cjc.xml">d02cjc</a><br/>
Adams method with comprehensive suite: <a class="rtnref" href="../D02/d02qfc.xml">d02qfc</a>, <a class="rtnref" href="../D02/d02qwc.xml">d02qwc</a>, <a class="rtnref" href="../D02/d02qyc.xml">d02qyc</a> and <a class="rtnref" href="../D02/d02qzc.xml">d02qzc</a><br/>
Runge&#8211;Kutta method: <a class="rtnref" href="../D02/d02pcc.xml">d02pcc</a>, <a class="rtnref" href="../D02/d02pdc.xml">d02pdc</a>, <a class="rtnref" href="../D02/d02pvc.xml">d02pvc</a>, <a class="rtnref" href="../D02/d02pwc.xml">d02pwc</a> and <a class="rtnref" href="../D02/d02pxc.xml">d02pxc</a></td></tr></table><h4><a name="tree2" id="tree2"/>Tree 2: Boundary Value Problems
</h4>
<table class="dtree">
<tr>
<td class="dtentry">Is the problem simply of the form <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"><m:mi>y</m:mi><m:mo>'</m:mo><m:mo>=</m:mo><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>y</m:mi></m:mfenced></m:math>?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are only boundary-values to be determined?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rtnref" href="../D02/d02gac.xml">d02gac</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rtnref" href="../D02/d02gbc.xml">d02gbc</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rtnref" href="../D02/d02rac.xml">d02rac</a></td></tr></table><h2><a name="index" id="index"/>5&#160;&#160;Index</h2><table>
   <tr><td class="index1">System of first-order ordinary differential equations, initial value problems:</td><td class="index2">
  &#160;&#160;&#160;</td></tr>
   
      <tr><td class="index1">&#160;&#160;&#160;&#160;comprehensive integrator functions using Adams method with root-finding option:</td><td class="index2">
  &#160;&#160;&#160;</td></tr>
      
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;diagnostic function for root-finding</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02qyc.xml">d02qyc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;forward communication</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02qfc.xml">d02qfc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;interpolant</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02qzc.xml">d02qzc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set-up function
         </td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02qwc.xml">d02qwc</a></td></tr>
      
      <tr><td class="index1">&#160;&#160;&#160;&#160;comprehensive integrator functions using Runge&#8211;Kutta methods:</td><td class="index2">
  &#160;&#160;&#160;</td></tr>
      
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;diagnostic function for global error assessment</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02pzc.xml">d02pzc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;interpolant</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02pxc.xml">d02pxc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;over a range with intermediate output</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02pcc.xml">d02pcc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;over a step</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02pdc.xml">d02pdc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;reset end of range</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02pwc.xml">d02pwc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set-up function
         </td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02pvc.xml">d02pvc</a></td></tr>
      
      <tr><td class="index1">&#160;&#160;&#160;&#160;simple driver routines:</td><td class="index2">
  &#160;&#160;&#160;</td></tr>
      
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variable-order variable-step Adams method:</td><td class="index2">
  &#160;&#160;&#160;</td></tr>
         
            <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;until (optionally) a function of the solution is zero, with optional intermediate output</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02cjc.xml">d02cjc</a></td></tr>
         
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variable-order variable-step BDF method for stiff systems:</td><td class="index2">
  &#160;&#160;&#160;</td></tr>
         
            <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;until (optionally) a function of the solution is zero, with optional intermediate output</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02ejc.xml">d02ejc</a></td></tr>
         
      
   
   <tr><td class="index1">System of ordinary differential equations, boundary value problems:</td><td class="index2">
  &#160;&#160;&#160;</td></tr>
   
      <tr><td class="index1">&#160;&#160;&#160;&#160;finite difference technique with deferred correction:</td><td class="index2">
  &#160;&#160;&#160;</td></tr>
      
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;general linear problem</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02gbc.xml">d02gbc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;general nonlinear problem, with continuation facility</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02rac.xml">d02rac</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;simple nonlinear problem</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02gac.xml">d02gac</a></td></tr>
      
   
   <tr><td class="index1">Utility function
   </td><td class="index2">
  &#160;&#160;&#160;</td></tr>
   
      <tr><td class="index1">&#160;&#160;&#160;&#160;Freeing function for 
         d02p 
         functions</td><td class="index2">
  &#160;&#160;&#160;<a class="rtnref" href="../D02/d02ppc.xml">d02ppc</a></td></tr>
   
</table><h2><a name="withdrawn" id="withdrawn"/>6&#160;&#160;Functions Withdrawn or Scheduled for Withdrawal</h2>
  <div class="paramtext">None.</div><h2><a name="references" id="references"/>7&#160;&#160;References</h2><div class="paramtext">
<p><a name="ref556" id="ref556"/>Ascher U M and Bader G (1987) A new basis implementation for a mixed order boundary value ODE solver <i>SIAM J. Sci. Stat. Comput.</i> <b>8</b> 483&#8211;500 </p>
<p><a name="ref555" id="ref555"/>Ascher U M, Christiansen J and Russell R D (1979) A collocation solver for mixed order systems of boundary value problems <i>Math. Comput.</i> <b>33</b> 659&#8211;679 </p>
<p><a name="ref554" id="ref554"/>Ascher U M, Mattheij R M M and Russell R D (1988) <i>Numerical Solution of Boundary Value Problems for Ordinary Differential Equations</i> Prentice Hall, Englewood Cliffs, NJ </p>
<p><a name="ref516" id="ref516"/>Berzins M, Brankin R W and Gladwell I (1988) Design of the stiff integrators in the NAG Library <i>SIGNUM Newsl.</i> <b>23</b> 16&#8211;23 </p>
<p><a name="ref025" id="ref025"/>Gladwell I (1979a) The development of the boundary value codes in the ordinary differential equations chapter of the NAG Library <i>Codes for Boundary Value Problems in Ordinary Differential Equations. Lecture Notes in Computer Science</i> (ed B Childs, M Scott, J W Daniel, E Denman and P Nelson) <b>76</b> Springer&#8211;Verlag </p>
<p><a name="ref208" id="ref208"/>Gladwell I (1979b) Initial value routines in the NAG Library <i>ACM Trans. Math. Software</i> <b>5</b> 386&#8211;400 </p>
<p><a name="ref209" id="ref209"/>Gladwell I (1987) The NAG Library boundary value codes <i>Numerical Analysis Report</i> <b>134</b> Manchester University </p>
<p><a name="ref210" id="ref210"/>Gladwell I and Sayers D K (ed.) (1980) <i>Computational Techniques for Ordinary Differential Equations</i> Academic Press </p>
<p><a name="ref024" id="ref024"/>Hall G and Watt J M (ed.) (1976) <i>Modern Numerical Methods for Ordinary Differential Equations</i> Clarendon Press, Oxford </p>
<p><a name="ref561" id="ref561"/>Keller H B (1992) <i>Numerical Methods for Two-point Boundary-value Problems</i> Dover, New York </p>
<p><a name="ref211" id="ref211"/>Pryce J D (1986) Error estimation for phase-function shooting methods for Sturm&#8211;Liouville problems <i>IMA J. Numer. Anal.</i> <b>6</b> 103&#8211;123 </p>
</div><hr/><div><a href="../../pdf/D02/d02_intro.pdf">d02 Chapter Introduction (pdf version)</a></div><div><a href="d02_conts.xml">Chapter Contents</a></div>
<div><a href="../mark8.xml">NAG C Library Manual</a></div>
<div><hr/>
  &#169; The Numerical Algorithms Group Ltd, Oxford, UK. 2005
  </div></body></html>
