ludwig krippahl, 2007 programação para as ciências experimentais 2006/7 teórica 12

22
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Upload: internet

Post on 17-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007

Programação para as Ciências Experimentais

2006/7

Teórica 12

Page 2: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 2

Na aula de hoje...

Como vai ser o exame.• Exemplos de perguntas.

O que deve ficar depois do exame. Dúvidas e revisões.

Page 3: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

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

Page 4: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 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

for f=1:20

endfor

Page 5: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 5

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

Page 6: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 6

Pergunta simples

Qual o resultado de xpto(12,1) 24

Page 7: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 7

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.

Page 8: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 8

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

Page 9: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 9

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)>limv(f)=vin(f);

endifendfor

endfunction

Page 10: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 10

Pergunta média

Qual o resultado de procvec([1,2,3,4],2)? [0,0,3,4]

Page 11: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 11

Pergunta de desenvolvimento

Considere as funções• erro2AB

• cinetica

• minfn

• interpol

Page 12: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 12

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

Page 13: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 13

Pergunta de desenvolvimentofunction 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];

endforendfunction

Page 14: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 14

Pergunta de desenvolvimentofunction 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

Page 15: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 15

Pergunta de desenvolvimentofunction 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;

elsex1=xn;

endifelse

xn=c1*xm+c2*x2;yn=feval(func,params,xn);if yn<ym

x1=xm;xm=xn;ym=yn;

elsex2=xn;

endifendif

endwhileendfunction

Page 16: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 16

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.

Page 17: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 17

Pergunta de desenvolvimento

Alínea A: Resposta:

• k=minfn("erro2AB",vals,0,1,2,0.001)

Page 18: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

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.

Page 19: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 19

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];

Page 20: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 20

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

• ...

Page 21: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 21

O importante

Para o exame:• Funções

• Argumentos, valores de saída.

• Ciclos, condições• If, while, for, ==, &, &&, ...

• Variáveis• Atribuição, trocar valores, incrementar, criar vectores e

matrizes incrementalmente

• Excel:• Nomes de células, $, funções simples, funções com

vectores e matrizes

Page 22: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12

Ludwig Krippahl, 2007 22

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