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:
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:
Finalmente los coeficientes deberían ser multiplicados por una valor adecuado (llamémoslo k) para obtener enteros:
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]]
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
|
|
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] [S 2]] [[O 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] [S 2]] [[O 2]]] [[[Fe 2] [O 3]] [[S 1] [O 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] [S 2]] [[O 2]]] [[[Fe -2] [O -3]] [[S -1] [O -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] [S 2]] [[O 2]] [[Fe -2] [O -3]] [[S -1] [O -2]]]
Utilizaremos estos diccionarios para generar la matriz de la siguiente manera:
muestra junta :dics
[[Fe 1] [S 2] [O 2] [Fe -2] [O -3] [S -1] [O -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] [S 2]]
[[O 2]]
[[Fe -2] [O -3]]
[[S -1] [O -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]]
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
Probemos nuestro igualador con diferentes ecuaciones:
muestra igualador [[[1 Fe 2 S] [2 O]] [[2 Fe 3 O] [1 S 2 O]]]
[4 11 2 8]
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]
muestra igualador [[[4 C 10 H] [2 O]] [[1 C 2 O] [2 H 1 O]]]
[2 13 8 10]
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]
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]
Este es un documento libre.
Autor: Daniel Ajoy
Esta obra está bajo una Licencia Creative Commons Atribución-CompartirIgual 3.0 Unported.