Download
programa o para as ci ncias experimentais 2006 7 n.
Skip this Video
Loading SlideShow in 5 Seconds..
Programação para as Ciências Experimentais 2006/7 PowerPoint Presentation
Download Presentation
Programação para as Ciências Experimentais 2006/7

Programação para as Ciências Experimentais 2006/7

76 Vues Download Presentation
Télécharger la présentation

Programação para as Ciências Experimentais 2006/7

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Programação para as Ciências Experimentais2006/7 Teórica 9 Ludwig Krippahl, 2007

  2. Na aula de hoje... • Minimização multidimensional • Leitura e escrita formatada de ficheiros. • Introdução à folha de cálculo (Excel) • Exemplo: estimativa do efeito de um antibiótico no crescimento bacteriano.

  3. Crescimento bacteriano • Equação de Verhulst: dB/dt = cB – mB2

  4. Crescimento bacteriano • Equação de Verhulst: dB/dt = cB – mB2 Variação do número de organismos

  5. Crescimento bacteriano • Equação de Verhulst: dB/dt = cB – mB2 É o ritmo de crescimento vezes o número de organismos

  6. Crescimento bacteriano • Equação de Verhulst: dB/dt = cB – mB2 Menos a taxa de mortalidade vezes o quadrado desse número. A mortalidade resulta da competição por recursos.

  7. Crescimento bacteriano

  8. Crescimento bacteriano • Problema: • Dado um conjunto de medições, ajustar os parâmetros da equação

  9. Crescimento bacteriano • Problema: • Dado um conjunto de medições, ajustar os parâmetros da equação • Mas são dois parâmetros: crescimento e mortalidade. Precisamos de uma minimização a duas dimensões.

  10. Minimização multidimensional • Método mais simples: • Minimizar uma variável de cada vez até chegar a um ponto fixo, a menos da precisão desejada • Análogo ao método usado no trabalho 1

  11. Minimização multidimensional • Método mais simples: • Partir de um ponto inicial, um valor para cada variável. • Encontrar o mínimo de uma variável. • Alterar o vector das variáveis • Encontrar o mínimo da próxima. • Repetir para todas, as vezes que for necessário.

  12. Minimização multidimensional Ponto inicial

  13. Minimização multidimensional Ponto inicial Mínimo de X

  14. Minimização multidimensional Ponto inicial Mínimo de X Mínimo de Y

  15. Minimização multidimensional Ponto inicial Mínimo de X Novo mínimo de X Mínimo de Y

  16. Minimização multidimensional • Vamos modificar a minfn • Para partir do ponto dado e não ser preciso especificar os três pontos iniciais (é mais eficiente começar com 3 pontos juntos quando próximo do mínimo) • Para procurar o mínimo de uma de várias variáveis.

  17. Os 3 pontos iniciais X1 é o ponto dado

  18. Os 3 pontos iniciais X1 Xm próximo de X1

  19. Os 3 pontos iniciais X1 Desce? Se não, troca Xm próximo de X1

  20. Os 3 pontos iniciais X1 Xm X2 a 1.618*(Xm-X1)

  21. Os 3 pontos iniciais X1 Y2>Ym? Não, continua: X1=Xm Xm=X2 Xm X2

  22. Os 3 pontos iniciais Y2>Ym? Não, continua: X1=Xm Xm=X2 X1 Xm

  23. Os 3 pontos iniciais Y2>Ym? Não, continua: X1=Xm Xm=X2 X1 Xm X2

  24. Os 3 pontos iniciais Y2>Ym? Sim.Devolve: X1 Xm X2 Ym (Ym para começar a minimização) X2 X1 Xm

  25. Os 3 pontos iniciais function [x1,xm,x2,ym]= mininicial(funcao,params,vars,indice,delta)

  26. Os 3 pontos iniciais function [x1,xm,x2,ym]= mininicial(funcao,params,vars,indice,delta) Os valores a devolver, os 3 pontos de x e o y do meio que precisamos para começar a minimização.

  27. Os 3 pontos iniciais function [x1,xm,x2,ym]= mininicial(funcao,params,vars,indice,delta) Nome da função a minimizar e os parâmetros constantes que precisamos para a avaliar. E.g.: os coeficientes do polinómio, os dados experimentais, etc

  28. Os 3 pontos iniciais function [x1,xm,x2,ym]= mininicial(funcao,params,vars,indice,delta) Um vector com os valores das N variáveis da função (a função tem várias dimensões)

  29. Os 3 pontos iniciais function [x1,xm,x2,ym]= mininicial(funcao,params,vars,indice,delta) O índice no vector da variável que estamos a minimizar agora (a função tem várias, mas só conseguimos lidar com uma de cada vez)

  30. Os 3 pontos iniciais function [x1,xm,x2,ym]= mininicial(funcao,params,vars,indice,delta) Tamanho do passo inicial para calcular o primeiro Xm a partir do X inicial, que será o valor que vem em vars(indice).

  31. Os 3 pontos iniciais razaod=1.618; x1=vars(indice); vars(indice)=x1; y1=feval(funcao,params,vars); xm=x1+delta; vars(indice)=xm; ym=feval(funcao,params,vars); Razão dourada

  32. Os 3 pontos iniciais razaod=1.618; x1=vars(indice); vars(indice)=x1; y1=feval(funcao,params,vars); xm=x1+delta; vars(indice)=xm; ym=feval(funcao,params,vars); Calcular x1 e y1. Nota: a função cujo nome foi dado em funcao precisa de todo o vars, mas só alteramos o elemento indice

  33. Os 3 pontos iniciais razaod=1.618; x1=vars(indice); vars(indice)=x1; y1=feval(funcao,params,vars); xm=x1+delta; vars(indice)=xm; ym=feval(funcao,params,vars); Mesma coisa para xm e ym

  34. Os 3 pontos iniciais if ym>y1 t=ym; ym=y1; y1=t; t=xm; xm=x1; x1=t; endif x2=xm+razaod*(xm-x1); vars(indice)=x2; y2=feval(funcao,params,vars); Se for “a subir” troca o x1 com o xm, e o y1 com o ym.

  35. Os 3 pontos iniciais if ym>y1 t=ym; ym=y1; y1=t; t=xm; xm=x1; x1=t; endif x2=xm+razaod*(xm-x1); vars(indice)=x2; y2=feval(funcao,params,vars); Calcula o x2 a uma distância de xm igual a 1.618.. vezes o intervalo (xm-x1).

  36. Os 3 pontos iniciais if ym>y1 t=ym; ym=y1; y1=t; t=xm; xm=x1; x1=t; endif x2=xm+razaod*(xm-x1); vars(indice)=x2; y2=feval(funcao,params,vars); Se x1>xm, continua para valores maiores. Se foi trocado, x1-xm é negativo e sege para valores menores.

  37. Os 3 pontos iniciais while y2<ym x1=xm; xm=x2; ym=y2; x2=xm+razaod*(xm-x1); vars(indice)=x2; y2=feval(funcao,params,vars); endwhile Enquanto continua “a descer”, avança com os pontos,

  38. Minimização • Antes era: function xm=minfn(func,params,x1,xm,x2,prec) • Agora é: function xm=minfnvec(func,params,vars,indice,prec)

  39. Minimização multidimensional function xm=minfnvec(func,params,vars,indice,prec) Valor da variável que está a minimizar no mínimo da função considerando apenas esta variável.

  40. Minimização multidimensional function xm=minfnvec(func,params,vars,indice,prec) Função (o nome, em string) e parâmetros constantes, como de costume.

  41. Minimização multidimensional function xm=minfnvec(func,params,vars,indice,prec) Vector com os valores das várias variáveis no ponto inicial, de onde parte à procura do mínimo.

  42. Minimização multidimensional function xm=minfnvec(func,params,vars,indice,prec) Índice da variável onde procurar o mínimo.

  43. Minimização multidimensional function xm=minfnvec(func,params,vars,indice,prec) Precisão (tamanho do intervalo abaixo do qual consideramos ter encontrado o mínimo)

  44. Minimização multidimensional Esta função é igual à minfn, excepto: • Usa o mininicial para determinar os 3 pontos e o valor de ym [x1,xm,x2,ym]=mininicial(func,params,vars,indice,prec); Nota: um bom valor para o delta é a precisão: começamos do intervalo mais pequeno.

  45. Minimização multidimensional Esta função é igual à minfn, excepto: • Usa o mininicial para determinar os 3 pontos e o valor de ym • Tem que atribuir o valor correcto a vars(indice) antes de chamar a função fornecida em func xn=c1*xm+c2*x1; vars(indice)=xn; yn=feval(func,params,vars);

  46. Minimização multidimensional Esta função é igual à minfn, excepto: • Usa o mininicial para determinar os 3 pontos e o valor de ym • Tem que atribuir o valor correcto a vars(indice) antes de chamar a função fornecida em func • Mas minfnvec ainda só minimiza numa dimensão (a dimensão indicada em indice).

  47. Minimização multidimensional • Precisamos de: function xs=multimin(funcao,params,xs,prec)

  48. Minimização multidimensional functionxs=multimin(funcao,params,xs,prec) Vector com os valores de todas as variáveis no mínimo da função

  49. Minimização multidimensional function xs=multimin(funcao,params,xs,prec) Nome da função a minimizar.

  50. Minimização multidimensional function xs=multimin(funcao,params,xs,prec) Parâmetros constantes...