Programação para as Ciências Experimentais 2007/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 Ludwig Krippahl, 2008 2 Ajuste de um modelo Dados Experimentais Simulação Discrepância Minimizar Ludwig Krippahl, 2008 3 Ajuste de um modelo Exemplo: reacção química Dados Experimentais cinetica Simulação Discrepância minfn Ludwig Krippahl, 2008 Minimizar 4 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, 2008 5 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, 2008 6 Interpolação linear y2 y1 x1 Ludwig Krippahl, 2008 xi x2 7 Interpolação linear yi = (y1*(x2-xi) + y2*(xi-x1)) / (x2 – x1) y2 yi y1 x1 Ludwig Krippahl, 2008 xi x2 8 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 Ludwig Krippahl, 2008 9 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); Cria vector yi, dos valores interpolados 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 Ludwig Krippahl, 2008 10 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); Para cada xi onde interpolar percorre y2 = matxy(g,2); os da matriz até encontrar o primeiro d =xx2-x1; yi(f) =ultrapassa (y1*(x2-xi(f))+y2*(xi(f)-x1))/d; que xi. Começa do 2º break elemento porque precisa do anterior endif para interpolar. endfor endfor Ludwig Krippahl, 2008 11 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); Calcula a interpolação x1 = matxy(g-1,1); e termina o ciclo x2 = matxy(g,1); y1 = matxy(g-1,2); interno (g). y2 = matxy(g,2); d = x2-x1; yi(f) = (y1*(x2-xi(f))+y2*(xi(f)-x1))/d; break endif endfor endfor Ludwig Krippahl, 2008 12 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, 2008 13 Interpolação linear Ludwig Krippahl, 2008 14 Medir a discrepância (erro) Reacção Função erro mede o erro quadrático médio, que é a média dos quadrados das diferenças entre os vectores • 2A B • Só kd Ludwig Krippahl, 2008 15 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, 2008 16 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 Ludwig Krippahl, 2008 17 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, 2008 18 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. Ludwig Krippahl, 2008 19 O mínimo de uma função Método da razão dourada Ludwig Krippahl, 2008 20 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 Ludwig Krippahl, 2008 21 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 Ludwig Krippahl, 2008 x2 x3 22 O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 Ludwig Krippahl, 2008 x2 x3 23 O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 Ludwig Krippahl, 2008 x2 x3 24 O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 Ludwig Krippahl, 2008 x2 x3 25 O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 Ludwig Krippahl, 2008 x2 x3 26 O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 Ludwig Krippahl, 2008 x2 x3 27 O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 Ludwig Krippahl, 2008 x2 x3 28 O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 Ludwig Krippahl, 2008 x2 x3 29 O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 Ludwig Krippahl, 2008 x2 x3 30 O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 Ludwig Krippahl, 2008 x2 x3 31 O mínimo de uma função Guardar sempre os 3 pontos consecutivos em que o y do meio é menor que os extremos. x1 Ludwig Krippahl, 2008 x2 x3 32 O mínimo de uma função Como dividir o intervalo: • O ideal é manter as proporções. Dividir ao meio não é ideal. x1 Ludwig Krippahl, 2008 x3 x2 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 Ludwig Krippahl, 2008 x4 x5 x3 x2 34 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, 2008 35 O mínimo de uma função function xm=minfn(func,params,x1,xm,x2,prec) c=1-0.618; Nome da função, ym=feval(func,params,xm); parâmetros (como no zerpol), os 3 pontos iniciais e precisão 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); Constante c para os intervalos (razão dourada) 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); Avalia a função no ponto do meio. Nota: assume-se que y é maior em x1 e x2. Ludwig Krippahl, 2008 38 O mínimo de uma função while abs(x2-x1)>prec if abs(x1-xm)>abs(x2-xm) intervalo maiorEnquanto é x1 a xmo intervalo é else maior que a precisão intervalo maior é xm a x2 endif endwhile 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 Encontra o sub-intervalo endif maior, (x1 a xm ou xm a endwhile x2) Ludwig Krippahl, 2008 40 O mínimo de uma função x1 Ludwig Krippahl, 2008 xm x2 41 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, 2008 42 O mínimo de uma função ym yn x1 Ludwig Krippahl, 2008 xn xm x2 43 O mínimo de uma função ym x1 Ludwig Krippahl, 2008 xm x2 x2 44 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, 2008 45 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) • Ludwig Krippahl, 2008 k = 0.97843 46 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"); Ludwig Krippahl, 2008 47 Ajustar o modelo (2A B) Ludwig Krippahl, 2008 48 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, 2008 49 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 Ludwig Krippahl, 2008 50 Conceitos básicos de Excel Referência relativa: • Nota: fórmulas começam sempre por = Ludwig Krippahl, 2008 51 Conceitos básicos de Excel Referência relativa: • O B passou a C e o C a D copiando para a direita Ludwig Krippahl, 2008 52 Conceitos básicos de Excel Referência relativa: • O 2 passou a 3 copiando para baixo Ludwig Krippahl, 2008 53 Conceitos básicos de Excel Referência absoluta Ludwig Krippahl, 2008 54 Conceitos básicos de Excel Referência absoluta • Fill down (seleccionar, ctrl+d) Ludwig Krippahl, 2008 55 Conceitos básicos de Excel Referência absoluta • Multiplicar pelo C1, mas sem mudar o 1... Ludwig Krippahl, 2008 56 Conceitos básicos de Excel Referência absoluta • Marcar o 1 como ref. absoluta Ludwig Krippahl, 2008 57 Conceitos básicos de Excel Referência absoluta • Marcar o 1 como ref. absoluta Ludwig Krippahl, 2008 58 Conceitos básicos de Excel Dar nomes às células. • Exemplo: 2A B • Parâmetros • Constante • DeltaT Ludwig Krippahl, 2008 59 Conceitos básicos de Excel Dar nomes às células. • Exemplo: 2A B • Parâmetros • Constante • DeltaT Ludwig Krippahl, 2008 60 Conceitos básicos de Excel Dar nomes às células. • Exemplo: 2A B • Parâmetros • Constante • DeltaT Ludwig Krippahl, 2008 61 Conceitos básicos de Excel Dar nomes às células. • Exemplo: 2A B • Parâmetros • Constante • DeltaT Ludwig Krippahl, 2008 62 Conceitos básicos de Excel Dar nomes às células. • Exemplo: 2A B • Parâmetros • Constante • DeltaT Ludwig Krippahl, 2008 63 Conceitos básicos de Excel Dar nomes às células. • Exemplo: 2A B • Parâmetros • Constante • DeltaT Ludwig Krippahl, 2008 64 Conceitos básicos de Excel Dar nomes às células. • Exemplo: 2A B • Parâmetros • Constante • DeltaT Ludwig Krippahl, 2008 65 Conceitos básicos de Excel Dar nomes às células. • Exemplo: 2A B • Parâmetros • Constante • DeltaT Ludwig Krippahl, 2008 66 Conceitos básicos de Excel Dar nomes às células. • Exemplo: 2A B • Fill down... • Mas falta o tempo. Ludwig Krippahl, 2008 67 Conceitos básicos de Excel Seleccionar a primeira coluna (click no topo da coluna, no A). Ludwig Krippahl, 2008 68 Conceitos básicos de Excel Insert, Columns Ludwig Krippahl, 2008 69 Conceitos básicos de Excel Insert, Columns Ludwig Krippahl, 2008 70 Conceitos básicos de Excel Definir a fórmula, e fill down. Ludwig Krippahl, 2008 71 Conceitos básicos de Excel IF(condição; valor se verdade; valor se falso) Ex: Ludwig Krippahl, 2008 72 Conceitos básicos de Excel IF(condição; valor se verdade; valor se falso) Ex: Ludwig Krippahl, 2008 73 Conceitos básicos de Excel Exemplo: raiz do polinómio x3+2 Ludwig Krippahl, 2008 74 Conceitos básicos de Excel Exemplo: raiz do polinómio x3+2 Ludwig Krippahl, 2008 75 Conceitos básicos de Excel Exemplo: raiz do polinómio x3+2 Fill right, fill down Ludwig Krippahl, 2008 76 Conceitos básicos de Excel Exemplo: raiz do polinómio x3+2 Ludwig Krippahl, 2008 77 Conceitos básicos de Excel Exemplo: raiz do polinómio x3+2 Fill down Ludwig Krippahl, 2008 78 Dúvidas Ludwig Krippahl, 2008 79