NAG Library Routine Document
D01BAF computes an estimate of the definite integral of a function of known analytical form, using a Gaussian quadrature formula with a specified number of abscissae. Formulae are provided for a finite interval (Gauss–Legendre), a semi-infinite interval (Gauss–Laguerre, rational Gauss), and an infinite interval (Gauss–Hermite).
|REAL (KIND=nag_wp) D01BAF
||A, B, FUN
D01BAF evaluates an estimate of the definite integral of a function
, over a finite or infinite range, by
-point Gaussian quadrature (see Davis and Rabinowitz (1975)
, Fröberg (1970)
, Ralston (1965)
or Stroud and Secrest (1966)
). The integral is approximated by a summation
are called the weights, and the
the abscissae. A selection of values of
is available. (See Section 5
3.2 Both Limits Finite
The Gauss–Legendre weights and abscissae are used, and the formula is exact for any function of the form:
The formula is appropriate for functions which can be well approximated by such a polynomial over
. It is inappropriate for functions with algebraic singularities at one or both ends of the interval, such as
3.3 One Limit Infinite
Two quadrature formulae are available for these integrals.
||The Gauss–Laguerre formula is exact for any function of the form:
This formula is appropriate for functions decaying exponentially at infinity; the parameter should be chosen if possible to match the decay rate of the function.
||The rational Gauss formula is exact for any function of the form:
This formula is likely to be more accurate for functions having only an inverse power rate of decay for large . Here the choice of a suitable value of may be more difficult; unfortunately a poor choice of can make a large difference to the accuracy of the computed integral.
3.4 Both Limits Infinite
The Gauss–Hermite weights and abscissae are used, and the formula is exact for any function of the form:
Again, for general functions not of this exact form, the parameter
should be chosen to match if possible the decay rate at
Davis P J and Rabinowitz P (1975) Methods of Numerical Integration Academic Press
Fröberg C E (1970) Introduction to Numerical Analysis Addison–Wesley
Ralston A (1965) A First Course in Numerical Analysis pp. 87–90 McGraw–Hill
Stroud A H and Secrest D (1966) Gaussian Quadrature Formulas Prentice–Hall
- 1: D01XXX – SUBROUTINE, supplied by the NAG Library.External Procedure
The name of the routine indicates the quadrature formula:
- D01BAZ, for Gauss–Legendre quadrature on a finite interval;
- D01BAY, for rational Gauss quadrature on a semi-infinite interval;
- D01BAX, for Gauss–Laguerre quadrature on a semi-infinite interval;
- D01BAW, for Gauss–Hermite quadrature on an infinite interval.
The name used must be declared as EXTERNAL in the subroutine from which D01BAF is called.
- 2: A – REAL (KIND=nag_wp)Input
- 3: B – REAL (KIND=nag_wp)Input
: the parameters
which occur in the integration formulae:
- is the lower limit and is the upper limit of the integral. It is not necessary that .
- Rational Gauss:
- must be chosen so as to make the integrand match as closely as possible the exact form given in Section 3.3(b). The range of integration is if , and if .
- must be chosen so as to make the integrand match as closely as possible the exact form given in Section 3.3(a). The range of integration is if , and is .
- and must be chosen so as to make the integrand match as closely as possible the exact form given in Section 3.4.
- Rational Gauss: ;
- Gauss–Laguerre: ;
- Gauss–Hermite: .
- 4: N – INTEGERInput
On entry: , the number of abscissae to be used.
, , , , , , , , , , , , , , or .
- 5: FUN – REAL (KIND=nag_wp) FUNCTION, supplied by the user.External Procedure
must return the value of the integrand
at a specified point.
The specification of FUN
- 1: X – REAL (KIND=nag_wp)Input
On entry: the point at which the integrand must be evaluated.
must either be a module subprogram USEd by, or declared as EXTERNAL in, the (sub)program from which D01BAF is called. Parameters denoted as Input
be changed by this procedure.
Some points to bear in mind when coding FUN
are mentioned in Section 7
- 6: IFAIL – INTEGERInput/Output
must be set to
. If you are unfamiliar with this parameter you should refer to Section 3.3
in the Essential Introduction for details.
For environments where it might be inappropriate to halt program execution when an error is detected, the value
is recommended. If the output of error messages is undesirable, then the value
is recommended. Otherwise, because for this routine the values of the output parameters may be useful even if
on exit, the recommended value is
. When the value is used it is essential to test the value of IFAIL on exit.
unless the routine detects an error or a warning has been flagged (see Section 6
6 Error Indicators and Warnings
If on entry
, explanatory error messages are output on the current error message unit (as defined by X04AAF
Note: D01BAF may return useful information for one or more of the following detected errors or warnings.
Errors or warnings detected by the routine:
The N-point rule is not among those stored. If the soft fail option is used, the answer is evaluated for the largest valid value of N
less than the requested value.
The value of A
Rational Gauss: .
If the soft fail option is used, the answer is returned as zero.
The accuracy depends on the behaviour of the integrand, and on the number of abscissae used. No tests are carried out in D01BAF to estimate the accuracy of the result. If such an estimate is required, the routine may be called more than once, with a different number of abscissae each time, and the answers compared. It is to be expected that for sufficiently smooth functions a larger number of abscissae will give improved accuracy.
Alternatively, the range of integration may be subdivided, the integral estimated separately for each sub-interval, and the sum of these estimates compared with the estimate over the whole range.
The coding of FUN
may also have a bearing on the accuracy. For example, if a high-order Gauss–Laguerre formula is used, and the integrand is of the form
it is possible that the exponential term may underflow for some large abscissae. Depending on the machine, this may produce an error, or simply be assumed to be zero. In any case, it would be better to evaluate the expression as:
Another situation requiring care is exemplified by
The integrand here assumes very large values; for example, for
, the peak value exceeds
. Now, if the machine holds floating point numbers to an accuracy of
significant decimal digits, we could not expect such terms to cancel in the summation leaving an answer of much less than
(the weights being of order unity); that is instead of zero, we obtain a rather large answer through rounding error. Fortunately, such situations are characterised by great variability in the answers returned by formulae with different values of
. In general, you should be aware of the order of magnitude of the integrand, and should judge the answer in that light.
The time taken by D01BAF depends on the complexity of the expression for the integrand and on the number of abscissae required.
This example evaluates the integrals
by Gauss–Legendre quadrature;
by rational Gauss quadrature with
by Gauss–Laguerre quadrature with
by Gauss–Hermite quadrature with
The formulae with are used in each case.
9.1 Program Text
Program Text (d01bafe.f90)
9.2 Program Data
9.3 Program Results
Program Results (d01bafe.r)