Source code for chaospy.quadrature.grid

"""
Generate the quadrature abscissas and weights for simple grid.

Mostly available to ensure that discrete distributions works along side
continuous ones.
"""
import numpy
import chaospy

from .hypercube import hypercube_quadrature


[docs]def grid(order, domain=(0, 1), growth=False, segments=1): """ Generate the quadrature abscissas and weights for simple grid. Args: order (int, numpy.ndarray): Quadrature order. domain (chaospy.distributions.baseclass.Distribution, numpy.ndarray): Either distribution or bounding of interval to integrate over. Returns: (numpy.ndarray, numpy.ndarray): The quadrature points and weights. The points are equi-spaced grid on the interior of the domain bounds. The weights are all equal to `1/len(weights[0])`. Example: >>> abscissas, weights = chaospy.quadrature.grid(4, chaospy.Uniform(-1, 1)) >>> abscissas.round(4) array([[-0.8, -0.4, 0. , 0.4, 0.8]]) >>> weights.round(4) array([0.2, 0.2, 0.2, 0.2, 0.2]) >>> abscissas, weights = chaospy.quadrature.grid([1, 1]) >>> abscissas.round(4) array([[0.25, 0.25, 0.75, 0.75], [0.25, 0.75, 0.25, 0.75]]) >>> weights.round(4) array([0.25, 0.25, 0.25, 0.25]) """ order = numpy.asarray(order) order = numpy.where(growth, numpy.where(order > 0, 3**order - 1, 0), order) return hypercube_quadrature( quad_func=grid_simple, order=order, domain=domain, segments=segments, )
def grid_simple(order): """ Backend for grid quadrature. Use :func:`chaospy.quadrature.grid` instead. """ order = int(order) abscissas = numpy.linspace(0, 1, 2 * order + 3)[1::2] weights = numpy.full(order + 1, 1.0 / (order + 1)) return abscissas, weights