11
基基 matlab 基基基基基 基基

基于matlab的模拟生长

Embed Size (px)

DESCRIPTION

基于matlab的模拟生长. 卢梦. 主要内容. 模拟树生长 模拟石墨烯生长. 树生长. 大体思路:在一个区域上设置一些凝结核,然后随机产生自由粒子,粒子做随机运动,当粒子运动到凝结核附近时就凝结下来。. function l a=zeros(53,303);a(2,5:80:300)=1; %设置一个零矩阵,并在底部设置凝结核 for i=1:1:50000 %总共产生50000个粒子 t=randperm(301);f=t(1)+1;e=51; %在顶部随机产生粒子 - PowerPoint PPT Presentation

Citation preview

基于 matlab 的模拟生长

卢梦

主要内容• 模拟树生长

• 模拟石墨烯生长

树生长

• 大体思路:在一个区域上设置一些凝结核,然后随机产生自由粒子,粒子做随机运动,当粒子运动到凝结核附近时就凝结下来。

• function l• a=zeros(53,303);a(2,5:80:300)=1; % 设置一个零矩阵,并在底部设置凝结核• for i=1:1:50000 % 总共产生 50000 个粒子• t=randperm(301);f=t(1)+1;e=51; % 在顶部随机产生粒子• while e<52&&e>2&&f<302&&f>2 % 限定粒子的运动范围• s=randperm(4);r=rem(s(1),4); % 定义随机运动• switch(r)• case 0• f=f-1;• case 1• f=f+1;• case 2• e=e-1;• otherwise• e=e+1;• end• if a(e,f+1)+a(e,f-1)+a(e-1,f)+a(e+1,f)>0 % 凝结判断• a(e,f)=1; % 赋值到矩阵• break• else • continue• end• end• end• [x,y]=find(a); % 找出矩阵中不为零的元素• scatter(y,x,'.');

• 生长图

模拟石墨烯生长• 大体思路:与树生长类似,也是随机产生

粒子做自由运动,运动到凝结核周围时进行凝结。不同的是,石墨烯的凝结方式与树生长不同。从平面近似来看,石墨烯碳原子间的化学键之间是 120 度角,每个原子最多只能与其他三个原子结合。

• 原理图 • 从图中可以发现,凝结只发生在某些线上。绿线所指的两条线上无凝结发生。因此,将坐标轴所有的纵线进行定义,再加上凝结判据即可凝结

• function smx• L=151;• axis([0 L 0 L]); % 建立坐标系• x0=floor(L/2)+1;• y0=x0;• X=sparse(L,L); % 建立相对应的矩阵• X(x0,y0)=1; % 设定凝结核• R=floor(L/2)-5;• for i=1:1:15000• r=rand*2*pi;• kx=floor(x0+R*cos(r));• ky=floor(y0+R*sin(r)); % 产生随机点• if X(kx,ky)==1• break • end• while (kx-76)*(kx-76)+(ky-76)*(ky-76)<5184• s=randperm(4);t=rem(s(1),4);• switch(t)• case 0• kx=kx-1;• if X(kx,ky)==1• kx=kx+1;continue• end• case 1• kx=kx+1;• if X(kx,ky)==1• kx=kx-1;continue• end

• case 2• ky=ky-1;• if X(kx,ky)==1• ky=ky+1;continue• end• otherwise• ky=ky+1;• if X(kx,ky)==1• ky=ky-1;continue• end• end % 随机运动• if rem((kx-76)/3+1,2)==0&&(X(kx+1,ky+2)+X(kx+1,ky-2)+X(kx-2,ky))

>0 • X(kx,ky)=1;• break • elseif rem((kx-77),6)==0&&(X(kx-1,ky+2)+X(kx-1,ky-2)+X(kx+2,ky))

>0• X(kx,ky)=1;• break• elseif rem((kx-76),6)==0&&(X(kx+1,ky+2)+X(kx+1,ky-2)+X(kx-2,ky))

>0 • X(kx,ky)=1;• break • elseif rem((kx-77)/3+1,2)==0&&(X(kx-1,ky+2)+X(kx-1,ky-2)+X(kx+2,

ky))>0• X(kx,ky)=1;• break % 凝结判据• else• continue• end• end• end• [m,n]=find(X); % 找出凝结点• scatter(m,n*sqrt(3)/2,'b.'); % 画图,进行坐标收缩• axis equal;

结束

谢 谢 !