ludwig krippahl, 2008 programação para as ciências experimentais 2007/8 teórica 8

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

Upload: internet

Post on 17-Apr-2015

102 views

Category:

Documents


0 download

TRANSCRIPT

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

Ludwig Krippahl, 2008

Programação para as Ciências Experimentais

2007/8

Teórica 8

Page 2: 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

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

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

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

Ludwig Krippahl, 2008 4

Formação de nanoestruturas

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

Ludwig Krippahl, 2008 5

Simular difusão em 2D

Movimento aleatório da partícula

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

Ludwig Krippahl, 2008 6

Simular difusão em 2D

Superfície maior: “cyclic boundary”

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

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

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

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...

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

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.

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

Ludwig Krippahl, 2008 10

Inicio da trajectória

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

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

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

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

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

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

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.

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

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

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

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.

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

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;;");

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

Ludwig Krippahl, 2008 17

Implementação

Exemplo

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

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

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

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)

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

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.

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

Ludwig Krippahl, 2008 21

Formação de nanoestruturas

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

Ludwig Krippahl, 2008 22

Dissolução

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

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

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.

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

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.

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

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.

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

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

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

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

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

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

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

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

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

Ludwig Krippahl, 2008 30

Dissolução

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

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)

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

Ludwig Krippahl, 2008 32

Dúvidas