QUADRATURE_TEST\
Quadrature Rule Applied to Test Integrals {#quadrature_test-quadrature-rule-applied-to-test-integrals align=”center”}
=========================================
QUADRATURE_TEST is a C++ program which reads three files that
define a quadrature rule, applies the quadrature rule to a set of test
integrals, and reports the results.
The quadrature rule is defined by three text files:
- the “X” file lists the abscissas (N rows, M columns);
- the “W” file lists the weights (N rows);
- the “R” file lists the integration region corners (2 rows, M
columns);
For more on quadrature rules, see the QUADRATURE_RULES listing
below.
The test integrals come from the TEST_NINT library.
The list of integrand functions includes:
- f(x) = ( sum ( x(1:m) ) )**2;
- f(x) = ( sum ( 2 * x(1:m) - 1 ) )**4;
- f(x) = ( sum ( x(1:m) ) )**5;
- f(x) = ( sum ( 2 * x(1:m) - 1 ) )**6;
- f(x) = 1 / ( 1 + sum ( 2 * x(1:m) ) );
- f(x) = product ( 2 * abs ( 2 * x(1:m) - 1 ) );
- f(x) = product ( pi / 2 ) * sin ( pi * x(1:m) );
- f(x) = ( sin ( (pi/4) * sum ( x(1:m) ) ) )**2;
- f(x) = exp ( sum ( c(1:m) * x(1:m) ) );
- f(x) = sum ( abs ( x(1:m) - 0.5 ) );
- f(x) = exp ( sum ( abs ( 2 * x(1:m) - 1 ) ) );
- f(x) = product ( 1 <= i <= m ) ( i * cos ( i * x(i) ) );
- f(x) = product ( 1 <= i <= m ) t(n(i))(x(i)), t(n(i)) is a
Chebyshev polynomial;
- f(x) = sum ( 1 <= i <= m ) (-1)**i * product ( 1 <= j
<= i ) x(j);
- f(x) = product ( 1 <= i <= order ) x(mod(i-1,m)+1);
- f(x) = sum ( abs ( x(1:m) - x0(1:m) ) );
- f(x) = sum ( ( x(1:m) - x0(1:m) )**2 );
- f(x) = 1 inside an m-dimensional sphere around x0(1:m), 0 outside;
- f(x) = product ( sqrt ( abs ( x(1:m) - x0(1:m) ) ) );
- f(x) = ( sum ( x(1:m) ) )**power;
- f(x) = c * product ( x(1:m)\^e(1:m) ) on the surface of an
m-dimensional unit sphere;
- f(x) = c * product ( x(1:m)\^e(1:m) ) in an m-dimensional ball;
- f(x) = c * product ( x(1:m)\^e(1:m) ) in the unit m-dimensional
simplex;
- f(x) = product ( abs ( 4 * x(1:m) - 2 ) + c(1:m) ) / ( 1 + c(1:m) )
);
- f(x) = exp ( c * product ( x(1:m) ) );
- f(x) = product ( c(1:m) * exp ( - c(1:m) * x(1:m) ) );
- f(x) = cos ( 2 * pi * r + sum ( c(1:m) * x(1:m) ) ),\
Genz “Oscillatory”;
- f(x) = 1 / product ( c(1:m)**2 + (x(1:m) - x0(1:m))**2),\
Genz “Product Peak”;
- f(x) = 1 / ( 1 + sum ( c(1:m) * x(1:m) ) )**(m+r),\
Genz “Corner Peak”;
- f(x) = exp(-sum(c(1:m)**2 * ( x(1:m) - x0(1:m))**2 ) ),\
Genz “Gaussian”;
- f(x) = exp ( - sum ( c(1:m) * abs ( x(1:m) - x0(1:m) ) ) ), Genz
“Continuous”;
- f(x) = exp(sum(c(1:m)*x(1:m)) for x(1:m) <= x0(1:m), 0
otherwise,\
Genz “Discontinuous”;
Usage: {#usage align=”center”}
quadrature_test prefix
- prefix
- the common prefix for the files containing the abscissa (X),
weight (W) and region (R) information of the quadrature rule;
If the arguments are not supplied on the command line, the program will
prompt for them.
Licensing: {#licensing align=”center”}
The computer code and data files described and made available on this
web page are distributed under the GNU LGPL
license.
Languages: {#languages align=”center”}
QUADRATURE_TEST is available in a C++
version and a
FORTRAN90 version and
a MATLAB version.
GSL, a C++ library which includes routines
for estimating multidimensional integrals.
INTEGRAL_TEST, a
FORTRAN90 program which uses test integrals to evaluate sets of
quadrature points.
NINT_EXACTNESS, a
C++ program which demonstrates how to measure the polynomial exactness
of a multidimensional quadrature rule.
NINTLIB, a C++ library which
numerically estimates integrals in multiple dimensions.
PRODUCT_RULE, a C++
program which creates a multidimensional quadrature rule as a product of
one dimensional rules.
QUADRATURE_RULES,
a dataset directory which contains a description and examples of
quadrature rules defined by a set of “X”, “W” and “R” files.
STROUD, a C++ library which contains
quadrature rules for a variety of unusual areas, surfaces and volumes in
2D, 3D and N-dimensions.
TEST_NINT, a C++ library
which defines a set of integrand functions to be used for testing
multidimensional quadrature rules and routines.
TESTPACK, a C++ library which
defines a set of integrands used to test multidimensional quadrature.
Reference: {#reference align=”center”}
- JD Beasley, SG Springer,\
Algorithm AS 111: The Percentage Points of the Normal Distribution,\
Applied Statistics,\
Volume 26, 1977, pages 118-121.
- Paul Bratley, Bennett Fox, Harald Niederreiter,\
Implementation and Tests of Low-Discrepancy Sequences,\
ACM Transactions on Modeling and Computer Simulation,\
Volume 2, Number 3, July 1992, pages 195-213.
- Roger Broucke,\
Algorithm 446: Ten Subroutines for the Manipulation of Chebyshev
Series,\
Communications of the ACM,\
Volume 16, 1973, pages 254-256.
- William Cody, Kenneth Hillstrom,\
Chebyshev Approximations for the Natural Logarithm of the Gamma
Function, Mathematics of Computation,\
Volume 21, Number 98, April 1967, pages 198-203.
- Richard Crandall,\
Projects in Scientific Computing,\
Springer, 2005,\
ISBN: 0387950095,\
LC: Q183.9.C733.
- Philip Davis, Philip Rabinowitz,\
Methods of Numerical Integration,\
Second Edition,\
Dover, 2007,\
ISBN: 0486453391,\
LC: QA299.3.D28.
- Gerald Folland,\
How to Integrate a Polynomial Over a Sphere,\
American Mathematical Monthly,\
Volume 108, Number 5, May 2001, pages 446-448.
- Leslie Fox, Ian Parker,\
Chebyshev Polynomials in Numerical Analysis,\
Oxford Press, 1968,\
LC: QA297.F65.
- Alan Genz,\
Testing Multidimensional Integration Routines,\
in Tools, Methods, and Languages for Scientific and Engineering
Computation,\
edited by B Ford, JC Rault, F Thomasset,\
North-Holland, 1984, pages 81-94,\
ISBN: 0444875700,\
LC: Q183.9.I53.
- Alan Genz,\
A Package for Testing Multiple Integration Subroutines,\
in Numerical Integration: Recent Developments, Software and
Applications,\
edited by Patrick Keast, Graeme Fairweather,\
Reidel, 1987, pages 337-340,\
ISBN: 9027725144,\
LC: QA299.3.N38.
- Kenneth Hanson,\
Quasi-Monte Carlo: halftoning in high dimensions?\
in Computatinal Imaging,\
Edited by CA Bouman, RL Stevenson,\
Proceedings SPIE,\
Volume 5016, 2003, pages 161-172.
- John Hart, Ward Cheney, Charles Lawson, Hans Maehly, Charles
Mesztenyi, John Rice, Henry Thatcher, Christoph Witzgall,\
Computer Approximations,\
Wiley, 1968,\
LC: QA297.C64.
- Stephen Joe, Frances Kuo\
Remark on Algorithm 659: Implementing Sobol’s Quasirandom Sequence
Generator,\
ACM Transactions on Mathematical Software,\
Volume 29, Number 1, March 2003, pages 49-57.
- David Kahaner, Cleve Moler, Steven Nash,\
Numerical Methods and Software,\
Prentice Hall, 1989,\
ISBN: 0-13-627258-4,\
LC: TA345.K34.
- Bradley Keister,\
Multidimensional Quadrature Algorithms,\
Computers in Physics,\
Volume 10, Number 2, March/April, 1996, pages 119-122.
- Arnold Krommer, Christoph Ueberhuber,\
Numerical Integration on Advanced Compuer Systems,\
Springer, 1994,\
ISBN: 3540584102,\
LC: QA299.3.K76.
- Anargyros Papageorgiou, Joseph Traub,\
Faster Evaluation of Multidimensional Integrals,\
Computers in Physics,\
Volume 11, Number 6, November/December 1997, pages 574-578.
- Thomas Patterson,\
On the Construction of a Practical Ermakov-Zolotukhin Multiple
Integrator,\
in Numerical Integration: Recent Developments, Software and
Applications,\
edited by Patrick Keast and Graeme Fairweather,\
D. Reidel, 1987, pages 269-290.
- Arthur Stroud,\
Approximate Calculation of Multiple Integrals,\
Prentice Hall, 1971,\
ISBN: 0130438936,\
LC: QA311.S85.
- Arthur Stroud, Don Secrest,\
Gaussian Quadrature Formulas,\
Prentice Hall, 1966,\
LC: QA299.4G3S7.
- Xiaoqun Wang, Kai-Tai Fang,\
The Effective Dimension and quasi-Monte Carlo Integration,\
Journal of Complexity,\
Volume 19, pages 101-124, 2003.
Source Code: {#source-code align=”center”}
Examples and Tests: {#examples-and-tests align=”center”}
CC_D2_LEVEL4 is a Clenshaw-Curtis sparse grid quadrature rule in
dimension 2 of level 4, 65 points.
CC_D2_LEVEL5 is a Clenshaw-Curtis sparse grid quadrature rule in
dimension 2 of level 5, 145 points.
CC_D6_LEVEL0 is a Clenshaw-Curtis sparse grid quadrature rule in
dimension 6 of level 0, 1 point.
CC_D6_LEVEL1 is a Clenshaw-Curtis sparse grid quadrature rule in
dimension 6 of level 1, 13 points.
CC_D6_LEVEL2 is a Clenshaw-Curtis sparse grid quadrature rule in
dimension 6 of level 2, 85 points.
CC_D6_LEVEL3 is a Clenshaw-Curtis sparse grid quadrature rule in
dimension 6 of level 3, 389 points.
CC_D6_LEVEL4 is a Clenshaw-Curtis sparse grid quadrature rule in
dimension 6 of level 4, 1457 points.
CC_D6_LEVEL5 is a Clenshaw-Curtis sparse grid quadrature rule in
dimension 6 of level 5, 4865 points.
List of Routines: {#list-of-routines align=”center”}
- MAIN is the main program for QUADRATURE_TEST.
- CH_EQI is true if two characters are equal, disregarding case.
- CH_TO_DIGIT returns the integer value of a base 10 digit.
- DTABLE_DATA_READ reads the data from a DTABLE file.
- DTABLE_HEADER_READ reads the header from a DTABLE file.
- FILE_COLUMN_COUNT counts the number of columns in the first
line of a file.
- FILE_ROW_COUNT counts the number of row records in a file.
- S_CAT concatenates two strings to make a third string.
- S_TO_I4 reads an I4 from a string.
- S_TO_R8 reads an R8 value from a string.
- S_TO_R8VEC reads an R8VEC from a string.
- S_WORD_COUNT counts the number of “words” in a string.
You can go up one level to the C++ source codes.
Last revised on 06 June 2007.