You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python计算输出功率Po曲线下面积 求积分的技术实现咨询

要计算功率时间曲线下的面积(即累计输出能量),可以用scipy的内置积分函数实现,常用的两种可行方案如下:

方案1:梯形积分法(通用性最强,适配绝大多数场景)

梯形法通过将曲线下区域切分为多个梯形计算面积和,对时间间隔均匀/不均匀的序列都适用,实现简单、精度满足大部分业务需求。

代码实现

首先导入依赖包:

from scipy import integrate
import numpy as np

在你生成Po序列的代码后添加如下逻辑即可:

# 将时间索引转为秒为单位的数值,用于计算时间间隔
# 此处默认Po是pandas Series类型,索引为datetime64格式的时间戳
time_seconds = (Po.index - Po.index[0]).total_seconds()

# 梯形法计算积分,结果单位为焦耳(W*s)
energy_joule = integrate.trapz(y=Po.values, x=time_seconds)

# 可根据需求转换为常用的电能单位千瓦时(kWh)
energy_kwh = energy_joule / 3600 / 1000

print(f"累计输出能量:{energy_kwh:.2f} kWh")

方案2:辛普森积分法(精度更高,适配平滑曲线)

如果你的功率曲线平滑度很高,对积分精度要求更高,可以选用辛普森法,它通过二次函数拟合相邻采样点,误差比梯形法更小,调用方式和梯形法几乎一致:

# 辛普森法计算积分
energy_joule_simpson = integrate.simpson(y=Po.values, x=time_seconds)
energy_kwh_simpson = energy_joule_simpson / 3600 / 1000

注意事项

  • 如果Po序列存在空值,建议先执行Po = Po.dropna()或者做线性插值处理后再积分,避免结果出现偏差
  • 如果你需要用其他时间单位(比如小时)计算,修改time_seconds的转换逻辑即可,比如转成小时的话用time_hours = (Po.index - Po.index[0]).total_seconds() / 3600,此时直接积分得到的结果单位就是Wh,除以1000即可得到kWh。

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:00:00