元胞自动机与MATLAB实现笔记
Posted 好奇小圈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了元胞自动机与MATLAB实现笔记相关的知识,希望对你有一定的参考价值。
前言
本文章将介绍元胞自动机的概念、组成、原理,并且用MATLAB实现奇偶规则和生命游戏等有趣的内容。
一、元胞自动机是什么?
1.定义
元胞自动机是一种时间、空间、状态都离散,空间相互作用的时间因果关系,为就不懂网络动力学模型,具有模拟复杂系统时空演化的能力。
2.构成
元胞、元胞空间、元胞邻居、元胞规则。
邻居:某一元胞状态更新时索要搜索的空间域就是该元胞的邻居。
3.邻居类型
冯诺依曼型、Moor型、扩展Moor型
4.边界条件
固定型
周期型:收尾相接
绝热型:边界邻居与自己相同
映射型:左右或上下对称映射
5.构成特征
离散性:空间、时间、状态都离散
同质性:服从相同规律、分布方式相同
并行性:元胞的更新规则变化是同步进行的
高维度:元胞自动机是一类无穷维动力系统
二、实例
1.奇偶规则
邻居之和(上下左右四个格子)为奇数,中心元胞变为1
邻居之和为偶数,中心之和变为0
代码如下:
clear;
clc;
n=200; %元胞空间
Se=zeros(n); %零矩阵
z=zeros(n); %零矩阵
Se(n/2-2:n/2+2,n/2-2:n/2+2)=1; %初始化矩阵
Ch=imagesc(cat(3,Se,z,z)) %图像化显示矩阵,并实现颜色转变
%C = cat(dim, A1, A2, A3, ...) 按dim联结所有输入的数组。
%imshow将图像以原始尺寸显示,image和imagesc则会对图像进行适当的缩放(显示出来的尺寸大小)。
axis square; %方形边框
Sd=zeros(n+2); %边界条件
while(1)
Sd(2:n+1,2:n+1)=Se;
SUM=Sd(1:n,2:n+1)+Sd(3:n+2,2:n+1)+Sd(2:n+1,1:n)+Sd(2:n+1,3:n+2);
%下邻居+上邻居+左邻居+右邻居
Se=mod(SUM,2);
set(Ch,'cdata',cat(3,Se,z,z))
%set(H,NameArray,ValueArray) 使用元胞数组 NameArray 和 ValueArray 指定多个属性值。
%要为 m 个图形对象中的每个图形对象设置 n 个属性值,请将 ValueArray 指定为 m×n 的元胞数组,
%其中 m = length(H),而 n 等于 NameArray 中包含的属性名的数量。
pause(0.03)
end
2.生命游戏
只有“生”和“死”两种状态,每个小格有八个邻居。
~对于“生”的格子
2或3个邻居为生则生,否则死
~对于“死”的格子
3个邻居为生则生,否则死
代码如下:
clear;
clc;
n=200; %元胞空间
p=0.4;
z=zeros(n); %零矩阵
Se=rand(n)<p; %小于p为1,大于p为0
Sd=zeros(n+2); %边界条件
Ph=image(cat(3,Se,z,z));
while(1)
Sd(2:n+1,2:n+1)=Se;
SUM=Sd(1:n,2:n+1)+Sd(3:n+2,2:n+1)+Sd(2:n+1,1:n)+Sd(2:n+1,3:n+2)+Sd(1:n,1:n)+Sd(3:n+2,3:n+2)+Sd(1:n,3:n+2)+Sd(3:n+2,1:n);
%下邻居+上邻居+左邻居+右邻居+左下邻居+右上邻居+左上邻居+右下邻居
for i=1:n
for j=1:n
if SUM(i,j)==3||(SUM(i,j)==2&&Se(i,j)==1)
Se(i,j)=1;
else
Se(i,j)=0;
end
end
end
set(Ph,'cdata',cat(3,Se,z,z))%更新可视化
drawnow
end
以上是关于元胞自动机与MATLAB实现笔记的主要内容,如果未能解决你的问题,请参考以下文章
元胞自动机基于matlab元胞自动机生命游戏含Matlab源码 655期
元胞自动机格子波尔兹曼模型及其应用研究(Matlab代码实现)