Upload
internet
View
103
Download
0
Embed Size (px)
Citation preview
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