use*_*452 5 python integrate scipy python-2.7 auc
我有一个 y 值列表和一个 x 值列表。我想找到这些点定义的曲线下的面积。对于具有均匀间距的 x 值,我找到了解决此问题的几个解决方案:
但当 x 值间隔不均匀时,这两种方法都不起作用。
例如:
>>> from scipy.integrate import simps
>>> y = np.array([1,1,1,1])
>>> x = np.array([0,5,20,30])
>>> simps(y,x)
-inf
Run Code Online (Sandbox Code Playgroud)
当然,在上面的代码中使用 x = np.array([0,10,20,30]) 返回 30.0,正如预期的那样。
谁能建议一种方法来找到 x 间距不均匀的曲线下的面积?
我只想采用一个简单的梯形规则:
import numpy as np
x = np.array([0,5,20,30])
y = np.array([1,1,1,1])
s = np.sum((x[1:] - x[:-1]) * (y[1:] + y[:-1]) / 2)
# same as
# s = 0.0
# for k in range(len(x) - 1):
# s += (x[k+1] - x[k]) * (y[k+1] + y[k]) / 2
print(s)
Run Code Online (Sandbox Code Playgroud)
30.0
Run Code Online (Sandbox Code Playgroud)