d01ja attempts to evaluate an integral over an $n$-dimensional sphere ($n=2$, $3$, or $4$), to a user-specified absolute or relative accuracy, by means of a modified Sag–Szekeres method. The method can handle singularities on the surface or at the centre of the sphere, and returns an error estimate.

# Syntax

C# |
---|

public static void d01ja( D01..::..D01JA_F f, int ndim, double radius, double epsa, double epsr, int method, int icoord, out double result, out double esterr, out int nevals, out int ifail ) |

Visual Basic |
---|

Public Shared Sub d01ja ( _ f As D01..::..D01JA_F, _ ndim As Integer, _ radius As Double, _ epsa As Double, _ epsr As Double, _ method As Integer, _ icoord As Integer, _ <OutAttribute> ByRef result As Double, _ <OutAttribute> ByRef esterr As Double, _ <OutAttribute> ByRef nevals As Integer, _ <OutAttribute> ByRef ifail As Integer _ ) |

Visual C++ |
---|

public: static void d01ja( D01..::..D01JA_F^ f, int ndim, double radius, double epsa, double epsr, int method, int icoord, [OutAttribute] double% result, [OutAttribute] double% esterr, [OutAttribute] int% nevals, [OutAttribute] int% ifail ) |

F# |
---|

static member d01ja : f : D01..::..D01JA_F * ndim : int * radius : float * epsa : float * epsr : float * method : int * icoord : int * result : float byref * esterr : float byref * nevals : int byref * ifail : int byref -> unit |

#### Parameters

- f
- Type: NagLibrary..::..D01..::..D01JA_Ff must return the value of the integrand $f$ at a given point.
A delegate of type D01JA_F.

See also [Further Comments].

- ndim
- Type: System..::..Int32
*On entry*: $n$, the dimension of the sphere.*Constraint*: $2\le {\mathbf{ndim}}\le 4$.

- radius
- Type: System..::..Double
*On entry*: $\alpha $, the radius of the sphere.*Constraint*: ${\mathbf{radius}}\ge 0.0$.

- epsa
- Type: System..::..Double
*On entry*: the requested absolute tolerance. If ${\mathbf{epsa}}<0.0$, its absolute value is used. See [Accuracy].

- epsr
- Type: System..::..Double
*On entry*: the requested relative tolerance.- ${\mathbf{epsr}}<0.0$
- Its absolute value is used.
- ${\mathbf{epsr}}<10\times \left(\mathit{machineprecision}\right)$
- The latter value is used as epsr by the method. See [Accuracy].

- method
- Type: System..::..Int32
*On entry*: must specify the transformation to be used by the method. The choice depends on the behaviour of the integrand and on the required accuracy.For well-behaved functions and functions with mild singularities on the surface of the sphere only:- ${\mathbf{method}}=1$
- Low accuracy required.
- ${\mathbf{method}}=2$
- High accuracy required.

For functions with severe singularities on the surface of the sphere only:- ${\mathbf{method}}=3$
- Low accuracy required.
- ${\mathbf{method}}=4$
- High accuracy required.
(in this case icoord must be set to ${\mathbf{icoord}}=2$, and the function defined in special spherical coordinates).

For functions with a singularity at the centre of the sphere (and possibly with singularities on the surface as well):- ${\mathbf{method}}=5$
- Low accuracy required.
- ${\mathbf{method}}=6$
- High accuracy required.

- ${\mathbf{method}}=1$ if ${\mathbf{epsr}}>{10}^{-6}$, and
- ${\mathbf{method}}=2$ if ${\mathbf{epsr}}\le {10}^{-6}$.

The distinction between low and high required accuracies, as mentioned above, depends also on the behaviour of the function. Roughly one may assume the critical value of epsa and epsr to be ${10}^{-6}$, but the critical value will be smaller for a well-behaved integrand and larger for an integrand with severe singularities.*Suggested value*: ${\mathbf{method}}=0$.*Constraint*: ${\mathbf{method}}=0$, $1$, $2$, $3$, $4$, $5$ or $6$.If ${\mathbf{icoord}}=2$, ${\mathbf{method}}=3$ or $4$

- icoord
- Type: System..::..Int32
*On entry*: must specify which kind of coordinates are used in f.- ${\mathbf{icoord}}=0$
- Cartesian coordinates ${x}_{\mathit{i}}$, for $\mathit{i}=1,2,\dots ,n$.
- ${\mathbf{icoord}}=1$
- Spherical coordinates (see [Spherical Polar Coordinates]): ${\mathbf{x}}\left[0\right]=\rho $; ${\mathbf{x}}\left[\mathit{i}-1\right]={\theta}_{\mathit{i}-1}$, for $\mathit{i}=2,3,\dots ,n$.
- ${\mathbf{icoord}}=2$,
- Special spherical polar coordinates (see [Machine Dependencies]), with the additional transformation $\rho =\alpha -\lambda $: ${\mathbf{x}}\left[0\right]=\lambda =\alpha -\rho $; ${\mathbf{x}}\left[\mathit{i}-1\right]={\theta}_{\mathit{i}-1}$, for $\mathit{i}=2,3,\dots ,n$.

*Constraint*: ${\mathbf{icoord}}=0$, $1$ or $2$.If ${\mathbf{method}}=3$ or $4$, ${\mathbf{icoord}}=2$

- result
- Type: System..::..Double%
*On exit*: the approximation to the integral $I$.

- esterr
- Type: System..::..Double%
*On exit*: an estimate of the modulus of the absolute error.

- nevals
- Type: System..::..Int32%
*On exit*: the number of function evaluations used.

- ifail
- Type: System..::..Int32%
*On exit*: ${\mathbf{ifail}}={0}$ unless the method detects an error or a warning has been flagged (see [Error Indicators and Warnings]).

# Description

d01ja calculates an approximation to the $n$-dimensional integral

where $S$ is the hypersphere

(the integrand function may also be defined in spherical coordinates). The algorithm is based on the Sag–Szekeres method (see Sag and Szekeres (1964)), applying the product trapezoidal formula after a suitable radial transformation. An improved transformation technique is developed: depending on the behaviour of the function and on the required accuracy, different transformations can be used, some of which are ‘double exponential’, as defined by Takahasi and Mori (1974). The resulting technique allows the method to deal with integrand singularities on the surface or at the centre of the sphere. When the estimated error of the approximation with mesh size $h$ is larger than the tolerated error, the trapezoidal formula with mesh size $h/2$ is calculated. A drawback of this method is the exponential growth of the number of function evaluations in the successive approximations (this number grows with a factor $\text{}\approx {2}^{n}$). This introduces the restriction $n\le 4$. Because the convergence rate of the successive approximations is normally better than linear, the error estimate is based on the linear extrapolation of the difference between the successive approximations (see Robinson and de Doncker (1981) and Roose and de Doncker (1981)). For further details of the algorithm, see Roose and de Doncker (1981).

$$I=\int \cdots {\int}_{S}F\left({x}_{1},\dots ,{x}_{n}\right)d{x}_{1}\cdots d{x}_{n}\text{, \hspace{1em}}2\le n\le 4\text{,}$$ |

$$\sqrt{\left({x}_{1}^{2}+\cdots +{x}_{n}^{2}\right)}\le \alpha <\infty $$ |

# References

Robinson I and de Doncker E (1981) Automatic computation of improper integrals over a bounded or unbounded planar region

*Computing***27**89–284Roose D and de Doncker E (1981) Automatic integration over a sphere

*J. Comput. Appl. Math.***7**203–224Sag T W and Szekeres G (1964) Numerical evaluation of high-dimensional integrals

*Math. Comput.***18**245–253Takahasi H and Mori M (1974)

*Double Exponential Formulas for Numerical Integration***9**Publ. RIMS, Kyoto University 721–741# Error Indicators and Warnings

**Note:**d01ja may return useful information for one or more of the following detected errors or warnings.

Errors or warnings detected by the method:

- ${\mathbf{ifail}}=1$
- The required accuracy cannot be achieved within a limiting number of function evaluations (which is set by the method).

- ${\mathbf{ifail}}=2$
- The required accuracy cannot be achieved because of round-off error.

- ${\mathbf{ifail}}=3$
- The required accuracy cannot be achieved because the maximum accuracy with respect to the machine constants x02aj and x02am has been attained. If this maximum accuracy is rather low (compared with x02aj), the cause of the problem is a severe singularity on the boundary or at the centre of the sphere. If ${\mathbf{method}}=0$, $1$ or $2$, then setting ${\mathbf{method}}=3$ or $4$ may help.

- ${\mathbf{ifail}}=4$
On entry, ${\mathbf{ndim}}<2$ or ${\mathbf{ndim}}>4$, or ${\mathbf{radius}}<0.0$, or ${\mathbf{method}}\ne 0$, $1$, $2$, $3$, $4$, $5$ or $6$, or ${\mathbf{icoord}}\ne 0$, $1$ or $2$, or ${\mathbf{icoord}}=2$ and ${\mathbf{method}}\ne 3$ or $4$, or ${\mathbf{method}}=3$ or $4$ and ${\mathbf{icoord}}\ne 2$.

# Accuracy

You can specify an absolute and/or a relative tolerance, setting epsa and epsr. The method attempts to calculate an approximation result such that

$$\left|I-{\mathbf{result}}\right|\le \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left\{{\mathbf{epsa}},{\mathbf{epsr}}\times \left|I\right|\right\}\text{.}$$ |

If $0\le {\mathbf{ifail}}\le 3$,
esterr returns an estimate of, but not necessarily a bound for, $\left|I-{\mathbf{result}}\right|$.

# Parallelism and Performance

None.

# Further Comments

# Timing

Timing depends on the integrand and the accuracy required.

# Spherical Polar Coordinates

Cartesian coordinates are related to the spherical polar coordinates by:

where $0<{\theta}_{\mathit{i}}<\pi $, for $\mathit{i}=1,2,\dots ,n-2$ and $0<{\theta}_{n-1}<2\pi $.

$$\begin{array}{cll}{x}_{1}& =& \rho .\mathrm{sin}\u200a{\theta}_{1}\cdots \mathrm{sin}\u200a{\theta}_{n-2}.\mathrm{sin}\u200a{\theta}_{n-1}\\ {x}_{2}& =& \rho .\mathrm{sin}\u200a{\theta}_{1}\cdots \mathrm{sin}\u200a{\theta}_{n-2}.\mathrm{cos}\u200a{\theta}_{n-1}\\ {x}_{3}& =& \rho .\mathrm{sin}\u200a{\theta}_{1}\cdots \mathrm{cos}\u200a{\theta}_{n-2}\\ \vdots & & \\ {x}_{n}& =& \rho .\mathrm{cos}\u200a{\theta}_{1}\end{array}$$ |

# Machine Dependencies

As a consequence of the transformation technique, the severity of the singularities which can be handled by d01ja depends on the precision and range of real numbers on the machine. ${\mathbf{method}}=3$ or $4$ must be used when the singularity on the surface is ‘severe’ in view of the requested accuracy and machine precision. In practice one has to set ${\mathbf{method}}=3$ or $4$ if d01ja terminates with ${\mathbf{ifail}}={3}$ when called with ${\mathbf{method}}=0$, $1$ or $2$.

When integrating a function with a severe singular behaviour on the surface of the sphere, the additional transformation $\rho =\alpha -\lambda $ helps to avoid the loss of significant figures due to round-off error in the calculation of the integration nodes which are very close to the surface. For these points, the value of $\lambda $ can be computed more accurately than the value of $\rho $. Naturally, care must be taken that the function subprogram does not contain expressions of the form $\alpha -\lambda $, which could cause a large round-off error in the calculation of the integrand at the boundary of the sphere.

Care should be taken to avoid underflow and/or overflow problems in the function subprogram, because some of the integration nodes used by d01ja may be very close to the surface or to the centre of the sphere.

Example:

- suppose the function
is to be integrated over the unit sphere, with ${\mathbf{method}}=3$ or $4$. Then icoord should be set to 2; the transformation $\rho =1-\lambda $ gives $f\left(\rho \right)={\left(2\lambda -{\lambda}^{2}\right)}^{-0.7}$; and f could be coded thus:
$$f\left(\rho \right)={\left(1-{\rho}^{2}\right)}^{-0.7}$$

Note that d01ja ensures that $\lambda ={\mathbf{x}}\left[0\right]>{\mathbf{x02am}}$, but underflow could occur in the computation of ${\lambda}^{2}$.

# Example

This example evaluates the integrals

where $\rho =\sqrt{{\displaystyle \sum _{i=1}^{n}}{x}_{i}^{2}}$, and $S$ is the unit sphere of dimension $n=2\text{ or}4$.

$$\int \cdots {\int}_{S}\frac{1}{\sqrt{1-{\rho}^{2}}}d{x}_{1}\cdots d{x}_{n}$$ |

The exact values (to $12$ decimal places) are $6.28318530718$ and $13.1594725348$.