scipy.integrate.

梯形#

scipy.integrate.trapezoid(y, x=None, dx=1.0, axis=-1)[源代码]#

使用复合梯形法则沿给定轴进行积分。

如果提供了 x,则积分按其元素顺序进行 - 它们未排序。

沿给定轴对每个一维切片上的 y (x) 进行积分,计算 \(\int y(x) dx\)。当指定 x 时,这将沿着参数曲线进行积分,计算 \(\int_t y(t) dt = \int_t y(t) \left.\frac{dx}{dt}\right|_{x=x(t)} dt\)

参数:
y类数组

要积分的输入数组。

x类数组,可选

y 值对应的采样点。如果 x 为 None,则假定采样点等间隔 dx。默认值为 None。

dx标量,可选

x 为 None 时采样点之间的间距。默认值为 1。

axis整数,可选

进行积分的轴。默认值为最后一个轴。

返回:
trapezoid浮点数或 ndarray

使用梯形法则沿单个轴近似计算 y = n 维数组的定积分。如果 y 是一维数组,则结果为浮点数。如果 n 大于 1,则结果为 n-1 维数组。

备注

图片 [2] 展示了梯形法则 — 点的 y 轴位置将从 y 数组中获取,默认情况下点的 x 轴间距为 1.0,或者可以通过 x 数组或 dx 标量提供。返回值将等于红线下方组合区域。

参考文献

示例

在等间隔点上使用梯形法则

>>> import numpy as np
>>> from scipy import integrate
>>> integrate.trapezoid([1, 2, 3])
4.0

采样点之间的间距可以通过 xdx 参数选择

>>> integrate.trapezoid([1, 2, 3], x=[4, 6, 8])
8.0
>>> integrate.trapezoid([1, 2, 3], dx=2)
8.0

使用递减的 x 相当于反向积分

>>> integrate.trapezoid([1, 2, 3], x=[8, 6, 4])
-8.0

更一般地,x 用于沿着参数曲线进行积分。我们可以使用以下方法估算积分 \(\int_0^1 x^2 = 1/3\)

>>> x = np.linspace(0, 1, num=50)
>>> y = x**2
>>> integrate.trapezoid(y, x)
0.33340274885464394

或者估算一个圆的面积,注意我们重复了闭合曲线的样本点

>>> theta = np.linspace(0, 2 * np.pi, num=1000, endpoint=True)
>>> integrate.trapezoid(np.cos(theta), x=np.sin(theta))
3.141571941375841

trapezoid 可以沿指定轴应用,在一个调用中执行多次计算

>>> a = np.arange(6).reshape(2, 3)
>>> a
array([[0, 1, 2],
       [3, 4, 5]])
>>> integrate.trapezoid(a, axis=0)
array([1.5, 2.5, 3.5])
>>> integrate.trapezoid(a, axis=1)
array([2.,  8.])