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

Upload: internet

Post on 17-Apr-2015

104 views

Category:

Documents


1 download

TRANSCRIPT

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