1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| clear all;
n=input('entrer le nombre datomes ' );
t=input('entrer le nombre de déplacements ');
tic;
S1=zeros(n);
%génère l'espace de référence qui va accueillir les atomes
S1(round(n/2),:)=1;
%ligne d'atomes qui vont diffuser
L=ceil(4*rand(t,n));
%matrice de déplacements, les déplacement dont 1, 2, 3, 4. si le 1 alors l'atome se déplace droite, haut, , bas, , gauche
S2=S1;
A=zeros(1,n);
B=zeros(1,n);
%A et B sont les valeurs tampon de boucle
x=zeros(1,n);
%variable de positions verticale des atomes après leur déplacement
y=zeros(1,n);
%variable de positions horizontale des atomes après leur déplacement
a=(1:n);
for p=1:t
%pour chaque déplacement
S1=S2;
[Y,X]=find(S1);
%X et Y variables de positions des atomes avant leur déplacement
%permet de localiser les atomes dans la matrice
S2=zeros(n);
for m=1:n
%pour chaque atome
A(m)=X(m);
B(m)=Y(m);
%A et B sont les valeurs tampon de la boucle
if (L(p,m)==1 && Y(m)+1==n+1)
B(m)=0;
%si l'atome sort de la matrice par le bas, on change la valeur tampon de sa position pour lui permettre de rester dans la matrice après son déplacement. l'atome est donc placé au dessus de la matrice
elseif (L(p,m)==2 && Y(m)-1==0)
B(m)=n+1;
end
%si l'atome sort de la matrice sort par le haut,
if (L(p,m)==3 && X(m)+1==n+1)
A(m)=0;
%si l'atome sort de la matrice sort par la droite,
elseif (L(p,m)==4 && X(m)-1==0)
A(m)=n+1;
end
%si l'atome sort de la matrice sort par la gauche,
if (L(p,m)==1 && S1(B(m)+1,X(m))==0)
x(m)=X(m);
y(m)=B(m)+1;
%déplacement de l'atome vers le bas si il n'y a pas d'atome en dessous
elseif (L(p,m)==1 && S1(B(m)+1,X(m))==1)
x(m)=X(m);
y(m)=Y(m)
%l'atome reste à sa position si il y a déplacement vers le bas et un atome en dessous
end
if (L(p,m)==2 && S1(B(m)-1,X(m))==0)
x(m)=X(m);
y(m)=B(m)-1;
elseif (L(p,m)==2 && S1(B(m)-1,X(m))==1)
x(m)=X(m);
y(m)=Y(m);
end
if (L(p,m)==3 && S1(Y(m),A(m)+1)==0)
x(m)=A(m)+1;
y(m)=Y(m);
elseif (L(p,m)==3 && S1(Y(m),A(m)+1)==1)
x(m)=X(m);
y(m)=Y(m);
end
if (L(p,m)==4 && S1(Y(m),A(m)-1)==0)
x(m)=A(m)-1;
y(m)=Y(m);
elseif (L(p,m)==4 && S1(Y(m),A(m)-1)==1)
x(m)=X(m);
y(m)=Y(m);
end
S2(y(m),x(m))=S2(y(m),x(m))+1;
if (S2(y(m),x(m))==2)
S2(y(m),x(m))=1;
x(m)=X(m);
y(m)=Y(m);
end
end
end
figure(2);
imagesc(S2);
X2=zeros(n,1);
for u=1:n
X2(u,1)=sum(S2(u,:));
end
%permet de sommer les atomes pour avoir la répartition dans les colonnes
figure(3)
plot(a, X2, '*')
toc |
Partager