Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 9

Preview:

Citation preview

Ludwig Krippahl, 2009

Programação para as Ciências Experimentais

2008/9

Teórica 9

Ludwig Krippahl, 2009 2

Na aula de hoje...

Simulação• Formação de nanoestruturas

• Dissolução

• Solubilidade

Ludwig Krippahl, 2009 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, 2009 4

Formação de nanoestruturas

Ludwig Krippahl, 2009 5

Simular difusão em 2D

Movimento aleatório da partícula

Ludwig Krippahl, 2009 6

Simular difusão em 2D

Superfície maior: “cyclic boundary”

Ludwig Krippahl, 2009 7

Simular difusão em 2D

Regras de movimento:• partícula está em x, y.

• escolher aleatoriamente -1, +0, +1 para cada

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

Inicio da trajectória

A partícula vai começar no limite da grelha:

Ludwig Krippahl, 2009 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 de 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, 2009 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, 2009 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, 2009 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, 2009 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, 2009 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, 2009 17

Implementação

Exemplo

Ludwig Krippahl, 2009 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, 2009 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, 2009 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, 2009 21

Formação de nanoestruturas

Ludwig Krippahl, 2009 22

Dissolução

Simular a dissolução de sólidos (em 2D)

Ludwig Krippahl, 2009 23

Dissolução

Observar os efeitos do tamanho dos sólidos em:• Velocidade a atingir o equilíbrio.

• Valor no equilíbrio.

Ludwig Krippahl, 2009 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, 2009 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, 2009 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, 2009 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, 2009 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, 2009 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, 2009 30

Dissolução

Ludwig Krippahl, 2009 31

Sermão

Para quem está a ficar para trás• Resolvam as primeiras fichas.

• Leiam a introdução ao Octave e resolvam os exercicíos sobre funções.

• Leiam o manual!

Ludwig Krippahl, 2009 32

Próximas aulas

A implementação fica por vossa conta.• Importante: perceber bem os algoritmos nas

aulas teóricas.

Várias funções implementarem serão úteis para o trabalho final

Ludwig Krippahl, 2009 33

Trabalho 2

Consultem os trabalhos anteriores:• 06/07 – Modelar uma epidemia

• 07/08 – Identificar os mecanismos de cinética de reacções

Ajuste de um modelo a dados experimentais.

Este ano menos folha de cálculo, mais Octave.

Ludwig Krippahl, 2009 34

Próxima prática

Monte Carlo• Integrais e àreas.

• Contar UFCs (revejam a teórica 7)

• Simulação (desta aula)

Ludwig Krippahl, 2009 35

Dúvidas

Recommended