元胞自动机与MATLAB 引言 元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状态。变化规则适用于每一个元胞并且同时进行。典型的变化规则,决定于元胞的状态,以及其( 4 或 8 )邻居的状态。元胞自动机已被应用于物理模拟,生物模拟等领域。本文就一些有趣的规则,考虑如何编写有效的MATLAB 的程序来实现这些元胞自动机。 MATLAB 的编程考虑 元胞自动机需要考虑到下列因素,下面分别说明如何用MATLAB 实现这些部分。 并以 Conway 的生命游戏机的程序为例,说明怎样实现一个元胞自动机。 矩阵和图像可以相互转化,所以矩阵的显示是可以真接实现的。如果矩阵cells 的所有元素只包含两种状态且矩阵 Z 含有零,那么用image 函数来显示cat 命令建的RGB 图像,并且能够返回句柄。 imh = image(cat(3,cells,z,z)); set(imh, 'erasemode', 'none') axis equal axis tight 矩阵和图像可以相互转化,所以初始条件可以是矩阵,也可以是图形。以下代码生成一个零矩阵,初始化元胞状态为零,然后使得中心十字形的元胞状态= 1。 z = zeros(n,n); cells = z; cells(n/2,.25*n:.75*n) = 1; cells(.25*n:.75*n,n/2) = 1; Matlab 的代码应尽量简洁以减小运算量。以下程序计算了最近邻居总和,并按照 CA 规则进行了计算。本段 Matlab 代码非常灵活的表示了相邻邻居。 x = 2:n-1; y = 2:n-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); 加入一个简单的图形用户界面是很容易的。在下面这个例子中,应用了三个按钮和一个文本框。三个按钮,作用分别是运行,停止,程序退出按钮。文框是用来显示的仿真运算的次数。 %build the GUI %define the plot button plotbutton=uicontrol('style','pushbutton',... 'string','Run', ... 'fontsize',12, ... 'position',[100,400,50,20], ... 'callback', 'run=1;'); %define the stop button erasebutton=uicontrol('style','pushbutton',... 'string','Stop', ... 'fontsize',12, ... 'position',[200,400,50,20], ... 'callback','freeze=1;...