阅读有关简单数值积分(https://helloacm.com/how-to-compute-numerical-integration-in-numpy-python/(的教程,这似乎表明减小函数中使用的x值的范围会返回更准确的数值答案。 使用的代码是
def integrate(f, a, b, N):
x = np.linspace(a, b, N)
fx = f(x)
area = np.sum(fx)*(b-a)/N
return area
integrate(np.sin, 0, np.pi/2, 100)
这将返回值 0.99783321217729803。
但是,当他们将集成方法修改为:
def integrate(f, a, b, N):
x = np.linspace(a+(b-a)/(2*N), b-(b-a)/(2*N), N)
fx = f(x)
area = np.sum(fx)*(b-a)/N
return area
integrate(np.sin, 0, np.pi/2, 100)
这将返回更准确的值 1.0000102809119051。 为什么会这样呢?
两件事:
-
您第一个
integrate
中的步长宽度不是(b-a) / N
,而是(b-a) / (N-1)
。 -
在第一种方法中,误差主要由左右的半柱线过冲主导,即
(b-a)/(N-1)/2 * f(a)
和(b-a)/(N-1)/2 * f(b)
。如果减去这两个方法,则获得与第二种方法相当的准确性。