我在试着写一个平衡化学方程式的脚本。我正在用光合作用反应测试它:
CO2 + H2O -> C6H12O6 + O2
作为Python表达式:
a0*(C+2*O) + a1*(2*H+O) = b0*(6*C+12*H+6*O) + b1*(2*O)作为SymPy表达式:
Eq(a0*(2*H + O) + a1*(C + 2*O), 2*O*b1 + b0*(6*C + 2*H + 6*O))或
a0*(2*H + O) + a1*(C + 2*O) - (2*O*b1 + b0*(6*C + 2*H + 6*O))'H‘、'C’和'O‘是代表原子的SymPy符号。
'a0‘、'a1’、'b0‘和'b1’是代表分子系数的SymPy符号。
如何求解'a0‘、'a1’、'b0‘和'b1’,使'H‘、'C’和'O‘的系数在反应的左右两侧相等?此外,有无限数量的解决方案,所以我如何指定最低的正解?
发布于 2017-03-22 11:53:00
由于解空间是一维的,并且系统是齐次的,因此您可以从描述系统的矩阵的零空间中读取最小整数解。下面是如何使用渐近得到空空间(矩阵的行对应于C,O,H,列对应于a0,a1,b0,b1):
m = sympy.Matrix([[1, 0, -6, 0], [2, 1, -6, -2], [0, 2, -12, 0]])
n, = m.nullspace()
n / functools.reduce(sympy.gcd, n.T)
# Matrix([
# [6],
# [6],
# [1],
# [6]])所以最小整数解是a0 = 6,a1 = 6,b0 = 1,b1 =6
https://stackoverflow.com/questions/42942303
复制相似问题