Python减排量(EA)计算代码问题求助:MACA与EA结果不符
修复MACA/MACB减排量计算的Python代码错误
原代码核心错误
- 未联立约束条件求解:原代码单独求解
MACA=MACB得到的是EB与EA的符号关系式,没有结合EA + EB = 120的总约束条件,无法得到正确数值解 - 变量赋值逻辑混乱:重复覆盖
EB_value和EA_value变量,且未正确将总约束代入方程 - MACA值计算错误:MACA表达式仅依赖EA,原代码错误地代入EB变量进行替换
修复后的代码
import sympy as sp EA, EB = sp.symbols('EA EB') # 定义边际减排成本函数 MACA = 450 - 3 * EA MACB = 300 - 2 * EB # 求解MAC=0时的最大剩余排放量(对应基准值) EA_max = sp.solve(sp.Eq(MACA, 0), EA)[0] EB_max = sp.solve(sp.Eq(MACB, 0), EB)[0] # 计算总约束:单个行业按40%比例计算的剩余排放量之和 abatement_percentage = 40 EA_individual = EA_max * (abatement_percentage / 100) EB_individual = EB_max * (abatement_percentage / 100) total_constraint = EA_individual + EB_individual # 联立约束方程求解EA和EB solution = sp.solve([ sp.Eq(EA + EB, total_constraint), sp.Eq(MACA, MACB) ], (EA, EB)) EA_final = solution[EA] EB_final = solution[EB] # 计算最终MACA值 MACA_final = MACA.subs(EA, EA_final) # 计算实际减排量(最大剩余排放量 - 最终剩余排放量) EA_abatement = EA_max - EA_final EB_abatement = EB_max - EB_final total_abatement = EA_abatement + EB_abatement # 输出结果 print("EA =", EA_final) print("EB =", EB_final) print("EA实际减排量:", EA_abatement) print("EB实际减排量:", EB_abatement) print("总减排量:", total_abatement) print("MACA =", MACA_final)
运行结果
运行代码后将得到与数学步骤完全一致的正确结果:
EA = 78 EB = 42 EA实际减排量: 72 EB实际减排量: 108 总减排量: 180 MACA = 216
关于预期输出的说明
你提供的预期输出中,EA after abatement、EB after abatement和Total abatement的数值与数学步骤存在矛盾,推测是符号定义混淆导致(比如误将剩余排放量的百分比当作减排量)。上述修复代码严格遵循你给出的数学计算步骤,结果逻辑自洽。
内容的提问来源于stack exchange,提问作者Bosser445
相关产品推荐
相关产品推荐

