我在计算两个行业(MACA 和 MACB)的减排量 (EA) 时遇到了 Python 代码问题。该代码没有给出 EA 和 MACA 的预期结果。
这是代码:
import sympy as sp
EA, EB = sp.symbols('EA EB')
abatement_percentage = 40
MACA = 450 - 3 * EA
MACB = 300 - 2 * EB
EA_value = sp.solve(sp.Eq(MACA, 0), EA)[0]
EB_value = sp.solve(sp.Eq(MACB, 0), EB)[0]
EA_abatement = EA_value * (abatement_percentage / 100)
EB_abatement = EB_value * (abatement_percentage / 100)
total_abatement = EA_abatement + EB_abatement
EB_value = sp.solve(sp.Eq(MACA, MACB), EB)[0]
EA_value = total_abatement - EB_value
MACA_value = MACA.subs(EB, EB_value)
print("EA =", EA_value)
print("EB =", EB_value)
print("EA after abatement:", EA_abatement)
print("EB after abatement:", EB_abatement)
print("Total abatement:", total_abatement)
print("MACA =", MACA_value)
预期输出:
EA = 78
EB = 42
EA after abatement: 31.2
EB after abatement: 16.8
Total abatement: 48.0
MACA = 216
采取的数学步骤:
已知:MACA = 450 - 3EA 和 MACB = 300 - 2EB
求 MACA = 0 且 MACB = 0 时:
减少40%:
EA + EB = 60 + 60 = 120
EA = 120 - EB
求当MACA=MACB时EB的值:
现在玛卡 = 450 - 3EA = 450 - 3(78) = 216
问题: MACA 和 EA 的计算值不正确,并且代码未提供预期结果。 MACA 的计算值应为 216,而当前代码生成的值不正确。 EA 的计算值也应该是 78,但当前代码生成不同的值。
请帮助修复代码以获得正确的减排计算结果。任何见解或建议都将受到高度赞赏。谢谢!
首先,您在写出的步骤之上的预期值不匹配,因此我将使用写出的步骤中的值。
代码结果与您的手动计算不匹配的原因是您没有告诉代码执行相同的计算。例如,在步骤 5 中,您的手工计算显示您将符号
EA
定义为 120 - EB
,但在您的代码中,您将 EA_value
(之前计算的)替换为 120 减去 EB 的减排前 值, EB_value
。
下面写的是复制您的数学步骤的代码(这些步骤已注释)并获得完全相同的结果。
import sympy as sp
EA, EB = sp.symbols("EA EB")
abatement_percentage = 40
# step 1
MACA = 450 - 3 * EA
MACB = 300 - 2 * EB
# step 2
EA_before_abatement = sp.solve(sp.Eq(MACA, 0), EA)[0]
EB_before_abatement = sp.solve(sp.Eq(MACB, 0), EB)[0]
print(EA_before_abatement, EB_before_abatement) # 150 150
# step 3
EA_after_abatement = EA_before_abatement*(abatement_percentage / 100)
EB_after_abatement = EB_before_abatement*(abatement_percentage / 100)
print(EA_after_abatement, EB_after_abatement) # 60 60
# step 4
total_abatement_value = EA_after_abatement + EB_after_abatement
print(total_abatement_value) # 120
# step 5
EA_from_abatement = total_abatement_value - EB
print(EA_from_abatement) # 120 - EB
# step 6 bullet 1
combined_eq = sp.Eq(MACA, MACB)
print(combined_eq) # 450 - 3EA = 300 - 2EB
# step 6 bullet 2
combined_eq_subbed = combined_eq.subs(EA, EA_from_abatement)
print(combined_eq_subbed) # 3EB + 90 = 300 - 2EB
# step 6 bullet 3
EB_final = sp.solve(combined_eq_subbed, EB)[0]
print(EB_final) # 42
# step 6 bullet 4
EA_final = EA_from_abatement.subs(EB, EB_final)
print(EA_final) # 78
# step 7
MACA_value = MACA.subs(EA, EA_final)
print(MACA_value) # 216