Title: | Gram Quadrature |
---|---|
Description: | Numerical integration with Gram polynomials (based on <arXiv:2106.14875> [math.NA] 28 Jun 2021, by Irfan Muhammad [School of Computer Science, University of Birmingham, UK]). |
Authors: | Iago Giné-Vázquez [aut, cre, trl] , Irfan Muhammad [aut] |
Maintainer: | Iago Giné-Vázquez <[email protected]> |
License: | GPL-3 |
Version: | 0.1.1 |
Built: | 2024-11-13 02:57:10 UTC |
Source: | https://gitlab.com/iagogv/gramquad |
Computes weights for Gram quadrature ofm+1
points.
create_gram_weights(m)
create_gram_weights(m)
m |
a positive integer value, the number of points minus one for which weights will be computed. See 'Details'. |
The numerical integration of an analytical function using a
finite set of equidistant points can be performed by quadrature formulas
like the Newton-Cotes. Unlike Gaussian quadrature formulas however,
higher-order Newton-Cotes formulas are not stable, limiting the usable
order of such formulas. Existing work showed that by the use of
orthogonal polynomials, stable high-order quadrature formulas with
equidistant points can be developed. This algorithm improves upon such
work by making use of (orthogonal) Gram polynomials and deriving an
iterative algorithm, together allowing us to reduce the space-complexity
of the original algorithm significantly.
A double-precision vector of the specified length plus one, whose
elements are the weights for the Gram quadratures of the m+1
points in the interval .
Iago Giné-Vázquez, [email protected]
Muhammad, Irfan (2021) Gram quadrature: Numerical integration with Gram polynomials. arXiv:2106.14875 [math.NA]
m <- 100 xs <- seq(-1, 1, length.out = m + 1) gram_weights <- create_gram_weights(m) # the sum of stable weights is equal to 2. cat("Sum of Gram weights:", sum(gram_weights), "\n") # test integration, integrate f below between [-1,1] f = function(x){ 9 * x ^ 2 + 45 * 13 * x ^ 3 + 16 * x ^ 4} gram_quad <- sum(gram_weights * f(xs)) cat("Approx. integration:", gram_quad, "\n")
m <- 100 xs <- seq(-1, 1, length.out = m + 1) gram_weights <- create_gram_weights(m) # the sum of stable weights is equal to 2. cat("Sum of Gram weights:", sum(gram_weights), "\n") # test integration, integrate f below between [-1,1] f = function(x){ 9 * x ^ 2 + 45 * 13 * x ^ 3 + 16 * x ^ 4} gram_quad <- sum(gram_weights * f(xs)) cat("Approx. integration:", gram_quad, "\n")