Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 3.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.
Transcript of Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.
![Page 1: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/1.jpg)
Ludwig Krippahl, 2007
Programação para as Ciências Experimentais
2006/7
Teórica 6
![Page 2: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/2.jpg)
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...)
![Page 3: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/3.jpg)
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)
![Page 4: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/4.jpg)
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.
![Page 5: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/5.jpg)
Ludwig Krippahl, 2007 5
Calcular uma área
x>1
y<x-1y2+x2<4
![Page 6: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/6.jpg)
Ludwig Krippahl, 2007 6
Calcular uma área
x>1
y<x-1y2+x2<4
Área?
![Page 7: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/7.jpg)
Ludwig Krippahl, 2007 7
Algoritmo
Pontos ao acaso no quadrado -2, 2.
Área?
![Page 8: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/8.jpg)
Ludwig Krippahl, 2007 8
Algoritmo
Contamos os pontos dentro e fora.
Área?
![Page 9: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/9.jpg)
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.
![Page 10: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/10.jpg)
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.
![Page 11: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/11.jpg)
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<4 && x>1 && y<x-1);
endfunction
![Page 12: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/12.jpg)
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
![Page 13: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/13.jpg)
Ludwig Krippahl, 2007 13
![Page 14: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/14.jpg)
Ludwig Krippahl, 2007 14
![Page 15: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/15.jpg)
Ludwig Krippahl, 2007 15
![Page 16: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/16.jpg)
Ludwig Krippahl, 2007 16
![Page 17: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/17.jpg)
Ludwig Krippahl, 2007 17
![Page 18: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/18.jpg)
Ludwig Krippahl, 2007 18
Implementação
Função areamc:
function a=areamc(testfn,minx,miny,maxx,maxy,pontos)
• valor a devolver com a área
![Page 19: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/19.jpg)
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
![Page 20: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/20.jpg)
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
![Page 21: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/21.jpg)
Ludwig Krippahl, 2007 21
Implementação
Função areamc:
function a=areamc(testfn,minx,miny,maxx,maxy,pontos)
• número de pontos a testar
![Page 22: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/22.jpg)
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
![Page 23: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/23.jpg)
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)
![Page 24: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/24.jpg)
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,maxx,maxy,pontos)
![Page 25: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/25.jpg)
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.
![Page 26: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/26.jpg)
Ludwig Krippahl, 2007 26
Exemplo de utilização
pontos=1000;[a,ds,fs]=areamc("triangcirc",-2,-2,2,2,pontos);hold offaxis("equal") eixos iguaistitle([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
![Page 27: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/27.jpg)
Ludwig Krippahl, 2007 27
Dicas
Mais pontos, mais rigor:
![Page 28: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/28.jpg)
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)
![Page 29: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/29.jpg)
Ludwig Krippahl, 2007 29
Dicas
• Em vez de (-2,-2) a (2,2)
usar (1, -2) a (2,1)
• Área=1.7
![Page 30: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/30.jpg)
Ludwig Krippahl, 2007 30
Integrar função
![Page 31: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/31.jpg)
Ludwig Krippahl, 2007 31
Integrar função
O integral de f(x)=-exp(x3) não tem solução analítica.
Mas o integral é a área:
![Page 32: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/32.jpg)
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
![Page 33: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/33.jpg)
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).
![Page 34: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/34.jpg)
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);clearplotaxis("equal")title([num2str(pontos)," pontos"]);plot(ds(:,1),ds(:,2),"og;;");hold on;plot(fs(:,1),fs(:,2),"or;;");
![Page 35: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/35.jpg)
Ludwig Krippahl, 2007 35
![Page 36: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/36.jpg)
Ludwig Krippahl, 2007 36
Contar microorganismos no ar
Bomba aspira ar. Orifícios sobre placa. Contar colónias. Estimar UFCs.
![Page 37: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/37.jpg)
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
![Page 38: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/38.jpg)
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
![Page 39: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/39.jpg)
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.
![Page 40: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/40.jpg)
Ludwig Krippahl, 2007 40
Implementação
Função
function cs=colonias(buracos,ufcs,tentativas)
• Devolve o número de colónias
![Page 41: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/41.jpg)
Ludwig Krippahl, 2007 41
Implementação
Função
function cs=colonias(buracos,ufcs,tentativas)
• Número de orifícios
![Page 42: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/42.jpg)
Ludwig Krippahl, 2007 42
Implementação
Função
function cs=colonias(buracos,ufcs,tentativas)
• Número de UFCs no ar
![Page 43: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/43.jpg)
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
![Page 44: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/44.jpg)
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.
![Page 45: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/45.jpg)
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.
![Page 46: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/46.jpg)
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.
![Page 47: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/47.jpg)
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.
![Page 48: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/48.jpg)
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.
![Page 49: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/49.jpg)
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.
![Page 50: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/50.jpg)
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
![Page 51: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/51.jpg)
Ludwig Krippahl, 2007 51
Formação de nanoestruturas
Controlled Synthesis of 2-D and 3-D Dendritic PlatinumNanostructures, Yujiang Song et al, JACS 23/12/2003
![Page 52: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/52.jpg)
Ludwig Krippahl, 2007 52
Formação de nanoestruturas
![Page 53: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/53.jpg)
Ludwig Krippahl, 2007 53
Simular difusão em 2D
Movimento aleatório da partícula
![Page 54: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/54.jpg)
Ludwig Krippahl, 2007 54
Simular difusão em 2D
Superfície maior: cyclic boundary
![Page 55: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/55.jpg)
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
![Page 56: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/56.jpg)
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...
![Page 57: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/57.jpg)
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.
![Page 58: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/58.jpg)
Ludwig Krippahl, 2007 58
Inicio da trajectória
A partícula vai começar no limite da grelha:
![Page 59: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/59.jpg)
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
![Page 60: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/60.jpg)
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
![Page 61: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/61.jpg)
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.
![Page 62: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/62.jpg)
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
![Page 63: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/63.jpg)
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.
![Page 64: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/64.jpg)
Ludwig Krippahl, 2007 64
Implementação
Exemplotamanho=20;
parts=crescimento(tamanho,40);
title([num2str(length(parts))," particulas"]);
axis([1,tamanho,1,tamanho],"equal");
plot(parts(:,1),parts(:,2),"or;;");
![Page 65: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/65.jpg)
Ludwig Krippahl, 2007 65
Implementação
Exemplo
![Page 66: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/66.jpg)
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
![Page 67: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/67.jpg)
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)
![Page 68: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/68.jpg)
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.
![Page 69: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/69.jpg)
Ludwig Krippahl, 2007 69
Formação de nanoestruturas
![Page 70: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/70.jpg)
Ludwig Krippahl, 2007 70
Como fazer estes gráficos?
Próxima aula....
![Page 71: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/71.jpg)
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.
![Page 72: Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 6.](https://reader036.fdocumentos.com/reader036/viewer/2022081602/552fc102497959413d8bdda6/html5/thumbnails/72.jpg)
Ludwig Krippahl, 2007 72
Dúvidas