<?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>E01RAF : NAG Library, Mark 22</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="rout" href="../../pdf/E01/e01raf.pdf">E01RAF (PDF version)</a></div><div><a class="chap" href="e01conts.xml">E01 Chapter Contents</a></div><div><a class="chapint" href="e01intro.xml">E01 Chapter Introduction</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div><hr/><h1 class="libdoc">NAG Library Routine Document<br/><br/>E01RAF</h1><div class="paramtext"><div class="header"><b>Note:</b>&#160; before using this routine, please read the Users' Note for your implementation to check the interpretation of <span class="bitalic">bold italicised</span> terms and other implementation-dependent details.</div></div> 
<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="#purpose">1&#160;&#160;<b>Purpose</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#specification">2&#160;&#160;<b>Specification</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#description">3&#160;&#160;<b>Description</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#references">4&#160;&#160;<b>References</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#parameters">5&#160;&#160;<b>Parameters</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#errors">6&#160;&#160;<b>Error Indicators and Warnings</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#accuracy">7&#160;&#160;<b>Accuracy</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#fcomments">8&#160;&#160;<b>Further Comments</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocexample');"><span class="htmltocplus" id="tocexampleplus">+</span><span class="htmltocminus" id="tocexampleminus">&#8722;</span></span>
<a class="htmltoc" href="#example">9&#160;&#160;<b>Example</b></a>
<div class="htmltocitem" id="tocexample">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#examtext">9.1&#160;&#160;<b>Program Text</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#examdata">9.2&#160;&#160;<b>Program Data</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#examresults">9.3&#160;&#160;<b>Program Results</b></a>
</div>
</div>
</div>
</div>
</div><h2 class="standard"><a class="sec" name="purpose" id="purpose"/>1&#160;&#160;Purpose</h2>
<div class="paramtext">E01RAF produces, from a set of function values and corresponding abscissae, the coefficients of an interpolating rational function expressed in continued fraction form.</div><h2 class="standard"><a class="sec" name="specification" id="specification"/>2&#160;&#160;Specification</h2>
<table class="fspec"><tr><td class="tdfspec1">SUBROUTINE&#160;E01RAF&#160;(</td><td class="tdfspec2"><a class="arg" href="#N">N</a>, <a class="arg" href="#X">X</a>, <a class="arg" href="#F">F</a>, <a class="arg" href="#M">M</a>, <a class="arg" href="#A">A</a>, <a class="arg" href="#U">U</a>, <a class="arg" href="#IW">IW</a>, <a class="arg" href="#IFAIL">IFAIL</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">N, M, IW(N), IFAIL</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">X(N), F(N), A(N), U(N)</td></tr></table><h2 class="standard"><a class="sec" name="description" id="description"/>3&#160;&#160;Description</h2>
<div class="paramtext">E01RAF produces the parameters of a rational function  <m:math><m:mi>R</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;which assumes prescribed values <m:math><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;at prescribed values <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;of the independent variable  <m:math><m:mi>x</m:mi></m:math>, for <m:math><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>.  More specifically, E01RAF determines the parameters <m:math><m:msub><m:mi>a</m:mi><m:mi>j</m:mi></m:msub></m:math>,  for <m:math><m:mi>j</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:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub></m:math>,  <m:math><m:mi>j</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:mo>-</m:mo><m:mn>1</m:mn></m:math>, in the continued fraction

<div class="formula-eqn"><a name="eqn1" id="eqn1"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:mi>R</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:msub><m:mi>a</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo><m:msub><m:mi>R</m:mi><m:mi>m</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
</m:math></td><td class="formula-eqn2">
      (1)
     </td></tr></table></div>

where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msub><m:mi>R</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:mfrac><m:mrow><m:msub><m:mi>a</m:mi><m:mrow><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>i</m:mi><m:mo>+</m:mo> <m:mn>2</m:mn></m:mrow></m:msub><m:mfenced separators=""><m:mi>x</m:mi><m:mo>-</m:mo><m:msub><m:mi>u</m:mi><m:mrow><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>i</m:mi><m:mo>+</m:mo> <m:mn>1</m:mn></m:mrow></m:msub></m:mfenced></m:mrow>
  <m:mrow><m:mn>1</m:mn><m:mo>+</m:mo><m:msub><m:mi>R</m:mi><m:mrow><m:mi>i</m:mi><m:mo>-</m:mo> <m:mn>1</m:mn></m:mrow></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mrow>
 </m:mfrac><m:mtext>, &#8195; for &#8203;</m:mtext> <m:mi>i</m:mi><m:mo>=</m:mo><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>m</m:mi><m:mo>-</m:mo> <m:mn>1</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mn>2</m:mn><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

and

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msub><m:mi>R</m:mi><m:mn>1</m:mn></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

such that <m:math><m:mi>R</m:mi><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>=</m:mo><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub></m:math>, for <m:math><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>.  The value of <m:math><m:mi>m</m:mi></m:math>&#160;in <a class="eqn" href="#eqn1">(1)</a> is determined by the  routine; normally <m:math><m:mi>m</m:mi><m:mo>=</m:mo><m:mi>n</m:mi></m:math>.  The values of <m:math><m:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;form a reordered subset of the values of <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and their ordering is designed to ensure that a representation of the form  <a class="eqn" href="#eqn1">(1)</a> is determined whenever one exists.</div><div class="paramtext">The subsequent evaluation of <a class="eqn" href="#eqn1">(1)</a> for given values of  <m:math><m:mi>x</m:mi></m:math>&#160;can be carried out using <a class="rout" href="../E01/e01rbf.xml">E01RBF</a>.</div><div class="paramtext">The computational method employed in E01RAF is the modification of the Thacher&#8211;Tukey algorithm described in <a class="ref" href="#ref321">Graves&#8211;Morris and Hopkins (1981)</a>.</div><h2 class="standard"><a class="sec" name="references" id="references"/>4&#160;&#160;References</h2><div class="paramtext"><a name="ref321" id="ref321"/>Graves&#8211;Morris P R and Hopkins T R (1981)  Reliable rational interpolation <i>Numer. Math.</i> <b>36</b> 111&#8211;128 </div><h2 class="standard"><a class="sec" name="parameters" id="parameters"/>5&#160;&#160;Parameters</h2>
<dl><dt class="paramhead"><a name="N" id="N"/>1: &#160;&#160;&#8194; N &#8211; INTEGER<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: 

<m:math><m:mi>n</m:mi></m:math>, the number of data points.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>.
</div></dd><dt class="paramhead"><a name="X" id="X"/>2: &#160;&#160;&#8194; X(<a class="arg" href="#N">N</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#X"><m:mi mathcolor="#EE0000" mathvariant="bold">X</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;must be set to the value of the <m:math><m:mi>i</m:mi></m:math>th data abscissa, <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>, for <m:math><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>.</div><div class="paramtext"><i>Constraint</i>:
  

the <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#X"><m:mi mathcolor="#EE0000" mathvariant="bold">X</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;must be distinct.
</div></dd><dt class="paramhead"><a name="F" id="F"/>3: &#160;&#160;&#8194; F(<a class="arg" href="#N">N</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#F"><m:mi mathcolor="#EE0000" mathvariant="bold">F</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;must be set to the value of the data ordinate, <m:math><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub></m:math>, corresponding to <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>, for <m:math><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>.</div></dd><dt class="paramhead"><a name="M" id="M"/>4: &#160;&#160;&#8194; M &#8211; INTEGER<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: <m:math><m:mi>m</m:mi></m:math>, the number of terms in the continued fraction representation of <m:math><m:mi>R</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>.</div></dd><dt class="paramhead"><a name="A" id="A"/>5: &#160;&#160;&#8194; A(<a class="arg" href="#N">N</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#A"><m:mi mathcolor="#EE0000" mathvariant="bold">A</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;contains the value of the parameter <m:math><m:msub><m:mi>a</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;in <m:math><m:mi>R</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>, for <m:math><m:mi>j</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>. The remaining elements of <a class="arg" href="#A">A</a>, if any, are set to zero.</div></dd><dt class="paramhead"><a name="U" id="U"/>6: &#160;&#160;&#8194; U(<a class="arg" href="#N">N</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#U"><m:mi mathcolor="#EE0000" mathvariant="bold">U</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;contains the value of the parameter <m:math><m:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;in <m:math><m:mi>R</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>, for <m:math><m:mi>j</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:mo>-</m:mo><m:mn>1</m:mn></m:math>. The <m:math><m:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;are a permuted subset of the elements of <a class="arg" href="#X">X</a>. The remaining <m:math><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>m</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>&#160;locations contain a permutation of the remaining <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>, which can be ignored.</div></dd><dt class="paramhead"><a name="IW" id="IW"/>7: &#160;&#160;&#8194; IW(<a class="arg" href="#N">N</a>) &#8211; INTEGER array<span class="pclass">Workspace</span></dt><dt class="paramhead"><a name="IFAIL" id="IFAIL"/>8: &#160;&#160;&#8194; IFAIL &#8211; INTEGER<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><i>On entry</i>: <a class="arg" href="#IFAIL">IFAIL</a> must be set to <m:math><m:mn>0</m:mn></m:math>, <m:math><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mtext>&#8203; or &#8203;</m:mtext><m:mn>1</m:mn></m:math>. If you are unfamiliar with this parameter you should refer to <a class="sec" href="../GENINT/essint.xml#library3">Section 3.3</a> in  the Essential Introduction for details.</div>
<div class="paramtext"><i>On exit</i>: <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>&#160;unless the routine detects an error (see <a class="sec" href="#errors">Section 6</a>). <div class="paramtext">For environments where it might be inappropriate to halt program execution when an error is detected, the value <m:math><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mtext>&#8203; or &#8203;</m:mtext><m:mn>1</m:mn></m:math>&#160;is recommended.  If the output of error messages is undesirable, then the value <m:math><m:mn>1</m:mn></m:math>&#160;is recommended.  Otherwise, if you are not familiar with this parameter, the recommended value is <m:math><m:mn>0</m:mn></m:math>.  <b>When the value <m:math><m:mrow><m:mo>-</m:mo><m:mn mathvariant="bold">1</m:mn></m:mrow><m:mtext>&#8203; or &#8203;</m:mtext><m:mn mathvariant="bold">1</m:mn></m:math>&#160;is used it is essential to test the value of <a class="arg" href="#IFAIL">IFAIL</a> on exit.</b></div></div></dd></dl><h2 class="standard"><a class="sec" name="errors" id="errors"/>6&#160;&#160;Error Indicators and Warnings</h2>
<div class="paramtext">If on entry <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">-1</m:mn></m:maction></m:math>, explanatory error messages are output on the current error message unit (as defined by <a class="rout" href="../X04/x04aaf.xml">X04AAF</a>).</div><div class="paramtext">Errors or warnings detected by the routine:</div>
<dl class="ifail">
<dt class="errorhead"><a name="IFeq1" id="IFeq1"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math></dt>
<dd>
<table class="ifail"><tr><td class="ifail1">On&#160;entry,</td><td class="ifail2-90"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>&#8804;</m:mo><m:mn>0</m:mn></m:math>.</td></tr></table>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq2" id="IFeq2"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>2</m:mn></m:math></dt>
<dd>
<div class="paramtext">At least one pair of the values <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#X"><m:mi mathcolor="#EE0000" mathvariant="bold">X</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;are equal (or so nearly so that a subsequent division will inevitably cause overflow).</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq3" id="IFeq3"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>3</m:mn></m:math></dt>
<dd>
<div class="paramtext">A continued fraction of the required form does not exist.</div>
</dd>
</dl><h2 class="standard"><a class="sec" name="accuracy" id="accuracy"/>7&#160;&#160;Accuracy</h2>
<div class="paramtext">Usually, it is not the accuracy of the coefficients produced by this routine which is of prime interest, but rather the accuracy of the value of <m:math><m:mi>R</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;that is produced by the associated routine  <a class="rout" href="../E01/e01rbf.xml">E01RBF</a> when subsequently it evaluates the continued fraction <a class="eqn" href="#eqn1">(1)</a> for a given value of <m:math><m:mi>x</m:mi></m:math>.  This final accuracy will depend mainly on the nature of the interpolation being performed.  If interpolation of a &#8216;well-behaved smooth&#8217; function is attempted (and provided the data adequately represents the function),  high accuracy will normally ensue, but, if the function is not so  &#8216;smooth&#8217; or extrapolation is being attempted, high accuracy is much less likely.  Indeed, in extreme cases, results can be highly inaccurate.</div><div class="paramtext">There is no built-in test of accuracy but several courses are open to you to prevent the production or the acceptance of inaccurate results.
<ol class="listnumber"><li class="listnumber">If the origin of a variable is well outside the range of its data values,  the origin should be shifted to correct this; and, if the new data values are still excessively large or small, scaling to make the largest value of the order of unity is recommended.  Thus, normalization to the range  <m:math><m:mrow><m:mo>-</m:mo><m:mn>1.0</m:mn></m:mrow></m:math>&#160;to <m:math><m:mrow><m:mo>+</m:mo><m:mn>1.0</m:mn></m:mrow></m:math>&#160;is ideal.  This applies particularly to the independent variable; for the dependent variable,  the removal of leading figures which are common to all the data values will usually suffice.</li><li class="listnumber">To check the effect of rounding errors engendered in the routines themselves, E01RAF should be re-entered with <m:math><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;interchanged with <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>f</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;with <m:math><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub></m:math>, <m:math><m:mfenced separators=""><m:mi>i</m:mi><m:mo>&#8800;</m:mo><m:mn>1</m:mn></m:mfenced></m:math>.  This will produce a completely different vector <m:math><m:mi>a</m:mi></m:math>&#160;and a reordered vector <m:math><m:mi>u</m:mi></m:math>, but any change in the value of <m:math><m:mi>R</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;subsequently produced by <a class="rout" href="../E01/e01rbf.xml">E01RBF</a> will be due solely to rounding error.</li><li class="listnumber">Even if the data consist of calculated values of a formal mathematical function, it is only in exceptional circumstances that bounds for the interpolation error (the difference between the true value of the function underlying the data and the value which would be produced by the two  routines if exact arithmetic were used) can be derived that are sufficiently precise to be of practical use.  Consequently, you are recommended to rely on comparison checks: if extra data points are available, the calculation may be repeated with one or more data pairs added or exchanged,  or alternatively, one of the original data pairs may be omitted.  If the algorithms are being used for extrapolation, the calculations should be performed repeatedly with the <m:math><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mtext/></m:math>&#160;nearest points until, hopefully, successive values of <m:math><m:mi>R</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;for the given <m:math><m:mi>x</m:mi></m:math>&#160;agree to the required accuracy.</li></ol>
</div><h2 class="standard"><a class="sec" name="fcomments" id="fcomments"/>8&#160;&#160;Further Comments</h2>
<div class="paramtext">The time taken by E01RAF is approximately proportional to  <m:math><m:msup><m:mi>n</m:mi><m:mn>2</m:mn></m:msup></m:math>.</div><div class="paramtext">The continued fraction <a class="eqn" href="#eqn1">(1)</a> when expanded produces a rational function in <m:math><m:mi>x</m:mi></m:math>, the degree of whose numerator is either equal to or exceeds by unity that of the denominator.  Only if this rather special form of interpolatory rational function is needed explicitly, would this  routine be used without subsequent entry (or entries) to  <a class="rout" href="../E01/e01rbf.xml">E01RBF</a>.</div><h2 class="standard"><a class="sec" name="example" id="example"/>9&#160;&#160;Example</h2>
<div class="paramtext">This example reads in the abscissae and ordinates of <m:math><m:mn>5</m:mn></m:math>&#160;data points and prints the parameters <m:math><m:msub><m:mi>a</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;of a rational function which interpolates them.</div><h3 class="standard"><a class="sec" name="examtext" id="examtext"/>9.1&#160;&#160;Program Text</h3>
<p><a class="verbatimref" href="../../examples/source/e01rafe.f">Program Text (e01rafe.f)</a></p><h3 class="standard"><a class="sec" name="examdata" id="examdata"/>9.2&#160;&#160;Program Data</h3>
<p><a class="verbatimref" href="../../examples/data/e01rafe.d">Program&#160;Data (e01rafe.d)</a></p><h3 class="standard"><a class="sec" name="examresults" id="examresults"/>9.3&#160;&#160;Program Results</h3>
<p><a class="verbatimref" href="../../examples/baseresults/e01rafe.r">Program Results (e01rafe.r)</a></p>
<hr/><div><a class="rout" href="../../pdf/E01/e01raf.pdf">E01RAF (PDF version)</a></div><div><a class="chap" href="e01conts.xml">E01 Chapter Contents</a></div><div><a class="chapint" href="e01intro.xml">E01 Chapter Introduction</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. 2009</a></div></body></html>
