输入是一个类似的化学方程式
aKMnO4 + bHCl = cKCl + dMnCl2 + eH2O + fCl2
// a, b, c, d, e, f are numbers.
我试图通过解决一些方程来解决这个问题:
a = c // K
a = d // Mn
4*a = e // O
b = e // H
b = c + 2*d + 2*f // Cl
它有效,但我必须在我的代码中输入这些等式作为输入。
有没有办法通过化学方程输入找到a,b,c,d,e,f?
答案 0 :(得分:1)
你可以这样做,但你需要用化合物中的+和*重写你的化学方程式,这样H2O就会变成H * 2 + O,例如你的等式
a KMnO4 + b HCl = c KCl + d MnCl2 + e H2O + f Cl2
这里变成:
eq:=a*(K+Mn+O*4) + b*(H+Cl) = c*(K+Cl) + d*(Mn+Cl*2) + e*(H*2+O) + f*(Cl*2);
他们可以通过等于系数得到a-f的方程式:
elems := [ K, Mn, O, H, Cl ];
eqr := collect(expand(rhs(eq)), elems);
eql := collect(expand(lhs(eq)), elems);
eqs := zip(`=`, map2(coeff, eql, elems), map2(coeff, eqr, elems));
构建能够识别化学符号并将其更自动地解析为方程式的东西将是一个有趣的项目。