A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 7."— Transcrição da apresentação:

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

2 Ludwig Krippahl, Na aula de hoje... Métodos estocásticos (Monte Carlo) Calculo de áreas Integração de funções Simulação Contar unidades formadoras de colónias Trabalho 1 (dúvidas)

3 Ludwig Krippahl, Monte Carlo Nome cunhado pelo matemático Nicholas Constantine Metropolis( ) Conjunto de métodos baseados em números aleatórios.

4 Ludwig Krippahl, Calcular uma área x>1 y

5 Ludwig Krippahl, Calcular uma área x>1 y

6 Ludwig Krippahl, Algoritmo Pontos ao acaso no quadrado -2, 2. Área?

7 Ludwig Krippahl, Algoritmo Contamos os pontos dentro e fora. Área?

8 Ludwig Krippahl, Algoritmo Contamos os pontos dentro e fora. A fracção de pontos dentro da área será a proporção entre a área a medir e a área do quadrado. Quanto mais pontos melhor.

9 Ludwig Krippahl, Implementação Separar as tarefas: Dentro ou fora? Uma função que recebe x, y e devolve true ou false conforme x, y está dentro da área que queremos. Contar os pontos Outra função que recebe o nome da função que testa, o rectângulo que inclui a área a medir, e o número de pontos, e devolve a área pretendida.

10 Ludwig Krippahl, Implementação Função triangcirc testa se está dentro do triângulo e circulo function dentro=triangcirc(x,y) dentro= ( x^2+y^2 1 && y

11 Ludwig Krippahl, Implementação Função areamc: devolve área recebe nome da função teste (string, para o feval) mínimos de x e y máximos de x e y (definem o rectângulo) número de pontos

12 Ludwig Krippahl,

13 Ludwig Krippahl,

14 Ludwig Krippahl,

15 Ludwig Krippahl,

16 Ludwig Krippahl,

17 Ludwig Krippahl, Implementação Função areamc: function a=areamc(testfn,minx,miny,maxx,maxy,pontos) valor a devolver com a área

18 Ludwig Krippahl, Implementação Função areamc: function a=areamc(testfn,minx,miny,maxx,maxy,pontos) string com o nome da função que testa cada ponto

19 Ludwig Krippahl, Implementação Função areamc: function a=areamc(testfn,minx,miny,maxx,maxy,pontos) rectângulo que contêm a área a determinar

20 Ludwig Krippahl, Implementação Função areamc: function a=areamc(testfn,minx,miny,maxx,maxy,pontos) número de pontos a testar

21 Ludwig Krippahl, Implementação Função areamc: área (variável a) começa a zero calcular a largura e altura do rectângulo ciclo para testar o número especificado de pontos. no final, a área é o número de pontos dentro a dividir pelo total de pontos e multiplicar pela área do rectângulo

22 Ludwig Krippahl, Implementação Função areamc: ciclo para testar o número especificado de pontos. criar coordenadas x,y aleatórias, de minx a maxx, e miny a maxy respectivamente. se feval(testefn, x, y) for verdadeiro então incrementar a variável a (para contar o número de pontos dentro da área)

23 Ludwig Krippahl, Implementação Para fazer os gráficos: Além da área devolver também duas matrizes com as coordenadas x,y dos pontos dentro e fora. function [a,dentros,foras]=areamc(testfn,minx,miny, maxx,maxy,pontos)

24 Ludwig Krippahl, Exemplo de utilização octave:13> areamc("triangcirc",-2,-2,2,2,1000) ans = Nota: chamando assim ignora os outros valores devolvidos, dentros e foras.

25 Ludwig Krippahl, Exemplo de utilização pontos=1000; [a,ds,fs]=areamc("triangcirc",-2,-2,2,2,pontos); hold off axis("equal") eixos iguais title([num2str(pontos)," pontos"]); plot(ds(:,1),ds(:,2),"og;;"); hold on; plot(fs(:,1),fs(:,2),"or;;"); or;; – circulo, red, ;; indica que não tem legenda

26 Ludwig Krippahl, Dicas Mais pontos, mais rigor:

27 Ludwig Krippahl, Dicas Mais pontos, mais rigor. O rectângulo deve estar o mais próximo possível da área que queremos. Em vez de (-2,-2) a (2,2), usar (1, -2) a (2,1)

28 Ludwig Krippahl, Dicas Em vez de (-2,-2) a (2,2) usar (1, -2) a (2,1) Área=1.7

29 Ludwig Krippahl, Integrar função

30 Ludwig Krippahl, Integrar função O integral de f(x)=exp(-x 3 ) não tem solução analítica. Mas o integral é a área:

31 Ludwig Krippahl, Integrar função Podemos usar a areamc, só precisamos de uma função nova: function dentro=expxcubo(x,y) dentro=y<=exp(-x^3); endfunction

32 Ludwig Krippahl, Integrar função Basta usar: areamc("expxcubo",0,0,2,1.2,5000); ans= Nota: neste caso só é devolvido o primeiro valor (a).

33 Ludwig Krippahl, Integrar função Para fazer o gráfico: pontos=5000; [a,ds,fs]=areamc("expxcubo",0,0,2,1.2,pontos); clearplot axis("equal") title([num2str(pontos)," pontos"]); plot(ds(:,1),ds(:,2),"og;;"); hold on; plot(fs(:,1),fs(:,2),"or;;");

34 Ludwig Krippahl,

35 Ludwig Krippahl, Contar microorganismos no ar Bomba aspira ar. Orifícios sobre placa. Contar colónias. Estimar UFCs.

36 Ludwig Krippahl, Contar microorganismos no ar Problema: Podem entrar vários esporos ou bactérias pelo mesmo orifício, resultando numa só colónia. Ar

37 Ludwig Krippahl, Contar microorganismos no ar Problema: Podem entrar vários esporos ou bactérias pelo mesmo orifício, resultando numa só colónia. Sabendo o número de colónias na placa, quantas UFCs no ar?

38 Ludwig Krippahl, Contar microorganismos no ar Dividir em 2 fases Simular o processo para calcular quantas colónias sabendo o número de UFCs. Usar a simulação com diferentes valores de UFCs até que obter o número de colónias observado.

39 Ludwig Krippahl, Simulação Temos N orifícios e X UFCs. Cada UFC pode entrar por qualquer dos N orifícios. O número de colónias será o número de orifícios diferentes por onde entraram UFCs

40 Ludwig Krippahl, Algoritmo Para cada UFC seleccionar um orifício aleatoriamente e marcar esse orifício. Contar o número de orifícios marcados. Repetir um número grande de vezes (50, 100,...) e tirar o valor médio.

41 Ludwig Krippahl, Implementação Função function cs=colonias(buracos,ufcs,tentativas) Devolve o número de colónias

42 Ludwig Krippahl, Implementação Função function cs=colonias(buracos,ufcs,tentativas) Número de orifícios

43 Ludwig Krippahl, Implementação Função function cs=colonias(buracos,ufcs,tentativas) Número de UFCs no ar

44 Ludwig Krippahl, Implementação Função function cs=colonias(buracos,ufcs,tentativas) Número de vezes que repete a simulação para calcular a média

45 Ludwig Krippahl, Implementação Dois ciclos for: número de tentativas e, para cada tentativa número de ufcs. A cada tentativa somar a um contador o número de orifícios marcados.

46 Ludwig Krippahl, Implementação Dois ciclos for: for a=1:4 for b=1:3 [a,b] endfor

47 Ludwig Krippahl, Implementação Dois ciclos for: for a=1:4 for b=1:3 [a,b] endfor Repetido 4 vezes

48 Ludwig Krippahl, Implementação Dois ciclos for: for a=1:4 for b=1:3 [a,b] endfor Repetido 3 vezes cada uma das 4 do ciclo de fora (12 vezes no total)

49 Ludwig Krippahl, Implementação Os orifícios podem ser representados como um vector de zeros, e marcados com 1. O total de orifícios marcados é o somatório do vector.

50 Ludwig Krippahl, Implementação Como seleccionar o orifício aleatoriamente. É preciso arredondar: round(x) inteiro mais próximo de x floor(x)maior inteiro menor que x ix=floor(rand*buracos)+1; (de 1 a buracos) Nota: o rand nunca devolve 1. Ver help.

51 Ludwig Krippahl, Implementação Exemplo: 10 orifícios e 3 UFCs, [ ] inicio, todos vazios [ ]3 [ ]5 [ ]3 2 Colónias

52 Ludwig Krippahl, Problema real: saber UFCs A função colonias dá-nos o número de colónias formadas na placa sabendo as UFCs no ar. O problema real é o inverso: as colónias na placa é o que se observa, e o que queremos saber é as UFCs do ar.

53 Ludwig Krippahl, Algoritmo O número de colónias será sempre igual ou inferior ao número de UFCs no ar. Começar por UFCs= colónias, e ir incrementando os UFCs até obter da função colonias o número certo de colónias.

54 Ludwig Krippahl, Implementação Função contaufcs function u=contaufcs(buracos,cs,tentativas) Recebe o número de orifícios, colónias observadas, e o número de tentativas para estimar as colónias para cada valor de u.

55 Ludwig Krippahl, Implementação Função contaufcs u = cs Enquanto o número estimado de colónias for inferior a cs, incrementar u e recalcular a estimativa Para estimar o número de colónias em função de u usar a função colonias, com o número de tentativas no argumento do contaufcs

56 Ludwig Krippahl, Ficha 7 Implementar: areamc colonias contaufcs

57 Ludwig Krippahl, Trabalho 1: Dúvidas

58 Ludwig Krippahl, Trabalho 1: Estrutura Ponto IsoeléctricoPolinómios Ler sequênciasLer polinómios Processar cada umaProcessar cada umCalcular o zero Função cargaFunção polinómio

59 Ludwig Krippahl, Trabalho 1: Cálculo das cargas Ponto IsoeléctricoPolinómios Função cargaFunção polinómio pHX Ler pKas.txtMultiplicar coefs. Consultar a tabela Calcular cadeias laterais Adicionar NH3 e COOH

60 Ludwig Krippahl, Trabalho 1: Cálculo da carga pH = pKa + log (A/AH) A + AH = 1 Resolvendo: x = 10^(pH-pKa) A= x/(1+x) AH= 1-A Carga média = A*CD + AH * (CD+1) (CD é a carga da forma desprotonada)

61 Ludwig Krippahl, Dúvidas


Carregar ppt "Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 7."

Apresentações semelhantes


Anúncios Google