CellularAutomata元胞向量机-6-深林火灾MATLAB代码分享

该代码使用MATLAB进行森林火灾的模拟,包括燃烧的树变成空地,绿树在邻近火源或随机闪电影响下燃烧,以及空地按一定概率生长新树的过程。通过循环迭代更新森林状态并用图像显示变化。

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

主程序:

%CA driver

%

%forest fire

clf

clear all

n=100;

Plightning = .000005;

Pgrowth = .01; %.01

z=zeros(n,n);

o=ones(n,n);

veg=z;

sum=z;

imh = image(cat(3,z,veg*.02,z));

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

axis equal

axis tight

% burning -> empty

% green -> burning if one neigbor burning or with prob=f (lightning)

% empty -> green with prob=p (growth)

% veg = {empty=0 burning=1 green=2}

for i=1:3000

%nearby fires?

sum = (veg(1:n,[n 1:n-1])==1) + (veg(1:n,[2:n 1])==1) + ...

(veg([n 1:n-1], 1:n)==1) + (veg([2:n 1],1:n)==1) ;

veg = ...

2*(veg==2) - ((veg==2) & (sum>0 | (rand(n,n)<Plightning))) + ...

2*((veg==0) & rand(n,n)<Pgrowth) ;

set(imh, 'cdata', cat(3,(veg==1),(veg==2),z) )

drawnow

end

子程序:forest_fire.m

%% 森林火灾

% (1)正在燃烧的树变成空格位;

% (2)如果绿树格位的最近邻居中有一个树在燃烧,

% 则它变成正在燃烧的树;

% (3)在空格位,树以概率p生长;

% (4)在最近的邻居中没有正在燃烧的树的情况下树

% 在每一时步以概率f(闪电)变为正在燃烧的树。

clear

clc

clear all

%地图大小

n=100;

%被闪电击中的概率

Plightning =0.000005;

%空地生长出树的概率

Pgrowth = 0.01;

z=zeros(n,n);

o=ones(n,n);

veg=z;

sum=z;

imh = image(cat(3,z,veg*0.02,z));

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

axis equal

axis tight

for i=1:300

sum = (veg(1:n,[n 1:n-1])==1) + (veg(1:n,[2:n 1])==1) + ...

(veg([n 1:n-1], 1:n)==1) + (veg([2:n 1],1:n)==1) ;

veg = ...

2*(veg==2) - ((veg==2) & (sum>0 | (rand(n,n)<Plightning))) + ...

2*((veg==0) & rand(n,n)<Pgrowth) ;

set(imh, 'cdata', cat(3,(veg==1),(veg==2),z) )

pause(0.02)

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习不好的电气仔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值