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

Post on 17-Apr-2015

105 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Ludwig Krippahl, 2009

Programação para as Ciências Experimentais

2008/9

Teórica 11

Ludwig Krippahl, 2009 2

Na aula de hoje...

Ajustar um modelo a dados experimentais.

Interpolação linear Minimização de funções Cálculo de erros Estimar uma constante cinética

ajustando o modelo aos dados. Conceitos básicos de folha de cálculo.

Ludwig Krippahl, 2009 3

Ajuste de um modelo

Dados Experimentais Simulação

Discrepância

Minimizar

Ludwig Krippahl, 2009 4

Ajuste de um modelo

Exemplo: reacção química

Dados Experimentais Simulação

Discrepância

Minimizarminfn

cinetica

Ludwig Krippahl, 2009 5

Ajuste de um modelo

Dados: matriz com tempo na primeira coluna e concentração (ou concentrações) na segunda (ou outras).

Função erro compara cada vector com o correspondente na simulação.

Mas os valores de t podem ser diferentes. É preciso interpolar.

Primeiro, função interpol

Ludwig Krippahl, 2009 6

Interpolação linear

Função interpol Recebe: uma matriz x, y, em colunas, e um

vector x1 com os pontos a interpolar. Devolve: vector y1 com os valores em x1

interpolados de x, y.

Ludwig Krippahl, 2009 7

Interpolação linear

xix1 x2

y1

y2

Ludwig Krippahl, 2009 8

Interpolação linear

yi = (y1*(x2-xi) + y2*(xi-x1)) / (x2 – x1)

xix1 x2

y1

y2

yi

Ludwig Krippahl, 2009 9

Interpolação linearfunction yi=interpol(matxy,xi)yi=0*xi;for f=1:length(xi)

for g=2:rows(matxy)if matxy(g,1)>=xi(f);

x1 = matxy(g-1,1);x2 = matxy(g,1);y1 = matxy(g-1,2);y2 = matxy(g,2);d = x2-x1;yi(f) = (y1*(x2-xi(f))+y2*(xi(f)-x1))/d;break

endifendfor

endfor

Ludwig Krippahl, 2009 10

Interpolação linearfunction yi=interpol(matxy,xi)yi=0*xi;for f=1:length(xi)

for g=2:rows(matxy)if matxy(g,1)>=xi(f);

x1 = matxy(g-1,1);x2 = matxy(g,1);y1 = matxy(g-1,2);y2 = matxy(g,2);d = x2-x1;yi(f) = (y1*(x2-xi(f))+y2*(xi(f)-x1))/d;break

endifendfor

endfor

Cria vector yi, dos valores interpolados

Ludwig Krippahl, 2009 11

Interpolação linearfunction yi=interpol(matxy,xi)yi=0*xi;for f=1:length(xi)

for g=2:rows(matxy)if matxy(g,1)>=xi(f);

x1 = matxy(g-1,1);x2 = matxy(g,1);y1 = matxy(g-1,2);y2 = matxy(g,2);d = x2-x1;yi(f) = (y1*(x2-xi(f))+y2*(xi(f)-x1))/d;break

endifendfor

endfor

Para cada xi onde interpolar percorre os x da matriz até encontrar o primeiro que ultrapassa xi. Começa do 2º elemento porque precisa do anterior para interpolar.

Ludwig Krippahl, 2009 12

Interpolação linearfunction yi=interpol(matxy,xi)yi=0*xi;for f=1:length(xi)

for g=2:rows(matxy)if matxy(g,1)>=xi(f);

x1 = matxy(g-1,1);x2 = matxy(g,1);y1 = matxy(g-1,2);y2 = matxy(g,2);d = x2-x1;yi(f) = (y1*(x2-xi(f))+y2*(xi(f)-x1))/d;break

endifendfor

endfor

Calcula a interpolação e termina o ciclo interno (g).

Ludwig Krippahl, 2009 13

Interpolação linear

xy=[[1:10]',[2:2:20]'];

xi=[2.5:2:8];

yi=interpol(xy,xi)

hold off

plot(xy(:,1), xy(:,2))

hold on

plot(xi,yi,"ob;;");

Ludwig Krippahl, 2009 14

Interpolação linear

Ludwig Krippahl, 2009 15

Medir a discrepância (erro)

Reacção• 2A B

• Só kd

Função erro mede o erro quadrático médio, que é a média dos quadrados das diferenças entre os vectores

Ludwig Krippahl, 2009 16

Medir a discrepância (erro)

Exemplo:• 2A B

• Só kd (irreversível)

Função erro2AB mede o erro quadrático entre os dados experimentais e a simulação.

A função codifica a concentração inicial e reacção, recebe como argumentos o kd e os valores para comparar.

Ludwig Krippahl, 2009 17

Medir a discrepância (2A B)

function r=erro2AB(vals,k) Devolve o erro quadrático total

• Soma dos quadrados dos erros de todos os pontos

Recebe matriz vals com tempo e [A]• (vamos só ajustar à [A])

Recebe a constante k do modelo

Ludwig Krippahl, 2009 18

Medir a discrepância (2A B)

function r=erro2AB(vals,k)er=[2,0]; define a reacçãoep=[0,1];cis=[1,0]; e as concentrações

aqui falta calcular os valores previstos pelo modelo para este k e comparar com o vector vals para calcular o erro, interpolando os valores. Para resolver na prática...

endfunction

Ludwig Krippahl, 2009 19

Medir a discrepância (2A B)

Para simular a reacção podemos usar a função cinetica da aula anterior.

Para comparar com os dados experimentais precisamos interpolar para os valores de t experimentais (que podem não coincidir com os da simulação)

Ludwig Krippahl, 2009 20

Interpolação linear

textiti+1

[A]int

[A]ex

Ludwig Krippahl, 2009 21

Medir a discrepância (2A B)

O erro é o erro quadrático:

r=sum((vals(:,2)-int).^2);vals é a matriz com as concentrações de A na segunda colunaint é o vector das concentrações de A obtido interpolando a simulação para os valores na 1ª coluna de vals.

Ludwig Krippahl, 2009 22

O mínimo de uma função

Método da razão dourada

Ludwig Krippahl, 2009 23

O mínimo de uma função

Tal como “encurralámos” a raiz num intervalo, vamos fazer o mesmo com o mínimo, mas precisamos de 3 pontos:

a

b

c

Ludwig Krippahl, 2009 24

O mínimo de uma função

Se x1<x2<x3 e y2<y1 e y2<y3 então tem que haver um mínimo local entre x1 e x3

x1 x2 x3

Ludwig Krippahl, 2009 25

O mínimo de uma função

O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno

x1 x2 x3

Ludwig Krippahl, 2009 26

O mínimo de uma função

O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno

x1 x2 x3

Ludwig Krippahl, 2009 27

O mínimo de uma função

O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno

x1 x2 x3

Ludwig Krippahl, 2009 28

O mínimo de uma função

O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno

x1 x2 x3

Ludwig Krippahl, 2009 29

O mínimo de uma função

O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno

x1 x2 x3

Ludwig Krippahl, 2009 30

O mínimo de uma função

O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno

x1 x2 x3

Ludwig Krippahl, 2009 31

O mínimo de uma função

O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno

x1 x2 x3

Ludwig Krippahl, 2009 32

O mínimo de uma função

O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno

x1 x2 x3

Ludwig Krippahl, 2009 33

O mínimo de uma função

O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno

x1 x2 x3

Ludwig Krippahl, 2009 34

O mínimo de uma função

Guardar sempre os 3 pontos consecutivos em que o y do meio é menor que os extremos.

x1 x2 x3

Ludwig Krippahl, 2009 35

O mínimo de uma função

Como dividir o intervalo:• O ideal é manter as proporções. Dividir ao

meio não é ideal.

x1 x2 x3

Ludwig Krippahl, 2009 36

O mínimo de uma função

Como dividir o intervalo:• O ideal é manter as proporções. Dividir ao

meio não é ideal.

x1 x2 x3x4 x5

Ludwig Krippahl, 2009 37

O mínimo de uma função

Como dividir o intervalo:• Escolher o ponto novo no intervalo maior e

• Partir pela razão dourada:

(a+b)/a = a / b

a= 0.618 (a+b)

b= (1-0.618) (a+b)

Ludwig Krippahl, 2009 38

O mínimo de uma função

function xm=minfn(func,params,x1,xm,x2,prec)

c=1-0.618;

ym=feval(func,params,xm);Nome da função, parâmetros (como no zerpol), os 3 pontos iniciais e precisão

Ludwig Krippahl, 2009 39

O mínimo de uma função

function xm=minfn(func,params,x1,xm,x2,prec)

c=1-0.618;

ym=feval(func,params,xm);

Constante c para os intervalos (razão dourada)

Ludwig Krippahl, 2009 40

O mínimo de uma função

function xm=minfn(func,params,x1,xm,x2,prec)

c=1-0.618;

ym=feval(func,params,xm);

Avalia a função no ponto do meio. Nota: assume-se que y é maior em x1 e x2.

Ludwig Krippahl, 2009 41

O mínimo de uma função

while abs(x2-x1)>prec

if abs(x1-xm)>abs(x2-xm)

intervalo maior é x1 a xm

else

intervalo maior é xm a x2

endif

endwhile

Enquanto o intervalo é maior que a precisão

Ludwig Krippahl, 2009 42

O mínimo de uma função

while abs(x2-x1)>prec

if abs(x1-xm)>abs(x2-xm)

intervalo maior é x1 a xm

else

intervalo maior é xm a x2

endif

endwhile

Encontra o sub-intervalo maior, (x1 a xm ou xm a x2)

Ludwig Krippahl, 2009 43

O mínimo de uma função

x1 xm x2

Ludwig Krippahl, 2009 44

O mínimo de uma função

Se o intervalo maior é de x1 a xm

o novo x será entre x1 e xm, próximo de xm

xn=xm-c*(xm-x1)

o novo y será feval(func,params,xn)

Se o novo y for menor que o anterior (em xm) passar o x2 para onde está xm, xm para o novo x, e ym será o novo y.

Ludwig Krippahl, 2009 45

O mínimo de uma função

x1 xm x2xn

ym

yn

Ludwig Krippahl, 2009 46

O mínimo de uma função

x1 x2 x2xm

ym

Ludwig Krippahl, 2009 47

O mínimo de uma função

Se o intervalo maior é de xm a x2

o novo x será entre xm e x2, mais próximo de xm.

xn=xm+c*(x2-xm);

Se o novo y for menor que o anterior (em xm) passar o x1 para onde está xm, xm para o novo x, e ym será o novo y.

Ludwig Krippahl, 2009 48

Ajustar o modelo (2A B)

Basta usar a minfn para calcular o k que minimiza o erro

Exemplo:• vals=[0.5,0.5;2,0.2;6,0.07;9,0.055];

• k=minfn("erro2AB",vals,0,1,2,0.001)• k = 0.97843

Ludwig Krippahl, 2009 49

Ajustar o modelo (2A B)

Comparar o modelo com os dadoser=[2,0]ep=[0,1];cis=[1,0];xy=cinetica(er,ep,cis,k,0,0.01,10);hold offplot(xy(:,1),xy(:,2))hold onplot(vals(:,1),vals(:,2), "x");

Ludwig Krippahl, 2009 50

Ajustar o modelo (2A B)

Ludwig Krippahl, 2009 51

Ajustar um modelo

Abordagem genérica• Simular dados previstos para um conjunto

de parâmetros

• Minimizar a discrepância entre os valores previstos e observados alterando os parâmetros.

• Na prática pode ser difícil...

Ludwig Krippahl, 2009 52

Folha de cálculo

Célula: A5 Grupo de células: A5:B12 Referência relativa ou absoluta:

• O cifrão marca uma referência absoluta.

• A$5, $B$5 Nestes casos o 5 e o B estão fixos.

• Sem cifrão a referência é relativa, e muda com copy/paste ou fill down/right

Ludwig Krippahl, 2009 53

Folha de cálculo

Referência relativa:• Nota: fórmulas começam sempre por =

Ludwig Krippahl, 2009 54

Folha de cálculo

Referência relativa:• O B passou a C e o C a D copiando para a

direita

Ludwig Krippahl, 2009 55

Folha de cálculo

Referência relativa:• O 2 passou a 3 copiando para baixo

Ludwig Krippahl, 2009 56

Folha de cálculo

Referência absoluta

Ludwig Krippahl, 2009 57

Folha de cálculo

Referência absoluta• Fill down (seleccionar, ctrl+d ou alt, e, i, d)

Ludwig Krippahl, 2009 58

Folha de cálculo

Referência absoluta• Multiplicar pelo C1, mas sem mudar o 1...

Ludwig Krippahl, 2009 59

Folha de cálculo

Referência absoluta• Marcar o 1 como ref. absoluta

Ludwig Krippahl, 2009 60

Folha de cálculo

Referência absoluta• Marcar o 1 como ref. absoluta

Ludwig Krippahl, 2009 61

Folha de cálculo

Dar nomes às células.• Exemplo: 2A B

• Parâmetros• Constante

• DeltaT

Ludwig Krippahl, 2009 62

Folha de cálculo

Dar nomes às células.• Exemplo: 2A B

• Parâmetros• Constante

• DeltaT

Ludwig Krippahl, 2009 63

Folha de cálculo

Dar nomes às células.• Exemplo: 2A B

• Parâmetros• Constante

• DeltaT

Ludwig Krippahl, 2009 64

Folha de cálculo

Dar nomes às células.• Exemplo: 2A B

• Parâmetros• Constante

• DeltaT

Ludwig Krippahl, 2009 65

Folha de cálculo

Dar nomes às células.• Exemplo: 2A B

• Parâmetros• Constante

• DeltaT

Ludwig Krippahl, 2009 66

Folha de cálculo

Dar nomes às células.• Exemplo: 2A B

• Parâmetros• Constante

• DeltaT

Ludwig Krippahl, 2009 67

Folha de cálculo

Dar nomes às células.• Exemplo: 2A B

• Parâmetros• Constante

• DeltaT

Ludwig Krippahl, 2009 68

Folha de cálculo

Dar nomes às células.• Exemplo: 2A B

• Parâmetros• Constante

• DeltaT

Ludwig Krippahl, 2009 69

Folha de cálculo

Dar nomes às células.• Exemplo: 2A B

• Fill down...

• Mas falta o tempo.

Ludwig Krippahl, 2009 70

Folha de cálculo

Seleccionar a primeira coluna (click no topo da coluna, no A).

Ludwig Krippahl, 2009 71

Folha de cálculo

Insert, Columns

Ludwig Krippahl, 2009 72

Folha de cálculo

Insert, Columns

Ludwig Krippahl, 2009 73

Folha de cálculo

Definir a fórmula, e fill down.

Ludwig Krippahl, 2009 74

Folha de cálculo

IF(condição; valor se verdade; valor se falso)

Ex:

Ludwig Krippahl, 2009 75

Folha de cálculo

IF(condição; valor se verdade; valor se falso)

Ex:

Ludwig Krippahl, 2009 76

Folha de cálculo

Exemplo: raiz do polinómio x3+2

Ludwig Krippahl, 2009 77

Folha de cálculo

Exemplo: raiz do polinómio x3+2

Ludwig Krippahl, 2009 78

Folha de cálculo

Exemplo: raiz do polinómio x3+2

Fill right, fill down

Ludwig Krippahl, 2009 79

Folha de cálculo

Exemplo: raiz do polinómio x3+2

Ludwig Krippahl, 2009 80

Folha de cálculo

Exemplo: raiz do polinómio x3+2

Fill down

Ludwig Krippahl, 2009 81

Dúvidas

top related