The problem considered in this paper is the numerical evaluation of integrals
in the form
where
is an
-vector,
is
-vector and
is a collection of
-simplices.
There has been only limited work on practical algorithms
for this general problem. Most research has considered the case
,
where
is a triangle.
For this case there has been work on the development of integration rules
(reviewed in the paper by Lyness and Cools [25]),
and algorithms ([3,12,20,21,24] ).
For the case
,
where
is a tetrahedron, there has been more limited
rule ([8,30])
and algorithm [4] development work.
For
, the main rule
development papers are by Silvester [29],
Grundmann and Möller [19],
Keast [23] and Lyness and Genz [26].
Other rules are described and referenced in the books by Stroud [30]
and Engels [13] and the papers by Cools and Rabinowitz [8] and Cools [9].
The only general algorithm widely available [28] is an automatic
algorithm that uses Grundmann's and Möller's
rules, although an experimental algorithm was developed by Kahaner and
Wells [22]. A brief description of an earlier version of the algorithm
described in this paper was given by Genz [17]. The purposes of
this paper
are to give a detailed description of that algorithm, along with several
significant additions made since the original algorithm was described, and
to describe the implementation and testing of the algorithm as a part of
CUBPACK [10].
In the following sections the details of the algorithm for the
general problem will be described. We employ
a globally adaptive algorithm that has been used extensively
so only a brief description of this general algorithm
is given here.
The globally adaptive algorithm uses successive refinements or subdivisions
of
, where each subdivision is used to
provide a better approximation to
. These subdivisions are
designed to dynamically concentrate the computational work in the
subregions of
where the integrand
is most irregular, and thus
to adapt to the behavior of the integrand.
The general structure of the globally adaptive algorithm consists of a
sequence of stages. Each stage has
the following five main steps:
- Select a subregion with largest estimated error from the current
set of subregions.
- Divide the selected subregion.
- Apply a local cubature rule to any new subregions.
- Update the subregion set.
- Update the global integral and error estimates, and
check for termination.
The initial subregion set for the algorithm is
the original collection of simplices
.
The required input for such an algorithm is
,
the integrand
, a limit on the number of
values
allowed, and a requested error tolerance
. The algorithm terminates
when the estimated global error is less than
or further subdivision
would require too many
values.
Algorithms of this type have been extensively used for numerical
cubature over hyper-rectangular regions (see for example [1]), and
also for triangles (e.g. [3]) and tetrahedra [4].
Because procedures for the steps 1, 4 and 5
are the same for all regions, these have been
implemented as part of the basic CUBPACK framework [6,10] and will not be
discussed here.
Our implementation allows the user to make use of
specially designed high degree rules if
or
. These rules and
their error estimates are essentially the same as those used in the
TOMS algorithms 706 [3] and 720 [4], and their
inclusion in CUBPACK has already been described elsewhere [10].
The rest of this paper will focus on the choice of the local cubature rules,
error estimation, subdivision strategy, testing and
interface with the CUBPACK framework for the general simplex algorithm.
2003-02-17