ludwig krippahl, 2008 programação para as ciências experimentais 2007/8 teórica 9

65
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Upload: internet

Post on 17-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008

Programação para as Ciências Experimentais

2007/8

Teórica 9

Page 2: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 2

Na aula de hoje...

Resolução do trabalho 1 Integração de funções de uma variável. Integração de equações diferenciais. Osciladores químicos.

Page 3: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 3

Trabalho 1

Problema:• Ler sequências (lefasta)

• Devolve matrizes com nomes e sequências.

• Ler a tabela com pks.

• Encontrar grupos na sequência

• Calcular o zero

Page 4: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 4

Trabalho 1function t=letabela(fich)id=fopen(fich,"r");ix=1;fgetl(id);while !feof(id) m=split(fgetl(id),"\t"); t(ix).cod=m(1,1); t(ix).coh=str2num(m(2,:)); t(ix).nh=str2num(m(3,:)); t(ix).cl=str2num(m(4,:)); t(ix).cd=str2num(m(5,:)); ix=ix+1;endwhilefclose(id);

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

Ludwig Krippahl, 2008 5

Trabalho 1

Problema:• Ler sequências (lefasta)

• Devolve matrizes com nomes e sequências.

• Ler a tabela com pks (letabela).• Devolve vector de estruturas

• Encontrar grupos na sequência

• Calcular o zero

Page 6: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 6

Trabalho 1

Problema:• Ler sequências (lefasta)

• Devolve matrizes com nomes e sequências.

• Ler a tabela com pks (letabela).• Devolve vector de estruturas

• Encontrar grupos na sequência• Converter logo tudo...

• Calcular o zero

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

Ludwig Krippahl, 2008 7

Trabalho 1

seq2pks• Recebe sequência e tabela com os pks

• Devolve matriz de 3 colunas e uma linha para cada grupo• 1ª coluna: o número de vezes que o grupo ocorre

• 2ª coluna: o pka do grupo

• 3ª coluna: a carga desprotonada do grupo

• Desta forma só é preciso consultar a tabela uma vez para cada sequência.

Page 8: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 8

Trabalho 1function pks=seq2pks(seq,tabela) ultimo=length(seq); pks=[]; for f=1:length(tabela) if strcmp(tabela(f).cod,seq(1)) pks=[pks;1,tabela(f).nh,0]; endif if strcmp(tabela(f).cod,seq(ultimo)) pks=[pks;1,tabela(f).coh,-1]; endif ...(cadeias laterais) endforendfunction

Percorre a tabela

Page 9: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 9

Trabalho 1function pks=seq2pks(seq,tabela) ultimo=length(seq); pks=[]; for f=1:length(tabela) if strcmp(tabela(f).cod,seq(1)) pks=[pks;1,tabela(f).nh,0]; endif if strcmp(tabela(f).cod,seq(ultimo)) pks=[pks;1,tabela(f).coh,-1]; endif ...(cadeias laterais) endforendfunction

Se o aminoácido nesta posição da tabela é o primeiro da sequência, acrescenta NH3

Page 10: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 10

Trabalho 1function pks=seq2pks(seq,tabela) ultimo=length(seq); pks=[]; for f=1:length(tabela) if strcmp(tabela(f).cod,seq(1)) pks=[pks;1,tabela(f).nh,0]; endif if strcmp(tabela(f).cod,seq(ultimo)) pks=[pks;1,tabela(f).coh,-1]; endif ...(cadeias laterais) endforendfunction

Se o aminoácido nesta posição da tabela é o último da sequência, acrescenta COOH

Page 11: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 11

Trabalho 1function pks=seq2pks(seq,tabela) ultimo=length(seq); pks=[]; for f=1:length(tabela) if strcmp(tabela(f).cod,seq(1)) pks=[pks;1,tabela(f).nh,0]; endif if strcmp(tabela(f).cod,seq(ultimo)) pks=[pks;1,tabela(f).coh,-1]; endif ...(cadeias laterais) endforendfunction

Processa as cadeias laterais

Page 12: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 12

Trabalho 1

if !isempty(tabela(f).cl)

v=findstr(seq,tabela(f).cod);

if !isempty(v) pks=[pks;length(v),

tabela(f).cl,tabela(f).cd];

endif

endifSe tem cadeia lateral

Page 13: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 13

Trabalho 1

if !isempty(tabela(f).cl)

v=findstr(seq,tabela(f).cod);

if !isempty(v) pks=[pks;length(v),

tabela(f).cl,tabela(f).cd];

endif

endifConta os aminoácidos destes na sequência

Page 14: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 14

Trabalho 1

if !isempty(tabela(f).cl)

v=findstr(seq,tabela(f).cod);

if !isempty(v) pks=[pks;length(v),

tabela(f).cl,tabela(f).cd];

endif

endifSe há acrescenta esse número de grupos à matriz dos pks

Page 15: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 15

Trabalho 1

Problema:• Ler sequências (lefasta)

• Devolve matrizes com nomes e sequências.

• Ler a tabela com pks (letabela).• Devolve vector de estruturas

• Encontrar grupos na sequência• Converter logo tudo...

• Calcular o zero• Usa a função zeropol modificada

Page 16: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 16

Trabalho 1

function pH=pisoelec(pks,prec) x1=1; x2=13; y1=carga(pks,x1); y2=carga(pks,x2); while abs(x1-x2)>prec(bipartição...)endwhile pH=xm;endfunction

Recebe a matriz com os dados dos grupos e a precisão.

Page 17: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 17

Trabalho 1

function pH=pisoelec(pks,prec) x1=1; x2=13; y1=carga(pks,x1); y2=carga(pks,x2); while abs(x1-x2)>prec(bipartição...)endwhile pH=xm;endfunction

Intervalo inicial (x1 e x2 podiam vir como argumentos)

Page 18: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 18

Trabalho 1

function pH=pisoelec(pks,prec) x1=1; x2=13; y1=carga(pks,x1); y2=carga(pks,x2); while abs(x1-x2)>prec(bipartição...)endwhile pH=xm;endfunction

A carga total é calculada em função do pH e da matriz com os pks e cargas.

Page 19: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 19

Trabalho 1

function pH=pisoelec(pks,prec) x1=1; x2=13; y1=carga(pks,x1); y2=carga(pks,x2); while abs(x1-x2)>prec(bipartição...)endwhile pH=xm;endfunction

O mesmo do zeropol...

Page 20: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 20

Trabalho 1

Calcular a carga de um grupo:

function c=hendhas(pH,pKa,ch)

lf=pH-pKa; %log 10 da proporção [A-]/[AH]

f=10.^lf; % proporção [A-]/[AH];

A=f./(1+f); % fracção [A-]

c=ch.*A+(ch+1).*(1-A);

endfunction

Page 21: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 21

Trabalho 1

Calcular a carga da sequência:

function c=carga(pks,pH)

c=0;

for f=1:rows(pks)

c=c+pks(f,1)*hendhas(pH,pks(f,2),pks(f,3));

endfor

endfunction

Page 22: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 22

Trabalho 1

Calcular a carga da sequência:• Mas como hendhas está preparada para

vectores, podia ser:

function c=carga(pks,pH)

c=sum(pks(:,1).*hendhas(pH,pks(:,2),pks(:,3)));

endfunction

Page 23: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 23

Trabalho 1

function vpis=calculapis(fich) [ns,seqs]=lefasta(fich); tabela=letabela("pKas.txt"); vpis=[]; for f=1:rows(seqs) pks=seq2pks(deblank(seqs(f,:)),tabela); vpis=[vpis;pisoelec(pks,0.1)]; endforendfunction

Page 24: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 24

Trabalho 1

calculapis• lefasta

• letabela

• seq2pks

• pisoelec• carga

• hendhas

Page 25: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 25

Integração numérica.

y = exp(-x3)

Page 26: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 26

Integração numérica

Aproximar a função considerando cada rectângulo

dx*y

Page 27: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 27

Integração numérica

Quanto menor dx mais preciso dx*y

Page 28: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 28

Integração numérica

function int=intexpxcubo(dx,x0,x1);

int=0;

for x=x0:dx:x1

int=int+dx*exp(-x^3);

endfor

endfunction

Page 29: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 29

Integração numérica

octave:114> intexpxcubo(0.2,0,2)

ans = 0.99296

octave:115> intexpxcubo(0.02,0,2)

ans = 0.90296

octave:116> intexpxcubo(0.002,0,2)

ans = 0.89395

octave:117> intexpxcubo(0.0002,0,2)

ans = 0.89305

Page 30: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 30

Integração numérica

Aproximar melhor pela regra do trapézio

Page 31: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 31

Integração numérica

Àrea: base*(a+b)/2

a

b

base

Page 32: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 32

Integração numérica

Implementação:• Método ingénuo: calcular os dois y em cada

iteração.

• Método mais eficiente: calcular o y2 e guardá-lo no y1 para a próxima

y1 y2

Page 33: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 33

Integração numérica

function int=intexcubot(dx,x0,x1)int=0;y1=exp(-x0^3);for x=x0+dx:dx:x1

y2=exp(-x^3);int=int+dx*(y1+y2)/2;y1=y2;

endforendfunction

Page 34: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 34

Integração numérica

octave:180> intexcubot(0.2,0,2)ans = 0.89293octave:181> intexpxcubo(0.2,0,2)ans = 0.99296octave:182> intexcubot(0.002,0,2)ans = 0.89295octave:183> intexpxcubo(0.002,0,2)ans = 0.89395

Page 35: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 35

Integração numérica

Implementação mais genérica:• Separar a função que calcula o y da função

que integra.

Page 36: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 36

Integração numérica

Implementação mais genérica:• Cálculo y em função de x

• function y = nome(x)

function y=expxcubo(x)

y=exp(-x.^3);

endfunction

Page 37: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 37

Integração numérica Implementação mais genérica:

• Integração, chamando a função com feval

function int=trapezio(funcao,dx,x0,x1)int=0;y1=feval(funcao,x0);for x=x0+dx:dx:x1

y2=feval(funcao,x);int=int+dx*(y1+y2)/2;y1=y2;

endforendfunction

Page 38: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 38

Integração numérica

Implementação mais genérica:

octave:185> trapezio("expxcubo",0.2,0,2)

ans = 0.89293

Nota: “expxcubo” em vez de expxcubo!

Page 39: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 39

E se não podemos traçar a função?

Exemplo:• A + B C

• d[C]/dt = K [A] [B]

• d[A]/dt = -K [A] [B]

• d[B]/dt = -K [A] [B]

Não podemos calcular a área geometricamente pelo gráfico da função.

Page 40: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 40

E se não podemos traçar a função?

Exemplo:• A + B C

• d[C]/dt = K [A] [B]

• d[A]/dt = -K [A] [B]

• d[B]/dt = -K [A] [B]

Mas podemos usar um método semelhante: método de Euler

Page 41: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 41

Integrar um sistema de equações diferenciais.

Inicio, t0

• [A]0 [B]0 [C]0

Passo 1

• Usar valores em t0 para calcular derivada em t0

• Usar derivada para extrapolar t1:

• [A]1 = [A]0 + d[A]/dt * passo

Page 42: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 42

Integrar um sistema de equações diferenciais.

Inicio, t0

• [A]0 [B]0 [C]0

Passo 1

• Usar valores em t0 para calcular derivada em t0

• Usar derivada para extrapolar t1:

• [A]1 = [A]0 + d[A]/dt * passo

Próximo valor

Page 43: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 43

Integrar um sistema de equações diferenciais.

Inicio, t0

• [A]0 [B]0 [C]0

Passo 1

• Usar valores em t0 para calcular derivada em t0

• Usar derivada para extrapolar t1:

• [A]1 = [A]0 + d[A]/dt * passo

Valor anterior

Page 44: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 44

Integrar um sistema de equações diferenciais.

Inicio, t0

• [A]0 [B]0 [C]0

Passo 1

• Usar valores em t0 para calcular derivada em t0

• Usar derivada para extrapolar t1:

• [A]1 = [A]0 + d[A]/dt * passo

Derivada vezes passo.

Page 45: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 45

Integrar um sistema de equações diferenciais.function tcs=reacabc(cis,dt,tmax,k)tcs=[0,cis]; %valores em t0for t=0:dt:tmax

abk=cis(1)*cis(2)*k*dt; calcular a derivada% A e Bcis(1)=cis(1)-abk;cis(2)=cis(2)-abk;% Ccis(3)=cis(3)+abk; actualizar concentrações% guarda o novo pontotcs=[tcs;t,cis];

endforendfunction

Page 46: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 46

Integrar um sistema de equações diferenciais.

cis=[1,1.5,0]

k=1;

pontos=reacabc(cis,0.1,10,k);

hold off

axis

plot(pontos(:,1),pontos(:,2:columns(pontos)))

Plot: primeira coluna é o tempo, as restantes colunas são as concentrações

Page 47: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 47

Integrar um sistema de equações diferenciais.

Page 48: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 48

Generalizando: cinética com método de Euler

Exemplo• A + B C

• Reacção reversível: kd e ki

• Velocidade = [C]ki - [A][B]kd

Page 49: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 49

Generalizando: cinética com método de Euler

Recebe • Estequiometria,

• Concentrações iniciais

• Kd, Ki, dt e tmax.

Caso geral• Veloc. = kd*reagentesesteq - ki*produtosesteq

• Alterar as concentrações• d[A]/dt= velocidade*esteq(A)

• cs=cs+derivada*dt

Page 50: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 50

Generalizando: cinética com método de Euler

Devolve• Matriz com tempo (1ª coluna) e concentração

por iteração (para fazer o gráfico).

Estequiometria, • 2 vectores, reagentes e produtos

• Exemplo:• A + B 2C

• er=[1, 1, 0]

• ep=[0, 0, 2]

Page 51: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 51

Cinética com método de Euler

Função

function tconcs=cinetica(er,ep,cis,kd,ki,dt,tmax)

Page 52: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 52

Cinética com método de Euler

Integração:

for t=0:dt:tmax v=prod(cis.^er)*kd-prod(cis.^ep)*ki; deriv=v*ep-v*er; cis=cis+deriv*dt; tconcs=[tconcs;t,cis];endfor

Velocidade da reacção

Page 53: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 53

Cinética com método de Euler

Integração:

for t=0:dt:tmax v=prod(cis.^er)*kd-prod(cis.^ep)*ki; deriv=v*ep-v*er; cis=cis+deriv*dt; tconcs=[tconcs;t,cis];endfor

Calcula derivadas e actualiza concentrações

Page 54: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 54

Cinética com método de Euler

Integração:

for t=0:dt:tmax v=prod(cis.^er)*kd-prod(cis.^ep)*ki; deriv=v*ep-v*er; cis=cis+deriv*dt; tconcs=[tconcs;t,cis];endfor

Guarda valores na matriz

Page 55: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 55

Cinética com método de Euler

Reacção do tipo• A + B C

kd=1; constante directaki=0.5; constante inversa

cis=[1,2,0]; concentrações t0

er=[1,1,0] esteq. reagentesep=[0,0,1] esteq. produtospontos=cinetica(er,ep,cis,kd,ki,0.1,5);

Page 56: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 56

Cinética com método de Euler

Reacção do tipo• A + B C

hold off

axiseixo automático

plot(pontos(:,1),pontos(:,2:columns(pontos)))

Page 57: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 57

Cinética com método de Euler

Page 58: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 58

Sistema de reacções.

Mesma abordagem, mas a estequiometria são matrizes (uma linha por reacção) e cada constante cinética um vector (um valor por reacção)

Page 59: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 59

Sistema de reacções.

Alterações:• Na iteração é preciso calcular primeiro todas

as derivadas tendo em conta todas as reacções (um ciclo pelas linhas das matrizes).

• Só depois de ter todas as derivadas é que se actualiza todas as concentrações.

Page 60: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 60

Sistema de reacções.

Funçãofunction tconcs=cineticas(ers,eps,cis,kds,kis,dt,tmax)

(para fazer na aula)

Page 61: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 61

Sistema de reacções.

Exemplo:• Oscilador químico (Lotka)

• Não se conhece nenhuma assim, mas esta é simples de modelar.

A + X 2X

X + Y 2Y

Y Q

Page 62: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 62

Sistema de reacções.

ers=[1 1 0 0;0 1 1 0;0 0 1 0];

eps=[0 2 0 0;0 0 2 0;0 0 0 1];

kds=[0.05,1,1];

kis=[0,0,0];

cis=[50,1,1,0];

t=cineticas(ers,eps,cis,kds,kis,0.01,50);

plot(t(:,1),t(:,2:columns(t)));

A + X 2XX + Y 2YY Q

Page 63: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 63

Sistema de reacções.

Page 64: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 64

Sistema de reacções.

Page 65: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9

Ludwig Krippahl, 2008 65

Dúvidas