5

我有一个 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

当然,在上面的代码中使用 x = np.array([0,10,20,30]) 返回 30.0,正如预期的那样。

谁能建议一种方法来找到 x 间距不均匀的曲线下的区域?

4

1 回答 1

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)
30.0
于 2020-06-15T12:16:35.090 回答