programação para as ciências experimentais 2007/8

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

Upload: lara-hull

Post on 02-Jan-2016

19 views

Category:

Documents


0 download

DESCRIPTION

Programação para as Ciências Experimentais 2007/8. Teórica 10. 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 Excel. Ajuste de um modelo. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008

Programação para as Ciências Experimentais

2007/8

Teórica 10

Page 2: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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 Excel

Page 3: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 3

Ajuste de um modelo

Dados Experimentais Simulação

Discrepância

Minimizar

Page 4: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 4

Ajuste de um modelo

Exemplo: reacção química

Dados Experimentais Simulação

Discrepância

Minimizarminfn

cinetica

Page 5: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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

Page 6: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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.

Page 7: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 7

Interpolação linear

xix1 x2

y1

y2

Page 8: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 8

Interpolação linear

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

xix1 x2

y1

y2

yi

Page 9: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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

Page 10: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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

Page 11: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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.

Page 12: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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).

Page 13: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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;;");

Page 14: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 14

Interpolação linear

Page 15: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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

Page 16: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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.

Page 17: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 17

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

Page 18: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 18

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)

Page 19: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 19

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.

Page 20: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 20

O mínimo de uma função

Método da razão dourada

Page 21: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 21

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

Page 22: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 22

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

Page 23: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 23

O mínimo de uma função

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

x1 x2 x3

Page 24: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 24

O mínimo de uma função

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

x1 x2 x3

Page 25: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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

Page 26: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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

Page 27: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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

Page 28: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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

Page 29: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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

Page 30: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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

Page 31: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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

Page 32: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 32

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

Page 33: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 33

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

Page 34: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 34

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

Page 35: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 35

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)

Page 36: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 36

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

Page 37: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 37

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)

Page 38: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 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);

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

Page 39: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 39

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

Page 40: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 40

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)

Page 41: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 41

O mínimo de uma função

x1 xm x2

Page 42: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 42

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.

Page 43: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 43

O mínimo de uma função

x1 xm x2xn

ym

yn

Page 44: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 44

O mínimo de uma função

x1 x2 x2xm

ym

Page 45: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 45

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.

Page 46: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 46

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

Page 47: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 47

Ajustar o modelo (2A B)

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

Page 48: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 48

Ajustar o modelo (2A B)

Page 49: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 49

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...

Page 50: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 50

Conceitos básicos de Excel

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

Page 51: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 51

Conceitos básicos de Excel

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

Page 52: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 52

Conceitos básicos de Excel

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

direita

Page 53: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 53

Conceitos básicos de Excel

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

Page 54: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 54

Conceitos básicos de Excel

Referência absoluta

Page 55: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 55

Conceitos básicos de Excel

Referência absoluta• Fill down (seleccionar, ctrl+d)

Page 56: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 56

Conceitos básicos de Excel

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

Page 57: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 57

Conceitos básicos de Excel

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

Page 58: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 58

Conceitos básicos de Excel

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

Page 59: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 59

Conceitos básicos de Excel

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

• Parâmetros• Constante

• DeltaT

Page 60: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 60

Conceitos básicos de Excel

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

• Parâmetros• Constante

• DeltaT

Page 61: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 61

Conceitos básicos de Excel

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

• Parâmetros• Constante

• DeltaT

Page 62: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 62

Conceitos básicos de Excel

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

• Parâmetros• Constante

• DeltaT

Page 63: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 63

Conceitos básicos de Excel

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

• Parâmetros• Constante

• DeltaT

Page 64: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 64

Conceitos básicos de Excel

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

• Parâmetros• Constante

• DeltaT

Page 65: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 65

Conceitos básicos de Excel

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

• Parâmetros• Constante

• DeltaT

Page 66: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 66

Conceitos básicos de Excel

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

• Parâmetros• Constante

• DeltaT

Page 67: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 67

Conceitos básicos de Excel

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

• Fill down...

• Mas falta o tempo.

Page 68: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 68

Conceitos básicos de Excel

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

Page 69: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 69

Conceitos básicos de Excel

Insert, Columns

Page 70: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 70

Conceitos básicos de Excel

Insert, Columns

Page 71: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 71

Conceitos básicos de Excel

Definir a fórmula, e fill down.

Page 72: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 72

Conceitos básicos de Excel

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

Ex:

Page 73: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 73

Conceitos básicos de Excel

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

Ex:

Page 74: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 74

Conceitos básicos de Excel

Exemplo: raiz do polinómio x3+2

Page 75: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 75

Conceitos básicos de Excel

Exemplo: raiz do polinómio x3+2

Page 76: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 76

Conceitos básicos de Excel

Exemplo: raiz do polinómio x3+2

Fill right, fill down

Page 77: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 77

Conceitos básicos de Excel

Exemplo: raiz do polinómio x3+2

Page 78: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 78

Conceitos básicos de Excel

Exemplo: raiz do polinómio x3+2

Fill down

Page 79: Programação para as Ciências Experimentais 2007/8

Ludwig Krippahl, 2008 79

Dúvidas