如何在Python中编写代码来使用梯形规则计算一组数字的积分?

问题描述 投票:0回答:1

我似乎不知道如何获得正确的积分值。我没有收到错误,当我测试函数的各个元素时,它似乎给了我所有正确的值,但是当我将它们放在一起时,它给了我一个糟糕的结果。

到目前为止,这就是我所拥有的

def trap_rule(y_values, x_values):
    delta = (x_values[-1] - x_values[0])/(len(x_values))
    int_ = 0.0
    for i in range(0, len(y_values)):
        int_ += (y_values[i-1] + y_values[i]) / 2
        int_ = int_ * delta
        
    return int_

mydata_sund= pd.read_csv("sund1.csv")
sund_time = list(mydata_sund["time [hr]"])
sund_power = list(mydata_sund["power [kW]"])

intergral = trap_rule(sund_power, sund_time)

我得到的输出是 3.5005,我不正确......我认为 它确实给了我两个列表,其中包含正确的数据,因此我 90% 确定导入文件没有问题。 当我计算函数的 delta_x 时,它也会返回正确的值

我一直试图在这里找到答案,但我似乎找不到与使用列表相关的任何内容,而不仅仅是已经给出的值。

提前抱歉,如果格式错误,这是我第一次使用 StackOverflow

python function
1个回答
0
投票

这里有几个问题:

  1. 您的函数有 2 个由 fencepost 问题 创建的错误实例。该函数需要
    len(x_values)
    点,但需要添加
    len(x_values)-1
    梯形的面积。
  2. 通过预先计算单个
    delta
    并将其应用于所有梯形,您可以假设
    x_values
    间隔均匀。对于您正在使用的特定数据集来说,这可能是正确的,但通常情况并非如此。最好为每个梯形计算它。

这是修订版:

def trap_rule(y_values, x_values):
    area = 0.0
    for i in range(0, len(y_values)-1):
        area += (y_values[i] + y_values[i+1]) * (x_values[i+1] - x_values[i]) / 2
        
    return area
© www.soinside.com 2019 - 2024. All rights reserved.