Product Gauss cubature over polygons as proposed by Sommariva and Vianello (2007).
polyCub.SV(polyregion, f, ..., nGQ = 20, alpha = NULL, rotation = FALSE,
engine = "C", plot = FALSE)a two-dimensional real function (or NULL to only compute
nodes and weights).
As its first argument it must take a coordinate matrix, i.e., a
numeric matrix with two columns, and it must return a numeric vector of
length the number of coordinates.
further arguments for f.
degree of the one-dimensional Gauss-Legendre quadrature rule
(default: 20) as implemented in function gauss.quad
of package statmod. Nodes and weights up to nGQ=60 are cached
in polyCub, for larger degrees statmod is required.
base-line of the (rotated) polygon at \(x = \alpha\) (see
Sommariva and Vianello (2007) for an explication). If NULL (default),
the midpoint of the x-range of each polygon is chosen if no rotation
is performed, and otherwise the \(x\)-coordinate of the rotated point
"P" (see rotation). If f has its maximum value at the
origin \((0,0)\), e.g., the bivariate Gaussian density with zero mean,
alpha = 0 is a reasonable choice.
logical (default: FALSE) or a list of points
"P" and "Q" describing the preferred direction. If
TRUE, the polygon is rotated according to the vertices "P" and
"Q", which are farthest apart (see Sommariva and Vianello, 2007). For
convex polygons, this rotation guarantees that all nodes fall inside the
polygon.
character string specifying the implementation to use.
Up to polyCub version 0.4-3, the two-dimensional nodes and weights
were computed by R functions and these are still available by setting
engine = "R".
The new C-implementation is now the default (engine = "C") and
requires approximately 30% less computation time.
The special setting engine = "C+reduce" will discard redundant nodes
at (0,0) with zero weight resulting from edges on the base-line
\(x = \alpha\) or orthogonal to it.
This extra cleaning is only worth its cost for computationally intensive
functions f over polygons which really have some edges on the
baseline or parallel to the x-axis. Note that the old R
implementation does not have such unset zero nodes and weights.
logical indicating if an illustrative plot of the numerical integration should be produced.
The approximated value of the integral of f over
polyregion.
In the case f = NULL, only the computed nodes and weights are
returned in a list of length the number of polygons of polyregion,
where each component is a list with nodes (a numeric matrix with
two columns), weights (a numeric vector of length
nrow(nodes)), the rotation angle, and alpha.
Sommariva, A. and Vianello, M. (2007). Product Gauss cubature over polygons based on Green's integration formula. BIT Numerical Mathematics, 47 (2), 441-453.
Other polyCub-methods: polyCub.exact.Gauss,
polyCub.iso,
polyCub.midpoint, polyCub
# NOT RUN {
# see example(polyCub)
# }
Run the code above in your browser using DataLab