Igualación de Ecuaciones Químicas

LogoFE es Logo Functional Extensions, una librería de procedimientos para ser usados con MSWLogo o con UCBLogo. El objetivo de LogoFE es proporcionar un gran "caja de herramientas" para la construcción de pequeños programas útiles o para explorar temáticas de Matemáticas, Física, Química, Estadística y otras materias de escuela, colegio y universidad.

Contenido

1. Planteamiento

El problema consiste en determinar las proporciones de los reactivos y los productos en una reacción química conocidos estos. Por ejemplo, se requiere determinar los coeficientes a, b, c y d en la siguiente ecuación:

a Fe S2 + b O2c Fe2 O3 + d SO2

Uno de los métodos utilizados es el denominado método algebráico que consiste en plantear un sistema de ecuaciones lineales que satisfaga las restricciones de la ecuación química. Para este caso sería:

a = 2 c
2 a = d
2 b = 3 c + 2 d
d = 1
(considerando Fe)
(considerando S)
(considerando O)

Esta cuarta ecuación lineal es añadida simplemente para fijar los coeficientes a valores numéricos. De preferencia, se desea que los coeficientes a, b, c y d sean enteros y lo más pequeños posibles, pero la ecuación química se satisfaría con coeficientes múltiplos de a, b, c y d, por ejemplo 2a, 2b, 2c y 2d.

El sistema de ecuaciones lineales podría ser representado en forma matricial de esta manera:

haz "matriz [[1 0 -2 0 0] [2 0 0 -1 0] [0 2 -3 -2 0] [0 0 0 1 1]]
tabla!htm "fig1 pp [[Fe S O extra] [a b c d N]] :matriz

a b c d N
Fe 1 0 -2 0 0
S 2 0 0 -1 0
O 0 2 -3 -2 0
extra 0 0 0 1 1

Y podría ser resuelto reduciendo la matriz:

tabla!htm "fig2 pp [[Fe S O extra] [a b c d N]] redMat :matriz

a b c d N
Fe 1 0 0 0 0.5
S 0 1 0 0 1.375
O 0 0 1 0 0.25
extra 0 0 0 1 1

Luego, se podría reconvertir la representación matricial en representación algebráica:

a = 0.5
b = 1.375
c = 0.25
d = 1

Finalmente los coeficientes deberían ser multiplicados por una valor adecuado (llamémoslo k) para obtener enteros:

a = 0.5 · 8 = 4
b = 1.375 · 8 = 11
c = 0.25 · 8 = 2
d = 1 · 8 = 8

4 Fe S2 + 11 O22 Fe2 O3 + 8 SO2

Para calcular el valor de k necesitamos conocer el valor de los denominadores de los números fraccionarios equivalentes a los coeficientes a, b, c y d:

muestra ultimos redmat :matriz 
[0.5 1.375 0.25 1]

muestra impon "fracciona ultimos redmat :matriz 
[[1 2] [11 8] [1 4] [1 1]]
a = 0.5 = 1/2
b = 1.375 = 11/8
c = 0.25 = 1/4
d = 1 = 1/1

Luego obtenemos el mínimo común múltiplo de estos denominadores:

muestra ultimos impon "fracciona ultimos redmat :matriz 
[2 8 4 1]

muestra interpon 1 [mcm lista] ultimos impon "fracciona ultimos redmat :matriz 
8

funciona "k [interpon 1 [mcm lista] ultimos impon "fracciona]
muestra k [0.5 1.375 0.25 1]
8

Ya que hemos automatizado el proceso de resolución desde el punto en que conocemos la representación matricial del sistema de ecuaciones, intentaremos ahora diseñar un proceso automático que transforme la ecuación química en la mencionada matriz.

Podemos representar la ecuación química casi en forma literal de la siguiente manera:

haz "eq [[[1 Fe 2 S] [2 O]] [[2 Fe 3 O] [1 S 2 O]]]
escribe html enlista separa :eq

1 Fe 2 S
2 O
2 Fe 3 O
1 S 2 O

Trabajemos con la parte izquierda de la ecuación:

muestra primero :eq
[[1 Fe 2 S] [2 O]]

Segmentamos de a 2 elementos e invertimos el orden de los pares:

muestra impon [segmenta lista 2] primero :eq
[[[1 Fe] [2 S]] [[2 O]]]

muestra impon [impon "refleja segmenta lista 2] primero :eq
[[[Fe 1] [2]] [[2]]]

Apliquemos ahora el mismo proceso a ambas partes de la ecuación:

haz "temp impon [impon [impon "refleja segmenta lista 2]] :eq
muestra :temp
[[[[Fe 1] [2]] [[2]]] [[[Fe 2] [3]] [[1] [2]]]]

Queremos que los coeficientes del lado derecho de la ecuación sean negativos:

muestra dispon [mismo [impon [impon [dispon [mismo cambiasigno]]]]] :temp
[[[[Fe 1] [2]] [[2]]] [[[Fe -2] [-3]] [[-1] [-2]]]]

Juntemos ambos lados derecho e izquierdo para formar cuatro pequeños diccionarios el primero de los cuales, por ejemplo, tiene dos palabras: Fe y S cuyas definiciones son 1 y 2 respectivamente.

haz "dics junta dispon [mismo [impon [impon [dispon [mismo cambiasigno]]]]] :temp
muestra :dics
[[[Fe 1] [2]] [[2]] [[Fe -2] [-3]] [[-1] [-2]]]

Utilizaremos estos diccionarios para generar la matriz de la siguiente manera:

muestra junta :dics
[[Fe 1] [2] [2] [Fe -2] [-3] [-1] [-2]]

muestra primeros junta :dics
[Fe S O Fe O S O]

muestra esencia primeros junta :dics
[Fe S O]

muestra expon [[esencia primeros junta] mismo] :dics
[[Fe S O]
 [[[Fe 1] [2]]
  [[2]]
  [[Fe -2] [-3]]
  [[-1] [-2]]]]

muestra tabla [equipara 0 dista] expon [[esencia primeros junta] mismo] :dics
[[1 0 -2 0] [2 0 0 -1] [0 2 -3 -2]]

muestra impon [ponultimo 0] ~
 tabla [equipara 0 dista] expon [[esencia primeros junta] mismo] :dics

[[1 0 -2 0 0] [2 0 0 -1 0] [0 2 -3 -2 0]]

haz "matriz equilibra ponultimo [1 1] impon [ponultimo 0] ~
 tabla [equipara 0 dista] expon [[esencia primeros junta] mismo] :dics

muestra "matriz
[[1 0 -2 0 0] [2 0 0 -1 0] [0 2 -3 -2 0] [0 0 0 1 1]]

2. Programa

Juntemos ahora todas las piezas para crear nuestro igualador automático de ecuaciones químicas:

funciona "k [interpon 1 [mcm lista] ultimos impon "fracciona]

para igualador :eq
haz "temp impon [impon [impon "refleja segmenta lista 2]] :eq

haz "dics junta dispon [mismo [impon [impon [dispon [mismo cambiasigno]]]]] :temp

haz "matriz equilibra 0 ponultimo [1 1] impon [ponultimo 0] ~
 tabla [equipara 0 dista] expon [[esencia primeros junta] mismo] :dics
 
dev diz "producto expon [k mismo] ultimos redmat :matriz
fin

3. Resultados

Probemos nuestro igualador con diferentes ecuaciones:

? Fe S2 + ? O2? Fe2 O3 + ? SO2

muestra igualador [[[1 Fe 2 S] [2 O]] [[2 Fe 3 O] [1 S 2 O]]]
[4 11 2 8]

4 Fe S2 + 11 O22 Fe2 O3 + 8 SO2


? K Mn O4 + ? K Cl + ? H2 S O4? Mn S O4 + ? K2 S O4 + ? Cl2 + ? H2O

muestra igualador [[[1 K 1 Mn 4 O] [1 K 1 Cl] [2 H 1 S 4 O]] ~
 [[1 Mn 1 S 4 O] [2 K 1 S 4 O] [2 Cl] [2 H 1 O]]]

[2 10 8 2 6 5 8]

2 K Mn O4 + 10 K Cl + 8 H2 S O42 Mn S O4 + 6 K2 S O4 + 5 Cl2 + 8 H2O


? C4 H10 + ? O2? C O2 + ? H2O

muestra igualador [[[4 C 10 H] [2 O]] [[1 C 2 O] [2 H 1 O]]]
[2 13 8 10]

2 C4 H10 + 13 O28 C O2 + 10 H2O


? Mn (N O3)2 + ? Na Bi O3 + ? H N O3? H Mn O4 + ? Bi (N O3)3 + ? Na N O3 + ? H2O

muestra igualador [[[1 Mn 2 N 6 O] [1 Na 1 Bi 3 O] [1 H 1 N 3 O]] ~
 [[1 H 1 Mn 4 O] [1 Bi 3 N 9 O] [1 Na 1 N 3 O] [2 H 1 O]]]

[2 5 16 2 5 5 7]

2 Mn (N O3)2 + 5 Na Bi O3 + 16 H N O32 H Mn O4 + 5 Bi (N O3)3 + 5 Na N O3 + 7 H2O


? N2 H2 + ? K Mn O4 + ? H2 S O4? N O + ? Mn S O4 + ? K2 S O4 + ? H2O

muestra igualador [[[2 N 2 H] [1 K 1 Mn 4 O] [2 H 1 S 4 O]] ~
 [[1 N 1 O] [1 Mn 1 S 4 O] [2 K 1 S 4 O] [2 H 1 O]]]

[5 6 9 10 6 3 14]

5 N2 H2 + 6 K Mn O4 + 9 H2 S O410 N O + 6 Mn S O4 + 3 K2 S O4 + 14 H2O

4. Licencia

Este es un documento libre.

Autor: Daniel Ajoy

Licencia Creative Commons
Esta obra está bajo una Licencia Creative Commons Atribución-CompartirIgual 3.0 Unported.

5. Preguntas, Dudas, Comentarios, Peticiones

Síguenos en Facebook

6. Enlaces

Lenguaje de Programación Logo


Generado con PureJoy. Creación: 11:49 - Dec 15, 2017. Última Modificación: 17:12 - Apr 02, 2023