Ludwig Krippahl, 2007
Programação para as Ciências Experimentais
2006/7
Teórica 5
Ludwig Krippahl, 2007 2
Na aula de hoje...
Trabalho prático 1• Calcular concentrações de equilíbrio para um
sistema de reacções químicas
Ludwig Krippahl, 2007 3
Objectivo
Calcular concentrações de equilíbrio para um sistema de reacções químicas.
Ludwig Krippahl, 2007 4
Objectivo
Calcular concentrações de equilíbrio para um sistema de reacções químicas.
A função recebe:
CH3COOH H+ + CH3COO-
H2O H+ + OH-
Concentrações iniciais
Constantes
Ludwig Krippahl, 2007 5
Objectivo
Calcular concentrações de equilíbrio para um sistema de reacções químicas.
A função devolve:
Concentrações de equilíbrio
Ludwig Krippahl, 2007 6
Objectivo
Exemplo:
octave:7> mat=['CH3COOH = H+ + CH3COO-';'H2O = H+ + OH-'];
octave:8> eks=[1.78e-5,1.8e-16];
octave:9> esps=['CH3COOH';'H+';'CH3COO-';'H2O';'OH-'];
octave:10> cis=[0.01,0,0,55.346,0];
octave:11> res=sistema(mat,esps,eks,cis,1e-8)
res =
9.5869e-03 4.1309e-04 4.1308e-04 5.5346e+01 6.4431e-09
Ludwig Krippahl, 2007 7
Objectivo (exemplo)
octave:11> res=sistema(mat,esps,eks,cis,1e-8)
Matriz de strings descrevendo o sistema de reacções:
mat=['CH3COOH = H+ + CH3COO-';'H2O = H+ + OH-']
CH3COOH = H+ + CH3COO-
H2O = H+ + OH-
Ludwig Krippahl, 2007 8
Objectivo (exemplo)
octave:11> res=sistema(mat,esps,eks,cis,1e-8)
Matriz de strings com lista das espécies:
esps=['CH3COOH';'H+';'CH3COO-';'H2O';'OH-']CH3COOHH+ CH3COO-H2O OH-
Ludwig Krippahl, 2007 9
Objectivo (exemplo)
octave:11> res=sistema(mat,esps,eks,cis,1e-8)
Vector com constantes de equilíbrio:
eks=[1.78e-5,1.8e-16]
1.7800e-05 1.8000e-16
Ludwig Krippahl, 2007 10
Objectivo (exemplo)
octave:11> res=sistema(mat,esps,eks,cis,1e-8)
Nota: k=1.8e-16 para auto dissociação da água porque inclui [H2O]:
OHOHH
k2
Ludwig Krippahl, 2007 11
Objectivo (exemplo)
octave:11> res=sistema(mat,esps,eks,cis,1e-8)
Vector com concentrações iniciais (mesma ordem que na lista de espécies)
cis=[0.01,0,0,55.346,0]
Ludwig Krippahl, 2007 12
Objectivo (exemplo)
octave:11> res=sistema(mat,esps,eks,cis,1e-8)
Precisão do cálculo (10-8)
Nota: XeY é o mesmo que X10Y
Ludwig Krippahl, 2007 13
Objectivo (exemplo)
octave:11> res=sistema(mat,esps,eks,cis,1e-8)
Função sistema devolve:
9.5869e-03 4.1309e-04 4.1308e-04 5.5346e+01 6.4431e-09
Na mesma ordem:
CH3COOH H+ CH3COO- H2O OH-
Ludwig Krippahl, 2007 14
Execução (resumo)
Parte 1: equilíbrio de uma reacção Parte 2: equilíbrio de um sistema Parte 1 e 2 lidam só com argumentos
numéricos: estequiometria, constantes... Parte 3: converter strings em matriz de
estequiometria Parte 4: juntar tudo.
Ludwig Krippahl, 2007 15
Parte 1 – estequiometria
Reacção genérica:
2A + B 2D Desloca-se x para o equilíbrio: [A]=CiA -2x
[B]=CiB -1x
[D]=CiD +2x
Ludwig Krippahl, 2007 16
Parte 1 – estequiometria
Reacção genérica:
2A + B 2D Usar estes coeficientes: [A]=CiA -2x
[B]=CiB -1x
[D]=CiD +2x
Ludwig Krippahl, 2007 17
Parte 1 – estequiometria
Reacção genérica:
2A + B 2D Vector: [-2, -1, 2] [A]=CiA -2x
[B]=CiB -1x
[D]=CiD +2x
Ludwig Krippahl, 2007 18
Parte 1 – estequiometria
Reacção genérica:
2A + B 2D Se também há C: [-2, -1, 0, 2] [A]=CiA -2x
[B]=CiB -1x
[C]=CiC +0x
[D]=CiD +2x
Ludwig Krippahl, 2007 19
Parte 1 – concentrações
Concentrações iniciais dadas por outro vector, com a mesma dimensão, pela mesma ordem (A, B, C, D):
cis= [2, 2, 1, 0]
Ludwig Krippahl, 2007 20
Parte 1 - resultado
Dados:• esteq=[-2, -1, 0, 2]
• cis= [2, 2, 1, 0]
• k=1
• precisao=1e-8
Função devolve 0.54660, que é o valor de x.
Ludwig Krippahl, 2007 21
Parte 1 - resultado
Função devolve 0.54660, que é o valor de x:
[A]=CiA -2x
[B]=CiB -1x [C]=CiC +0x [D]=CiD +2x
Ludwig Krippahl, 2007 22
Parte 1 - algoritmo
Calcular o valor de x que dá uma distância de zero ao equilíbrio
2A + B 2D
022
2
2
DBAkeBA
Dke
Ludwig Krippahl, 2007 23
Parte 1 - algoritmo
Distância ao equilíbrio:• positivo se reagentes a mais
• negativo se produtos a mais
• zero no equilíbrio
022
2
2
DBAkeBA
Dke
Ludwig Krippahl, 2007 24
Parte 1 - algoritmo
Basta encontrar o valor de x para o qual a distância se anula, sabendo que:• concentrações = cis+x*coeficientes
022
2
2
DBAkeBA
Dke
Ludwig Krippahl, 2007 25
Parte 1 - algoritmo
Encontrar o zero de uma função. Mas precisamos do intervalo onde está o
zero...
Ludwig Krippahl, 2007 26
Parte 1 – algoritmo (limites)
2A + B 2D Desloca-se x para o equilíbrio: [A]=CiA -2x [B]=CiB -1x [D]=CiD +2x Quais são os limites de x?
• O menor de CiA/2, CiB
• -CiD/2
Ludwig Krippahl, 2007 27
Parte 1 – algoritmo (limites)
Quais são os limites de x?• Positivo: o menor valor da concentração dos
reagentes a dividir pelos coeficientes (atenção: os coeficientes dos reagentes são guardados como negativos).
• Negativo: o maior valor (é negativo) da concentração dos produtos a dividir pelo simétrico dos coeficientes (os coeficientes dos produtos são positivos na matriz)
Ludwig Krippahl, 2007 28
Parte 2 - algoritmo
Dado um conjunto de reacções definido numa matriz (uma por linha):• Calcular o x para a primeira, actualizar
concentrações.
• Usar essas concentrações para a segunda, etc..
• Guardar o maior valor absoluto de x
• Parar quando for menor que a precisão
Ludwig Krippahl, 2007 29
Parte 3
Criar a matriz de coeficientes estequimétricos a partir das matrizes de strings com reacções e espécies.
Ludwig Krippahl, 2007 30
Parte 3 - reacções
O sinal + com um espaço antes e um espaço depois separa as espécies.
Os espaços distinguem este uso do sinal + do caso em que faz parte do nome da espécie. E.g.:
H+ + OH-
Ludwig Krippahl, 2007 31
Parte 3 - reacções
O sinal + com um espaço antes e um espaço depois separa as espécies.
Os espaços distinguem este uso do sinal + do caso em que faz parte do nome da espécie. E.g.:
H+ + OH- Nome da espécie (não tem espaço antes
do +)
Ludwig Krippahl, 2007 32
Parte 3 - reacções
O sinal + com um espaço antes e um espaço depois separa as espécies.
Os espaços distinguem este uso do sinal + do caso em que faz parte do nome da espécie. E.g.:
H+ + OH- Separa espécies (tem espaços antes e
depois do +)
Ludwig Krippahl, 2007 33
Parte 3 - reacções
O sinal = que separa reagentes e produtos também tem um espaço antes e um espaço depois. E.g.:
H2O = H+ + OH-
Ludwig Krippahl, 2007 34
Parte 3 - reacções
Números no inicio de cada espécie indicam a estequiometria:
2NH4Cl + 2CaO = CaCl2 + Ca(OH)2 + 2NH3
Ludwig Krippahl, 2007 35
Parte 3 - reacções
Números no inicio de cada espécie indicam a estequiometria:
2NH4Cl + 2CaO = CaCl2 + Ca(OH)2 + 2NH3
Quando não há número o coeficiente estequiométrico é 1.
Ludwig Krippahl, 2007 36
Parte 3 - espécies
A lista de espécies é dada por uma matriz de strings. E.g.:
“NH4Cl ““CaO ““CaCl2 ““Ca(OH)2 ““NH3 “
Atenção que o Octave alinha as strings preenchendo com espaços.
Ludwig Krippahl, 2007 37
Parte 3 - espécies
É preciso encontrar a espécie na lista para saber em que posição vem. A ordem da lista determina a ordem dos coeficientes de estequiometria.
Para isso é preciso comparar strings:• strcmp
Ludwig Krippahl, 2007 38
Parte 3 – comparar strings
octave:7> strcmp('texto','texto')ans = 1octave:8> strcmp('texto','outro texto')ans = 0octave:9> 'texto'=='outro texto'error: operator ==: nonconformant arguments.octave:9> 'texto'=='texto'ans = 1 1 1 1 1
Ludwig Krippahl, 2007 39
Parte 3 – comparar strings
Cuidado com os espaços:
octave:10> strcmp('texto','texto ')
ans = 0
Usar o deblank: remove espaços do fim
Ludwig Krippahl, 2007 40
Parte 3 – comparar strings
Cuidado com os espaços: Usar deblank:
octave:14> ['texto ','|']
ans = texto |
octave:15> [deblank('texto '),'|']
ans = texto|
Ludwig Krippahl, 2007 41
Parte 3 – algoritmo (para cada reacção)
Partir em reagentes e produtos Partir cada um em espécies Separar os nomes e os coeficientes de
estequiometria. Encontrar a posição de cada reagente e
produto na matriz de espécies Criar o vector de estequiometria (com 0 nos
que não participam)
Ludwig Krippahl, 2007 42
Parte 3 – exemplo Reacções
CH3COOH = H+ + CH3COO-H2O = H+ + OH-
ListaCH3COOHH+CH3COO-H2OOH-
Resultado-1, 1, 1, 0, 0 0, 1, 0,-1, 1
Ludwig Krippahl, 2007 43
Parte 3 – exemplo Reacções
CH3COOH = H+ + CH3COO-H2O = H+ + OH-
ListaCH3COOH primeiro da listaH+CH3COO-H2OOH-
Resultado-1, 1, 1, 0, 0 0, 1, 0,-1, 1
Ludwig Krippahl, 2007 44
Parte 3 – exemplo Reacções
CH3COOH = H+ + CH3COO-H2O = H+ + OH-
ListaCH3COOHH+ segundo da listaCH3COO-H2OOH-
Resultado-1, 1, 1, 0, 0 0, 1, 0,-1, 1
Ludwig Krippahl, 2007 45
Parte 3 – exemplo Reacções
CH3COOH = H+ + CH3COO-H2O = H+ + OH-
ListaCH3COOHH+CH3COO- terceiroH2OOH-
Resultado-1, 1, 1, 0, 0 0, 1, 0,-1, 1
Ludwig Krippahl, 2007 46
Parte 3 – exemplo Reacções
CH3COOH = H+ + CH3COO-H2O = H+ + OH-
ListaCH3COOHH+CH3COO-H2O quartoOH-
Resultado-1, 1, 1, 0, 0 0, 1, 0,-1, 1
Ludwig Krippahl, 2007 47
Parte 3 – exemplo Reacções
CH3COOH = H+ + CH3COO-H2O = H+ + OH-
ListaCH3COOHH+CH3COO-H2OOH- quinto
Resultado-1, 1, 1, 0, 0 0, 1, 0,-1, 1
Ludwig Krippahl, 2007 48
Parte 4 – juntar tudo
Recebe as matrizes de strings com reacções e espécies, os vectores com constantes de equilíbrio e concentrações iniciais, e valor para a precisão.
Devolve a constante de equilibrio. Chamar função da parte 3, usar o
resultado para a função da parte 2, devolver o resultado desta.
Ludwig Krippahl, 2007 49
Execução
Grupos de 2 alunos. 2 aulas práticas + o tempo que for
preciso. Em cada aula entregam uma ficha com o
progresso até essa altura. Entrega da versão final: até 23 de Abril
às 9:00 am.
Ludwig Krippahl, 2007 50
Fraudes
Não tirem dúvidas com os colegas. Não copiem. Os trabalhos vão ser comparados,
incluindo as fichas com as versões intermédias.
Copiar prejudica quem copia e quem deixa copiar.
Ludwig Krippahl, 2007 51
Dúvidas durante o trabalho
Aproveitem as aulas para tirar dúvidas. Horário de dúvidas. Email.
Ludwig Krippahl, 2007 52
Dúvidas