2017-05-09 76 views
1

輸入是一個化學方程式一樣,楓,化學方程式平衡

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

代碼塊是否由* Maple *代碼組成?它看起來像使用'/ /'作爲註釋分隔符,但對於Maple中的註釋,分隔符是一個散列('#')。此外,最好使用乘法運算符('*') - 這樣可以在Maple符號(「代碼」)和2D符號中理解(KMnO4是三個(四個)對象並不明顯)。 – Therkel

+0

@Therkel這不是真正的楓樹代碼,我只是表明我的想法。這些方程將由楓解決函數來解決。 –

回答

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); 

他們可以通過等同係數得到AF方程:

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)); 

這將是一個有趣的項目,以建立東西,可以識別化學符號並將它們更自動地解析成等式。

+1

謝謝,我明白你的想法。這真的很有幫助。我發現當我解決(eqs)時,結果取決於{a,b,c,d,e,f}這樣一個'{a = d,b = 8 * d,c = d (eqs),a = 1,d = d,e = 4 * d, 1]'得到所有數值的結果。它運作良好。順便說一下,我正在按照您所說的方式處理項目。 –