从x,y坐标计算曲线下面积

3

假设我有两个名为xy的列表,它们都包含数字(坐标),则有以下内容:

x = [0, 1, 2, 3, 4, 4, 5]
y = [0, 1, 3, 3, 5, 6, 7]

我需要计算将这两个列表组合成(x, y)坐标点后形成的曲线下面积。我不太明白如何创建一个能够从这些信息中计算出该曲线下面积的函数。
例如:
def integrate(x, y):
""" x & y = lists, area_under_curve = float value of the area """
    area_under_curve = 0
    last_x = x[0]
    last_y = y[0] 

    for cur_x, cur_y in list(zip(x, y))[1:]:
       ## some code here

    return area_under_curve

问题是离散点的图形,而不是连续的曲线。因此,从数学角度来看,技术上不存在“曲线”。答案将根据所使用的技术而异。使用梯形法则、左黎曼和、右黎曼和或中点都会产生不同的近似值。也许,Python有一些标准库可以解决这样的问题。 - ManLaw
2个回答

3

如之前所提到,使用梯形法则计算函数相当简单。

def integrate(x, y):
   sm = 0
   for i in range(1, len(x)):
       h = x[i] - x[i-1]
       sm += h * (y[i-1] + y[i]) / 2

   return sm

这个理论与梯形面积计算和插值有关。


这个程序生成了一个负的AUC值(-0.996)用于我的ROC曲线(x=FAR,y=TAR),你有任何想法为什么会是负数吗?@kuco23 - Mas A
这是一个相对曲线下面积,因此如果y具有负值,则该区域将为负。@MasA - kuco 23

2
import numpy as np
x = [0, 1, 2, 3, 4, 4, 5]
y = [0, 1, 3, 3, 5, 6, 7]

def integrate(x, y):
    area = np.trapz(y=y, x=x)
    return area
print(integrate(x, y))

试试这个


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接