scipy.integrate.

newton_cotes#

scipy.integrate.newton_cotes(rn, equal=0)[source]#

傳回牛頓-柯特斯積分的權重和誤差係數。

假設我們在位置 x_0, x_1, …, x_N 有 (N+1) 個 f 的樣本。那麼,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, optional

設定為 1 以強制執行等間距資料。

返回:
anndarray

要應用於所提供樣本位置處函數的權重之 1 維陣列。

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