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

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

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

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

Ludwig Krippahl, 2009

Programação para as Ciências Experimentais

2008/9

Teórica 9

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

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

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

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

Ludwig Krippahl, 2009 4

Formação de nanoestruturas

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

Ludwig Krippahl, 2009 5

Simular difusão em 2D

Movimento aleatório da partícula

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

Ludwig Krippahl, 2009 6

Simular difusão em 2D

Superfície maior: “cyclic boundary”

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

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

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

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

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

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.

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

Ludwig Krippahl, 2009 10

Inicio da trajectória

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

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

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

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

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

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

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.

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

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

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

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.

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

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

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

Ludwig Krippahl, 2009 17

Implementação

Exemplo

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

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

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

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)

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

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.

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

Ludwig Krippahl, 2009 21

Formação de nanoestruturas

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

Ludwig Krippahl, 2009 22

Dissolução

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

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

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.

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

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.

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

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.

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

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

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

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

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

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

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

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

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

Ludwig Krippahl, 2009 30

Dissolução

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

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!

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

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

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

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.

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

Ludwig Krippahl, 2009 34

Próxima prática

Monte Carlo• Integrais e àreas.

• Contar UFCs (revejam a teórica 7)

• Simulação (desta aula)

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

Ludwig Krippahl, 2009 35

Dúvidas