LATTICE_RULE Lattice Rules for Multiple Integration

LATTICE_RULE is a C++ library which approximates integrals in multiple dimensions using lattice rules.

The lattice rules are defined on the unit square, or in higher dimensions, on the unit hypercube.

Lattice rules are more suitable to integrands that are periodic, with period 1, in all variables. However, there are techniques that may be used when the integrand does not satisfy this requirement.

The performance of a lattice rule depends heavily on the choice of the generator vectors. Once the spatial dimension and the number of points have been chosen, there are techniques for finding a good generator vector.

The simplest lattice rules are called "rank 1" rules, and use a lattice generated by multiples of a single generator vector. More elaborate rules can be generated by using more generator vectors, up to the maximum, which is the dimension of the space.

Languages:

LATTICE_RULE is available in a C++ version and a FORTRAN90 version and a MATLAB version.

Related Programs:

FAURE, a C++ library which computes elements of a Faure quasirandom sequence.

GRID, a C++ library which computes elements of a grid dataset.

HALTON, a C++ library which computes elements of a Halton quasirandom sequence.

HAMMERSLEY, a C++ library which computes elements of a Hammersley quasirandom sequence.

HEX_GRID, a C++ library which computes elements of a hexagonal grid dataset.

IHS, a C++ library which computes elements of an improved distributed Latin hypercube dataset.

LATIN_CENTER, a C++ library which computes elements of a Latin Hypercube dataset, choosing center points.

LATIN_EDGE, a C++ library which computes elements of a Latin Hypercube dataset, choosing edge points.

LATIN_RANDOM, a C++ library which computes elements of a Latin Hypercube dataset, choosing points at random.

LCVT, a C++ library which computes a latinized Centroidal Voronoi Tessellation.

NIEDERREITER2, a C++ library which computes elements of a Niederreiter quasirandom sequence with base 2.

NINT_EXACTNESS, a C++ program which measures the polynomial exactness of a multidimensional quadrature rule.

NINTLIB, a C++ library which contains routines for numerical estimation of integrals in multiple dimensions.

QUADRATURE_RULES, a dataset directory which contains sets of files that define quadrature rules over various 1D intervals or multidimensional hypercubes.

SOBOL, a C++ library which computes elements of a Sobol quasirandom sequence.

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 test functions for multi-dimensional quadrature routines.

UNIFORM, a C++ library which computes elements of a uniform pseudorandom sequence.

Reference:

1. Seymour Haber,
Parameters for Integrating Periodic Functions of Several Variables,
Mathematics of Computation,
Volume 41, Number 163, July 1983, pages 115-129.
2. Albert Nijenhuis, Herbert Wilf,
Combinatorial Algorithms for Computers and Calculators,
Second Edition,
ISBN: 0-12-519260-6,
LC: QA164.N54.
3. Ian Sloan, Stephen Joe,
Lattice Methods for Multiple Integration,
Oxford University Press, 1994,
ISBN: 0198534728,
LC: QA311.S56

List of Routines:

• E_01_2D is the exact integral of 2d test function #1.
• F_01_2D is the 2D test function #1.
• F2 evaluates a function of a scalar used in defining P2(Q).
• F20_S evaluates a function of a vector used in defining P2(Q).
• FIBONACCI returns the Fibonacci number of given index.
• FIBONACCI_LATTICE_B applies an optimal Fibonacci lattice integration rule in 2D.
• FIBONACCI_LATTICE_Q applies a Fibonacci lattice integration rule in 2D.
• FIBONACCI_LATTICE_Q_NODES returns Fibonacci lattice nodes in 2D.
• FIBONACCI_LATTICE_Q1 applies a Fibonacci lattice integration rule in 2D.
• FIBONACCI_LATTICE_Q2 applies a Fibonacci lattice integration rule in 2D.
• FIBONACCI_LATTICE_Q3 applies a Fibonacci lattice integration rule in 2D.
• FIBONACCI_LATTICE_T applies a symmetric Fibonacci lattice integration rule in 2D.
• FIND_Z20 finds the appropriate Z vector to minimize P2(QS).
• GRAY_NEXT generates the next Gray code by switching one item at a time.
• I4_HUGE returns a "huge" I4.
• I4_MAX returns the maximum of two I4's.
• I4_MIN returns the minimum of two I4's.
• I4_POWER returns the value of I^J.
• I4VEC_PRINT prints an I4VEC.
• LATTICE applies a lattice integration rule.
• LATTICE_NP0 applies a lattice integration rule to a nonperiodic function.
• LATTICE_NP1 applies a lattice integration rule to a nonperiodic function.
• LATTICE_PRINT prints the points in a lattice rule.
• MONTE_CARLO applies a Monte Carlo integration rule.
• PRIME returns any of the first PRIME_MAX prime numbers.
• R8_ABS returns the absolute value of an R8.
• R8_HUGE returns a "huge" R8.
• R8MAT_TRANSPOSE_PRINT prints an R8MAT, transposed.
• R8MAT_TRANSPOSE_PRINT_SOME prints some of an R8MAT, transposed.
• R8VEC_UNIFORM_01 returns a unit pseudorandom R8VEC.
• S_LEN_TRIM returns the length of a string to the last nonblank.
• TIMESTAMP prints the current YMDHMS date as a time stamp.
• TUPLE_NEXT computes the next element of a tuple space.

You can go up one level to the C++ source codes.

Last revised on 23 November 2008.