在 python 中使用 trapz 和 simpson 正确计算曲线下方的面积

Correctly calculate the area beneath curve using trapz and simpson in python

我使用 np.trapz 和 scipy simps 来计算曲线下方的面积,并注意到我可能没有正确计算。下面举例

import numpy as np
from scipy.integrate import simps


y = np.array([1,2,3,4,5])
y1= np.array([5,5,5,5,5])

print np.trapz(y,dx=1)
print simps(y,dx=1)
print np.trapz(y1,dx=1)
print simps(y1,dx=1)

这些产出

12.0
12.0
20.0
20.0

但他们不应该分别产生 15 和 25 吗?似乎介于小限度之间?

您已经隐含了 x = [0, 1, 2, 3, 4],请记住,在编程中几乎无处不在,一切都以 0 开头。另外,通常,上限是不包含在内的。

对于y,这意味着顶点为 (0,0)、(0,1)、(4,0) 和 (4,1) 的矩形加上顶点为 (0,1) 的三角形)、(4,5) 和 (4,1)。长方形面积4*1=4,三角形4*4/2=8共12.

对于 y1,您有一个顶点为 (0,0)、(0,5)、(4,0) 和 (4,5) 的矩形,因此面积为 20。