<?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>C06BAF : 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/C06/c06baf.pdf">C06BAF (PDF version)</a></div><div><a class="chap" href="c06conts.xml">C06 Chapter Contents</a></div><div><a class="chapint" href="c06intro.xml">C06 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/>C06BAF</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="htmltoc" onclick="showLevel('tocfcomments');"><span class="htmltocplus" id="tocfcommentsplus">+</span><span class="htmltocminus" id="tocfcommentsminus">&#8722;</span></span>
<a class="htmltoc" href="#fcomments">8&#160;&#160;<b>Further Comments</b></a>
<div class="htmltocitem" id="tocfcomments">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#fcomments1">8.1&#160;&#160;<b>Timing</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#fcomments2">8.2&#160;&#160;<b>Choice of LWORK</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#fcomments3">8.3&#160;&#160;<b>Convergence</b></a>
</div>
</div>
</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">C06BAF accelerates the convergence of a given convergent sequence to its limit.</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;C06BAF&#160;(</td><td class="tdfspec2"><a class="arg" href="#SEQN">SEQN</a>, <a class="arg" href="#NCALL">NCALL</a>, <a class="arg" href="#RESULT">RESULT</a>, <a class="arg" href="#ABSERR">ABSERR</a>, <a class="arg" href="#WORK">WORK</a>, <a class="arg" href="#LWORK">LWORK</a>, <a class="arg" href="#IFAIL">IFAIL</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">NCALL, LWORK, IFAIL</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">SEQN, RESULT, ABSERR, WORK(LWORK)</td></tr></table><h2 class="standard"><a class="sec" name="description" id="description"/>3&#160;&#160;Description</h2>
<div class="paramtext">C06BAF performs Shanks' transformation on a given sequence of real values by means of the Epsilon algorithm of <a class="ref" href="#ref011">Wynn (1956)</a>.  A (possibly unreliable) estimate of the absolute error is also given.</div><div class="paramtext">The routine must be called repetitively, once for each new term in the sequence.</div><h2 class="standard"><a class="sec" name="references" id="references"/>4&#160;&#160;References</h2><div class="paramtext"><a name="ref262" id="ref262"/>Shanks D (1955)  Nonlinear transformations of divergent and slowly convergent sequences <i>J. Math. Phys.</i> <b>34</b> 1&#8211;42 </div>
<div class="paramtext"><a name="ref011" id="ref011"/>Wynn P (1956)  On a device for computing the <m:math><m:msub><m:mi>e</m:mi><m:mi>m</m:mi></m:msub><m:mfenced separators=""><m:msub><m:mi mathvariant="normal">S</m:mi><m:mi>n</m:mi></m:msub></m:mfenced></m:math>&#160;transformation <i>Math. Tables Aids Comput.</i> <b>10</b> 91&#8211;96 </div><h2 class="standard"><a class="sec" name="parameters" id="parameters"/>5&#160;&#160;Parameters</h2>
<dl><dt class="paramhead"><a name="SEQN" id="SEQN"/>1: &#160;&#160;&#8194; SEQN &#8211; <span class="bitalic">double precision</span><span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the next term of the sequence to be considered.</div></dd><dt class="paramhead"><a name="NCALL" id="NCALL"/>2: &#160;&#160;&#8194; NCALL &#8211; INTEGER<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><i>On entry</i>: on the first call <a class="arg" href="#NCALL">NCALL</a> must be set to <m:math><m:mn>0</m:mn></m:math>.  Thereafter <a class="arg" href="#NCALL">NCALL</a> <b>must not</b> be changed between calls.</div>
<div class="paramtext"><i>On exit</i>: the number of terms in the sequence that have been considered.</div></dd><dt class="paramhead"><a name="RESULT" id="RESULT"/>3: &#160;&#160;&#8194; RESULT &#8211; <span class="bitalic">double precision</span><span class="pclass">Output</span></dt><dd>
<div class="paramtext"><i>On exit</i>: the estimate of the limit of the sequence.  For the first two calls, <m:math>
 <m:maction actiontype="link" dsi:type="simple" dsi:href="#RESULT"><m:mi mathcolor="#EE0000" mathvariant="bold">RESULT</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#SEQN"><m:mi mathcolor="#EE0000" mathvariant="bold">SEQN</m:mi></m:maction>
</m:math>.</div></dd><dt class="paramhead"><a name="ABSERR" id="ABSERR"/>4: &#160;&#160;&#8194; ABSERR &#8211; <span class="bitalic">double precision</span><span class="pclass">Output</span></dt><dd>
<div class="paramtext"><i>On exit</i>: an estimate of the absolute error in <a class="arg" href="#RESULT">RESULT</a>.  For the first three calls, <a class="arg" href="#ABSERR">ABSERR</a> is set to a large machine-dependent constant.</div></dd><dt class="paramhead"><a name="WORK" id="WORK"/>5: &#160;&#160;&#8194; WORK(<a class="arg" href="#LWORK">LWORK</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Communication Array</span></dt><dd>
<div class="paramtext">Used as workspace, but <b>must not</b> be changed between calls.</div></dd><dt class="paramhead"><a name="LWORK" id="LWORK"/>6: &#160;&#160;&#8194; LWORK &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the dimension of the array <a class="arg" href="#WORK">WORK</a> as declared in the (sub)program from which C06BAF is called.</div>
<div class="paramtext"><i>Suggested value</i>:
  <m:math>
 <m:mtext>(maximum number of terms in the sequence)</m:mtext><m:mo>+</m:mo><m:mn>6</m:mn>
</m:math>.  See <a class="sec" href="#fcomments2">Section 8.2</a>.</div><div class="paramtext"><i>Constraint</i>:
  <m:math>
 <m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>7</m:mn>
</m:math>.
</div></dd><dt class="paramhead"><a name="IFAIL" id="IFAIL"/>7: &#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="#NCALL"><m:mi mathcolor="#EE0000" mathvariant="bold">NCALL</m:mi></m:maction><m:mo>&lt;</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>
<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="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>&lt;</m:mo><m:mn>7</m:mn></m:math>.</td></tr></table>
</dd>
</dl><h2 class="standard"><a class="sec" name="accuracy" id="accuracy"/>7&#160;&#160;Accuracy</h2>
<div class="paramtext">The accuracy of the absolute error estimate <a class="arg" href="#ABSERR">ABSERR</a> varies considerably with the type of sequence to which the routine is applied.  In general it is better when applied to oscillating sequences than to monotonic sequences where it may be a severe underestimate.</div><h2 class="standard"><a class="sec" name="fcomments" id="fcomments"/>8&#160;&#160;Further Comments</h2><h3 class="standard"><a class="sec" name="fcomments1" id="fcomments1"/>8.1&#160;&#160;Timing</h3>
<div class="paramtext">The time taken is approximately proportional to the final value of <a class="arg" href="#NCALL">NCALL</a>.</div><h3 class="standard"><a class="sec" name="fcomments2" id="fcomments2"/>8.2&#160;&#160;Choice of <a class="arg" href="#LWORK">LWORK</a></h3>
<div class="paramtext">For long sequences, a &#8216;window&#8217; of the last <m:math><m:mi>n</m:mi></m:math>&#160;values can be used instead of all the terms of the sequence.  Tests on a variety of problems indicate that a suitable value is <m:math>
 <m:mi>n</m:mi><m:mo>=</m:mo><m:mn>50</m:mn>
</m:math>; this implies a value for <a class="arg" href="#LWORK">LWORK</a> of <m:math><m:mn>56</m:mn></m:math>.  You are advised to experiment with other values for your own specific problems.</div><h3 class="standard"><a class="sec" name="fcomments3" id="fcomments3"/>8.3&#160;&#160;Convergence</h3>
<div class="paramtext">C06BAF will induce convergence in some divergent sequences.  See <a class="ref" href="#ref262">Shanks (1955)</a> for more details.</div><h2 class="standard"><a class="sec" name="example" id="example"/>9&#160;&#160;Example</h2>
<div class="paramtext">This example attempts to sum the infinite series

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:munderover>
  <m:mo>&#8721;</m:mo>
  <m:mrow><m:mi>n</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow>
  <m:mi>&#8734;</m:mi>
 </m:munderover>
 <m:mfrac>
  <m:msup>
   <m:mfenced separators=""><m:mo>-</m:mo><m:mn>1</m:mn></m:mfenced>
   <m:mrow><m:mi>n</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow>
  </m:msup>
  <m:msup><m:mi>n</m:mi><m:mn>2</m:mn></m:msup>
 </m:mfrac>
 <m:mo>=</m:mo>
 <m:mfrac><m:msup><m:mi>&#960;</m:mi><m:mn>2</m:mn></m:msup><m:mn>12</m:mn></m:mfrac>
</m:math></td><td class="formula2"/></tr></table></div>

by considering the sequence of partial sums

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:munderover>
  <m:mo>&#8721;</m:mo>
  <m:mrow><m:mi>n</m:mi><m:mo>=</m:mo> <m:mn>1</m:mn></m:mrow>
  <m:mn>1</m:mn>
 </m:munderover>
 <m:mo>,</m:mo>
 <m:munderover>
  <m:mo>&#8721;</m:mo>
  <m:mrow><m:mi>n</m:mi><m:mo>=</m:mo> <m:mn>1</m:mn></m:mrow>
  <m:mn>2</m:mn>
 </m:munderover>
 <m:mo>,</m:mo>
 <m:munderover>
  <m:mo>&#8721;</m:mo>
  <m:mrow><m:mi>n</m:mi><m:mo>=</m:mo> <m:mn>1</m:mn></m:mrow>
  <m:mn>3</m:mn>
 </m:munderover>
 <m:mo>,</m:mo>
 <m:mo>&#8230;</m:mo>
 <m:mo>,</m:mo>
 <m:munderover>
  <m:mo>&#8721;</m:mo>
  <m:mrow><m:mi>n</m:mi><m:mo>=</m:mo> <m:mn>1</m:mn></m:mrow>
  <m:mn>10</m:mn>
 </m:munderover>
</m:math></td><td class="formula2"/></tr></table></div></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/c06bafe.f">Program Text (c06bafe.f)</a></p><h3 class="standard"><a class="sec" name="examdata" id="examdata"/>9.2&#160;&#160;Program Data</h3>
<div class="paramtext">None.</div><h3 class="standard"><a class="sec" name="examresults" id="examresults"/>9.3&#160;&#160;Program Results</h3>
<p><a class="verbatimref" href="../../examples/baseresults/c06bafe.r">Program Results (c06bafe.r)</a></p><div class="figure"><a name="c06baf-plot" id="c06baf-plot"/><img src="../figures/c06baf-plot.png" alt="Example Program Plot for c06baf-plot"/></div>
<hr/><div><a class="rout" href="../../pdf/C06/c06baf.pdf">C06BAF (PDF version)</a></div><div><a class="chap" href="c06conts.xml">C06 Chapter Contents</a></div><div><a class="chapint" href="c06intro.xml">C06 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>