Routine ID: D103 | |
---|---|
Author(s): K.S. Kölbig | Library: MATHLIB |
Submitter: | Submitted: 02.05.1966 |
Language: Fortran | Revised: 15.03.1993 |
Function subprograms GAUSS, DGAUSS and QGAUSS compute, to an attempted specified accuracy, the value of the integral
$I=\int $_{A}^{B}f(x)dx.
The quadruple-precision version QGAUSS is available only on computers which support a REAL*16 Fortran data type.
Structure:
FUNCTION subprograms
User Entry Names: GAUSS, DGAUSS, QGAUSS
Files Referenced: Unit 6
External References: MTLMTR (N002), ABEND (Z035),
user-supplied FUNCTION subprogram
Usage:
In any arithmetic expression, GAUSS(F,A,B,EPS), DGAUSS(F,A,B,EPS) or QGAUSS(F,A,B,EPS)
has the approximate value of the integral I.
Method:
For any interval $[a,b]$ we define $g$_{8}(a,b) and $g$_{16}(a,b) to be the 8-point and 16-point Gaussian quadrature approximations to
$\int $_{a}^{b}f(x)dx
and define
$r(a,b)\; =\{|g$_{16}(a,b) - g_{8}(a,b)|
Then, with G = GAUSS or DGAUSS,
$G\; =\sum $_{i=1}^{k}g_{16}(x_{i-1},x_{i}),
where, starting with $x$_{0}=A and finishing with $x$_{k}=B , the subdivision points $x$_{i} (i=1,2,...) are given by
$x$_{i}= x_{i-1}+ λ(B-x_{i-1}),
with $\lambda $
equal to the first member of the sequence
$1,\{12\},\{14\},...$
for which
$r(x$_{i-1},x_{i}) <
$q=|\{x$_{i}-x_{i-1}
is so small that $1+0.005q$ is indistinguishable from 1 to machine accuracy, an error exit occurs with the function value set equal to zero.
Accuracy:
Unless there is severe cancellation of positive and negative values of $f(x)$ over the interval $[A,B]$ , the argument EPS may be considered as specifying a bound on the relative error of I in the case |I|>1, and a bound on the absolute error in the case |I|<1. More precisely, if k is the number of sub-intervals contributing to the approximation (see Method), and if
$I$_{abs}= ∫_{A}^{B}|f(x)|dx,
then the relation
$\{|G\; -\; I|I$_{abs}+k}<
will nearly always be true, provided the routine terminates without printing an error message. For functions f having no singularities in the closed interval $[A,B]$
the accuracy will usually be much higher than this.
Error handling:
Error D103.1: The requested accuracy cannot be obtained (see Method). The function value is set equal to zero, and a message is written on Unit 6 unless subroutine MTLSET (N002) has been called.
Notes:
Values of the function $f(x)$
at the interval end-points
A and B are not required. The subprogram may therefore
be used when these values are undefined.
$\u2022$