USE PRECISION_MODEL
USE CUI
...
CALL CUBATR(
,
,
,
, V, RGTYPE, VALUE, ERROR, INFORM,
FUNVLS, EPSABS, EPSREL, RESTART,
MINPTS, MAXPTS, KEY, JOB, TUNE )
CUBATR computes approximations in the vector VALUE to the vector integral
where
is an
-vector of integrands and
is collection of
-dimensional simplices with vertices given in a 3-dimensional array
V. CUBATR attempts to compute VALUE with
I[
VALUE(
)
( EPSABS, EPSREL
),
for
,
where EPSABS and EPSREL are absolute and relative tolerances. A complete specification for all of the CUBATR parameters is given in [10]. In Appendix A we describe those that are specific to the simplex.
The simplex part of CUBPACK was tested using a combination of techniques.
The primary testing used a modified version of the package developed by
Genz [16]. This package was designed for testing cubature algorithms
for hyper-rectangles. We use two applications of the package. In the first
application, we used the same cubature problems generated by the package but
divided the
-dimensional hyper-rectangular cubature region into
equal
volume simplices in a standard way [26] and applied CUBATR to the
resulting collection of pieces.
Because of the increasingly larger numbers of simplices, we
found that testing in this manner was
feasible only for
. In the second application of the package, we
used the same cubature problems generated by the package but we transformed the
standard unit simplex to the hyper-rectangle for each problem, using a
constant Jacobian transformation described by Fang and Wang [15]:
If the hyper-rectangle
for a particular test problem has dimensions
, then the
transformation from a point
to a point
is defined by
, for
, with the Jacobian given by
.
The test families that we used are given in Table 3.
| Test Family | Attribute |
|
|
Oscillatory |
|
|
Internal Peak |
|
|
Corner Peak |
|
|
Gaussian |
|
|
The integration region for each family is the unit
-cube
.
To determine a particular test problem, the
parameters are
chosen uniformly random from
. Then, an additional set of parameters
are also chosen uniformly random from
. These parameters
are then all scaled by a constant
with
, where
is determined by the condition
,
with
and
fixed for each test family
. The tests that we
carried out used
and
. A series of tests were run
using both applications of the package and results from the test package were
used to determine what we believe are good values for the error estimation
parameter
as a function of the tuning parameter
. We also used
the tests to tune the subdivision procedure.
| Estimated Digits | Actual Digits | Reliability | Incorrect Digits | |
| Oscillatory | ( 3.4, 3.7) | ( 3.1, 3.5) | 0.26 | (0.2,0.3) |
| Product peak | ( 2.6, 2.7) | ( 2.7, 3.0) | 0.84 | (0.0,0.0) |
| Corner peak | ( 3.3, 3.4) | ( 3.2, 3.3) | 0.36 | (0.0,0.1) |
| Gaussian | ( 2.2, 2.2) | ( 2.8, 3.2) | 0.98 | (0.0,0.0) |
| C0 function | ( 1.8, 2.0) | ( 2.1, 2.5) | 0.78 | (0.0,0.0) |
Tables 4 and 5 contain results from two sample test runs (after tuning) with
the second application of the test package, with each run using 50 randomly
chosen integrands from each of the five integrand types, for
and KEY = 3
(degree 7). For each sample, CUBATR was called, with a maximum of 343000
values allowed, and a requested relative accuracy set at
to force the maximum number of
values to be used.
The entries in the tables of the form (a,b) are 97% confidence intervals for
the respective sample medians.
In these tables, the number of digits is
defined to be
of the relative error (estimated or actual).
Incorrect
digits are defined to the difference between estimated and actual digits,
for those cases where the estimated number of correct digits is
greater than the actual number of correct digits. The numbers in the
reliability column give the fraction of the times when the number of
estimated correct digits was less than the number of actual correct digits.
| Estimated Digits | Actual Digits | Reliability | Incorrect Digits | |
| Oscillatory | ( 2.6, 2.8) | ( 3.2, 3.6) | 1.00 | (0.0,0.0) |
| Product peak | ( 1.5, 1.7) | ( 2.6, 2.9) | 1.00 | (0.0,0.0) |
| Corner peak | ( 2.4, 2.5) | ( 3.2, 3.4) | 1.00 | (0.0,0.0) |
| Gaussian | ( 1.3, 1.4) | ( 2.6, 2.9) | 1.00 | (0.0,0.0) |
| C0 function | ( 0.7, 1.0) | ( 2.0, 2.2) | 1.00 | (0.0,0.0) |
The results in Tables 4 and 5 are typical of our tests
for
. For high levels of reliability the user must
be prepared to accept a more conservative error estimate. We also did extensive
testing of the different rules with polynomials for all key values for
to verify that we had a correct implementation.
Test programs have been successfully run on SUN (f95), Linux (NAGWare f95)
and Dec f90.
We did not complete any significant testing for singular integrals. The software is not expected to fail for singular integrals, but our experience has been that singular integrals can be more efficiently computed either by using appropriate transformations to remove the singularities, or by using extrapolation methods.