<?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>D01FBF : 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/D01/d01fbf.pdf">D01FBF (PDF version)</a></div><div><a class="chap" href="d01conts.xml">D01 Chapter Contents</a></div><div><a class="chapint" href="d01intro.xml">D01 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/>D01FBF</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">D01FBF computes an estimate of a multi-dimensional integral (from <m:math><m:mn>1</m:mn></m:math>&#160;to <m:math><m:mn>20</m:mn></m:math>&#160;dimensions), given the analytic form of the integrand and suitable Gaussian weights and abscissae.</div><h2 class="standard"><a class="sec" name="specification" id="specification"/>2&#160;&#160;Specification</h2>
<table class="fspec"><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b>&#160;FUNCTION&#160;D01FBF&#160;(</td><td class="tdfspec2"><a class="arg" href="#NDIM">NDIM</a>, <a class="arg" href="#NPTVEC">NPTVEC</a>, <a class="arg" href="#LWA">LWA</a>, <a class="arg" href="#WEIGHT">WEIGHT</a>, <a class="arg" href="#ABSCIS">ABSCIS</a>, <a class="arg" href="#FUN">FUN</a>, <a class="arg" href="#IFAIL">IFAIL</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">NDIM, NPTVEC(NDIM), LWA, IFAIL</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">WEIGHT(LWA), ABSCIS(LWA), FUN</td></tr><tr><td class="tdfspec1">EXTERNAL</td><td class="tdfspec2">FUN</td></tr></table><h2 class="standard"><a class="sec" name="description" id="description"/>3&#160;&#160;Description</h2>
<div class="paramtext">D01FBF approximates a multi-dimensional integral by evaluating the summation

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:munderover><m:mo>&#8721;</m:mo><m:mrow><m:msub><m:mi>i</m:mi><m:mn>1</m:mn></m:msub><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow><m:msub><m:mi>l</m:mi><m:mn>1</m:mn></m:msub></m:munderover>
 <m:msub>
  <m:mi>w</m:mi>
  <m:mrow><m:mn>1</m:mn><m:mo>,</m:mo><m:msub><m:mi>i</m:mi><m:mn>1</m:mn></m:msub></m:mrow>
 </m:msub>
 <m:munderover><m:mo>&#8721;</m:mo><m:mrow><m:msub><m:mi>i</m:mi><m:mn>2</m:mn></m:msub><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow><m:msub><m:mi>l</m:mi><m:mn>2</m:mn></m:msub></m:munderover>
 <m:msub><m:mi>w</m:mi><m:mrow><m:mn>2</m:mn><m:mo>,</m:mo><m:msub><m:mi>i</m:mi><m:mn>2</m:mn></m:msub></m:mrow></m:msub>
 <m:mo>&#8943;</m:mo>
 <m:munderover><m:mo>&#8721;</m:mo><m:mrow><m:msub><m:mi>i</m:mi><m:mi>n</m:mi></m:msub><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow><m:msub><m:mi>l</m:mi><m:mi>n</m:mi></m:msub></m:munderover>
 <m:msub><m:mi>w</m:mi><m:mrow><m:mi>n</m:mi><m:mo>,</m:mo><m:msub><m:mi>i</m:mi><m:mi>n</m:mi></m:msub></m:mrow></m:msub>
 <m:mi>f</m:mi>
 <m:mfenced separators=""><m:msub>
   <m:mi>x</m:mi>
   <m:mrow>
    <m:mn>1</m:mn>
    <m:mo>,</m:mo>
    <m:msub><m:mi>i</m:mi><m:mn>1</m:mn></m:msub>
   </m:mrow>
  </m:msub><m:mo>,</m:mo><m:msub>
   <m:mi>x</m:mi>
   <m:mrow>
    <m:mn>2</m:mn>
    <m:mo>,</m:mo>
    <m:msub><m:mi>i</m:mi><m:mn>2</m:mn></m:msub>
   </m:mrow>
  </m:msub><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub>
   <m:mi>x</m:mi>
   <m:mrow>
    <m:mi>n</m:mi>
    <m:mo>,</m:mo>
    <m:msub><m:mi>i</m:mi><m:mi>n</m:mi></m:msub></m:mrow>
  </m:msub></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

given the weights <m:math><m:msub><m:mi>w</m:mi><m:mrow><m:mi>j</m:mi><m:mo>,</m:mo><m:msub><m:mi>i</m:mi><m:mi>j</m:mi></m:msub></m:mrow></m:msub></m:math>&#160;and abscissae <m:math><m:msub><m:mi>x</m:mi><m:mrow><m:mi>j</m:mi><m:mo>,</m:mo><m:msub><m:mi>i</m:mi><m:mi>j</m:mi></m:msub></m:mrow></m:msub></m:math>&#160;for a multi-dimensional product integration rule (see <a class="ref" href="#ref201">Davis and Rabinowitz (1975)</a>).  The number of dimensions may be anything from <m:math><m:mn>1</m:mn></m:math>&#160;to <m:math><m:mn>20</m:mn></m:math>.</div><div class="paramtext">The weights and abscissae for each dimension must have been placed in successive segments of the arrays <a class="arg" href="#WEIGHT">WEIGHT</a> and <a class="arg" href="#ABSCIS">ABSCIS</a>; for example, by calling <a class="rout" href="../D01/d01bbf.xml">D01BBF</a> or <a class="rout" href="../D01/d01bcf.xml">D01BCF</a>  once for each dimension using a quadrature formula and number of abscissae appropriate to the range of each <m:math><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;and to the functional dependence of <m:math><m:mi>f</m:mi></m:math>&#160;on <m:math><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub></m:math>.</div><div class="paramtext">If normal weights are used, the summation will approximate the integral

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mo>&#8747;</m:mo><m:msub><m:mi>w</m:mi><m:mn>1</m:mn></m:msub><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub></m:mfenced><m:mo>&#8747;</m:mo><m:msub><m:mi>w</m:mi><m:mn>2</m:mn></m:msub><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub></m:mfenced><m:mo>&#8943;</m:mo><m:mo>&#8747;</m:mo><m:msub><m:mi>w</m:mi><m:mi>n</m:mi></m:msub><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mi>n</m:mi></m:msub></m:mfenced><m:mi>f</m:mi>
<m:mfenced separators=""><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>n</m:mi></m:msub></m:mfenced>
<m:mrow><m:mi>d</m:mi><m:msub><m:mi>x</m:mi><m:mi>n</m:mi></m:msub></m:mrow><m:mo>&#8943;</m:mo><m:mrow><m:mi>d</m:mi><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub></m:mrow><m:mi>d</m:mi><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mi>w</m:mi><m:mi>j</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is the weight function associated with the quadrature formula chosen for the <m:math><m:mi>j</m:mi></m:math>th dimension; while if adjusted weights are used, the summation will approximate the integral

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mo>&#8747;</m:mo><m:mo>&#8747;</m:mo><m:mo>&#8943;</m:mo><m:mo>&#8747;</m:mo><m:mi>f</m:mi><m:mfenced separators=""><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>n</m:mi></m:msub></m:mfenced><m:mrow><m:mi>d</m:mi><m:msub><m:mi>x</m:mi><m:mi>n</m:mi></m:msub></m:mrow><m:mo>&#8943;</m:mo><m:mrow><m:mi>d</m:mi><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub></m:mrow><m:mi>d</m:mi><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

You must supply a subroutine to evaluate

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>f</m:mi><m:mfenced separators=""><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>n</m:mi></m:msub></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

at any values of <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>n</m:mi></m:msub></m:math>&#160;within the range of integration.</div><h2 class="standard"><a class="sec" name="references" id="references"/>4&#160;&#160;References</h2><div class="paramtext"><a name="ref201" id="ref201"/>Davis P J and Rabinowitz P (1975)  <i>Methods of Numerical Integration</i> Academic Press </div><h2 class="standard"><a class="sec" name="parameters" id="parameters"/>5&#160;&#160;Parameters</h2>
<dl><dt class="paramhead"><a name="NDIM" id="NDIM"/>1: &#160;&#160;&#8194; NDIM &#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 dimensions of the integral.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mn>1</m:mn><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#NDIM"><m:mi mathcolor="#EE0000" mathvariant="bold">NDIM</m:mi></m:maction><m:mo>&#8804;</m:mo><m:mn>20</m:mn></m:math>.
</div></dd><dt class="paramhead"><a name="NPTVEC" id="NPTVEC"/>2: &#160;&#160;&#8194; NPTVEC(<a class="arg" href="#NDIM">NDIM</a>) &#8211; INTEGER 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="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;must specify the number of points in the <m:math><m:mi>j</m:mi></m:math>th dimension of the summation, 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>n</m:mi></m:math>.</div></dd><dt class="paramhead"><a name="LWA" id="LWA"/>3: &#160;&#160;&#8194; LWA &#8211; INTEGER<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: the dimension of the arrays  <a class="arg" href="#WEIGHT">WEIGHT</a> and <a class="arg" href="#ABSCIS">ABSCIS</a> as declared in the (sub)program from which D01FBF is called.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWA"><m:mi mathcolor="#EE0000" mathvariant="bold">LWA</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow><m:mo>+</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>2</m:mn></m:mfenced></m:mrow><m:mo>+</m:mo><m:mo>&#8943;</m:mo><m:mo>+</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:maction actiontype="link" dsi:type="simple" dsi:href="#NDIM"><m:mi mathcolor="#EE0000" mathvariant="bold">NDIM</m:mi></m:maction></m:mfenced></m:mrow></m:math>.
</div></dd><dt class="paramhead"><a name="WEIGHT" id="WEIGHT"/>4: &#160;&#160;&#8194; WEIGHT(<a class="arg" href="#LWA">LWA</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: must contain in succession the weights for the various dimensions, i.e., <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#WEIGHT"><m:mi mathcolor="#EE0000" mathvariant="bold">WEIGHT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>k</m:mi></m:mfenced></m:mrow></m:math>&#160;contains the <m:math><m:mi>i</m:mi></m:math>th weight for the <m:math><m:mi>j</m:mi></m:math>th dimension, with 
<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block"> <m:mi>k</m:mi><m:mo>=</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow><m:mo>+</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>2</m:mn></m:mfenced></m:mrow><m:mo>+</m:mo><m:mo>&#8943;</m:mo><m:mo>+</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:mi>j</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:mfenced></m:mrow><m:mo>+</m:mo><m:mi>i</m:mi><m:mtext>.</m:mtext> </m:math></td><td class="formula2"/></tr></table></div></div></dd><dt class="paramhead"><a name="ABSCIS" id="ABSCIS"/>5: &#160;&#160;&#8194; ABSCIS(<a class="arg" href="#LWA">LWA</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: must contain in succession the abscissae for the various dimensions, i.e., <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ABSCIS"><m:mi mathcolor="#EE0000" mathvariant="bold">ABSCIS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>k</m:mi></m:mfenced></m:mrow></m:math>&#160;contains the <m:math><m:mi>i</m:mi></m:math>th abscissa for the <m:math><m:mi>j</m:mi></m:math>th dimension, with 
<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block"> <m:mi>k</m:mi><m:mo>=</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow><m:mo>+</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>2</m:mn></m:mfenced></m:mrow><m:mo>+</m:mo><m:mo>&#8943;</m:mo><m:mo>+</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:mi>j</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:mfenced></m:mrow><m:mo>+</m:mo><m:mi>i</m:mi><m:mtext>.</m:mtext> </m:math></td><td class="formula2"/></tr></table></div></div></dd><dt class="paramhead"><a name="FUN" id="FUN"/>6: &#160;&#160;&#8194; FUN &#8211; <span class="bitalic">double precision</span> FUNCTION, supplied by the user.<span class="pclass">External Procedure</span></dt><dd><div class="paramtext"><a class="arg" href="#FUN">FUN</a> must return the value of the integrand <m:math><m:mi>f</m:mi></m:math>&#160;at a specified point.</div><div class="subprog">
<div class="paramtext">The specification of <a class="arg" href="#FUN">FUN</a> is:</div><table class="fspec"><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b>&#160;FUNCTION&#160;FUN&#160;(</td><td class="tdfspec2"><a class="arg" href="../D01/d01fbf.xml#FUN_NDIM">NDIM</a>, <a class="arg" href="../D01/d01fbf.xml#FUN_X">X</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">NDIM</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">X(NDIM)</td></tr></table>
<dl><dt class="paramhead"><a name="FUN_NDIM" id="FUN_NDIM"/>1: &#160;&#160;&#8194; NDIM &#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 dimensions of the integral.</div></dd><dt class="paramhead"><a name="FUN_X" id="FUN_X"/>2: &#160;&#160;&#8194; X(<a class="arg" href="../D01/d01fbf.xml#FUN_NDIM">NDIM</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: the co-ordinates of the point at which the integrand <m:math><m:mi>f</m:mi></m:math>&#160;must be evaluated.</div></dd></dl>
</div>
<div class="paramtext"><a class="arg" href="#FUN">FUN</a> must be declared as EXTERNAL in the (sub)program from which D01FBF is called. Parameters denoted as <span class="italic">Input</span>  must <b>not</b>  be changed by this procedure.</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="#NDIM"><m:mi mathcolor="#EE0000" mathvariant="bold">NDIM</m:mi></m:maction><m:mo>&lt;</m:mo><m:mn>1</m:mn></m:math>,</td></tr><tr><td class="ifail1">or</td><td class="ifail2-90"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NDIM"><m:mi mathcolor="#EE0000" mathvariant="bold">NDIM</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>20</m:mn></m:math>,</td></tr><tr><td class="ifail1">or</td><td class="ifail2-90"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWA"><m:mi mathcolor="#EE0000" mathvariant="bold">LWA</m:mi></m:maction><m:mo>&lt;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow><m:mo>+</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>2</m:mn></m:mfenced></m:mrow><m:mo>+</m:mo><m:mo>&#8943;</m:mo><m:mo>+</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:maction actiontype="link" dsi:type="simple" dsi:href="#NDIM"><m:mi mathcolor="#EE0000" mathvariant="bold">NDIM</m:mi></m:maction></m:mfenced></m:mrow></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 computed multi-dimensional sum depends on the weights and the integrand values at the abscissae.  If these numbers vary significantly in size and sign then considerable accuracy could be lost.  If these numbers are all positive, then little accuracy will be lost in computing the sum.</div><h2 class="standard"><a class="sec" name="fcomments" id="fcomments"/>8&#160;&#160;Further Comments</h2>
<div class="paramtext">The total time taken by D01FBF will be proportional to

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>T</m:mi><m:mo>&#215;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow><m:mo>&#215;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>2</m:mn></m:mfenced></m:mrow><m:mo>&#215;</m:mo><m:mo>&#8943;</m:mo><m:mo>&#215;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NPTVEC"><m:mi mathcolor="#EE0000" mathvariant="bold">NPTVEC</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:maction actiontype="link" dsi:type="simple" dsi:href="#NDIM"><m:mi mathcolor="#EE0000" mathvariant="bold">NDIM</m:mi></m:maction></m:mfenced></m:mrow><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>T</m:mi></m:math>&#160;is the time taken for one evaluation of <a class="arg" href="#FUN">FUN</a>.</div><h2 class="standard"><a class="sec" name="example" id="example"/>9&#160;&#160;Example</h2>
<div class="paramtext">This example evaluates the integral

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:munderover><m:mo>&#8747;</m:mo><m:mn>1</m:mn><m:mn>2</m:mn></m:munderover><m:munderover><m:mo>&#8747;</m:mo><m:mn>0</m:mn><m:mi>&#8734;</m:mi></m:munderover><m:munderover><m:mo>&#8747;</m:mo><m:mrow><m:mo>-</m:mo><m:mi>&#8734;</m:mi></m:mrow><m:mi>&#8734;</m:mi></m:munderover><m:munderover><m:mo>&#8747;</m:mo><m:mn>1</m:mn><m:mi>&#8734;</m:mi></m:munderover><m:mfrac><m:msup>
<m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub></m:mfenced>
<m:mn>6</m:mn></m:msup><m:msup>
<m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub><m:mo>+</m:mo><m:mn>2</m:mn></m:mfenced>
<m:mn>8</m:mn></m:msup></m:mfrac><m:msup><m:mi>e</m:mi><m:mrow><m:mo>-</m:mo><m:mn>2</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub></m:mrow></m:msup><m:msup><m:mi>e</m:mi><m:mrow><m:mo>-</m:mo><m:mn>0.5</m:mn><m:msubsup><m:mi>x</m:mi><m:mn>3</m:mn><m:mn>2</m:mn></m:msubsup></m:mrow></m:msup><m:mi>d</m:mi><m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub><m:mi>d</m:mi><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mi>d</m:mi><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mi>d</m:mi><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub>
</m:math></td><td class="formula2"/></tr></table></div>

using adjusted weights.  The quadrature formulae chosen are:
<ul class="listind"><li class="listind"><m:math><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;: Gauss&#8211;Legendre, <m:math><m:mi>a</m:mi><m:mo>=</m:mo><m:mn>1.0</m:mn></m:math>,  <m:math><m:mi>b</m:mi><m:mo>=</m:mo><m:mn>2.0</m:mn></m:math>,</li><li class="listind"><m:math><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub></m:math>&#160;: Gauss&#8211;Laguerre, <m:math><m:mi>a</m:mi><m:mo>=</m:mo><m:mn>0.0</m:mn></m:math>,  <m:math><m:mi>b</m:mi><m:mo>=</m:mo><m:mn>2.0</m:mn></m:math>,</li><li class="listind"><m:math><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub></m:math>&#160;: Gauss&#8211;Hermite, <m:math><m:mi>a</m:mi><m:mo>=</m:mo><m:mn>0.0</m:mn></m:math>,  <m:math><m:mi>b</m:mi><m:mo>=</m:mo><m:mn>0.5</m:mn></m:math>,</li><li class="listind"><m:math><m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub></m:math>&#160;: Gauss&#8211;Rational, <m:math><m:mi>a</m:mi><m:mo>=</m:mo><m:mn>1.0</m:mn></m:math>,  <m:math><m:mi>b</m:mi><m:mo>=</m:mo><m:mn>2.0</m:mn></m:math>.</li></ul>
</div><div class="paramtext">Four points are sufficient in each dimension, as this integral in is in fact a product of four one-dimensional integrals, for each of which the chosen four-point formula is exact.</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/d01fbfe.f">Program Text (d01fbfe.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/d01fbfe.r">Program Results (d01fbfe.r)</a></p>
<hr/><div><a class="rout" href="../../pdf/D01/d01fbf.pdf">D01FBF (PDF version)</a></div><div><a class="chap" href="d01conts.xml">D01 Chapter Contents</a></div><div><a class="chapint" href="d01intro.xml">D01 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>
