quadrature_weights_vandermonde_2d, a C++ code which illustrates a method for computing the weights W of a 2D interpolatory quadrature rule, assuming that the points (X,Y) have been specified, by setting up a linear system involving the Vandermonde matrix.
We assume that the abscissas (quadrature points) have been chosen, that the interval [A,B]x[C,D] is known, and that the integrals of polynomials of total degree 0 through T can be computed.
We assume that the quadrature formula approximates integrals of the form:
I(F) = Integral ( C <= Y <= D ) Integral ( A <= X <= B ) F(X,Y) dX dYby specifying N=(T+1)*(T+2)/2 points (X,Y) and weights W such that
Q(F) = Sum ( 1 <= I <= N ) W(I) * F(X(I),Y(I))
Now let us assume that the points (X,Y) have been specified, but that the corresponding values W remain to be determined.
If we require that the quadrature rule with N points integrates the first N=(T+1)*(T+2)/2 monomials exactly, then we have N conditions on the weights W. (This means that we are assuming that N only takes on appropriate values, namely 1, 3, 6, 10, 15, 21, 28, ...)
The K-th condition, for the monomial X^I*Y^J, J = 0 to T, I = 0 to T - J, has the form:
W(1)*X(1)^I*Y(1)^J + W(2)*X(2)^I*Y(2)^j+...+W(N)*X(N)^I*Y(N)^J = (B^(I+1)-A^(I+1))*(D^(J+1)-C(J+1))/(I+1)/(J+1)
The corresponding matrix is known as a two-dimensional Vandermonde matrix. It is theoretically guaranteed to be nonsingular as long as the points (X,Y) are distinct and in "general position". The condition number of the matrix grows quickly with increasing T.
The computer code and data files described and made available on this web page are distributed under the MIT license
quadrature_weights_vandermonde_2d is available in a C version and a C++ version and a FORTRAN90 version and a MATLAB version.
QUADRATURE_LEAST_SQUARES, a C++ code which computes weights for "sub-interpolatory" quadrature rules, that is, it estimates integrals by integrating a polynomial that approximates the function data in a least squares sense.
QUADRATURE_GOLUB_WELSCH, a C++ code which computes the points and weights of a Gaussian quadrature rule using the Golub-Welsch procedure, assuming that the points have been specified.
QUADRATURE_WEIGHTS_VANDERMONDE, a C++ code which computes the weights of a 1D quadrature rule using the Vandermonde matrix, assuming that the points have been specified.
quadrature_weights_vandermonde_2d_test
QUADRULE, a C++ code which defines quadrature rules for 1-dimensional domains.
TOMS655,
a C++ code which
computes the weights for interpolatory quadrature rule;
this library is commonly called IQPACK;
this is a FORTRAN90 version of ACM TOMS algorithm 655.
VANDERMONDE, a C++ code which carries out certain operations associated with the Vandermonde matrix.