SPARSE_GRID_HW
Sparse Grids for Uniform and Normal Weights
Heiss and Winschel
SPARSE_GRID_HW
is a FORTRAN90 library which
can compute sparse grids for multidimensional integration,
based on 1D rules for the unit interval with unit weight function,
or for the real line with the GaussHermite weight function.
The original MATLAB code is by Florian Heiss and Viktor Winschel.
The original version of this software, and other information,
is available at
http://sparsegrids.de .
Four builtin 1D families of quadrature rules are supplied, and the
user can extend the package by supplying any family of 1D quadrature
rules.
The builtin families are identified by a 3letter key which is also
the name of the routine that returns members of the family:

gqu, standard GaussLegendre quadrature rules, for
the unit interval [0,1], with weight function w(x) = 1.

gqn, standard GaussHermite quadrature rules, for
the infinite interval (oo,+oo), with weight function
w(x) = exp(x*x/2)/sqrt(2*pi).

kpu, KronrodPatterson quadrature rules, for
the unit interval [0,1], with weight function w(x) = 1.
These sacrifice some of the precision of gqu in
order to provide a family of nested rules.

kpn, KronrodPatterson quadrature rules, for
the infinite interval (oo,+oo), with weight function
w(x) = exp(x*x/2)/sqrt(2*pi).
These sacrifice some of the precision of gqn in
order to provide a family of nested rules.
The user can build new sparse grids by supplying a 1D quadrature family.
Examples provided include:

cce_order, ClenshawCurtis Exponential quadrature rules, for
the unit interval [0,1], with weight function w(x) = 1.
The Kth call returns the rule of order 1
if K is 1, and 2*(K1)+1 otherwise.

ccl_order, ClenshawCurtis Linear quadrature rules, for
the unit interval [0,1], with weight function w(x) = 1.
The Kth call returns the rule of order 2*K1.

ccs_order, slow ClenshawCurtis Slow quadrature rules, for
the unit interval [0,1], with weight function w(x) = 1.
The Kth call returns the rule of order 1
if K is 1, and otherwise a rule whose order N has the
form 2^E+1 and is the lowest such order with precision at least 2*K1.
Licensing:
The computer code and data files described and made available on this web page
are distributed under
the GNU LGPL license.
Languages:
SPARSE_GRID_HW is available in
a C version and
a C++ version and
a FORTRAN90 version and
a MATLAB version
Related Data and Programs:
GRID_DISPLAY,
a MATLAB library which
can display a 1D, 2D or 3D grid.
NINT_EXACTNESS_MIXED,
a FORTRAN90 program which
measures the polynomial exactness of a multidimensional quadrature rule
based on a mixture of 1D quadrature rule factors.
PRODUCT_RULE,
a FORTRAN90 program which
constructs a product quadrature rule from identical 1D factor rules.
QUADRULE,
a FORTRAN90 library which
defines quadrature rules for various intervals and weight functions.
SANDIA_RULES,
a FORTRAN90 library which
generates Gauss quadrature rules of various orders and types.
SANDIA_SPARSE,
a FORTRAN90 library which
computes the points and weights of a Smolyak sparse
grid, based on a variety of 1dimensional quadrature rules.
SMOLPACK,
a C library which
implements Novak and Ritter's method for estimating the integral
of a function over a multidimensional hypercube using sparse grids,
by Knut Petras.
SPARSE_GRID_HERMITE,
a FORTRAN90 library which
creates sparse grids based on GaussHermite rules.
SPINTERP,
a MATLAB library which
carries out piecewise multilinear hierarchical sparse grid interpolation;
an earlier version of this software is ACM TOMS Algorithm 847,
by Andreas Klimke;
Author:
Original MATLAB code by Florian Heiss and Viktor Winschel.
FORTRAN90 version by John Burkardt.
Reference:

Alan Genz, Bradley Keister,
Fully symmetric interpolatory rules for multiple integrals
over infinite regions with Gaussian weight,
Journal of Computational and Applied Mathematics,
Volume 71, 1996, pages 299309.

Florian Heiss, Viktor Winschel,
Likelihood approximation by numerical integration on sparse grids,
Journal of Econometrics,
Volume 144, Number 1, May 2008, pages 6280.

Thomas Patterson,
The optimal addition of points to quadrature formulae,
Mathematics of Computation,
Volume 22, Number 104, October 1968, pages 847856.

Knut Petras,
Smolyak Cubature of Given Polynomial Degree with Few Nodes
for Increasing Dimension,
Numerische Mathematik,
Volume 93, Number 4, February 2003, pages 729753.
Source Code:
Examples and Tests:
List of Routines:

CCE_ORDER: order of a Clenshaw Curtis Exponential (CCE) rule from the level.

CCL_ORDER: order of a Clenshaw Curtis Linear (CCL) quadrature rule.

CCS_ORDER: order of a Clenshaw Curtis Slow (CCS) quadrature rule.

CC computes a Clenshaw Curtis (CC) quadrature rule based on order.

FN_INTEGRAL is the integral of the Hermite test function.

FN_VALUE is a Hermite test function.

FU_INTEGRAL is the integral of the test function for the [0,1]^D interval.

FU_VALUE is a sample function for the [0,1]^D interval.

GET_SEQ generates all positive integer Dvectors that sum to NORM.

GQN provides data for Gauss quadrature with a normal weight.

GQN_ORDER computes the order of a GQN rule from the level.

GQN2_ORDER computes the order of a GQN rule from the level.

GQU provides data for Gauss quadrature with a uniform weight.

GQU_ORDER computes the order of a GQU rule from the level.

I4_CHOOSE computes the binomial coefficient C(N,K) as an I4.

I4_FACTORIAL2 computes the double factorial function.

I4_MOP returns the Ith power of 1 as an I4 value.

I4MAT_PRINT prints an I4MAT.

I4MAT_PRINT_SOME prints some of an I4MAT.

I4VEC_CUM0 computes the cumulutive sum of the entries of an I4VEC.

I4VEC_PRINT prints an I4VEC.

I4VEC_PRODUCT returns the product of the entries of an I4VEC.

I4VEC_SUM returns the sum of the entries of an I4VEC.

I4VEC_TRANSPOSE_PRINT prints an I4VEC "transposed".

KPN provides data for KronrodPatterson quadrature with a normal weight.

KPN_ORDER computes the order of a KPN rule from the level.

KPU provides data for KronrodPatterson quadrature with a uniform weight.

KPU_ORDER computes the order of a KPU rule from the level.

NUM_SEQ returns the number of compositions of the integer N into K parts.

NWSPGR generates nodes and weights for sparse grid integration.

NWSPGR_SIZE determines the size of a sparse grid rule.

QUAD_RULE_PRINT prints a multidimensional quadrature rule.

R8_UNIFORM_01 returns a unit pseudorandom R8.

R8CVV_OFFSET determines the row offsets of an R8CVV.

R8CVV_PRINT prints an R8CVV.

R8CVV_RGET gets row I from an R8CVV.

R8CVV_RSET sets row I from an R8CVV.

R8MAT_NORMAL_01 returns a unit pseudonormal R8MAT.

R8MAT_TRANSPOSE_PRINT prints an R8MAT, transposed.

R8MAT_TRANSPOSE_PRINT_SOME prints some of an R8MAT, transposed.

R8MAT_UNIFORM_01 fills an R8MAT with unit pseudorandom numbers.

R8VEC_COPY copies an R8VEC.

R8VEC_DIRECT_PRODUCT creates a direct product of R8VEC's.

R8VEC_DIRECT_PRODUCT2 creates a direct product of R8VEC's.

R8VEC_NORMAL_01 returns a unit pseudonormal R8VEC.

R8VEC_PRINT prints an R8VEC.

R8VEC_TRANSPOSE_PRINT prints an R8VEC "transposed".

R8VEC_UNIFORM_01 returns a unit pseudorandom R8VEC.

RULE_ADJUST adjusts a 1D quadrature rule from [A,B] to [C,D].

RULE_SORT sorts a multidimensional quadrature rule.

SORT_HEAP_EXTERNAL externally sorts a list of items into ascending order.

SYMMETRIC_SPARSE_SIZE sizes a symmetric sparse rule.

TENSOR_PRODUCT generates a tensor product quadrature rule.

TENSOR_PRODUCT_CELL generates a tensor product quadrature rule.

TIMESTAMP prints the current YMDHMS date as a time stamp.
You can go up one level to
the FORTRAN90 source codes.
Last revised on 26 February 2014.