Programação para as
Ciências Experimentais
2007/8
Teórica 13
Ludwig Krippahl, 2008
Na aula de hoje...

Excel

Exame e revisões.

Dúvidas e revisões.
• Goal Seek.
• Exemplos de perguntas.
Ludwig Krippahl, 2008
2
Goal Seek



Testa valores numa célula para tentar
aproximar o valor de outra célula ao
valor desejado.
A célula a testar tem que ter apenas
um valor ou estar vazia (não ter
fórmulas)
A outra célula tem que estar
relacionada com esta.
Ludwig Krippahl, 2008
3
Goal Seek

Exemplo: raiz do polinómio x3+x2-2
• Célula A1, =A2^3+A2^2-2
• Tools->Goal Seek
Ludwig Krippahl, 2008
4
Pergunta simples

Escreva as duas linhas que definem um
ciclo em que a variável f toma todos os
valores inteiros entre 1 e 20
Ludwig Krippahl, 2008
5
Pergunta simples

Escreva as duas linhas que definem um
ciclo em que a variável f toma todos os
valores inteiros entre 1 e 20
for f=1:20
endfor
Ludwig Krippahl, 2008
6
Pergunta simples

Saber o resultado de funções.
function x=forif(a,b)
x=0;
for j=1:a
x=x+b;
if b>5
x=x-1;
endif
endfor
endfunction
Ludwig Krippahl, 2008
7
Pergunta simples

Saber o resultado de funções.
function x=forif(a,b)
x=0;
for j=1:a
x=x+b;
if b>5
x=x-1;
endif
endfor
endfunction
Ludwig Krippahl, 2008
forif(2,3)
ans=6
8
Pergunta simples

Saber o resultado de funções.
function [w,z]=fazendo(a,b)
w=0;
while a>b
fazendo(3,2)
w=w+1;
ans=1
a=a-abs(b);
(atenção: só devolve w)
endwhile
z=a;
endfunction
Ludwig Krippahl, 2008
9
Pergunta simples

Saber o resultado de funções.
function [w,z]=fazendo(a,b)
w=0;
while a>b
[x,y]=fazendo(3,2)
w=w+1;
x=1 y=3
a=a-abs(b);
endwhile
z=a;
endfunction
Ludwig Krippahl, 2008
10
Pergunta simples

Saber o resultado de funções.
function [w,z]=fazendo(a,b)
w=0;
while a>b
[z,w]=fazendo(3,2)
w=w+1;
z=1 w=3
a=a-abs(b);
atenção: os nomes são
endwhile
independentes
z=a;
endfunction
Ludwig Krippahl, 2008
11
Pergunta média

Escreva uma função que devolve dois
valores e recebe três argumentos. Os
argumentos são números, o primeiro
valor devolvido é o produto dos dois
primeiros argumentos, o segundo valor
devolvido é a soma do segundo
argumento com o terceiro.
Ludwig Krippahl, 2008
12
Pergunta média

Escreva uma função que devolve o
produto dos dois primeiros argumentos e
a soma do segundo argumento com o
terceiro.
function [pr,sm]=prodsum(n1,n2,n3)
pr=n1*n2;
sm=n2+n3;
endfunction
Ludwig Krippahl, 2008
13
Pergunta de desenvolvimento

Considere as funções
• erro2AB
• cinetica
• minfn
• interpol
Ludwig Krippahl, 2008
14
Pergunta de desenvolvimento
function r=erro2AB(vals,k)
esteq=[-2,1];
cis=[1,0];
xy=cinetica(esteq,cis,k,0,0.01,vals(rows(vals),1)
+1);
int=interpol(xy,vals(:,1));
r=sum((vals(:,2)-int).^2);
endfunction
Ludwig Krippahl, 2008
15
Pergunta de desenvolvimento
function tconcs=cinetica(esteq,cis,kd,ki,dt,tmax)
rs=find(esteq<0);
ps=find(esteq>0);
tconcs=[0,cis];
for t=0:dt:tmax
dps=prod(cis(ps).^esteq(ps))*ki;
drs=prod(cis(rs).^-esteq(rs))*kd;
deriv=(drs-dps)*dt;
cis=cis+deriv*esteq;
tconcs=[tconcs;t,cis];
endfor
endfunction
Ludwig Krippahl, 2008
16
Pergunta de desenvolvimento
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
17
Pergunta de desenvolvimento
function xm=minfn(func,params,x1,xm,x2,prec)
c1=0.618;
c2=1-c1;
ym=feval(func,params,xm);
while abs(x2-x1)>prec
if abs(x1-xm)>abs(x2-xm)
xn=c1*xm+c2*x1;
yn=feval(func,params,xn);
if yn<ym
x2=xm;
xm=xn;
ym=yn;
else
x1=xn;
endif
else
xn=c1*xm+c2*x2;
yn=feval(func,params,xn);
if yn<ym
x1=xm;
xm=xn;
ym=yn;
else
x2=xn;
endif
endif
endwhile
endfunction
Ludwig Krippahl, 2008
18
Pergunta de desenvolvimento


Alínea A:
Como calcular a constante cinética para
a reacção 2A->B com os dados
experimentais ([A] em função do tempo):
• vals=[0.5,0.5;2,0.2;6,0.07;9,0.055];

Sabendo que a constante está entre 0 e
2, e a precisão desejada é de 0.001.
Ludwig Krippahl, 2008
19
Pergunta de desenvolvimento


Alínea A:
Resposta:
• k=minfn("erro2AB",vals,0,1,2,0.001)
Ludwig Krippahl, 2008
20
Pergunta de desenvolvimento


Alínea B:
O que tinha que alterar para considerar
o modelo de reacção A->B em vez de
2A->B.
Ludwig Krippahl, 2008
21
Pergunta de desenvolvimento



Alínea B:
O que tinha que alterar para considerar
o modelo de reacção A->B em vez de
2A->B.
Resposta
• Na função erro2AB, a linha esteq=[-2,1];
passar a esteq=[-1,1];
Ludwig Krippahl, 2008
22
Pergunta de desenvolvimento

Ou:

Convém perceber bem as funções que
usámos nas práticas.
• Dadas as outras escrever a função de erro.
• Escrever a função que integra a reacção.
Ludwig Krippahl, 2008
23
Perguntas Excel




4 valores
Onde colocar o $
Funções simples (SUM, SUMIF, etc... as
que vêm mencionadas nos slides).
VLOOKUP, Goal Seek, fórmulas
(integração, polinómios...)
Ludwig Krippahl, 2008
24
Dúvidas
Comandos simples, vectores e matrizes
2. Strings e gráficos. Scripts, procedimentos e funções.
3. Controlo de execução: ciclos e condições. Booleanos.
4. Zero de uma função. Ficheiros (noções básicas).
5. TP1.
6. Estruturas. Ficheiros. Recursividade. Gráficos.
7. Métodos estocásticos. Ciclos aninhados.
8. Simulação de nano-estruturas e dissolução de sólidos.
9. Resolução TP 1. Integração numérica. Cinética.
10. Ajuste de modelos. Interpolação, minimização.
11. Minimização multidimensional. TP2.
12. Excel: troca de dados com Octave.
1.
Ludwig Krippahl, 2008
25
Download

Slides.