NAG FL Interface
d01fbf (md_​gauss)

Settings help

FL Name Style:


FL Specification Language:


1 Purpose

d01fbf computes an estimate of a multidimensional integral (from 1 to 20 dimensions), given the analytic form of the integrand and suitable Gaussian weights and abscissae.

2 Specification

Fortran Interface
Function d01fbf ( ndim, nptvec, lwa, weight, abscis, f, ifail)
Real (Kind=nag_wp) :: d01fbf
Integer, Intent (In) :: ndim, nptvec(ndim), lwa
Integer, Intent (Inout) :: ifail
Real (Kind=nag_wp), External :: f
Real (Kind=nag_wp), Intent (In) :: weight(lwa), abscis(lwa)
C Header Interface
#include <nag.h>
double  d01fbf_ (const Integer *ndim, const Integer nptvec[], const Integer *lwa, const double weight[], const double abscis[],
double (NAG_CALL *f)(const Integer *ndim, const double x[]),
Integer *ifail)
The routine may be called by the names d01fbf or nagf_quad_md_gauss.

3 Description

d01fbf approximates a multidimensional integral by evaluating the summation
i1=1l1 w 1,i1 i2=1l2 w2,i2 in=1ln wn,in f ( x 1 , i1 , x 2 , i2 ,, x n , in )  
given the weights wj,ij and abscissae xj,ij for a multidimensional product integration rule (see Davis and Rabinowitz (1975)). The number of dimensions may be anything from 1 to 20.
The weights and abscissae for each dimension must have been placed in successive segments of the arrays weight and abscis; for example, by calling d01tbf or d01tcf once for each dimension using a quadrature formula and number of abscissae appropriate to the range of each xj and to the functional dependence of f on xj.
If normal weights are used, the summation will approximate the integral
w1(x1)w2(x2)wn(xn)f (x1,x2,,xn) dxndx2dx1  
where wj(x) is the weight function associated with the quadrature formula chosen for the jth dimension; while if adjusted weights are used, the summation will approximate the integral
f(x1,x2,,xn)dxndx2dx1.  
You must supply a subroutine to evaluate
f(x1,x2,,xn)  
at any values of x1,x2,,xn within the range of integration.

4 References

Davis P J and Rabinowitz P (1975) Methods of Numerical Integration Academic Press

5 Arguments

1: ndim Integer Input
On entry: n, the number of dimensions of the integral.
Constraint: 1ndim20.
2: nptvec(ndim) Integer array Input
On entry: nptvec(j) must specify the number of points in the jth dimension of the summation, for j=1,2,,n.
3: lwa Integer Input
On entry: the dimension of the arrays weight and abscis as declared in the (sub)program from which d01fbf is called.
Constraint: lwanptvec(1)+nptvec(2)++nptvec(ndim).
4: weight(lwa) Real (Kind=nag_wp) array Input
On entry: must contain in succession the weights for the various dimensions, i.e., weight(k) contains the ith weight for the jth dimension, with
k=nptvec(1)+nptvec(2)++nptvec(j-1)+i.  
5: abscis(lwa) Real (Kind=nag_wp) array Input
On entry: must contain in succession the abscissae for the various dimensions, i.e., abscis(k) contains the ith abscissa for the jth dimension, with
k=nptvec(1)+nptvec(2)++nptvec(j-1)+i.  
6: f real (Kind=nag_wp) Function, supplied by the user. External Procedure
f must return the value of the integrand at a given point.
The specification of f is:
Fortran Interface
Function f ( ndim, x)
Real (Kind=nag_wp) :: f
Integer, Intent (In) :: ndim
Real (Kind=nag_wp), Intent (In) :: x(ndim)
C Header Interface
double  f (const Integer *ndim, const double x[])
1: ndim Integer Input
On entry: n, the number of dimensions of the integral.
2: x(ndim) Real (Kind=nag_wp) array Input
On entry: the coordinates of the point at which the integrand f must be evaluated.
f must either be a module subprogram USEd by, or declared as EXTERNAL in, the (sub)program from which d01fbf is called. Arguments denoted as Input must not be changed by this procedure.
Note: f should not return floating-point NaN (Not a Number) or infinity values, since these are not handled by d01fbf. If your code inadvertently does return any NaNs or infinities, d01fbf is likely to produce unexpected results.
7: ifail Integer Input/Output
On entry: ifail must be set to 0, −1 or 1 to set behaviour on detection of an error; these values have no effect when no error is detected.
A value of 0 causes the printing of an error message and program execution will be halted; otherwise program execution continues. A value of −1 means that an error message is printed while a value of 1 means that it is not.
If halting is not appropriate, the value −1 or 1 is recommended. If message printing is undesirable, then the value 1 is recommended. Otherwise, the value 0 is recommended. When the value -1 or 1 is used it is essential to test the value of ifail on exit.
On exit: ifail=0 unless the routine detects an error or a warning has been flagged (see Section 6).

6 Error Indicators and Warnings

If on entry ifail=0 or −1, explanatory error messages are output on the current error message unit (as defined by x04aaf).
Errors or warnings detected by the routine:
ifail=1
On entry, lwa is too small. lwa=value. Minimum possible dimension: value.
On entry, ndim=value.
Constraint: ndim20.
On entry, ndim=value.
Constraint: ndim1.
ifail=-99
An unexpected error has been triggered by this routine. Please contact NAG.
See Section 7 in the Introduction to the NAG Library FL Interface for further information.
ifail=-399
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library FL Interface for further information.
ifail=-999
Dynamic memory allocation failed.
See Section 9 in the Introduction to the NAG Library FL Interface for further information.

7 Accuracy

The accuracy of the computed multidimensional 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.

8 Parallelism and Performance

Background information to multithreading can be found in the Multithreading documentation.
d01fbf is not threaded in any implementation.

9 Further Comments

The total time taken by d01fbf will be proportional to
T×nptvec(1)×nptvec(2)××nptvec(ndim),  
where T is the time taken for one evaluation of f.

10 Example

This example evaluates the integral
120-1 (x1x2x3) 6 (x4+2) 8e-2x2e-0.5x32dx4dx3dx2dx1  
using adjusted weights. The quadrature formulae chosen are:
Four points are sufficient in each dimension, as this integral is in fact a product of four one-dimensional integrals, for each of which the chosen four-point formula is exact.

10.1 Program Text

Program Text (d01fbfe.f90)

10.2 Program Data

None.

10.3 Program Results

Program Results (d01fbfe.r)