CellularAutomata元胞向量机-7-砂堆规则MATLAB代码分享

该代码使用MATLAB创建了一个沙堆模型,通过迭代更新规则模拟沙粒在格子系统中的堆积和滑落。在每次迭代中,会在特定位置添加一粒沙子,并根据Margolis邻域规则更新周围细胞的状态,以展示沙堆的动态行为。此外,还通过随机扰动来增加视觉效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

%sand pile

clc, clear

clf

nx=52; %must be divisible by 4

ny=100;

Pbridge = .05;

z=zeros(nx,ny);

o=ones(nx,ny);

sand = z ;

sandNew = z;

gnd = z ;

gnd(1:nx,ny-3)=1 ; % the ground line

gnd(nx/4:nx/2+4,ny-15)=1; %the hole line

gnd(nx/2+6:nx,ny-15)=1; %the hole line

gnd(nx/4, ny-15:ny) = 1; %side line

gnd(3*nx/4, 1:ny) = 1 ;

imh = image(cat(3,z',sand',gnd'));

set(imh, 'erasemode', 'none')

axis equal

axis tight

for i=1:10000

p=mod(i,2); %margolis neighborhood

sand(nx/2,ny/2) = 1; %add a grain at the top

%upper left cell update

xind = [1+p:2:nx-2+p];

yind = [1+p:2:ny-2+p];

vary = rand(nx,ny)<.95 ;

vary1 = 1-vary;

sandNew(xind,yind) = ...

gnd(xind,yind).*sand(xind,yind) + ...

(1-gnd(xind,yind)).*sand(xind,yind).*sand(xind,yind+1) .* ...

(sand(xind+1,yind+1)+(1-sand(xind+1,yind+1)).*sand(xind+1,yind));

sandNew(xind+1,yind) = ...

gnd(xind+1,yind).*sand(xind+1,yind) + ...

(1-gnd(xind+1,yind)).*sand(xind+1,yind).*sand(xind+1,yind+1) .* ...

(sand(xind,yind+1)+(1-sand(xind,yind+1)).*sand(xind,yind));

sandNew(xind,yind+1) = ...

sand(xind,yind+1) + ...

(1-sand(xind,yind+1)) .* ...

( sand(xind,yind).*(1-gnd(xind,yind)) + ...

(1-sand(xind,yind)).*sand(xind+1,yind).*(1-gnd(xind+1,yind)).*sand(xind+1,yind+1));

sandNew(xind+1,yind+1) = ...

sand(xind+1,yind+1) + ...

(1-sand(xind+1,yind+1)) .* ...

( sand(xind+1,yind).*(1-gnd(xind+1,yind)) + ...

(1-sand(xind+1,yind)).*sand(xind,yind).*(1-gnd(xind,yind)).*sand(xind,yind+1));

%scramble the sites to make it look better

temp1 = sandNew(xind,yind+1).*vary(xind,yind+1) + ...

sandNew(xind+1,yind+1).*vary1(xind,yind+1);

temp2 = sandNew(xind+1,yind+1).*vary(xind,yind+1) + ...

sandNew(xind,yind+1).*vary1(xind,yind+1);

sandNew(xind,yind+1) = temp1;

sandNew(xind+1,yind+1) = temp2;

sand = sandNew;

set(imh, 'cdata', cat(3,z',sand',gnd') )

drawnow

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习不好的电气仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值