在 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。
我使用 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。