Python:积分曲线下面积与x中不均匀的步长

use*_*452 5 python integrate scipy python-2.7 auc

我有一个 y 值列表和一个 x 值列表。我想找到这些点定义的曲线下的面积。对于具有均匀间距的 x 值,我找到了解决此问题的几个解决方案:

1)在给定一组坐标的情况下计算曲线下的面积,而不知道函数

2)使用scipy对样本进行离散积分

但当 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 间距不均匀的曲线下的面积?

Nic*_*mer 0

我只想采用一个简单的梯形规则:

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)