Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

52
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5

Transcript of Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

Page 1: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

Ludwig Krippahl, 2007

Programação para as Ciências Experimentais

2006/7

Teórica 5

Page 2: 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

Page 3: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

Ludwig Krippahl, 2007 3

Objectivo

Calcular concentrações de equilíbrio para um sistema de reacções químicas.

Page 4: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 5: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 6: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 7: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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-

Page 8: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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-

Page 9: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 10: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 11: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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]

Page 12: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 13: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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-

Page 14: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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.

Page 15: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 16: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 17: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 18: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 19: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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]

Page 20: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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.

Page 21: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 22: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 23: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 24: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 25: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

Ludwig Krippahl, 2007 25

Parte 1 - algoritmo

Encontrar o zero de uma função. Mas precisamos do intervalo onde está o

zero...

Page 26: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 27: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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)

Page 28: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 29: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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.

Page 30: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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-

Page 31: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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 +)

Page 32: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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 +)

Page 33: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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-

Page 34: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 35: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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.

Page 36: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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.

Page 37: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 38: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 39: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 40: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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|

Page 41: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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)

Page 42: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 43: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 44: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 45: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 46: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 47: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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

Page 48: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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.

Page 49: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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.

Page 50: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

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.

Page 51: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

Ludwig Krippahl, 2007 51

Dúvidas durante o trabalho

Aproveitem as aulas para tirar dúvidas. Horário de dúvidas. Email.

Page 52: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.

Ludwig Krippahl, 2007 52

Dúvidas