元胞自动机(Cellular Automata)是一种时间和空间以及对象的状态都是离散形式的动力学模型,也是目前研究非线性科学的重要研究工具。元胞自动机非常适合复杂系统蟽演化过程的动态模拟,比如图像加密、交通问题、人口问题以及一些关于群体性行为的问题。在元胞自动机模型中,对象的状态可以用矩阵来表示,而矩阵之间的计算正是Matlab的特长。这里用Matlab实现一个奇偶规则的元胞自动机供大家参考。
工具/原料
MATLAB R2014a
方法/步骤
1
首先介绍什么是奇偶规则。奇偶规则是定义在二维网格上的一种元胞自动机。每个网格的状态用0各1表示。(1) 对应于每一个元胞位置(i,j)计算出其上下左右四个最近领居在t时刻的状态值St的总和M(i,j)。(2) 根据M(i,j)取值的奇偶性来决定下一时刻t+1该点的状态St+1(i,j)。当M(i,j)为偶数时,St+1(i,j)等于0;当M(i,j)为奇数时,St+1(i,j)等于1.
2
下面给出完整的实现代码以及注释,下图是第一部分。第2行代码gcf是当前图像的句柄;set(句柄'属性名'属性值) doublebuffer 双缓存;双缓冲设置在动画的制作中比较常用,这样设置的目的是为了防止在不断循环画动画的时候产生闪烁的现象。第10行代码fix()是取趋近于0整数,如a=-1.9,fix(a)=-1。
3
下面第二部分代码,也是实现元胞状态转换规则的核心部分。第13行是计算近邻状态值,你也可以用循环来做,这里是用矩阵计算,更快捷方便。
4
运行的结果如下:
5
其中,t=90和t=108时刻的运行结果单独展示出来如下 :
注意事项
1
如有疑问欢迎交流讨论
2
如有错误欢迎指正