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

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

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

Apresentações semelhantes


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

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

2 Ludwig Krippahl, 2007 2 Na aula de hoje... Anúncios Métodos estocásticos (Monte Carlo) Calculo de áreas Integração de funções Unidades formadoras de colónias Formação de nanoestruturas Trabalho 1 (dúvidas, etc...)

3 Ludwig Krippahl, 2007 3 Anúncios Entrega do trabalho 1: dia 27, 9:00h As aulas dessa semana não são para tirar dúvidas sobre o trabalho 1. Alunos do P5: combinar aula para compensar o feriado (no final desta)

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

5 Ludwig Krippahl, 2007 5 Calcular uma área x>1 y { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com.br/1/332163/slides/slide_5.jpg", "name": "Ludwig Krippahl, 2007 5 Calcular uma área x>1 y1 y

6 Ludwig Krippahl, 2007 6 Calcular uma área x>1 y { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com.br/1/332163/slides/slide_6.jpg", "name": "Ludwig Krippahl, 2007 6 Calcular uma área x>1 y1 y

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

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

9 Ludwig Krippahl, 2007 9 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.

10 Ludwig Krippahl, 2007 10 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.

11 Ludwig Krippahl, 2007 11 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 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com.br/1/332163/slides/slide_11.jpg", "name": "Ludwig Krippahl, 2007 11 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

12 Ludwig Krippahl, 2007 12 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

13 Ludwig Krippahl, 2007 13

14 Ludwig Krippahl, 2007 14

15 Ludwig Krippahl, 2007 15

16 Ludwig Krippahl, 2007 16

17 Ludwig Krippahl, 2007 17

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

19 Ludwig Krippahl, 2007 19 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

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

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

22 Ludwig Krippahl, 2007 22 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

23 Ludwig Krippahl, 2007 23 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)

24 Ludwig Krippahl, 2007 24 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,m axx,maxy,pontos)

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

26 Ludwig Krippahl, 2007 26 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

27 Ludwig Krippahl, 2007 27 Dicas Mais pontos, mais rigor:

28 Ludwig Krippahl, 2007 28 Dicas Mais pontos, mais rigor. O rectângulo convêm 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)

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

30 Ludwig Krippahl, 2007 30 Integrar função

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

32 Ludwig Krippahl, 2007 32 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

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

34 Ludwig Krippahl, 2007 34 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;;");

35 Ludwig Krippahl, 2007 35

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

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

38 Ludwig Krippahl, 2007 38 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

39 Ludwig Krippahl, 2007 39 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.

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

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

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

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

44 Ludwig Krippahl, 2007 44 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.

45 Ludwig Krippahl, 2007 45 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.

46 Ludwig Krippahl, 2007 46 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.

47 Ludwig Krippahl, 2007 47 Problema real 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.

48 Ludwig Krippahl, 2007 48 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.

49 Ludwig Krippahl, 2007 49 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.

50 Ludwig Krippahl, 2007 50 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

51 Ludwig Krippahl, 2007 51 Formação de nanoestruturas Controlled Synthesis of 2-D and 3-D Dendritic Platinum Nanostructures, Yujiang Song et al, JACS 23/12/2003

52 Ludwig Krippahl, 2007 52 Formação de nanoestruturas

53 Ludwig Krippahl, 2007 53 Simular difusão em 2D Movimento aleatório da partícula

54 Ludwig Krippahl, 2007 54 Simular difusão em 2D Superfície maior: cyclic boundary

55 Ludwig Krippahl, 2007 55 Simular difusão em 2D Regras de movimento: partícula está em x, y. escolher aleatoriamente -1, +0, +1 para cada

56 Ludwig Krippahl, 2007 56 Simular difusão em 2D Regras de movimento: partícula está em x, y. escolher aleatoriamente -1, +0, +1 para cada sai por um lado, entra pelo outro: se >tamanho, coordenada = 1 se <1, coordenada = tamanho Atenção round(rand*2) ou floor(rand*3)? O round dá 50% de probabilidade de ser 1...

57 Ludwig Krippahl, 2007 57 Simular difusão em 2D Função movexy function [x,y]=movexy(x,y,tamanho) Recebe coordenadas x, y e tamanho. Devolve coordenadas x, y depois de modificadas. Precisa de saber o tamanho para dar a volta se a coordenada sai da grelha.

58 Ludwig Krippahl, 2007 58 Inicio da trajectória A partícula vai começar no limite da grelha:

59 Ludwig Krippahl, 2007 59 Inicio da trajectória A partícula vai começar no limite da grelha: Escolher x e y ao acaso, entre 1 e tamanho. x e y têm que ser inteiros. Escolher um r ao acaso entre 0 e 1. Conforme o r é <0.25, <0.5, <0.75 ou else x=1, x=tamanho, y=1, y=tamanho

60 Ludwig Krippahl, 2007 60 Inicio da trajectória Conforme o r é <0.25, <0.5, <0.75 ou else x=1, x=tamanho, y=1, y=tamanho 25% probabilidade para cada lado

61 Ludwig Krippahl, 2007 61 Inicio da trajectória Função inicio function [x,y]=inicio(tamanho) Recebe o tamanho da grelha e devolve as coordenadas iniciais da partícula geradas aleatoriamente, na fronteira da grelha.

62 Ludwig Krippahl, 2007 62 Formação de nanoestruturas A estrutura vai-se formando conforme partículas difundem pela membrana e se agregam. Algoritmo: quando o movimento de uma partícula a levaria a uma posição da grelha já ocupada, a partícula fica imobilizada como parte da estrutura

63 Ludwig Krippahl, 2007 63 Implementação Função crescimento function parts=crescimento(tamanho,particulas) Recebe o tamanho da grelha e o número de partículas na nanoestrutura. Devolve uma matriz de 2 colunas com as coordenadas x e y das partículas na estrutura.

64 Ludwig Krippahl, 2007 64 Implementação Exemplo tamanho=20; parts=crescimento(tamanho,40); title([num2str(length(parts))," particulas"]); axis([1,tamanho,1,tamanho],"equal"); plot(parts(:,1),parts(:,2),"or;;");

65 Ludwig Krippahl, 2007 65 Implementação Exemplo

66 Ludwig Krippahl, 2007 66 Implementação Representação da estrutura: Matriz de duas colunas x, y. Problema: Para detectar se uma célula da grelha está ocupada temos que ver todas as partículas já na estrutura. Isto cada vez que se move uma partícula. Pouco eficiente

67 Ludwig Krippahl, 2007 67 Implementação Representação da estrutura: Matriz de duas colunas x, y. Solução: Representar também a grelha com uma matriz de zeros, de tamanho x tamanho, em que colocamos 1 em cada célula ocupada. Para detectar ocupação da célula x, y é só consultar matriz(x,y)

68 Ludwig Krippahl, 2007 68 Implementação Função crescimento Criar grelha e vector partículas Colocar a primeira partícula no centro da grelha Para cada partícula da segunda em diante: Usar inicio para escolher o ponto inicial. Repetir: movexy e verificar se novo x, y está ocupado. Se está guardar o x, y corrente na partícula e marcar a grelha.

69 Ludwig Krippahl, 2007 69 Formação de nanoestruturas

70 Ludwig Krippahl, 2007 70 Como fazer estes gráficos? Próxima aula....

71 Ludwig Krippahl, 2007 71 Trabalho 1 Parte 1 Quase o mesmo que o zero do polinómio, mas em vez do polinómio usa a função que calcula o desvio ao equilíbrio. Parte 3 Quase o mesmo que extrair os elementos da fórmula química Partes 2 e 4: usar o resto.

72 Ludwig Krippahl, 2007 72 Dúvidas


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

Apresentações semelhantes


Anúncios Google