790 likes | 905 Views
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.
E N D
Programação para as Ciências Experimentais2007/8 Teórica 10 Ludwig Krippahl, 2008
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 Dados Experimentais Simulação Discrepância Minimizar
Ajuste de um modelo • Exemplo: reacção química cinetica Dados Experimentais Simulação Discrepância Minimizar minfn
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
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.
Interpolação linear y2 y1 x2 xi x1
Interpolação linear • yi = (y1*(x2-xi) + y2*(xi-x1)) / (x2 – x1) y2 yi y1 x2 xi x1
Interpolação linear function 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 endif endfor endfor
Interpolação linear function 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 endif endfor endfor Cria vector yi, dos valores interpolados
Interpolação linear function 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 endif endfor 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.
Interpolação linear function 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 endif endfor endfor Calcula a interpolação e termina o ciclo interno (g).
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;;");
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
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.
Medir a discrepância (2A B) function r=erro2AB(vals,k) er=[2,0]; define a reacção ep=[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
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)
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 coluna int é o vector das concentrações de A obtido interpolando a simulação para os valores na 1ª coluna de vals.
O mínimo de uma função • Método da razão dourada
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 c b
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 x3 x2
O mínimo de uma função • O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x3 x2
O mínimo de uma função • O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x3 x2
O mínimo de uma função • O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x3 x2
O mínimo de uma função • O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x3 x2
O mínimo de uma função • O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x3 x2
O mínimo de uma função • O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x3 x2
O mínimo de uma função • O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x3 x2
O mínimo de uma função • O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x3 x2
O mínimo de uma função • O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x3 x2
O mínimo de uma função • Guardar sempre os 3 pontos consecutivos em que o y do meio é menor que os extremos. x1 x3 x2
O mínimo de uma função • Como dividir o intervalo: • O ideal é manter as proporções. Dividir ao meio não é ideal. x3 x2 x1
O mínimo de uma função • Como dividir o intervalo: • O ideal é manter as proporções. Dividir ao meio não é ideal. x3 x4 x2 x1 x5
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)
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
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)
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.
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
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)
O mínimo de uma função x1 x2 xm
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.
O mínimo de uma função ym yn x1 xn xm x2
O mínimo de uma função ym x1 xm x2 x2
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.
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
Ajustar o modelo (2A B) • Comparar o modelo com os dados er=[2,0] ep=[0,1]; cis=[1,0]; xy=cinetica(esteq,cis,k,0,0.01,10); hold off plot(xy(:,1),xy(:,2)) hold on plot(vals(:,1),vals(:,2), "x");
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...
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