fctunl_big
Ludwig Krippahl, 2007
Programação para asCiências Experimentais2006/7
Teórica 5
Ludwig Krippahl, 2007
2
fctunl_big
Na aula de hoje...
Trabalho prático 1
Calcular concentrações de equilíbrio para umsistema de reacções químicas
Ludwig Krippahl, 2007
3
fctunl_big
Objectivo
Calcular concentrações de equilíbriopara um sistema de reacções químicas.
Ludwig Krippahl, 2007
4
fctunl_big
Objectivo
Calcular concentrações de equilíbriopara um sistema de reacções químicas.
A função recebe:
CH3COOH  H+ + CH3COO-
H2 H+ + OH-
Concentrações iniciais
Constantes
Ludwig Krippahl, 2007
5
fctunl_big
Objectivo
Calcular concentrações de equilíbriopara um sistema de reacções químicas.
A função devolve:
Concentrações de equilíbrio
Ludwig Krippahl, 2007
6
fctunl_big
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
fctunl_big
Objectivo (exemplo)
octave:11> res=sistema(mat,esps,eks,cis,1e-8)
Matriz de strings descrevendo o sistema dereacções:
mat=['CH3COOH = H+ + CH3COO-';'H2O = H+ + OH-']
CH3COOH = H+ + CH3COO-
H2O = H+ + OH-
Ludwig Krippahl, 2007
8
fctunl_big
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-']
CH3COOH
H+
CH3COO-
H2O
OH-
Ludwig Krippahl, 2007
9
fctunl_big
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
fctunl_big
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]:
Ludwig Krippahl, 2007
11
fctunl_big
Objectivo (exemplo)
octave:11> res=sistema(mat,esps,eks,cis,1e-8)
Vector com concentrações iniciais (mesmaordem que na lista de espécies)
cis=[0.01,0,0,55.346,0]
Ludwig Krippahl, 2007
12
fctunl_big
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
fctunl_big
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:
CH3COOHH+ CH3COO-H2OOH-
Ludwig Krippahl, 2007
14
fctunl_big
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 argumentosnuméricos: estequiometria, constantes...
Parte 3: converter strings em matriz deestequiometria
Parte 4: juntar tudo.
Ludwig Krippahl, 2007
15
fctunl_big
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
fctunl_big
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
fctunl_big
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
fctunl_big
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]=Ci+0x
[D]=CiD+2x
Ludwig Krippahl, 2007
19
fctunl_big
Parte 1 – concentrações
Concentrações iniciais dadas por outrovector, com a mesma dimensão, pelamesma ordem (A, B, C, D):
cis= [2, 2, 1, 0]
Ludwig Krippahl, 2007
20
fctunl_big
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 valorde x.
Ludwig Krippahl, 2007
21
fctunl_big
Parte 1 - resultado
Função devolve 0.54660, que é o valorde x:
[A]=CiA-2x
[B]=CiB-1x
[C]=CiC +0x
[D]=CiD+2x
Ludwig Krippahl, 2007
22
fctunl_big
Parte 1 - algoritmo
Calcular o valor de x que dá umadistância de zero ao equilíbrio
2A + B  2D
Ludwig Krippahl, 2007
23
fctunl_big
Parte 1 - algoritmo
Distância ao equilíbrio:
positivo se reagentes a mais
negativo se produtos a mais
zero no equilíbrio
Ludwig Krippahl, 2007
24
fctunl_big
Parte 1 - algoritmo
Basta encontrar o valor de x para o quala distância se anula, sabendo que:
concentrações = cis+x*coeficientes
Ludwig Krippahl, 2007
25
fctunl_big
Parte 1 - algoritmo
Encontrar o zero de uma função.
Mas precisamos do intervalo onde estáo zero...
Ludwig Krippahl, 2007
26
fctunl_big
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
fctunl_big
Parte 1 – algoritmo (limites)
Quais são os limites de x?
Positivo: o menor valor da concentração dosreagentes a dividir pelos coeficientes(atenção: os coeficientes dos reagentes sãoguardados como negativos).
Negativo: o maior valor (é negativo) daconcentração dos produtos a dividir pelosimétrico dos coeficientes (os coeficientesdos produtos são positivos na matriz)
Ludwig Krippahl, 2007
28
fctunl_big
Parte 2 - algoritmo
Dado um conjunto de reacções definidonuma matriz (uma por linha):
Calcular o x para a primeira, actualizarconcentraçõ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
fctunl_big
Parte 3
Criar a matriz de coeficientesestequimétricos a partir das matrizes destrings com reacções e espécies.
Ludwig Krippahl, 2007
30
fctunl_big
Parte 3 - reacções
O sinal + com um espaço antes e umespaço depois separa as espécies.
Os espaços distinguem este uso do sinal+ do caso em que faz parte do nome daespécie. E.g.:
 H+ + OH-
Ludwig Krippahl, 2007
31
fctunl_big
Parte 3 - reacções
O sinal + com um espaço antes e umespaço depois separa as espécies.
Os espaços distinguem este uso do sinal+ do caso em que faz parte do nome daespécie. E.g.:
 H+ + OH-
Nome da espécie (não tem espaçoantes do +)
Ludwig Krippahl, 2007
32
fctunl_big
Parte 3 - reacções
O sinal + com um espaço antes e umespaço depois separa as espécies.
Os espaços distinguem este uso do sinal+ do caso em que faz parte do nome daespécie. E.g.:
 H+ + OH-
Separa espécies (tem espaços antes edepois do +)
Ludwig Krippahl, 2007
33
fctunl_big
Parte 3 - reacções
O sinal = que separa reagentes eprodutos também tem um espaço antese um espaço depois. E.g.:
H2O = H+ + OH-
Ludwig Krippahl, 2007
34
fctunl_big
Parte 3 - reacções
Números no inicio de cada espécie indicama estequiometria:
2NH4Cl + 2CaO = CaCl2 + Ca(OH)2 + 2NH3
Ludwig Krippahl, 2007
35
fctunl_big
Parte 3 - reacções
Números no inicio de cada espécie indicama estequiometria:
2NH4Cl + 2CaO = CaCl2 + Ca(OH)2 + 2NH3
Quando não há número o coeficienteestequiométrico é 1.
Ludwig Krippahl, 2007
36
fctunl_big
Parte 3 - espécies
A lista de espécies é dada por uma matriz destrings. E.g.:
“NH4Cl
“CaO
“CaCl2
“Ca(OH)2
“NH3
Atenção que o Octave alinha as stringspreenchendo com espaços.
Ludwig Krippahl, 2007
37
fctunl_big
Parte 3 - espécies
É preciso encontrar a espécie na lista parasaber em que posição vem. A ordem da listadetermina a ordem dos coeficientes deestequiometria.
Para isso é preciso comparar strings:
strcmp
Ludwig Krippahl, 2007
38
fctunl_big
Parte 3 – comparar strings
octave:7> strcmp('texto','texto')
ans = 1
octave:8> strcmp('texto','outro texto')
ans = 0
octave:9> 'texto'=='outro texto'
error: operator ==: nonconformant arguments.
octave:9> 'texto'=='texto'
ans =
  1  1  1  1  1
Ludwig Krippahl, 2007
39
fctunl_big
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
fctunl_big
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
fctunl_big
Parte 3 – algoritmo (para cadareacção)
Partir em reagentes e produtos
Partir cada um em espécies
Separar os nomes e os coeficientes deestequiometria.
Encontrar a posição de cada reagente eproduto na matriz de espécies
Criar o vector de estequiometria (com 0 nosque não participam)
Ludwig Krippahl, 2007
42
fctunl_big
Parte 3 – exemplo
Reacções
CH3COOH = H+ + CH3COO-
H2O = H+ + OH-
Lista
CH3COOH
H+
CH3COO-
H2O
OH-
Resultado
-1, 1, 1, 0, 0
 0, 1, 0,-1, 1
Ludwig Krippahl, 2007
43
fctunl_big
Parte 3 – exemplo
Reacções
CH3COOH = H+ + CH3COO-
H2O = H+ + OH-
Lista
CH3COOHprimeiro da lista
H+
CH3COO-
H2O
OH-
Resultado
-1, 1, 1, 0, 0
 0, 1, 0,-1, 1
Ludwig Krippahl, 2007
44
fctunl_big
Parte 3 – exemplo
Reacções
CH3COOH = H+ + CH3COO-
H2O = H+ + OH-
Lista
CH3COOH
H+segundo da lista
CH3COO-
H2O
OH-
Resultado
-1, 1, 1, 0, 0
 0, 1, 0,-1, 1
Ludwig Krippahl, 2007
45
fctunl_big
Parte 3 – exemplo
Reacções
CH3COOH = H+ + CH3COO-
H2O = H+ + OH-
Lista
CH3COOH
H+
CH3COO-terceiro
H2O
OH-
Resultado
-1, 1, 1, 0, 0
 0, 1, 0,-1, 1
Ludwig Krippahl, 2007
46
fctunl_big
Parte 3 – exemplo
Reacções
CH3COOH = H+ + CH3COO-
H2O = H+ + OH-
Lista
CH3COOH
H+
CH3COO-
H2Oquarto
OH-
Resultado
-1, 1, 1, 0, 0
 0, 1, 0,-1, 1
Ludwig Krippahl, 2007
47
fctunl_big
Parte 3 – exemplo
Reacções
CH3COOH = H+ + CH3COO-
H2O = H+ + OH-
Lista
CH3COOH
H+
CH3COO-
H2O
OH-quinto
Resultado
-1, 1, 1, 0, 0
 0, 1, 0,-1, 1
Ludwig Krippahl, 2007
48
fctunl_big
Parte 4 – juntar tudo
Recebe as matrizes de strings comreacções e espécies, os vectores comconstantes de equilíbrio e concentraçõesiniciais, e valor para a precisão.
Devolve a constante de equilibrio.
Chamar função da parte 3, usar oresultado para a função da parte 2,devolver o resultado desta.
Ludwig Krippahl, 2007
49
fctunl_big
Execução
Grupos de 2 alunos.
2 aulas práticas + o tempo que forpreciso.
Em cada aula entregam uma ficha como progresso até essa altura.
Entrega da versão final: até 23 de Abrilàs 9:00 am.
Ludwig Krippahl, 2007
50
fctunl_big
Fraudes
Não tirem dúvidas com os colegas.
Não copiem.
Os trabalhos vão ser comparados,incluindo as fichas com as versõesintermédias.
Copiar prejudica quem copia e quemdeixa copiar.
Ludwig Krippahl, 2007
51
fctunl_big
Dúvidas durante o trabalho
Aproveitem as aulas para tirar dúvidas.
Horário de dúvidas.
Email.
Ludwig Krippahl, 2007
52
fctunl_big
Dúvidas