枫树,化学方程式平衡

Maple, chemical equation balancing

输入的是这样的化学方程式

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吗?

你可以这样做,但是你需要在化合物中用 + 和 * 重写你的化学方程式,这样 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));

构建能够识别化学符号并将其更自动地解析为方程式的东西将是一个有趣的项目。