GQRUL
Computes a Gauss, Gauss-Radau, or Gauss-Lobatto quadrature rule with various classical weight functions.
Required Arguments
N — Number of quadrature points. (Input)
QX — Array of length N containing quadrature points. (Output)
QW — Array of length N containing quadrature weights. (Output)
Optional Arguments
IWEIGH — Index of the weight function. (Input)
Default: IWEIGH = 1.
IWEIGH |
wt(x) |
Interval |
Name |
1 |
1 |
(-1,1) |
Legendre |
2 |
|
(-1,1) |
Chebyshev 1st kind |
3 |
|
(-1,1) |
Chebyshev 2nd kind |
4 |
|
(-∞,∞) |
Hermite |
5 |
|
(-1,1) |
Jacobi |
6 |
|
(0,∞) |
Generalized Laguerre |
7 |
|
(-∞,∞) |
Hyperbolic Cosine |
ALPHA — Parameter used in the weight function with some values of IWEIGH, otherwise it is ignored. (Input)
Default: ALPHA = 2.0.
BETAW — Parameter used in the weight function with some values of IWEIGH, otherwise it is ignored. (Input)
Default: BETAW = 2.0.
NFIX — Number of fixed quadrature points. (Input)
NFIX = 0, 1 or 2. For the usual Gauss quadrature rules, NFIX = 0.
Default: NFIX = 0.
QXFIX — Array of length NFIX (ignored if NFIX = 0) containing the preset quadrature point(s). (Input)
FORTRAN 90 Interface
Generic: CALL GQRUL (N, QX, QW [, …])
Specific: The specific interface names are S_GQRUL and D_GQRUL.
FORTRAN 77 Interface
Single: CALL GQRUL (N, IWEIGH, ALPHA, BETAW, NFIX, QXFIX, QX, QW)
Double: The double precision name is DGQRUL.
Description
The routine GQRUL produces the points and weights for the Gauss, Gauss-Radau, or Gauss-Lobatto quadrature formulas for some of the most popular weights. In fact, it is slightly more general than this suggests because the extra one or two points that may be specified do not have to lie at the endpoints of the interval. This routine is a modification of the subroutine GAUSSQUADRULE (Golub and Welsch 1969).
In the simple case when NFIX = 0, the routine returns points in x = QX and weights in w = QW so that
for all functions f that are polynomials of degree less than 2N.
If NFIX = 1, then one of the above xi equals the first component of QXFIX. Similarly, if NFIX = 2, then two of the components of x will equal the first two components of QXFIX. In general, the accuracy of the above quadrature formula degrades when NFIX increases. The quadrature rule will integrate all functions f that are polynomials of degree less than 2N − NFIX.
Comments
1. Workspace may be explicitly provided, if desired, by use of G2RUL/DG2RUL. The reference is
CALL G2RUL (N, IWEIGH, ALPHA, BETAW, NFIX, QXFIX, QX, QW, WK)
The additional argument is
WK — Work array of length N.
2. If IWEIGH specifies the weight WT(X) and the interval (a, b), then approximately
3. Gaussian quadrature is always the method of choice when the function F(X) behaves like a polynomial. Gaussian quadrature is also useful on infinite intervals (with appropriate weight functions), because other techniques often fail.
4. The weight function 1/cosh(X) behaves like a polynomial near zero and like e|X| far from zero.
Examples
In this example, we obtain the classical Gauss-Legendre quadrature formula, which is accurate for polynomials of degree less than 2N, and apply this when N = 6 to the function x8 on the interval [−1, 1]. This quadrature rule is accurate for polynomials of degree less than 12.
USE GQRUL_INT
USE UMACH_INT
IMPLICIT NONE
INTEGER N
PARAMETER (N=6)
INTEGER I, NOUT
REAL ANSWER, QW(N), QX(N), SUM
! Get output unit number
CALL UMACH (2, NOUT)
!
! Get points and weights from GQRUL
CALL GQRUL (N, QX, QW)
! Write results from GQRUL
WRITE (NOUT,99998) (I,QX(I),I,QW(I),I=1,N)
99998 FORMAT (6(6X,'QX(',I1,') = ',F8.4,7X,'QW(',I1,') = ',F8.5,/))
! Evaluate the integral from these
! points and weights
SUM = 0.0
DO 10 I=1, N
SUM = SUM + QX(I)**8*QW(I)
10 CONTINUE
ANSWER = SUM
WRITE (NOUT,99999) ANSWER
99999 FORMAT (/, ' The quadrature result making use of these ', &
'points and weights is ', 1PE10.4, '.')
END
QX(1) = -0.9325 QW(1) = 0.17132
QX(2) = -0.6612 QW(2) = 0.36076
QX(3) = -0.2386 QW(3) = 0.46791
QX(4) = 0.2386 QW(4) = 0.46791
QX(5) = 0.6612 QW(5) = 0.36076
QX(6) = 0.9325 QW(6) = 0.17132
The quadrature result making use of these points and weights is 2.2222E-01.
We modify Example 1 by requiring that both endpoints be included in the quadrature formulas and again apply the new formulas to the function x8 on the interval [−1, 1]. This quadrature rule is accurate for polynomials of degree less than 10.
USE GQRUL_INT
USE UMACH_INT
IMPLICIT NONE
INTEGER N
PARAMETER (N=6)
INTEGER I, IWEIGH, NFIX, NOUT
REAL ALPHA, ANSWER, BETAW, QW(N), QX(N), QXFIX(2), SUM
! Get output unit number
CALL UMACH (2, NOUT)
!
IWEIGH = 1
ALPHA = 0.0
BETAW = 0.0
NFIX = 2
QXFIX(1) = -1.0
QXFIX(2) = 1.0
! Get points and weights from GQRUL
CALL GQRUL (N, QX, QW, ALPHA=ALPHA, BETAW=BETAW, NFIX=NFIX, &
QXFIX=QXFIX)
! Write results from GQRUL
WRITE (NOUT,99998) (I,QX(I),I,QW(I),I=1,N)
99998 FORMAT (6(6X,'QX(',I1,') = ',F8.4,7X,'QW(',I1,') = ',F8.5,/))
! Evaluate the integral from these
! points and weights
SUM = 0.0
DO 10 I=1, N
SUM = SUM + QX(I)**8*QW(I)
10 CONTINUE
ANSWER = SUM
WRITE (NOUT,99999) ANSWER
99999 FORMAT (/, ' The quadrature result making use of these ', &
'points and weights is ', 1PE10.4, '.')
END
QX(1) = -1.0000 QW(1) = 0.06667
QX(2) = -0.7651 QW(2) = 0.37847
QX(3) = -0.2852 QW(3) = 0.55486
QX(4) = 0.2852 QW(4) = 0.55486
QX(5) = 0.7651 QW(5) = 0.37847
QX(6) = 1.0000 QW(6) = 0.06667
The quadrature result making use of these points and weights is 2.2222E-01.