1.元胞
元胞又可稱為單元,或基元,是元胞自動機的最基本的組成部分,元胞分布在離散的一維、二維或多維歐幾里德空間的晶格點上,
每一個元胞都有一個狀態,例如下方中間的元胞狀態是有一只小蟲子,其他元胞的狀態是沒有小蟲子,但如果蟲子移動了,那么就是隨著時間的推移,狀態的變化產生的結果

元胞有很多種,可以是六邊形,也可以是三角形等等,我們可以具體問題具體對待
2.元胞空間
元胞所分布在的空間網點集合就是這里的元胞空間,
3.鄰居
在一維元胞自動機中,通常以半徑,來確定鄰居,距離一個元胞,內的所有元胞均被認為是該元胞的鄰居,二維元胞自動機的鄰居定義較為復雜,但通常有以下幾種形式(我們以最常用的規則四方網格劃分為例),下圖中黑色元胞為中心元胞,灰色元胞為其鄰居,它們的狀態一起來計算中心元胞在下一時刻的狀態,
也就是說:元胞下一時刻的狀態決定于本身狀態和它鄰居元胞的狀態,
4.規則
規則是一個最重要的一點,決定了元胞演算法的好壞,
元胞自動機就是根據規則進行區域元胞間的相互作用而引起全域變化,
% DLA
clc;clear;close all;
S=zeros(400,500); % 生成狀態矩陣
S(end,:)=1; % 設定狀態矩陣中最下面一行元素等于1
A=1;B=1;X=0.8;
rand('state',0); % 設定亂數的狀態數
subplot(121);Ii=imshow(1-S,[]); % 顯示狀態矩陣
T1=title(['times = 1',', total particle=',num2str(sum(S(:)))],...
'Fontname','times new roman','fontsize',14); % 顯示時間與粒子總數
r=rand(1,500);
subplot(122);P1=plot(sum(S,2)/size(S,2),1:size(S,1),'r');% 繪制各行的密度值曲線
set(gca,'Position',[0.57,0.35,0.33,0.36],'YDir','reverse'); % 設定坐標軸屬性
xlim([0,max(sum(S,2)/size(S,2))]); % 設定x軸的范圍
ylabel('\ith','fontname','times new roman','fontsize',14); % y軸標注
xlabel('\it\rho','fontname','times new roman','fontsize',14); % x軸標注
title('{\it\rho} ({\ith})','fontname','times new roman','fontsize',14); % 加注圖題
set(gcf,'DoubleBuffer','on'); % 設定圖形視窗的渲染效果
[L1,L2]=size(S); % 回傳狀態矩陣的行數L1和列數L2
N=500;H=1; % 初始化引數:粒子總數N和時間引數H
h=150; % 設定截頂高度
scale=0.5; % 設定剪切系數
while N<20000;
R1=2+round([L1-3]*rand); % 隨機產生粒子的坐標
R2=2+round([L2-4]*rand); % 隨機產生粒子的坐標
flag=0; % 控制回圈停止的引數
while R1<L1&R1>1&R2<L2&R2>1&flag==0; % 驗證粒子在狀態矩陣內部且粒子未被吸附
he=S(R1,R2-1)+S(R1,R2+1)+S(R1+1,R2); % 計算左、下和右方位的近鄰
if he>0.5; % 判斷近鄰中有固定粒子
S(R1,R2)=1; % 運動粒子被吸附
flag=1; % 標記粒子已經被吸附
else
ra=rand; % 粒子進行隨機移動的分量
rb=rand; % 粒子進行隨機移動的分量
R1=R1+(ra>=0.5)-(ra<0.5); % 計算下一時刻粒子的位置坐標
R2=R2+(rb>=0.5)-(rb<0.5); % 計算下一時刻粒子的位置坐標
end
end
sS=sum(S,2); % 對行所有元素求和
Se=find(sS);Se=min(Se); % 找出有粒子的最高一行
if Se==[size(S,1)-h]; % 判斷高度是否達到截頂高度
Sx=find(S(Se,:)); % 找出最高點粒子的橫坐標
S=cuth(S,h,Se,Sx,scale); % 切去最高點粒子所在的分支
end
set(Ii,'CData',1-S); % 顯示狀態矩陣
N=sum(S(:)); % 計算粒子總數
H=H+1; % 累計時間值
set(P1,'XData',sum(S,2)/size(S,2)); % 更新密度曲線資料
set(T1,'string',['times = ',num2str(H),', total particle=',num2str(sum(S(:)))]);% 更新時間和粒子總數
pause(0.02); % 暫停一下,顯示影片效果
end

完整代碼或者代寫添加QQ1575304183
往期回顧>>>>>>
【元胞自動機】基于元胞自動機的四車道交通流
【元胞自動機】基于元胞自動機之雙車道交通流模型含靠右行駛matlab原始碼
【元胞自動機】基于元胞自動機之晶體生長matlab原始碼
【數學建模】排隊論模型及MATLAB實作含GUI界面
【元胞自動機】基于元胞自動機求解城市小區開放對周邊道路通行的影響研究
【元胞自動機】基于元胞自動機之影像處理matlab原始碼
【元胞自動機】基于元胞自動機之森林大火
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/257104.html
標籤:其他
下一篇:整形資料越界溢位現象決議
