电流符号切换时重置电池累计电荷值的实现方法
问题解决:电池充放电累计电荷重置计算
你有如下电池恒流充放电数据集:
import numpy as np import matplotlib.pyplot as plt time = np.arange(0,100,1) current_discharge = [-2 for i in np.arange(0,50,1)] current_charge = [2 for i in np.arange(50,100,1)] current = current_discharge + current_charge
需求是计算随时间变化的累计绝对电荷,要求在时间点50(电流从负切换为正)时将累计电荷重置为0,之后重新递增。你的原代码在时间点50后会从累计值中做减法,不符合需求。
修正后的代码
import numpy as np import matplotlib.pyplot as plt time = np.arange(0,100,1) current_discharge = [-2 for i in np.arange(0,50,1)] current_charge = [2 for i in np.arange(50,100,1)] current = current_discharge + current_charge cumsum = 0 totalcharge = [] for idx, i in enumerate(current): # 时间步长为1,单次电荷增量取绝对值,保证放电/充电阶段都累计正值 dQ = abs(i * 1) # 定位电流切换点,重置累计值 if idx == 50: cumsum = 0 cumsum += dQ totalcharge.append(cumsum) # 绘图展示 fig = plt.figure() ax1 = plt.axes((0,0,1,0.5)) ax1.plot(time, current, label="电流 vs 时间") ax1.plot(time, totalcharge, label="累计电荷 vs 时间") ax1.set_xlabel("时间") ax1.legend() plt.show()
关键修改说明
- 电荷增量计算:直接取
abs(i * 1),确保放电(负电流)和充电(正电流)阶段的电荷增量均为正值,匹配“绝对电荷”的需求。 - 重置逻辑:通过索引
idx == 50精准定位电流切换节点,将累计值cumsum重置为0,之后重新累计充电阶段的电荷。 - 移除冗余的
dQ_list,简化代码结构。
运行修正后的代码后,0-49秒累计放电电荷(从0增长到100),50秒时重置为0,50-99秒累计充电电荷(从0增长到100),完全符合需求。
内容的提问来源于stack exchange,提问作者ph1lipp
相关产品推荐
相关产品推荐

