• 元胞自动机


    原理:应用于物理模拟,生物模拟等领域

    典型应用

      生命自动机:一个细胞下一状态的生死取决于周围细胞的生死。对一个细胞周围的 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
  • 相关阅读:
    获取打印页号列表
    数据库设计技巧系列(三)——选择键和索引
    SQL Server2000孤立用户解决方案
    在WinForm程序中嵌入ASP.NET[转]
    再谈如何遍历Asp.net窗体下所有的控件
    数据库设计技巧系列(二)——设计表和字段
    今天下午真郁闷……
    如何实现在Asp.net下XP风格的下拉菜单
    利用SQL语句得到客户端的IP地址
    国庆节快乐……
  • 原文地址:https://www.cnblogs.com/pipitongkw1/p/12179935.html
Copyright © 2020-2023  润新知