ludwig krippahl, 2008 programação para as ciências experimentais 2007/8 teórica 13
TRANSCRIPT
Ludwig Krippahl, 2008
Programação para as Ciências Experimentais
2007/8
Teórica 13
Ludwig Krippahl, 2008 2
Na aula de hoje...
Excel• Goal Seek.
Exame e revisões.• Exemplos de perguntas.
Dúvidas e revisões.
Ludwig Krippahl, 2008 3
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 4
Goal Seek
Exemplo: raiz do polinómio x3+x2-2• Célula A1, =A2^3+A2^2-2
• Tools->Goal Seek
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
Ludwig Krippahl, 2008 6
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 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
endforendfunction
Ludwig Krippahl, 2008 8
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; forif(2,3)endif ans=6
endforendfunction
Ludwig Krippahl, 2008 9
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=1a=a-abs(b); (atenção: só devolve w)
endwhilez=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 [x,y]=fazendo(3,2)
w=w+1; x=1 y=3a=a-abs(b);
endwhilez=a;endfunction
Ludwig Krippahl, 2008 11
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=3a=a-abs(b); atenção: os nomes são
endwhile independentesz=a;endfunction
Ludwig Krippahl, 2008 12
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 13
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 14
Pergunta de desenvolvimento
Considere as funções• erro2AB
• cinetica
• minfn
• interpol
Ludwig Krippahl, 2008 15
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 16
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
Ludwig Krippahl, 2008 17
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
Ludwig Krippahl, 2008 18
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
Ludwig Krippahl, 2008 19
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 20
Pergunta de desenvolvimento
Alínea A: Resposta:
• k=minfn("erro2AB",vals,0,1,2,0.001)
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.
Ludwig Krippahl, 2008 22
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 23
Pergunta de desenvolvimento
Ou:• Dadas as outras escrever a função de erro.
• Escrever a função que integra a reacção.
Convém perceber bem as funções que usámos nas práticas.
Ludwig Krippahl, 2008 24
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 25
Dúvidas1. Comandos simples, vectores e matrizes2. 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.