1 / 112

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

Programação para as Ciências Experimentais 2006/7. Teórica 9. 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. Crescimento bacteriano.

Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

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

More Related