scipy.integrate.
newton_cotes#
- scipy.integrate.newton_cotes(rn, equal=0)[源代码]#
返回牛顿-科茨积分的权重和误差系数。
假设我们在位置 x_0, x_1, …, x_N 处有 f 的 (N+1) 个样本。那么,x_0 和 x_N 之间积分的 N 点牛顿-科茨公式为
\(\int_{x_0}^{x_N} f(x)dx = \Delta x \sum_{i=0}^{N} a_i f(x_i) + B_N (\Delta x)^{N+2} f^{N+1} (\xi)\)
其中 \(\xi \in [x_0,x_N]\) 并且 \(\Delta x = \frac{x_N-x_0}{N}\) 是平均样本间距。
如果样本是等距的并且 N 是偶数,则误差项为 \(B_N (\Delta x)^{N+3} f^{N+2}(\xi)\)。
- 参数:
- rnint
对于等距数据的整数阶数,或者样本的相对位置,第一个样本为 0,最后一个样本为 N,其中 N+1 是 rn 的长度。N 是牛顿-科茨积分的阶数。
- equalint, 可选
设置为 1 以强制执行等距数据。
- 返回:
- anndarray
一维数组,表示应用于提供的样本位置的函数的权重。
- Bfloat
误差系数。
说明
通常,牛顿-科茨规则用于较小的积分区域,并且使用复合规则返回总积分。
示例
计算 sin(x) 在 [0, \(\pi\)] 中的积分
>>> from scipy.integrate import newton_cotes >>> import numpy as np >>> def f(x): ... return np.sin(x) >>> a = 0 >>> b = np.pi >>> exact = 2 >>> for N in [2, 4, 6, 8, 10]: ... x = np.linspace(a, b, N + 1) ... an, B = newton_cotes(N, 1) ... dx = (b - a) / N ... quad = dx * np.sum(an * f(x)) ... error = abs(quad - exact) ... print('{:2d} {:10.9f} {:.5e}'.format(N, quad, error)) ... 2 2.094395102 9.43951e-02 4 1.998570732 1.42927e-03 6 2.000017814 1.78136e-05 8 1.999999835 1.64725e-07 10 2.000000001 1.14677e-09