Programação para as
Ciências Experimentais
2006/7
Teórica 12
Ludwig Krippahl, 2007
Na aula de hoje...

Como vai ser o exame.

O que deve ficar depois do exame.
Dúvidas e revisões.

• Exemplos de perguntas.
Ludwig Krippahl, 2007
2
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, 2007
3
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, 2007
4
Pergunta simples

Qual o resultado de xpto(12,1)
function x=xpto(num,flag)
if flag
x=num*2
else
x=num/2
endif
endfunction
Ludwig Krippahl, 2007
5
Pergunta simples


Qual o resultado de xpto(12,1)
24
Ludwig Krippahl, 2007
6
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, 2007
7
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, 2007
8
Pergunta média

Qual o resultado de procvec([1,2,3,4],2)?
function v=procvec(vin,lim)
v=zeros(1,length(vin));
for f=1:length(v)
if vin(f)>lim
v(f)=vin(f);
endif
endfor
endfunction
Ludwig Krippahl, 2007
9
Pergunta média


Qual o resultado de procvec([1,2,3,4],2)?
[0,0,3,4]
Ludwig Krippahl, 2007
10
Pergunta de desenvolvimento

Considere as funções
• erro2AB
• cinetica
• minfn
• interpol
Ludwig Krippahl, 2007
11
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, 2007
12
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, 2007
13
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, 2007
14
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, 2007
15
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, 2007
16
Pergunta de desenvolvimento


Alínea A:
Resposta:
• k=minfn("erro2AB",vals,0,1,2,0.001)
Ludwig Krippahl, 2007
17
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, 2007
18
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, 2007
19
Perguntas Excel



Onde colocar o $
Funções simples (SUM, SUMIF, etc... as
que vêm mencionadas nos slides).
Como fazer
• série de números 1,2,3,...
• tabuada
• ...
Ludwig Krippahl, 2007
20
O importante

Para o exame:
•
Funções
•
Ciclos, condições
•
Variáveis
•
• Argumentos, valores de saída.
• If, while, for, ==, &, &&, ...
• Atribuição, trocar valores, incrementar, criar vectores e
matrizes incrementalmente
Excel:
• Nomes de células, $, funções simples, funções com
vectores e matrizes
Ludwig Krippahl, 2007
21
O importante

Para depois
• Noções básicas de programação imperativa
• Ciclos, condições, variáveis
• Modularidade e reutilização (funções)
• Métodos numéricos
• Integração, mínimos, zeros,
• Modelação de processos
• Ajuste de modelos
Ludwig Krippahl, 2007
22
Download

Slides da aula.