原理:應用於物理模擬,生物模擬等領域
典型應用:
生命自動機:一個細胞下一狀態的生死取決於周圍細胞的生死。對一個細胞周圍的 8 個近鄰的元胞狀態求和,狀態改變規則如下:
如果總和為 2 ,則下一時刻的狀態不改變
如果總和為 3 ,則下一時刻的狀態為 1
否則狀態= 0
一個細胞看作一個元胞,元胞的鄰居定義通常有以下三種范式,這里采用第二種,認為其周圍八個點為鄰居:
代碼如下:
%% 設置GUI按鍵 plotbutton=uicontrol('style','pushbutton','string','運行', 'fontsize',12, 'position',[150,400,50,20], 'callback', 'run=1;');%運行按鈕 erasebutton=uicontrol('style','pushbutton','string','停止','fontsize',12,'position',[250,400,50,20],'callback','freeze=1;');%停止按鈕 quitbutton=uicontrol('style','pushbutton','string','退出','fontsize',12,'position',[350,400,50,20],'callback','stop=1;close;');%退出按鈕 number = uicontrol('style','text','string','1','fontsize',12, 'position',[20,400,50,20]);%左上角數字 %% 元胞自動機設置 n=200; %初始化各元胞狀態 z = zeros(n,n); sum = z; cells = (rand(n,n))<.6; % 建立圖像句柄 imh = image(cat(3,cells,z,z)); set(imh, 'erasemode', 'none') % 元胞更新的行列數設置 x = 2:n-1; y = 2:n-1;
% 主事件循環 stop= 0; run = 0;freeze = 0;
while stop==0 if run==1 % 計算鄰居存活的總數 sum(x,y) = cells(x,y-1) + cells(x,y+1) + cells(x-1, y) + cells(x+1,y)... + cells(x-1,y-1) + cells(x-1,y+1) + cells(x+1,y-1) + cells(x+1,y+1); % 按照規則更新 cells = (sum==3) | (sum==2 & cells); set(imh, 'cdata', cat(3,cells,z,z) ) stepnumber = 1 + str2double(get(number,'string')); set(number,'string',num2str(stepnumber)) end if freeze==1 run = 0; freeze = 0; end drawnow end