【问题标题】:Calculate the area under each peak in a graph in python计算python图中每个峰下的面积
【发布时间】:2019-02-11 18:58:45
【问题描述】:

我正在尝试计算我用一组 x 和 y 坐标绘制的图表中每个峰下的面积,

我没有 (x,y) 的函数,所以我找不到合适的方法来做同样的事情。

坐标是

{
 [10 10]
 [11  1]
 [12  7]
 [14  4]
 [16  8]
 [17  5]]}

对于所有未标记的 x 值,y=0

【问题讨论】:

标签: python python-3.x numpy scipy numerical-integration


【解决方案1】:

你必须为每个梯形一个一个地处理。

Area_1 = ( y1 + y2 ) * 1 / 2

示例:(10 + 1 ) * 1 / 2

【讨论】:

  • 不过,这并不能真正回答您将如何对其进行编程。例如,您是否一次循环两个点?也不是每个区域都是梯形,有些是三角形,所以(y1+y2)可以为0,但x=13-15之间的区域不为零
  • 是的,并非所有区域都是完美的梯形。三角形不会改变结果。如果 y1+y2 为零,则结果为零!没有像 x = 13 或 x = 15 这样的点。我只是简单地给出了方法。如果他知道 Python 的其余部分应该很容易,对吧?
  • 看图,不过,有一个三角形。该曲线下的面积应该是1/2 * 2 * 4 = 4,而不是零
  • Trapezoid 的面积实际上是可以计算三角形的面积。只需将梯形中的公式保留在第 0 面即可。
【解决方案2】:

有点简单且正确?

points = [[10, 10],
          [11, 1],
          [12, 7],
          [14, 4],
          [16, 8],
          [17, 5]]

areas = []
areas.append( points[0][0]/2.0 )

for i in range(0, points[-1][0] - points[0][0]-2):

    if ( points[i+1][0] == points[i][0]+1 ):
        areas.append( (points[i+1][1] + points[i][1] )/2.0)
    elif ( points[i+1][0] >= points[i][0]+2):
        areas.append( (points[i][1] )/2.0)
        areas.append( (points[i+1][1] )/2.0)

areas.append( points[-1][1]/2.0 )    

print(areas)
>[5.0, 5.5, 4.0, 3.5, 2.0, 2.0, 4.0, 6.5, 2.5]

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2021-10-24
    相关资源
    最近更新 更多