Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 10
Ludwig Krippahl, 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, Ajuste de um modelo Dados Experimentais Simulação Discrepância Minimizar
Ludwig Krippahl, Ajuste de um modelo Exemplo: reacção química Dados Experimentais Simulação Discrepância Minimizar minfn cinetica
Ludwig Krippahl, 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, 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, Interpolação linear xi x1 x2 y1 y2
Ludwig Krippahl, Interpolação linear yi = (y1*(x2-xi) + y2*(xi-x1)) / (x2 – x1) xi x1 x2 y1 y2 yi
Ludwig Krippahl, 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
Ludwig Krippahl, 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 Cria vector yi, dos valores interpolados
Ludwig Krippahl, 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 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, 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 Calcula a interpolação e termina o ciclo interno (g).
Ludwig Krippahl, 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, Interpolação linear
Ludwig Krippahl, 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, 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, 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, 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, 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, O mínimo de uma função Método da razão dourada
Ludwig Krippahl, 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, O mínimo de uma função Se x 1 <x 2 <x 3 e y 2 <y 1 e y 2 <y 3 então tem que haver um mínimo local entre x 1 e x 3 x1 x2 x3
Ludwig Krippahl, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 x4 x5
Ludwig Krippahl, 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= (a+b) b= ( ) (a+b)
Ludwig Krippahl, O mínimo de uma função function xm=minfn(func,params,x1,xm,x2,prec) c= ; ym=feval(func,params,xm); Nome da função, parâmetros (como no zerpol), os 3 pontos iniciais e precisão
Ludwig Krippahl, O mínimo de uma função function xm=minfn(func,params,x1,xm,x2,prec) c= ; ym=feval(func,params,xm); Constante c para os intervalos (razão dourada)
Ludwig Krippahl, O mínimo de uma função function xm=minfn(func,params,x1,xm,x2,prec) c= ; 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, 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, 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, O mínimo de uma função x1 xm x2
Ludwig Krippahl, 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, O mínimo de uma função x1 xmx2xn ym yn
Ludwig Krippahl, O mínimo de uma função x1 x2 xm ym
Ludwig Krippahl, 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, 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 =
Ludwig Krippahl, 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, Ajustar o modelo (2A B)
Ludwig Krippahl, 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, 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, Conceitos básicos de Excel Referência relativa: Nota: fórmulas começam sempre por =
Ludwig Krippahl, Conceitos básicos de Excel Referência relativa: O B passou a C e o C a D copiando para a direita
Ludwig Krippahl, Conceitos básicos de Excel Referência relativa: O 2 passou a 3 copiando para baixo
Ludwig Krippahl, Conceitos básicos de Excel Referência absoluta
Ludwig Krippahl, Conceitos básicos de Excel Referência absoluta Fill down (seleccionar, ctrl+d)
Ludwig Krippahl, Conceitos básicos de Excel Referência absoluta Multiplicar pelo C1, mas sem mudar o 1...
Ludwig Krippahl, Conceitos básicos de Excel Referência absoluta Marcar o 1 como ref. absoluta
Ludwig Krippahl, Conceitos básicos de Excel Referência absoluta Marcar o 1 como ref. absoluta
Ludwig Krippahl, Conceitos básicos de Excel Dar nomes às células. Exemplo: 2A B Parâmetros Constante DeltaT
Ludwig Krippahl, Conceitos básicos de Excel Dar nomes às células. Exemplo: 2A B Parâmetros Constante DeltaT
Ludwig Krippahl, Conceitos básicos de Excel Dar nomes às células. Exemplo: 2A B Parâmetros Constante DeltaT
Ludwig Krippahl, Conceitos básicos de Excel Dar nomes às células. Exemplo: 2A B Parâmetros Constante DeltaT
Ludwig Krippahl, Conceitos básicos de Excel Dar nomes às células. Exemplo: 2A B Parâmetros Constante DeltaT
Ludwig Krippahl, Conceitos básicos de Excel Dar nomes às células. Exemplo: 2A B Parâmetros Constante DeltaT
Ludwig Krippahl, Conceitos básicos de Excel Dar nomes às células. Exemplo: 2A B Parâmetros Constante DeltaT
Ludwig Krippahl, Conceitos básicos de Excel Dar nomes às células. Exemplo: 2A B Parâmetros Constante DeltaT
Ludwig Krippahl, Conceitos básicos de Excel Dar nomes às células. Exemplo: 2A B Fill down... Mas falta o tempo.
Ludwig Krippahl, Conceitos básicos de Excel Seleccionar a primeira coluna (click no topo da coluna, no A).
Ludwig Krippahl, Conceitos básicos de Excel Insert, Columns
Ludwig Krippahl, Conceitos básicos de Excel Insert, Columns
Ludwig Krippahl, Conceitos básicos de Excel Definir a fórmula, e fill down.
Ludwig Krippahl, Conceitos básicos de Excel IF(condição; valor se verdade; valor se falso) Ex:
Ludwig Krippahl, Conceitos básicos de Excel IF(condição; valor se verdade; valor se falso) Ex:
Ludwig Krippahl, Conceitos básicos de Excel Exemplo: raiz do polinómio x 3 +2
Ludwig Krippahl, Conceitos básicos de Excel Exemplo: raiz do polinómio x 3 +2
Ludwig Krippahl, Conceitos básicos de Excel Exemplo: raiz do polinómio x 3 +2 Fill right, fill down
Ludwig Krippahl, Conceitos básicos de Excel Exemplo: raiz do polinómio x 3 +2
Ludwig Krippahl, Conceitos básicos de Excel Exemplo: raiz do polinómio x 3 +2 Fill down
Ludwig Krippahl, Dúvidas