ludwig krippahl, 2008 programação para as ciências experimentais 2007/8 teórica 13

25
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

Upload: internet

Post on 17-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

Ludwig Krippahl, 2008

Programação para as Ciências Experimentais

2007/8

Teórica 13

Page 2: 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.

Page 3: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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.

Page 4: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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

Page 5: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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

Page 6: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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

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

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

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

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

Page 9: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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

Page 10: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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

Page 11: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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

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

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.

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

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

Page 14: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

Ludwig Krippahl, 2008 14

Pergunta de desenvolvimento

Considere as funções• erro2AB

• cinetica

• minfn

• interpol

Page 15: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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

Page 16: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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

Page 17: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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

Page 18: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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

Page 19: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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.

Page 20: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

Ludwig Krippahl, 2008 20

Pergunta de desenvolvimento

Alínea A: Resposta:

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

Page 21: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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.

Page 22: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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

Page 23: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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.

Page 24: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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...)

Page 25: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13

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.