1 / 11

基于matlab的模拟生长

基于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; %在顶部随机产生粒子

Download Presentation

基于matlab的模拟生长

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 基于matlab的模拟生长 卢梦

  2. 主要内容 • 模拟树生长 • 模拟石墨烯生长

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

  4. 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,'.');

  5. 生长图

  6. 模拟石墨烯生长 • 大体思路:与树生长类似,也是随机产生粒子做自由运动,运动到凝结核周围时进行凝结。不同的是,石墨烯的凝结方式与树生长不同。从平面近似来看,石墨烯碳原子间的化学键之间是120度角,每个原子最多只能与其他三个原子结合。

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

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

  9. 结束 谢 谢 !

More Related