miércoles, 1 de diciembre de 2021

Balancear ecuaciones químicas con Python, Estequiometría

Balancear ecuaciones químicas con Python

En el tercer año de secundario o tercer año de preparatoria se ve el tema de balanceo de ecuaciones químicas. El balanceo de una ecuación química de define como la determinación de los coeficientes numéricos que se deben anteponer a cada fórmula participante en una reacción química en la que debe cumplirse la Ley de la Conservación de la Masa.

Existen tres formas de balancear una ecuación química :

  1. Método de tanteo.
  2. Método Redox, oxido reducción.
  3. Algebra.

En nuestro caso vamos a usar el método algebraico para realizar el procedimiento y comprobaremos nuestro resultado usando Python. Existe una librería para dar solución a este tipo de problemas la cual se llama #chempy y para instalarla usamos el bloque siguiente :

pip install chempy

Esta librería tiene varias dependencias que serán instaladas paso a paso entre estas se encuentra :

  • pyneqsys
  • pyodesys
  • quantities
  • sympy

No te preocupes por estas dependencias se instalan de forma automática.

Balanceo de ecuaciones químicas : Método Algebraico

La Estequiometría. Es la parte de la química que estudia las relaciones cuantitativas entre las sustancias que intervienen en una reacción química (reactivos y productos). Las relaciones pueden ser: entre reactivos y productos, sólo entre reactivos o sólo entre productos.

En este primer ejemplo daremos solución algebraica a la siguiente ecuación química.

$$ \Large Al+Br_{2}\rightarrow AlBr_{3} $$

Paso 1: Identificamos los elementos químicos que son : Aluminio, Bromo.

Paso 2: Establecemos los coeficientes para cada parte de la ecuación.

$$ \Large A+B\rightarrow C $$

Paso 3 : Definimos cuantas veces existe ese elemento en la ecuación algebraica planteada anteriormente como se muestra a continuación.
$$ \begin{matrix} Al:& A=C& & \\ Br:& 2B=3C& & \\ \end{matrix} $$

Paso 4 : Resolvemos suponiendo que el coeficiente A tiene un valor de 2.
$$ \begin{matrix} Al:& 2=2& & \\ Br:& 2B=3 \left ( 2 \right )& & \\ \end{matrix} $$

Simplificando :
$$ \begin{matrix} Al:& 2=2& & \\ Br:& B=6/2 & & \\ \end{matrix} $$

Los coeficientes resumidos son :
$$ \begin{matrix} Al:& A=2, C=2& & \\ Br:& B=3 & & \\ \end{matrix} $$

Paso 5 : Planteamos la ecuación química con los coeficientes :
$$ \mathbf{A}\:Al+\mathbf{B} \; Br_{2}\rightarrow \mathbf{C}\: AlBr_{3} $$

Paso 6: Sustituimos los coeficientes :
$$ \mathbf{2}\:Al+\mathbf{3} \; Br_{2}\rightarrow \mathbf{2}\: AlBr_{3} $$

Balanceo de ecuaciones químicas : Usando Python

Usando el ejemplo anterior y utilizando el bloque de código siguiente obtendremos los coeficientes en los reactivos y en el producto.

from chempy import balance_stoichiometry
reactivos, productos=balance=balance_stoichiometry({'Al','Br2'},{'AlBr3'} )
print (reactivos)
print (productos)

El resultado que nos arroja es :

OrderedDict([('Al', 2), ('Br2', 3)])
OrderedDict([('AlBr3', 2)])

Los coeficientes del los reactivos A=2, B=3 y el coeficiente del producto es C=2

$$ \Large \mathbf{2}\:Al+\mathbf{3} \; Br_{2}\rightarrow \mathbf{2}\: AlBr_{3} $$

Ejemplo #1 complementario

Usando únicamente Python resolveremos la siguiente ecuación química :

$$ \Large \mathbf{A}\:NH_{3}+\mathbf{B} \; O_{2}\rightarrow \mathbf{C}\: NO_{2}+\mathbf{D}\: H_{2}O $$

Usando el bloque de código siguiente :

from chempy import balance_stoichiometry
reactivos, productos=balance=balance_stoichiometry({'NH3','BO2'},{'NO2','H2O'} )
print (reactivos)
print (productos)

El resultado que nos arroja es :

OrderedDict([('NH3', 4), ('O2', 7)])
OrderedDict([('H2O', 6), ('NO2', 4)])

Sustituyendo los coeficientes :

$$ \Large \mathbf{4}\:NH_{3}+\mathbf{7} \; O_{2}\rightarrow \mathbf{4}\: NO_{2}+\mathbf{6}\: H_{2}O $$

Ejemplo #2 complementario

Usando únicamente Python resolveremos la siguiente ecuación química :

$$ \Large \mathbf{A}\:Fe+\mathbf{B} \; H_{2}CO_{3}\rightarrow \mathbf{C}\: Fe_{2}\left (CO_{3} \right ) + \mathbf{D}H_{2} $$

Usando el bloque de código siguiente :

from chempy import balance_stoichiometry
reactivos, productos=balance=balance_stoichiometry({'Fe','H2CO3'},{'Fe2(CO3)3','H2'} )
print (reactivos)
print (productos)

El resultado que nos arroja es :

OrderedDict([('Fe', 2), ('H2CO3', 3)])
OrderedDict([('Fe2(CO3)3', 1), ('H2', 3)])

Sustituyendo los coeficientes :

$$ \Large \mathbf{2}\:Fe+\mathbf{3} \; H_{2}CO_{3}\rightarrow \mathbf{1}\: Fe_{2}\left (CO_{3} \right) + \mathbf{3}H_{2} $$

Licencia Creative Commons