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