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