如何在Python 2.7中使用矩阵平衡化学方程式

Geo*_*dle 6 python equation balance matrix chemistry

我有一个大学作业,必须平衡以下等式:

NaOH + H2S04-> Na2S04 + H2O

目前,我对python和编码的了解非常有限。到目前为止,我已经尝试使用矩阵来求解方程。看来我正在获取解决方案a = b = x = y = 0我想我需要将变量之一设置为1并求解其他三个变量。我不确定该怎么做,我进行了搜索,看起来其他人使用了更复杂的代码,但我真的没法遵循!

这是我到目前为止所拥有的

    #aNaOH + bH2S04 --> xNa2SO4 +y H20

    #Na: a=2x
    #O: a+4b=4x+y
    #H: a+2h = 2y
    #S: b = x

    #a+0b -2x+0y = 0
    #a+4b-4x-y=0
    #a+2b+0x-2y=0
    #0a +b-x+0y=0

    A=array([[1,0,-2,0],

             [1,4,-4,-1],

             [1,2,0,-2],

             [0,1,-1,0]])

    b=array([0,0,0,0])




    c =linalg.solve(A,b)

    print c

0.0.0.0
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 4

问题是您构建了一个线性系统,其中b是零向量。现在,对于这样的系统,总是有一个直接的答案:所有变量也为零。因为将数字与零相乘并将零相加的结果始终为零。

解决方案可能是将1 分配给变量。举个例子a。如果我们赋值a = 1,那么我们将得到bx并且是 1y的函数a

所以现在或线性系统是:

 B  X  Y |    #
    2    |1   #  A    = 2X
-4  4  1 |1   #  A+4B = 4X+4Y
-2     2 |1   #  A+2B =    2Y
-1  1  0 |0   #     B =     X
Run Code Online (Sandbox Code Playgroud)

或者将其放入代码中:

>>> A = array([[0,2,0],[-4,4,1],[-2,0,2],[-1,1,0]])
>>> B = array([1,1,1,0])
>>> linalg.lstsq(A,B)
(array([ 0.5,  0.5,  1. ]), 6.9333477997940491e-33, 3, array([ 6.32979642,  2.5028631 ,  0.81814033]))
Run Code Online (Sandbox Code Playgroud)

所以这意味着:

 A = 1, B = 0.5, X = 0.5, Y = 1.
Run Code Online (Sandbox Code Playgroud)

如果我们乘以 2,我们得到:

2 NaOH + H2S04 -> Na2S04 + 2 H20
Run Code Online (Sandbox Code Playgroud)

哪个是对的。