sandia_rules
sandia_rules,
a MATLAB code which
generates a variety of quadrature rules of various orders.
This library is used, in turn, by several other libraries, including
sparse_grid_mixed() and sgmga(). This means that a program
that calls any of those libraries must have access to a
copy of sandia_rules() as well.
Name |
Usual domain |
Weight function |
Gauss-Legendre |
[-1,+1] |
1 |
Clenshaw-Curtis |
[-1,+1] |
1 |
Fejer Type 2 |
[-1,+1] |
1 |
Gauss-Chebyshev 1 |
[-1,+1] |
1/sqrt(1-x2) |
Gauss-Chebyshev 2 |
[-1,+1] |
sqrt(1-x2) |
Gauss-Gegenbauer |
[-1,+1] |
(1-x2)alpha |
Gauss-Jacobi |
[-1,+1] |
(1-x)alpha (1+x)beta |
Gauss-Laguerre |
[0,+oo) |
e-x |
Generalized Gauss-Laguerre |
[0,+oo) |
xalpha e-x |
Gauss-Hermite |
(-oo,+oo) |
e-x*x |
Generalized Gauss-Hermite |
(-oo,+oo) |
|x|alpha e-x*x |
Hermite Genz-Keister |
(-oo,+oo) |
e-x*x |
Newton-Cotes-Closed |
[-1,+1] |
1 |
Newton-Cotes-Open |
[-1,+1] |
1 |
Newton-Cotes-Open-Half |
[-1,+1] |
1 |
For example, a Gauss-Gegenbauer quadrature rule is used to approximate:
Integral ( -1 <= x <= +1 ) f(x) (1-x^2)^alpha dx
where alpha is a real parameter chosen by the user.
The approximation to the integral is formed by computing a weighted sum
of function values at specific points:
Sum ( 1 <= i <= n ) w(i) * f(x(i))
The quantities x are the abscissas of the quadrature rule,
the values w are the weights of the quadrature rule, and the
number of terms n in the sum is the order of the quadrature rule.
As a matter of convenience, most of the quadrature rules are available
through three related functions:
-
name_COMPUTE returns points X and weights W;
-
name_COMPUTE_POINTS returns points X;
-
name_COMPUTE_WEIGHTS returns weights W;
In some cases, it is possible to compute points or weights separately;
in other cases, the point and weight functions actually call the
underlying function for the entire rule, and then discard the unrequested
information.
Some of these quadrature rules expect a parameter ALPHA, and perhaps also
a parameter BETA, in order to fully define the rule. Therefore, the
argument lists of these functions vary. They always include the input
quantity ORDER, but may have one or two additional inputs. In order to offer
a uniform interface, there is also a family of functions with a standard
set of input arguments, ORDER, NP, and P. Here NP is parameter counter,
and P is the parameter value vector P. Using this interface, it is possible
to call all the quadrature functions with the same argument list.
The uniform interface functions can be identified by the
suffix _NP that appears in their names. Generally, these functions
"unpack" the parameter vector where needed, and then call the corresponding
basic function. Of course, for many rules NP is zero and P may be a null
pointer.
-
name_COMPUTE_NP ( ORDER, NP, P, X, W )
unpacks parameters, calls name_COMPUTE, returns points X and weights W;
-
name_COMPUTE_POINTS_NP ( ORDER, NP, P, X )
unpacks parameters, calls name_COMPUTE_POINTS, returns points X;
-
name_COMPUTE_WEIGHTS_NP ( ORDER, NP, P, W )
unpacks parameters, calls name_COMPUTE_WEIGHTS, returns weights W;
Licensing:
The computer code and data files described and made available on this web page
are distributed under
the GNU LGPL license.
Languages:
sandia_rules is available in
a C version and
a C++ version and
a FORTRAN90 version and
a MATLAB version.
Related Data and Programs:
sandia_rules_test
chebyshev1_rule,
a MATLAB program which
can compute and print a Gauss-Chebyshev type 1 quadrature rule.
chebyshev2_rule,
a MATLAB program which
can compute and print a Gauss-Chebyshev type 2 quadrature rule.
gegenbauer_rule,
a MATLAB program which
can compute and print a Gauss-Gegenbauer quadrature rule.
gen_hermite_rule,
a MATLAB program which
can compute and print a generalized Gauss-Hermite quadrature rule.
gen_laguerre_rule,
a MATLAB program which
can compute and print a generalized Gauss-Laguerre quadrature rule.
HERMITE_RULE,
a MATLAB program which
can compute and print a Gauss-Hermite quadrature rule.
INTLIB,
a FORTRAN90 library which
contains routines for numerical estimation of integrals in 1D.
JACOBI_RULE,
a MATLAB program which
can compute and print a Gauss-Jacobi quadrature rule.
LAGUERRE_RULE,
a MATLAB program which
can compute and print a Gauss-Laguerre quadrature rule.
LEGENDRE_RULE,
a MATLAB program which
can compute and print a Gauss-Legendre quadrature rule.
PRODUCT_RULE,
a MATLAB program which
constructs a product rule
from 1D factor rules.
quad_rule,
a MATLAB library which
defines 1-dimensional quadrature rules.
SGMGA,
a MATLAB library which
creates sparse grids based on a mixture of 1D quadrature rules,
allowing anisotropic weights for each dimension.
SPARSE_GRID_MIXED,
a MATLAB library which
creates a sparse grid dataset based on a mixed set of 1D factor rules.
Reference:
-
Milton Abramowitz, Irene Stegun,
Handbook of Mathematical Functions,
National Bureau of Standards, 1964,
ISBN: 0-486-61272-4,
LC: QA47.A34.
-
William Cody,
An Overview of Software Development for Special Functions,
in Numerical Analysis Dundee, 1975,
edited by GA Watson,
Lecture Notes in Mathematics 506,
Springer, 1976.
-
Philip Davis, Philip Rabinowitz,
Methods of Numerical Integration,
Second Edition,
Dover, 2007,
ISBN: 0486453391,
LC: QA299.3.D28.
-
Sylvan Elhay, Jaroslav Kautsky,
Algorithm 655: IQPACK, FORTRAN Subroutines for the Weights of
Interpolatory Quadrature,
ACM Transactions on Mathematical Software,
Volume 13, Number 4, December 1987, pages 399-415.
-
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 299-309.
-
John Hart, Ward Cheney, Charles Lawson, Hans Maehly,
Charles Mesztenyi, John Rice, Henry Thatcher,
Christoph Witzgall,
Computer Approximations,
Wiley, 1968,
LC: QA297.C64.
-
Knut Petras,
Smolyak Cubature of Given Polynomial Degree with Few Nodes
for Increasing Dimension,
Numerische Mathematik,
Volume 93, Number 4, February 2003, pages 729-753.
-
Arthur Stroud, Don Secrest,
Gaussian Quadrature Formulas,
Prentice Hall, 1966,
LC: QA299.4G3S7.
-
Shanjie Zhang, Jianming Jin,
Computation of Special Functions,
Wiley, 1996,
ISBN: 0-471-11963-6,
LC: QA351.C45
Source Code:
-
binary_vector_next.m
generates the next binary vector.
-
ccn_compute.m
compute a nested Clenshaw-Curtis rule.
-
ccn_compute_np.m
compute a nested Clenshaw-Curtis rule.
-
ccn_compute_points.m
compute the points of a nested Clenshaw-Curtis rule.
-
ccn_compute_points_np.m
compute the points of a nested Clenshaw-Curtis rule.
-
ccn_compute_weights.m
compute the weights of a nested Clenshaw-Curtis rule.
-
ccn_compute_weights_np.m
compute the weights of a nested Clenshaw-Curtis rule.
-
chebyshev1_compute.m
computes a Gauss-Chebyshev type 1 quadrature rule.
-
chebyshev1_integral.m
evaluates a monomial Chebyshev type 1 integral.
-
chebyshev2_compute.m
computes a Gauss-Chebyshev type 2 quadrature rule.
-
chebyshev2_integral.m
evaluates a monomial Chebyshev type 2 integral.
-
clenshaw_curtis_compute.m
computes a Clenshaw Curtis quadrature rule.
-
clenshaw_curtis_compute_points.m
computes Clenshaw Curtis abscissas.
-
clenshaw_curtis_compute_points_np.m
computes Clenshaw Curtis abscissas.
-
clenshaw_curtis_compute_weights.m
computes Clenshaw Curtis weights.
-
clenshaw_curtis_compute_weights_np.m
computes Clenshaw Curtis weights.
-
comp_next.m
computes the compositions of the integer N into K parts.
-
dif_deriv.m,
computes the derivative of a polynomial in divided difference form.
-
dif_shift_x.m,
replaces one abscissa of a divided difference table with a new one.
-
dif_shift_zero.m,
shifts a divided difference table so that all abscissas are zero.
-
dif_to_r8poly.m,
converts a divided difference table to standard polynomial form.
-
fejer2_compute.m
computes a Fejer Type 2 quadrature rule.
-
fejer2_compute_points.m
computes Fejer Type 2 abscissas.
-
fejer2_compute_points_np.m
computes Fejer Type 2 abscissas.
-
fejer2_compute_weights.m
computes Fejer Type 2 weights.
-
fejer2_compute_weights_np.m
computes Fejer Type 2 weights.
-
gegenbauer_compute.m
computes a Gauss-Gegenbauer quadrature rule.
-
gegenbauer_integral.m
evaluates the integral of a monomial with Gegenbauer weight.
-
gegenbauer_recur.m
finds the value and derivative of a Gegenbauer polynomial.
-
gegenbauer_root.m
improves an approximate root of a Gegenbauer polynomial.
-
gen_hermite_compute.m
computes a generalized Gauss-Hermite rule.
-
gen_hermite_compute_points.m
computes Generalized Hermite abscissas.
-
gen_hermite_compute_points_np.m
computes Generalized Hermite abscissas.
-
gen_hermite_compute_weights.m
computes Generalized Hermite weights.
-
gen_hermite_compute_weights_np.m
computes Generalized Hermite weights.
-
gen_hermite_dr_compute.m
computes a generalized Gauss-Hermite rule.
-
gen_hermite_integral.m
evaluates a monomial generalized Hermite integral.
-
gen_laguerre_compute.m
computes a generalized Gauss-Laguerre quadrature rule.
-
gen_laguerre_compute_points.m
computes Generalized Laguerre abscissas
-
gen_laguerre_compute_points_np.m
computes Generalized Laguerre abscissas
-
gen_laguerre_compute_weights.m
computes Generalized Laguerre weights.
-
gen_laguerre_compute_weights_np.m
computes Generalized Laguerre weights.
-
gen_laguerre_integral.m
evaluates a monomial genearlized Laguerre integral.
-
gen_laguerre_ss_compute.m
computes a generalized Gauss-Laguerre quadrature rule.
-
gen_laguerre_ss_recur.m
evaluates a generalized Laguerre polynomial.
-
gen_laguerre_ss_root.m
seeks roots of a generalized Laguerre polynomial.
-
hc_compute_points_from_weights.m
Hermite-Cubic weights, user-supplied points.
-
hcc_compute.m
computes a Hermite-Cubic-Chebyshev-Spacing quadrature rule.
-
hcc_compute_np.m
computes a Hermite-Cubic-Chebyshev-Spacing quadrature rule.
-
hcc_compute_points.m
computes Hermite-Cubic-Chebyshev-Spacing abscissas.
-
hcc_compute_points_np.m
computes Hermite-Cubic-Chebyshev-Spacing abscissas.
-
hcc_compute_weights.m
computes Hermite-Cubic-Chebyshev-Spacing weights.
-
hcc_compute_weights_np.m
computes Hermite-Cubic-Chebyshev-Spacing weights.
-
hce_compute.m
computes a Hermite-Cubic-Equal-Spacing quadrature rule.
-
hce_compute_np.m
computes a Hermite-Cubic-Equal-Spacing quadrature rule.
-
hce_compute_points.m
computes Hermite-Cubic-Equal-Spacing abscissas.
-
hce_compute_points_np.m
computes Hermite-Cubic-Equal-Spacing abscissas.
-
hce_compute_weights.m
computes Hermite-Cubic-Equal-Spacing weights.
-
hce_compute_weights_np.m
computes Hermite-Cubic-Equal-Spacing weights.
-
hermite_compute.m
computes a Gauss-Hermite quadrature rule.
-
hermite_compute_points.m
computes Hermite abscissas.
-
hermite_compute_points_np.m
computes Hermite abscissas.
-
hermite_compute_weights.m
computes Hermite weights.
-
hermite_compute_weights_np.m
computes Hermite weights.
-
hermite_genz_keister_lookup.m
looks up Genz-Keister Hermite points and weights.
-
hermite_genz_keister_lookup_points.m
looks up Genz-Keister Hermite abscissas.
-
hermite_genz_keister_lookup_points_np.m
looks up Genz-Keister Hermite abscissas.
-
hermite_genz_keister_lookup_weights.m
looks up Genz-Keister Hermite weights.
-
hermite_genz_keister_lookup_weights_np.m
looks up Genz-Keister Hermite weights.
-
hermite_integral.m
evaluates a monomial Hermite integral.
-
hermite_interpolant.m,
sets up a divided difference table from Hermite data.
-
hermite_interpolant_rule.m
quadrature rule for a Hermite interpolant.
-
hermite_interpolant_value.m,
evaluates a Hermite interpolant polynomial.
-
hermite_lookup_points.m
looks up Hermite abscissas.
-
hermite_lookup_weights.m
looks up Hermite weights.
-
hermite_ss_compute.m
computes a Gauss-Hermite quadrature rule.
-
hermite_ss_recur.m
finds the value and derivative of a Hermite polynomial.
-
hermite_ss_root.m
improves an approximate root of a Hermite polynomial.
-
i4_choose.m,
computes the binomial coefficient C(N,K) as an I4.
-
i4_log_2.m,
returns the integer part of the logarithm base 2 of |I|.
-
i4mat_transpose_print.m,
prints the transpose of an I4MAT;
-
i4mat_transpose_print_some.m,
prints some of the transpose of an I4MAT;
-
i4mat_write.m,
writes an I4MAT file.
-
i4vec_min_mv.m,
determines U(1:N) /\ V for vectors U and a single vector V.
-
i4vec_print.m,
prints an I4VEC;
-
imtqlx.m
diagonalizes a symmetric tridiagonal matrix.
-
jacobi_compute.m
computes a Gauss-Jacobi quadrature rule.
-
jacobi_compute_points.m
computes Jacobi abscissas.
-
jacobi_compute_points_np.m
computes Jacobi abscissas.
-
jacobi_compute_weights.m
computes Jacobi weights.
-
jacobi_compute_weights_np.m
computes Jacobi weights.
-
jacobi_integral.m
evaluates the integral of a monomial with Jacobi weight.
-
jacobi_ss_compute.m
computes a Gauss-Jacobi quadrature rule.
-
jacobi_ss_recur.m
finds the value and derivative of a Jacobi polynomial.
-
jacobi_ss_root.m
improves an approximate root of a Jacobi polynomial.
-
laguerre_compute.m
computes a Gauss-Laguerre quadrature rule.
-
laguerre_compute_points.m
computes Laguerre abscissas.
-
laguerre_compute_points_np.m
computes Laguerre abscissas.
-
laguerre_compute_weights.m
computes Laguerre weights.
-
laguerre_compute_weights_np.m
computes Laguerre weights.
-
laguerre_integral.m
evaluates a monomial Laguerre integral.
-
laguerre_lookup_points.m
looks up Laguerre abscissas.
-
laguerre_lookup_weights.m
looks up Laguerre weights.
-
laguerre_ss_compute.m
computes a Gauss-Laguerre quadrature rule.
-
laguerre_ss_recur.m
finds the value and derivative of a Laguerre polynomial.
-
laguerre_ss_root.m
improves an approximate root of a Laguerre polynomial.
-
legendre_compute.m
computes a Gauss-Legendre quadrature rule using the Elhay-Kautsky method.
-
legendre_compute_points.m
computes Legendre abscissas.
-
legendre_compute_points_np.m
computes Legendre abscissas.
-
legendre_compute_weights.m
computes Legendre weights.
-
legendre_compute_weights_np.m
computes Legendre weights.
-
legendre_dr_compute.m
computes a Gauss-Legendre quadrature rule using the Davis-Rabinowitz method.
-
legendre_integral.m
evaluates a monomial Legendre integral.
-
legendre_zeros.m,
returns the zeros of the Legendre polynomial of degree N.
-
level_growth_to_order.m
converts 1D levels and growth rules to 1D orders.
-
level_to_order_default.m
converts 1D levels to 1D orders using default growth rules.
-
level_to_order_exponential.m
converts 1D levels to 1D orders using exponential growth rules.
-
level_to_order_exponential_slow.m
converts 1D levels to 1D orders using "slow" exponential growth rules.
-
level_to_order_linear.m
converts 1D levels to 1D orders using linear growth rules.
-
nc_compute.m,
computes a Newton-Cotes quadrature rule.
-
ncc_compute_points.m,
points of a Newton-Cotes Closed quadrature rule.
-
ncc_compute_weights.m,
weights of a Newton-Cotes Closed quadrature rule.
-
nco_compute_points.m,
points of a Newton-Cotes Open quadrature rule.
-
nco_compute_weights.m,
weights of a Newton-Cotes Open quadrature rule.
-
ncoh_compute_points.m,
computes points for a Newton-Cotes "open half" quadrature rule.
-
ncoh_compute_weights.m,
computes weights for a Newton-Cotes "open half" quadrature rule.
-
patterson_lookup.m
looks up Patterson points and weights.
-
patterson_lookup_points.m
looks up Patterson abscissas.
-
patterson_lookup_points_np.m
looks up Patterson abscissas.
-
patterson_lookup_weights.m
looks up Patterson weights.
-
patterson_lookup_weights_np.m
looks up Patterson weights.
-
point_radial_tol_unique_count.m,
counts tolerably unique points.
-
point_radial_tol_unique_index.m,
indexes tolerably unique points.
-
point_unique_index.m,
indexes unique points.
-
product_mixed_weight.m
computes the weights of a mixed product rule.
-
r8_ceiling.m,
rounds an R8 "up" (towards +oo) to the next integer.
-
r8_choose.m,
returns a binomial coefficient as an R8.
-
r8_factorial.m
computes the factorial of N, also denoted "N!".
-
r8_factorial2.m
computes the double factorial function N!!
-
r8_floor.m,
rounds an R8 "down" (towards -oo) to the next integer.
-
r8_huge.m,
returns a "huge" R8.
-
r8_hyper_2f1.m
evaluates the hypergeometric function 2F1(A,B,C,X).
-
r8_mop.m
returns the I-th power of -1 as an R8 value.
-
r8_psi.m
evaluates the function Psi(X).
-
r8_sign.m
returns the sign of an R8.
-
r8col_compare.m,
compares two columns of an R8COL;
-
r8col_sort_heap_a.m,
ascending heapsorts the columns of an R8COL;
-
r8col_sort_heap_index_a.m,
computes an index vector to ascending sort an R8COL;
-
r8col_sorted_unique_count.m,
counts the unique columns of a sorted R8COL;
-
r8col_swap.m,
swaps two columns of an R8COL;
-
r8col_tol_undex.m,
indexes tolerably unique entries in an R8COL.
-
r8col_tol_unique_count.m,
counts tolerably unique entries in an R8COL;
-
r8col_undex.m,
returns unique sorted indexes for an R8COL.
-
r8col_unique_index.m
indexes the unique entries in an R8COL.
-
r8mat_transpose_print.m,
prints the transpose of an R8MAT;
-
r8mat_transpose_print_some.m,
prints some of the transpose of an R8MAT;
-
r8mat_write.m,
writes an R8MAT file.
-
r8poly_ant_val.m
evaluates the antiderivative of a polynomial in standard form.
-
r8vec_chebyshev.m,
creates a vector of Chebyshev spaced values.
-
r8vec_compare.m,
compares the order of two R8VEC's;
-
r8vec_direct_product2.m
direct product of R8VEC's.
-
r8vec_index_sorted_range.m
search index sorted vector for elements in a range.
-
r8vec_legendre.m,
creates a vector of Legendre-spaced values.
-
r8vec_min_pos.m,
returns the minimum positive entry in an R8VEC;
-
r8vec_print.m
prints an R8VEC.
-
r8vec_sort_heap_index_a.m,
computes an index vector to ascending sort an R8VEC;
-
r8vec_uniform_01.m
returns a unit pseudorandom R8VEC.
-
s_len_trim.m
returns the length of a string to the last nonblank.
-
sort_heap_external.m
externally sorts a list of items.
-
vec_colex_next3.m,
generates vectors in colex order.
Last revised on 16 January 2023.