<?xml-stylesheet type="text/xsl" href="../styles/pmathml.xsl"?>
<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:dsi="http://www.w3.org/1999/xlink" xmlns:m="http://www.w3.org/1998/Math/MathML" xml:space="preserve"><head><meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"/><title>E01 Chapter Introduction : NAG Library, Mark 23</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 class="chap" href="e01conts.xml">E01 Chapter Contents</a></div><div><a class="chapint" href="../../pdf/E01/e01intro.pdf">E01 Chapter Introduction (PDF version)</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div><hr/><h1 class="libdoc">NAG Library Chapter Introduction<br/><br/>E01 &#8211; Interpolation</h1><div class="htmltoc">
<h2 class="htmltoc"><span class="htmltochead" onclick="showLevel('htmltoc');"><span class="htmltocplus" id="htmltocplus">+</span><span class="htmltocminus" id="htmltocminus">&#8722;</span></span>&#160;Contents</h2>
<div class="htmltocitem" id="htmltoc">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#scope">1&#160;&#160;<b>Scope of the Chapter</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background">2&#160;&#160;<b>Background to the Problems</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocavailable');"><span class="htmltocplus" id="tocavailableplus">+</span><span class="htmltocminus" id="tocavailableminus">&#8722;</span></span>
<a class="htmltoc" href="#available">3&#160;&#160;<b>Recommendations on Choice and Use of Available Routines</b></a>
<div class="htmltocitem" id="tocavailable">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_1">3.1&#160;&#160;<b>General</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocrecomm_2');"><span class="htmltocplus" id="tocrecomm_2plus">+</span><span class="htmltocminus" id="tocrecomm_2minus">&#8722;</span></span>
<a class="htmltoc" href="#recomm_2">3.2&#160;&#160;<b>One Independent Variable</b></a>
<div class="htmltocitem" id="tocrecomm_2">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_21">3.2.1&#160;&#160;<b>Interpolated values: data without derivatives</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_22">3.2.2&#160;&#160;<b>Interpolating function: data without derivatives</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_23">3.2.3&#160;&#160;<b>Data containing derivatives</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocrecomm_3');"><span class="htmltocplus" id="tocrecomm_3plus">+</span><span class="htmltocminus" id="tocrecomm_3minus">&#8722;</span></span>
<a class="htmltoc" href="#recomm_3">3.3&#160;&#160;<b>Two Independent Variables</b></a>
<div class="htmltocitem" id="tocrecomm_3">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_31">3.3.1&#160;&#160;<b>Data on a rectangular mesh</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_32">3.3.2&#160;&#160;<b>Arbitrary data</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocrecomm_4');"><span class="htmltocplus" id="tocrecomm_4plus">+</span><span class="htmltocminus" id="tocrecomm_4minus">&#8722;</span></span>
<a class="htmltoc" href="#recomm_4">3.4&#160;&#160;<b>Three Independent Variables</b></a>
<div class="htmltocitem" id="tocrecomm_4">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_41">3.4.1&#160;&#160;<b>Arbitrary data</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocfivevariables');"><span class="htmltocplus" id="tocfivevariablesplus">+</span><span class="htmltocminus" id="tocfivevariablesminus">&#8722;</span></span>
<a class="htmltoc" href="#fivevariables">3.5&#160;&#160;<b>Four and Five Independent Variables</b></a>
<div class="htmltocitem" id="tocfivevariables">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#arbitrarydata">3.5.1&#160;&#160;<b>Arbitrary data</b></a>
</div>
</div>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#dtree">4&#160;&#160;<b>Decision Tree</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#index">5&#160;&#160;<b>Functionality Index</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#auxindex">6&#160;&#160;<b>Auxiliary Routines Associated with Library Routine Parameters</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#withdrawn">7&#160;&#160;<b>Routines Withdrawn or Scheduled for Withdrawal</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#references">8&#160;&#160;<b>References</b></a>
</div>
</div>
</div><h2 class="standard"><a class="sec" name="scope" id="scope"/>1&#160;&#160;Scope of the Chapter</h2>
<div class="paramtext">This chapter is concerned with the interpolation of a function of one, two, three, four or five variables.  When provided with the value of the function (and possibly one or more of its lowest-order derivatives) at each of a number of values of the variable(s), the routines provide either an interpolating function or an interpolated value.  For some of the interpolating functions, there are supporting routines to evaluate, differentiate or integrate them.</div><h2 class="standard"><a class="sec" name="background" id="background"/>2&#160;&#160;Background to the Problems</h2>
<div class="paramtext">In motivation and in some of its numerical processes, this chapter has much in common with <a class="chap" href="../E02/e02conts.xml">Chapter E02</a> (Curve and Surface Fitting).  For this reason, we shall adopt the same terminology and refer to dependent variable and independent variable(s) instead of function and variable(s).  Where there is only one independent variable, we shall denote it by <m:math><m:mi>x</m:mi></m:math>&#160;and the dependent variable by <m:math><m:mi>y</m:mi></m:math>.  Thus, in the basic problem considered in this chapter, we are given a set of distinct values  <m:math><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>x</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>x</m:mi><m:mi>m</m:mi></m:msub></m:math>&#160;of <m:math><m:mi>x</m:mi></m:math>&#160;and a corresponding set of values <m:math><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>m</m:mi></m:msub></m:math>&#160;of <m:math><m:mi>y</m:mi></m:math>, and we shall describe the problem as being one of interpolating the data points  <m:math><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mi>r</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>r</m:mi></m:msub></m:mfenced></m:math>, rather than interpolating a function.  In modern usage, however, <b>interpolation</b> can have either of two rather different meanings, both relevant to routines in this chapter.  They are
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline"><a name="itema" id="itema"/>(a)</td>
<td valign="top">the determination of a function of <m:math><m:mi>x</m:mi></m:math>&#160;which takes the value <m:math><m:msub><m:mi>y</m:mi><m:mi>r</m:mi></m:msub></m:math>&#160;at <m:math><m:mi>x</m:mi><m:mo>=</m:mo><m:msub><m:mi>x</m:mi><m:mi>r</m:mi></m:msub></m:math>, for  <m:math><m:mi>r</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>m</m:mi></m:math>&#160;(an <b>interpolating function</b>  or <b>interpolant</b>),</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline"><a name="itemb" id="itemb"/>(b)</td>
<td valign="top">the determination of the value (<b>interpolated value</b> or  <b>interpolate</b>) of an interpolating function at any given value,  say <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:math>, of <m:math><m:mi>x</m:mi></m:math>&#160;within the range of the  <m:math><m:msub><m:mi>x</m:mi><m:mi>r</m:mi></m:msub></m:math>&#160;(so as to estimate the value at <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;of the function underlying the data).</td>
</tr></table>
</div><div class="paramtext">The latter is the older meaning, associated particularly with the use of mathematical tables.  The term &#8216;function underlying the data&#8217;, like the other terminology described above, is used so as to cover situations additional to those in which the data points have been computed from a known function, as with a mathematical table.  In some contexts, the function may be unknown, perhaps representing the dependency of one physical variable on another, say temperature upon time.</div><div class="paramtext">Whether the underlying function is known or unknown, the object of interpolation will usually be to approximate it to acceptable accuracy by a function which is easy to evaluate anywhere in some range of interest.  Polynomials, rational functions (ratios of two polynomials) and piecewise polynomials, such as cubic splines (see  <a class="sec" href="../E02/e02intro.xml#background2">Section 2.2</a> in  the E02 Chapter Introduction for definitions of terms in the latter case),  being easy to evaluate and also capable of approximating a wide variety of functions, are the types of function mostly used in this chapter as interpolating functions.  An interpolating polynomial is taken to have degree <m:math><m:mi>m</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:math>&#160;when there are <m:math><m:mi>m</m:mi></m:math>&#160;data points,  and so it is unique.  It is called the <b>Lagrange interpolating polynomial</b>.  The rational function, in the special form used,  is also unique.  An interpolating spline, on the other hand, depends on the choice made for the knots.</div><div class="paramtext">One way of achieving the objective in <a class="item" href="#itemb">(b)</a> above is, of course, through <a class="item" href="#itema">(a)</a>, but there are also methods which do not involve the explicit computation of the interpolating function.  Everett's formula and Aitken's successive linear interpolation (see <a class="ref" href="#ref221">Dahlquist and Bj&#246;rck (1974)</a>) provide two such methods.  Both are used in this chapter and determine a value of the Lagrange interpolating polynomial.</div><div class="paramtext">It is important to appreciate, however, that the Lagrange interpolating polynomial often exhibits unwanted fluctuations between the data points.  These tend to occur particularly towards the ends of the data range, and to get larger with increasing number of data points.  In severe cases, such as with <m:math><m:mn>30</m:mn></m:math>&#160;or <m:math><m:mn>40</m:mn></m:math>&#160;equally spaced values of <m:math><m:mi>x</m:mi></m:math>, the polynomial can take on values several orders of magnitude larger than the data values.  (Closer spacing near the ends of the range tends to improve the situation, and wider spacing tends to make it worse.)  Clearly, therefore, the Lagrange polynomial often gives a very poor approximation to the function underlying the data.  On the other hand, it can be perfectly satisfactory when its use is restricted to providing interpolated values away from the ends of the data range from a reasonably small number of data values.</div><div class="paramtext">In contrast, a cubic spline which interpolates a large number of data points can often be used satisfactorily over the whole of the data range.  Unwanted fluctuations can still arise but much less frequently and much less severely than with polynomials.  Rational functions, when appropriate, would also be used over the whole data range.  The main danger with these functions is that their polynomial denominators may take zero values within that range.  Unwanted fluctuations are avoided altogether by a routine using piecewise cubic polynomials having only first derivative continuity.  It is designed especially for monotonic data, but for other data still provides an interpolant which increases, or decreases, over the same intervals as the data.</div><div class="paramtext">The concept of interpolation can be generalized in a number of ways.  Firstly, at each <m:math><m:mi>x</m:mi></m:math>, the interpolating function may be required to take on not only a given value but also given values for all its derivatives up to some specified order (which can vary with  <m:math><m:mi>r</m:mi></m:math>).  This is the Hermite&#8211;Birkoff interpolation problem.  Secondly, we may be required to estimate the value of the underlying function at a value <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;outside the range of the data.  This is the process of <b>extrapolation</b>.  In general,  it is a good deal less accurate than interpolation and is to be avoided whenever possible.</div><div class="paramtext">Interpolation can also be extended to the case of two or more independent variables.  If the data values are given at the intersections of a regular two-dimensional mesh bicubic splines (see  <a class="sec" href="../E02/e02intro.xml#background32">Section 2.3.2</a> in  the E02 Chapter Introduction)  are very suitable and usually very effective for the problem.  For other cases, perhaps where the data values are quite arbitrarily scattered, polynomials and splines are not at all appropriate and special forms of interpolating function have to be employed.  Many such forms have been devised and two of the most successful are in routines in this chapter.  They both have continuity in first, but not higher, derivatives.</div><h2 class="standard"><a class="sec" name="available" id="available"/>3&#160;&#160;Recommendations on Choice and Use of Available Routines</h2><h3 class="standard"><a class="sec" name="recomm_1" id="recomm_1"/>3.1&#160;&#160;General</h3>
<div class="paramtext">Before undertaking interpolation, in other than the simplest cases,  you should seriously consider the alternative of using a routine  from <a class="chap" href="../E02/e02conts.xml">Chapter E02</a> to approximate the data by a polynomial or spline containing significantly fewer coefficients than the corresponding interpolating function.  This approach is much less liable to produce unwanted fluctuations and so can often provide a better approximation to the function underlying the data.</div><div class="paramtext">When interpolation is employed to approximate either an underlying function or its values, you will need to be satisfied that the accuracy of approximation achieved is adequate.  There may be a means for doing this which is particular to the application, or the routine used may itself provide a means.  In other cases, one possibility is to repeat the interpolation using one or more extra data points, if they are available, or otherwise one or more fewer, and to compare the results.  Other possibilities, if it is an interpolating function which is determined, are to examine the function graphically, if that gives sufficient accuracy, or to observe the behaviour of the differences in a finite difference table, formed from evaluations of the interpolating function at equally-spaced values of <m:math><m:mi>x</m:mi></m:math>&#160;over the range of interest.  The spacing should be small enough to cause the typical size of the differences to decrease as the order of difference increases.</div><h3 class="standard"><a class="sec" name="recomm_2" id="recomm_2"/>3.2&#160;&#160;One Independent Variable</h3><h4 class="standard"><a class="sec" name="recomm_21" id="recomm_21"/>3.2.1&#160;&#160;Interpolated values: data without derivatives</h4>
<div class="paramtext">When the underlying function is well represented by data points on both sides of the value, <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:math>, at which an interpolated value is required, <a class="rout" href="../E01/e01abf.xml">E01ABF</a> should be tried first if the data points are equally spaced, <a class="rout" href="../E01/e01aaf.xml">E01AAF</a> if they are not.  Both compute a value of the Lagrange interpolating polynomial, the first using Everett's formula, the second Aitken's successive linear interpolation.  The first  routine requires an equal (or nearly equal) number of data points on each side of <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:math>; such a distribution of points is preferable also for the second routine.  If there are many data points, this will be achieved simply by using only an appropriate subset for each value of  <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:math>.  Ten to twelve data points are the most that would be required for many problems.  Both routines provide a means of assessing the accuracy of an interpolated value, with <a class="rout" href="../E01/e01abf.xml">E01ABF</a> by examination of the size of the finite differences supplied, with  <a class="rout" href="../E01/e01aaf.xml">E01AAF</a> by intercomparison of the set of interpolated values obtained from polynomials of increasing degree.</div><div class="paramtext">In other cases, or when the above routines fail to produce a satisfactory result, one of the routines discussed in the next section should be used.  The spline and other piecewise polynomial routines are the most generally applicable.  They are particularly appropriate when interpolated values towards the ends of the range are required.  They are also likely to be preferable, for reasons of economy, when many interpolated values are required.</div><div class="paramtext">
<a class="rout" href="../E01/e01aaf.xml">E01AAF</a> above, and three of the routines discussed in the next section, can be used to

compute extrapolated values.  These three are
<a class="rout" href="../E01/e01aef.xml">E01AEF</a>, <a class="rout" href="../E01/e01bef.xml">E01BEF</a> and <a class="rout" href="../E01/e01raf.xml">E01RAF</a> based on polynomials, piecewise polynomials and rational functions respectively. Extrapolation is not recommended in general, but can sometimes give acceptable results if it is to a point not far outside the data range, and only the few nearest data points are used in the process.  <a class="rout" href="../E01/e01raf.xml">E01RAF</a> is most likely to be successful.</div><h4 class="standard"><a class="sec" name="recomm_22" id="recomm_22"/>3.2.2&#160;&#160;Interpolating function: data without derivatives</h4>
<div class="paramtext"><a class="rout" href="../E01/e01aef.xml">E01AEF</a> computes the Lagrange interpolating polynomial by a method (based on <b>Newton's formula with divided differences</b>  (see <a class="ref" href="#ref220">Fr&#246;berg (1970)</a>) which has proved numerically very stable.
Thus, it can sometimes be used to provide interpolated values in more difficult cases than can <a class="rout" href="../E01/e01aaf.xml">E01AAF</a> (see the previous section).
However, the likelihood of the polynomial having unwanted fluctuations, particularly near the ends of the data range when a moderate or large number of data points are used, should be remembered.</div><div class="paramtext">Such fluctuations of the polynomial can be avoided if you are at liberty to choose the <m:math><m:mi>x</m:mi></m:math>&#160;values at which to provide data points.  In this case, a routine from <a class="chap" href="../E02/e02conts.xml">Chapter E02</a>,  namely <a class="rout" href="../E02/e02aff.xml">E02AFF</a>, should be used in the manner and with the <m:math><m:mi>x</m:mi></m:math>&#160;values discussed in  <a class="sec" href="../E02/e02intro.xml#available22">Section 3.2.2</a> in  the E02 Chapter Introduction.</div><div class="paramtext">Usually however, when the whole of the data range is of interest, it is preferable to use a cubic spline as the interpolating function.  <a class="rout" href="../E01/e01baf.xml">E01BAF</a> computes an interpolating cubic spline, using a particular choice for the set of knots which has proved generally satisfactory in practice.  If you wish to choose a different set, a cubic spline routine from <a class="chap" href="../E02/e02conts.xml">Chapter E02</a>, namely <a class="rout" href="../E02/e02baf.xml">E02BAF</a>, may be used in its interpolating mode, setting 
<m:math><m:mi mathvariant="normal">NCAP7</m:mi><m:mo>=</m:mo><m:mi mathvariant="bold">M</m:mi><m:mo>+</m:mo><m:mn>4</m:mn></m:math>&#160;and all elements of the parameter W to unity.</div><div class="paramtext">The cubic spline does not always avoid unwanted fluctuations, especially when the data shows a steep slope close to a region of small slope, or when the data inadequately represents the underlying curve.  In such cases, <a class="rout" href="../E01/e01bef.xml">E01BEF</a> can be very useful.  It derives a piecewise cubic polynomial (with first derivative continuity) which, between any adjacent pair of data points, either increases all the way, or decreases all the way (or stays constant).  It is especially suited to data which is monotonic over the whole range.</div><div class="paramtext">In this routine, the interpolating function is represented simply by its value and first derivative at the data points.  Supporting routines compute its value and first derivative elsewhere, as well as its definite integral over an arbitrary interval.  The other routines mentioned, namely <a class="rout" href="../E01/e01aef.xml">E01AEF</a>, <a class="rout" href="../E01/e01baf.xml">E01BAF</a> and <a class="rout" href="../E01/e01bef.xml">E01BEF</a>, provide the interpolating function either in Chebyshev series form or in B-spline form (see  <a class="sec" href="../E02/e02intro.xml#background21">Sections 2.2.1</a> and <a class="sec" href="../E02/e02intro.xml#background22">2.2.2</a> in  the E02 Chapter Introduction).  Routines for evaluating, differentiating and integrating these forms are discussed in <a class="sec" href="../E02/e02intro.xml#available7">Section 3.7</a> in  the E02 Chapter Introduction.  The splines and other piecewise cubics will normally provide better estimates of the derivatives of the underlying function than will interpolating polynomials, at any rate away from the central part of the data range.</div><div class="paramtext"><a class="rout" href="../E01/e01raf.xml">E01RAF</a> computes an interpolating rational function.  It is intended mainly for those cases where you know that this form of function is appropriate.  However, it is also worth trying in cases where the other  routines have proved unsatisfactory.  <a class="rout" href="../E01/e01rbf.xml">E01RBF</a> is available to compute values of the function provided by <a class="rout" href="../E01/e01raf.xml">E01RAF</a>.</div><h4 class="standard"><a class="sec" name="recomm_23" id="recomm_23"/>3.2.3&#160;&#160;Data containing derivatives</h4>
<div class="paramtext"><a class="rout" href="../E01/e01aef.xml">E01AEF</a> (see <a class="sec" href="#recomm_22">Section 3.2.2</a>) can also compute the polynomial which, at each <m:math><m:msub><m:mi>x</m:mi><m:mi>r</m:mi></m:msub></m:math>, has not only a specified value <m:math><m:msub><m:mi>y</m:mi><m:mi>r</m:mi></m:msub></m:math>&#160;but also a specified value of each derivative up to order <m:math><m:msub><m:mi>p</m:mi><m:mi>r</m:mi></m:msub></m:math>.</div><h3 class="standard"><a class="sec" name="recomm_3" id="recomm_3"/>3.3&#160;&#160;Two Independent Variables</h3><h4 class="standard"><a class="sec" name="recomm_31" id="recomm_31"/>3.3.1&#160;&#160;Data on a rectangular mesh</h4>
<div class="paramtext">Given the value <m:math><m:msub><m:mi>f</m:mi><m:mrow><m:mi>q</m:mi><m:mi>r</m:mi></m:mrow></m:msub></m:math>&#160;of the dependent variable  <m:math><m:mi>f</m:mi></m:math>&#160;at the point <m:math><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mi>q</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>r</m:mi></m:msub></m:mfenced></m:math>&#160;in the plane of the independent variables <m:math><m:mi>x</m:mi></m:math>&#160;and <m:math><m:mi>y</m:mi></m:math>, for each <m:math><m:mi>q</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>m</m:mi></m:math>&#160;and <m:math><m:mi>r</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>&#160;(so that the points <m:math><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mi>q</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>r</m:mi></m:msub></m:mfenced></m:math>&#160;lie at the  <m:math><m:mi>m</m:mi><m:mo>&#215;</m:mo><m:mi>n</m:mi></m:math>&#160;intersections of a rectangular mesh),  <a class="rout" href="../E01/e01daf.xml">E01DAF</a> computes an interpolating bicubic spline, using a particular choice for each of the spline's knot-set.  This choice, the same as in <a class="rout" href="../E01/e01baf.xml">E01BAF</a>, has proved generally satisfactory in practice.
If, instead, you wish to specify your own knots, a routine  from <a class="chap" href="../E02/e02conts.xml">Chapter E02</a>, namely <a class="rout" href="../E02/e02daf.xml">E02DAF</a>, may be used (it is more cumbersome for the purpose, however, and much slower for larger problems).  Using <m:math><m:mi>m</m:mi></m:math>&#160;and <m:math><m:mi>n</m:mi></m:math>&#160;in the above sense,  the parameter
M must be set to <m:math><m:mi>m</m:mi><m:mo>&#215;</m:mo><m:mi>n</m:mi></m:math>,
PX and PY
must be set to <m:math><m:mi>m</m:mi><m:mo>+</m:mo><m:mn>4</m:mn></m:math>&#160;and <m:math><m:mi>n</m:mi><m:mo>+</m:mo><m:mn>4</m:mn></m:math>&#160;respectively and all elements of
W should be set to unity.  The recommended value for
EPS is zero.
</div><h4 class="standard"><a class="sec" name="recomm_32" id="recomm_32"/>3.3.2&#160;&#160;Arbitrary data</h4>
<div class="paramtext">As remarked at the end of <a class="sec" href="#background">Section 2</a>, specific methods of interpolating are required for this problem, which can often be difficult to solve satisfactorily.  Two of the most successful are employed in 
<a class="rout" href="../E01/e01saf.xml">E01SAF</a> and <a class="rout" href="../E01/e01sgf.xml">E01SGF</a>, the two routines which (with their respective evaluation routines

<a class="rout" href="../E01/e01sbf.xml">E01SBF</a> and <a class="rout" href="../E01/e01shf.xml">E01SHF</a>) are
 provided for the problem.
Definitions can be found in the routine documents.
Both interpolants have first derivative continuity and are &#8216;local&#8217;, in that their value at any point depends only on data in the immediate neighbourhood of the point.  This latter feature is necessary for large sets of data to avoid prohibitive computing time.
<a class="rout" href="../E01/e01shf.xml">E01SHF</a> allows evaluation of the interpolant and its first partial derivatives.
</div><div class="paramtext">The relative merits of the two methods vary with the data and it is not possible to predict which will be the better in any particular case.</div><h3 class="standard"><a class="sec" name="recomm_4" id="recomm_4"/>3.4&#160;&#160;Three Independent Variables</h3><h4 class="standard"><a class="sec" name="recomm_41" id="recomm_41"/>3.4.1&#160;&#160;Arbitrary data</h4>
<div class="paramtext">The routine <a class="rout" href="../E01/e01tgf.xml">E01TGF</a> and its evaluation routine  <a class="rout" href="../E01/e01thf.xml">E01THF</a> are provided for interpolation of three-dimensional scattered data.  As in the case of two independent variables, the method is local, and produces an interpolant with first derivative continuity.  <a class="rout" href="../E01/e01thf.xml">E01THF</a> allows evaluation of the interpolant and its first partial derivatives.</div><h3 class="standard"><a class="sec" name="fivevariables" id="fivevariables"/>3.5&#160;&#160;Four and Five Independent Variables</h3><h4 class="standard"><a class="sec" name="arbitrarydata" id="arbitrarydata"/>3.5.1&#160;&#160;Arbitrary data</h4>
<div class="paramtext">The routine <a class="rout" href="../E01/e01tkf.xml">E01TKF</a> and its evaluation routine <a class="rout" href="../E01/e01tlf.xml">E01TLF</a> allow interpolation of four-dimensional scattered data, while the routine <a class="rout" href="../E01/e01tmf.xml">E01TMF</a> and its evaluation routine <a class="rout" href="../E01/e01tnf.xml">E01TNF</a> allow interpolation of five-dimensional scattered data. <a class="rout" href="../E01/e01tkf.xml">E01TKF</a> and <a class="rout" href="../E01/e01tmf.xml">E01TMF</a> are higher dimensional analogues to the routines <a class="rout" href="../E01/e01sgf.xml">E01SGF</a> and <a class="rout" href="../E01/e01tgf.xml">E01TGF</a>, while <a class="rout" href="../E01/e01tlf.xml">E01TLF</a> and <a class="rout" href="../E01/e01tnf.xml">E01TNF</a> are analogous to <a class="rout" href="../E01/e01shf.xml">E01SHF</a> and <a class="rout" href="../E01/e01thf.xml">E01THF</a>.</div><h2 class="standard"><a class="sec" name="dtree" id="dtree"/>4&#160;&#160;Decision Tree</h2>
<h3 class="sec"><a name="tree1" id="tree1"/>Tree 1</h3>
<table class="dtree">
<tr>
<td class="dtentry">More than one independent variable?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Data on rectangular mesh?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E01/e01daf.xml">E01DAF</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">Two independent variables?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E01/e01saf.xml">E01SAF</a> or <a class="rout" href="../E01/e01sgf.xml">E01SGF</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">Three independent variables?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E01/e01tgf.xml">E01TGF</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">Four independent variables?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E01/e01tkf.xml">E01TKF</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">Five independent variables?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E01/e01tmf.xml">E01TMF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Does data contain derivatives?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E01/e01aef.xml">E01AEF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Interpolating function required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Do you wish to impose monotonicity?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E01/e01bef.xml">E01BEF</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">Polynomial function required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E01/e01aef.xml">E01AEF</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">Rational function required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E01/e01raf.xml">E01RAF</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="rout" href="../E01/e01baf.xml">E01BAF</a> unless you have received an unacceptable result in which case <a class="rout" href="../E01/e01bef.xml">E01BEF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Well away from end of data range?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Data points equally spaced?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E01/e01abf.xml">E01ABF</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="rout" href="../E01/e01aaf.xml">E01AAF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../E01/e01baf.xml">E01BAF</a> unless you have received an unacceptable result in which case <a class="rout" href="../E01/e01bef.xml">E01BEF</a></td></tr></table><h2 class="standard"><a class="sec" name="index" id="index"/>5&#160;&#160;Functionality Index</h2>
<div>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Derivative,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;of&#160;interpolant,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;<a class="rout" href="../E01/e01bef.xml">E01BEF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01bgf.xml">E01BGF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;<a class="rout" href="../E01/e01sgf.xml">E01SGF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01shf.xml">E01SHF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;<a class="rout" href="../E01/e01tgf.xml">E01TGF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01thf.xml">E01THF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;<a class="rout" href="../E01/e01tkf.xml">E01TKF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01tlf.xml">E01TLF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;<a class="rout" href="../E01/e01tmf.xml">E01TMF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01tnf.xml">E01TNF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Evaluation,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;of&#160;interpolant,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;<a class="rout" href="../E01/e01bef.xml">E01BEF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01bff.xml">E01BFF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;<a class="rout" href="../E01/e01raf.xml">E01RAF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01rbf.xml">E01RBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;<a class="rout" href="../E01/e01saf.xml">E01SAF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01sbf.xml">E01SBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;<a class="rout" href="../E01/e01sgf.xml">E01SGF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01shf.xml">E01SHF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;<a class="rout" href="../E01/e01tgf.xml">E01TGF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01thf.xml">E01THF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;<a class="rout" href="../E01/e01tkf.xml">E01TKF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01tlf.xml">E01TLF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;<a class="rout" href="../E01/e01tmf.xml">E01TMF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01tnf.xml">E01TNF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Extrapolation,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;one&#160;variable,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;piecewise&#160;cubic</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01bef.xml">E01BEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;polynomial,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;data&#160;with&#160;or&#160;without&#160;derivatives</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01aef.xml">E01AEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;general&#160;data</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01aaf.xml">E01AAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;rational&#160;function</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01raf.xml">E01RAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Integration&#160;(definite)&#160;of&#160;interpolant&#160;from&#160;<a class="rout" href="../E01/e01bef.xml">E01BEF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01bhf.xml">E01BHF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Interpolated&#160;values,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;five&#160;variables,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;interpolant&#160;from&#160;<a class="rout" href="../E01/e01tmf.xml">E01TMF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01tnf.xml">E01TNF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;four&#160;variables,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;interpolant&#160;from&#160;<a class="rout" href="../E01/e01tkf.xml">E01TKF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01tlf.xml">E01TLF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;one&#160;variable,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;interpolant&#160;from&#160;<a class="rout" href="../E01/e01bef.xml">E01BEF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01bff.xml">E01BFF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;interpolant&#160;from&#160;<a class="rout" href="../E01/e01bef.xml">E01BEF</a>&#160;(including&#160;derivative)</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01bgf.xml">E01BGF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;polynomial,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;equally&#160;spaced&#160;data</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01abf.xml">E01ABF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;general&#160;data</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01aaf.xml">E01AAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;rational&#160;function</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01rbf.xml">E01RBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;three&#160;variables,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;interpolant&#160;from&#160;<a class="rout" href="../E01/e01tgf.xml">E01TGF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01thf.xml">E01THF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;two&#160;variables,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;interpolant&#160;from&#160;<a class="rout" href="../E01/e01saf.xml">E01SAF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01sbf.xml">E01SBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from&#160;interpolant&#160;from&#160;<a class="rout" href="../E01/e01sgf.xml">E01SGF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01shf.xml">E01SHF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Interpolating&#160;function,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;five&#160;variables,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;modified&#160;Shepard&#160;method</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01tmf.xml">E01TMF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;four&#160;variables,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;modified&#160;Shepard&#160;method</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01tkf.xml">E01TKF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;one&#160;variable,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cubic&#160;spline</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01baf.xml">E01BAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;other&#160;piecewise&#160;polynomial</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01bef.xml">E01BEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;polynomial,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;data&#160;with&#160;or&#160;without&#160;derivatives</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01aef.xml">E01AEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;rational&#160;function</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01raf.xml">E01RAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;three&#160;variables,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;modified&#160;Shepard&#160;method</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01tgf.xml">E01TGF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;two&#160;variables,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;bicubic&#160;spline</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01daf.xml">E01DAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;modified&#160;Shepard&#160;method</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01sgf.xml">E01SGF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;other&#160;piecewise&#160;polynomial</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E01/e01saf.xml">E01SAF</a></nobr></td></tr></table></div><h2 class="standard"><a class="sec" name="auxindex" id="auxindex"/>6&#160;&#160;Auxiliary Routines Associated with Library Routine Parameters</h2>
<div class="paramtext">None.</div><h2 class="standard"><a class="sec" name="withdrawn" id="withdrawn"/>7&#160;&#160;Routines Withdrawn or Scheduled for Withdrawal</h2>
<div class="left-tablediv"><table class="wdrn"><tbody>
<tr><td class="libdoc" valign="top"><b>Withdrawn<br/>Routine</b></td><td class="libdoc" valign="top" align="center"><b>Mark of<br/>Withdrawal</b></td><td class="libdoc" valign="top"><br/><b>Replacement Routine(s)</b></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E01SEF">E01SEF</a></td><td class="libdoc" valign="top" align="center">20</td><td class="libdoc" valign="top"><a class="rout" href="../E01/e01sgf.xml">E01SGF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E01SFF">E01SFF</a></td><td class="libdoc" valign="top" align="center">20</td><td class="libdoc" valign="top"><a class="rout" href="../E01/e01shf.xml">E01SHF</a></td></tr></tbody></table></div><h2 class="standard"><a class="sec" name="references" id="references"/>8&#160;&#160;References</h2><div class="paramtext"><a name="ref221" id="ref221"/>Dahlquist G and Bj&#246;rck &#197; (1974)  <i>Numerical Methods</i> Prentice&#8211;Hall </div>
<div class="paramtext"><a name="ref220" id="ref220"/>Fr&#246;berg C E (1970)  <i>Introduction to Numerical Analysis</i> Addison&#8211;Wesley </div><hr/><div><a class="chap" href="e01conts.xml">E01 Chapter Contents</a></div><div><a class="chapint" href="../../pdf/E01/e01intro.pdf">E01 Chapter Introduction (PDF version)</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div>
<div><hr/><a class="genint" href="../FRONTMATTER/copyright.xml">&#169; The Numerical Algorithms Group Ltd, Oxford, UK. 2011</a></div></body></html>