[セルオートマトン] Matlabセルオートマトン結晶成長に基づく[Matlabソースコード232期間を含む]

1.はじめに

1.セルセル
はユニットとも呼ばれます。またはプリミティブは、セルオートマトンの最も基本的な部分です。セルは、個別の1次元、2次元、または多次元のユークリッド格子点に分布しています。
各セルには状態があります。たとえば、下の中央のセルの状態は小さなバグであり、他のセルは小さなバグのない状態です。しかし、バグが移動した場合、それは時間の経過に伴う状態の変化の結果です

ここに画像の説明を挿入
ここに画像の説明を挿入
セルには、六角形、三角形など、さまざまな種類があります。具体的には、特定の問題に対処できます
ここに画像の説明を挿入
。2。セル空間
セルが分布する空間メッシュポイントセットが、ここではセル空間です。
ここに画像の説明を挿入
3.隣接
セル1次元セルオートマトンでは、半径は通常、隣接セルを決定するために使用されます。セルからの距離で、セル内のすべてのセルはセルの隣接セルと見なされます。2次元セルオートマトンの隣接定義はより複雑ですが、通常は次の形式になります(例として最も一般的に使用される通常の正方晶グリッド分割を取り上げます)。下の図では、黒いセルが中央のセルで、灰色のセルがその隣のセルであり、それらの状態を使用して、次の瞬間の中央のセルの状態が計算されます。
ここに画像の説明を挿入
言い換えると、次の瞬間のセルの状態は、それ自体の状態と隣接するセルの状態によって決定されます。

4.ルール
ルールは、セルラーアルゴリズムの品質を決定する最も重要なポイントの1つです。
ここに画像の説明を挿入
セルオートマトンは、グローバルな変化を引き起こすルールに従ったローカルセル間の相互作用です。

第二に、ソースコード

% DLA
clc;clear;close all;
S=zeros(400,500); % 生成状态矩阵
S(end,:)=1; % 设置状态矩阵中最下面一行元素等于1
A=1;B=1;X=0.8;
rand('state',0); % 设置随机数的状态数
subplot(121);Ii=imshow(1-S,[]); % 显示状态矩阵
T1=title(['times = 1',', total particle=',num2str(sum(S(:)))],...
    'Fontname','times new roman','fontsize',14); % 显示时间与粒子总数
r=rand(1,500);
subplot(122);P1=plot(sum(S,2)/size(S,2),1:size(S,1),'r');% 绘制各行的密度值曲线
set(gca,'Position',[0.57,0.35,0.33,0.36],'YDir','reverse'); % 设置坐标轴属性
xlim([0,max(sum(S,2)/size(S,2))]); % 设置x轴的范围
ylabel('\ith','fontname','times new roman','fontsize',14); % y轴标注
xlabel('\it\rho','fontname','times new roman','fontsize',14); % x轴标注
title('{\it\rho} ({\ith})','fontname','times new roman','fontsize',14); % 加注图题
set(gcf,'DoubleBuffer','on'); % 设置图形窗口的渲染效果
[L1,L2]=size(S); % 返回状态矩阵的行数L1和列数L2
N=500;H=1; % 初始化参数:粒子总数N和时间参数H
h=150; % 设置截顶高度
scale=0.5; % 设置剪切系数
while N<20000;
    R1=2+round([L1-3]*rand); % 随机产生粒子的坐标
    R2=2+round([L2-4]*rand); % 随机产生粒子的坐标
    flag=0; % 控制循环停止的参数
    while R1<L1&R1>1&R2<L2&R2>1&flag==0; % 验证粒子在状态矩阵内部且粒子未被吸附
        he=S(R1,R2-1)+S(R1,R2+1)+S(R1+1,R2); % 计算左、下和右方位的近邻
        if he>0.5; % 判断近邻中有固定粒子
            S(R1,R2)=1; % 运动粒子被吸附
            flag=1; % 标记粒子已经被吸附
        else
            ra=rand; % 粒子进行随机移动的分量
            rb=rand; % 粒子进行随机移动的分量
            R1=R1+(ra>=0.5)-(ra<0.5); % 计算下一时刻粒子的位置坐标
            R2=R2+(rb>=0.5)-(rb<0.5); % 计算下一时刻粒子的位置坐标
        end
    end
    sS=sum(S,2); % 对行所有元素求和
    Se=find(sS);Se=min(Se); % 找出有粒子的最高一行   
    if Se==[size(S,1)-h]; % 判断高度是否达到截顶高度
        Sx=find(S(Se,:)); % 找出最高点粒子的横坐标
        S=cuth(S,h,Se,Sx,scale); % 切去最高点粒子所在的分支
    end
    set(Ii,'CData',1-S); % 显示状态矩阵
    N=sum(S(:)); % 计算粒子总数
    H=H+1; % 累计时间值
    set(P1,'XData',sum(S,2)/size(S,2)); % 更新密度曲线数据
    set(T1,'string',['times = ',num2str(H),', total particle=',num2str(sum(S(:)))]);% 更新时间和粒子总数
    pause(0.02); % 暂停一下,显示动画效果
end

3、実行中の結果

ここに画像の説明を挿入

四、備考

QQ2449341593の過去のレビューを追加するための完全なコードまたは記述
>>>>>>
[セルオートマトン]右ハンドルのMatlabセルオートマトンに基づく2車線交通流モデル[Matlabソースコード231を含む]

おすすめ

転載: blog.csdn.net/TIQCmatlab/article/details/113710264