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
Download

Slides