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