ludwig krippahl, 2008 programação para as ciências experimentais 2007/8 teórica 8
TRANSCRIPT
Ludwig Krippahl, 2008
Programação para as Ciências Experimentais
2007/8
Teórica 8
Ludwig Krippahl, 2008 2
Na aula de hoje...
Simulação• Formação de nanoestruturas
• Dissolução
• Solubilidade
Ludwig Krippahl, 2008 3
Formação de nanoestruturas
Controlled Synthesis of 2-D and 3-D Dendritic PlatinumNanostructures, Yujiang Song et al, JACS 23/12/2003
Ludwig Krippahl, 2008 4
Formação de nanoestruturas
Ludwig Krippahl, 2008 5
Simular difusão em 2D
Movimento aleatório da partícula
Ludwig Krippahl, 2008 6
Simular difusão em 2D
Superfície maior: “cyclic boundary”
Ludwig Krippahl, 2008 7
Simular difusão em 2D
Regras de movimento:• partícula está em x, y.
• escolher aleatoriamente -1, +0, +1 para cada
Ludwig Krippahl, 2008 8
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...
Ludwig Krippahl, 2008 9
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.
Ludwig Krippahl, 2008 10
Inicio da trajectória
A partícula vai começar no limite da grelha:
Ludwig Krippahl, 2008 11
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
Ludwig Krippahl, 2008 12
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
Ludwig Krippahl, 2008 13
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.
Ludwig Krippahl, 2008 14
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
Ludwig Krippahl, 2008 15
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.
Ludwig Krippahl, 2008 16
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;;");
Ludwig Krippahl, 2008 17
Implementação
Exemplo
Ludwig Krippahl, 2008 18
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
Ludwig Krippahl, 2008 19
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)
Ludwig Krippahl, 2008 20
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 da partícula e marcar na grelha.
Ludwig Krippahl, 2008 21
Formação de nanoestruturas
Ludwig Krippahl, 2008 22
Dissolução
Simular a dissolução de sólidos (em 2D)
Ludwig Krippahl, 2008 23
Dissolução
Observar os efeitos do tamanho dos sólidos em:• Velocidade a atingir o equilíbrio.
• Valor no equilíbrio.
Ludwig Krippahl, 2008 24
Dissolução
Problema (em partes, como sempre):• Criar o sólido na matriz
• Grupo de partículas
• Mover cada partícula• movexy, já está feito
• Definir regras para a simulação• Se está no sólido, tem uma probabilidade de sair
para solução e começar a mover-se.
• Se encontra outra partícula fica retida no sólido.
Ludwig Krippahl, 2008 25
Dissolução
Implementaçãoparts=preenche(xini,yini,lx,ly)
xini e yini: valores para o ponto inicial (x,y)
lx,ly: tamanho de cada lado do rectângulo.
Ludwig Krippahl, 2008 26
Dissoluçãooctave.exe:2> preenche(2,3,1,2)ans =
2 3 2 4
octave.exe:3> preenche(2,3,3,2)ans =
2 3 2 4 3 3 3 4 4 3 4 4
Ludwig Krippahl, 2008 27
Dissolução
Simulaçãograf=dissolve(parts,tamanho,iters, solub)
parts: matriz com as coordenadas iniciais das partículas no(s) sólido(s).
tamanho: largura da grelha (quadrada)iters: número de iterações a executarsolub: probabilidade de uma partícula deixar o
sólido
Ludwig Krippahl, 2008 28
Dissolução
Simulação• Marcar todas as partículas como sólido.
• Marcar as partículas na grelha.
• Para cada iteração• Percorrer todas as partículas
• Se não está sólida ou se rand<solub, mover e marcar como em solução.
• Se tenta mover para um sítio ocupado fica onde está e passa a sólido
Ludwig Krippahl, 2008 29
Dissolução
Simulação• Para cada iteração
• Percorrer todas as partículas
• Contar o número de partículas no sólido e acrescentar ao vector para o gráfico
Ludwig Krippahl, 2008 30
Dissolução
Ludwig Krippahl, 2008 31
Sermão
Para quem está a ficar para trás• Resolvam as primeiras fichas.
• Resolvam os exercícios extra e leiam a introdução ao Octave.
• Consultem a página do ano passado (exercícios resolvidos)
Ludwig Krippahl, 2008 32
Dúvidas