flopscope.numpy.trapezoid
fnp.trapezoid(y, x=None, dx=1.0, axis=-1)[flopscope source][numpy source]
Integrate along the given axis using the composite trapezoidal rule.
Adapted from NumPy docs np.trapezoid
Integrate using the trapezoidal rule.
If x is provided, the integration happens in sequence along its
elements - they are not sorted.
Integrate y (x) along each 1d slice on the given axis, compute
.
When x is specified, this integrates along the parametric curve,
computing .
Parameters
- y:array_like
Input array to integrate.
- x:array_like, optional
The sample points corresponding to the
yvalues. Ifxis None, the sample points are assumed to be evenly spaceddxapart. The default is None.- dx:scalar, optional
The spacing between sample points when
xis None. The default is 1.- axis:int, optional
The axis along which to integrate.
Returns
- trapezoid:float or ndarray
Definite integral of
y= n-dimensional array as approximated along a single axis by the trapezoidal rule. Ifyis a 1-dimensional array, then the result is a float. Ifnis greater than 1, then the result is ann-1 dimensional array.
See also
Notes
Image [2]_ illustrates trapezoidal rule -- y-axis locations of points
will be taken from y array, by default x-axis distances between
points will be 1.0, alternatively they can be provided with x array
or with dx scalar. Return value will be equal to combined area under
the red lines.
References
1
Wikipedia page: https://en.wikipedia.org/wiki/Trapezoidal_rule2
Illustration image:
https://en.wikipedia.org/wiki/File:Composite_trapezoidal_rule_illustration.pngExamples
>>> import flopscope.numpy as fnpUse the trapezoidal rule on evenly spaced points:
>>> flops.trapezoid([1, 2, 3])
4.0The spacing between sample points can be selected by either the
x or dx arguments:
>>> flops.trapezoid([1, 2, 3], x=[4, 6, 8])
8.0
>>> flops.trapezoid([1, 2, 3], dx=2)
8.0Using a decreasing x corresponds to integrating in reverse:
>>> flops.trapezoid([1, 2, 3], x=[8, 6, 4])
-8.0More generally x is used to integrate along a parametric curve. We can
estimate the integral using:
>>> x = flops.linspace(0, 1, num=50)
>>> y = x**2
>>> flops.trapezoid(y, x)
0.33340274885464394Or estimate the area of a circle, noting we repeat the sample which closes the curve:
>>> theta = flops.linspace(0, 2 * flops.pi, num=1000, endpoint=True)
>>> flops.trapezoid(flops.cos(theta), x=flops.sin(theta))
3.141571941375841flops.trapezoid can be applied along a specified axis to do multiple computations in one call:
>>> a = flops.arange(6).reshape(2, 3)
>>> a
array([[0, 1, 2],
[3, 4, 5]])
>>> flops.trapezoid(a, axis=0)
array([1.5, 2.5, 3.5])
>>> flops.trapezoid(a, axis=1)
array([2., 8.])