NAG CL Interface
d01fbc (md_​gauss)

Settings help

CL Name Style:


1 Purpose

d01fbc 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

#include <nag.h>
double  d01fbc (Integer ndim, const Integer nptvec[], Integer lwa, const double weight[], const double abscis[],
double (*f)(Integer ndim, const double x[], Nag_Comm *comm),
Nag_Comm *comm, NagError *fail)
The function may be called by the names: d01fbc or nag_quad_md_gauss.

3 Description

d01fbc 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 d01tbc or d01tcc 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 function 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] const Integer Input
On entry: nptvec[j-1] 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.
Constraint: lwanptvec[0]+nptvec[1]++nptvec[ndim-1].
4: weight[lwa] const double Input
On entry: must contain in succession the weights for the various dimensions, i.e., weight[k-1] contains the ith weight for the jth dimension, with
k=nptvec[0]+nptvec[1]++nptvec[j-2]+i.  
5: abscis[lwa] const double Input
On entry: must contain in succession the abscissae for the various dimensions, i.e., abscis[k-1] contains the ith abscissa for the jth dimension, with
k=nptvec[0]+nptvec[1]++nptvec[j-2]+i.  
6: f function, supplied by the user External Function
f must return the value of the integrand at a given point.
The specification of f is:
double  f (Integer ndim, const double x[], Nag_Comm *comm)
1: ndim Integer Input
On entry: n, the number of dimensions of the integral.
2: x[ndim] const double Input
On entry: the coordinates of the point at which the integrand f must be evaluated.
3: comm Nag_Comm *
Pointer to structure of type Nag_Comm; the following members are relevant to f.
userdouble *
iuserInteger *
pPointer 
The type Pointer will be void *. Before calling d01fbc you may allocate memory and initialize these pointers with various quantities for use by f when called from d01fbc (see Section 3.1.1 in the Introduction to the NAG Library CL Interface).
Note: f should not return floating-point NaN (Not a Number) or infinity values, since these are not handled by d01fbc. If your code inadvertently does return any NaNs or infinities, d01fbc is likely to produce unexpected results.
7: comm Nag_Comm *
The NAG communication argument (see Section 3.1.1 in the Introduction to the NAG Library CL Interface).
8: fail NagError * Input/Output
The NAG error argument (see Section 7 in the Introduction to the NAG Library CL Interface).

6 Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
See Section 3.1.2 in the Introduction to the NAG Library CL Interface for further information.
NE_BAD_PARAM
On entry, argument value had an illegal value.
NE_INT
On entry, ndim=value.
Constraint: ndim20.
On entry, ndim=value.
Constraint: ndim1.
NE_INT_2
On entry, lwa is too small. lwa=value. Minimum possible dimension: value.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
See Section 7.5 in the Introduction to the NAG Library CL Interface for further information.
NE_NO_LICENCE
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library CL 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.
d01fbc is not threaded in any implementation.

9 Further Comments

The total time taken by d01fbc will be proportional to
T×nptvec[0]×nptvec[1]××nptvec[ndim-1],  
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 (d01fbce.c)

10.2 Program Data

Program Data (d01fbce.d)

10.3 Program Results

Program Results (d01fbce.r)