失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 基于元胞自动机的森林火灾matlab模拟

基于元胞自动机的森林火灾matlab模拟

时间:2023-11-07 12:48:22

相关推荐

基于元胞自动机的森林火灾matlab模拟

先建立一个300*300的矩阵,模拟森林的各种状态,其中矩阵的每个元素有3个状态,分别是0、1、2,其中0代表此处没有树木生长,1代表此处的树木正在燃烧,2代表此处有树木。

这个模型的规则是,

A、如果矩阵中的一个树木上下左右有燃烧的树木,那么它会被点燃,也就是说如果一个元素的状态为 2,它的“上下左右”相邻的元素中有值为1的话,那么这个元素在下一次的循环中会变成1,;

B、如果一个树木正处于燃烧中,那么它会熄灭,也就是说如果一个元素的值为1,那么它在下一次循环中会变成0;

C、在没有树的土地上有几率长成树木,也就是说如果一个元素为0,那么它在下一次循环之中有一定的几率变成2;

D、树木有几率被点燃,也就是说如果一个元素值为2,那么它在下一次循环之中有几率会变成1。

其中程序编写的思路是,先创建一个300X300的状态矩阵,然后再每次循环的时候将上述的模型的4条规则加入其中,针对规则A,找出矩阵中每个元素的上下左右的元素,这样会构成4个矩阵,然后利用判别表达式求出4个逻辑矩阵,将4个逻辑矩阵相加,然后利用相加得到的值是否大于1来判断此元素是否在下次循环中是否被置为1;针对规则B,在每次状态矩阵取值的过程之时,总是会将矩阵中的每个元素全部置为0,然后对每个元素进行相应的赋值,如果矩阵中的某元素在这轮循环赋值结束之时为0,那么它处于无树木的状态;针对规则C,利用matlab内置的随机函数产生一个概率矩阵,如果矩阵中的元素小于树木生长的概率,那么生成的逻辑矩阵中对应的元素置1;针对规则D,同规则C,利用内置的随机函数及布尔表达式生成一个概率矩阵。

其代码如下:

%0为空位%1为燃烧的树%2为正常的树n = 300; %构造森林大小Plight = 5e-6; %被雷击中的概率Pgrowth = 1e-2;%生长的概率UL = [n,1:n-1]; %上左邻居DR = [2:n,1];%下右邻居veg=zeros(n,n);%森林imh = image(cat(3,veg,veg,veg));% veg = empty=0 burning=1 green=2for i=1:3000 %循环%观察每一个空位其上下左右邻居正在燃烧的树的个数(sum为300*300矩阵,每一个值对应森林的每一个空位)sum = (veg(UL,:)==1) + ...(veg(:,UL)==1)+(veg(:,DR)==1) + ...(veg(DR,:)==1);%veg(UL,:)==1这是每个点的上邻居% (veg(:,UL)==1)这是每个点的左邻居% (veg(:,DR)==1)这是每个点的 右邻居 % (veg(DR,:)==1)这是每个点的下邻居%现存的树=树-被烧毁的树+新生的树veg = 2*(veg==2) - ...( (veg==2) & (sum>0 | (rand(n,n)<Plight)) ) + ...2*((veg==0) & rand(n,n)<Pgrowth) ;set(imh, 'cdata', cat(3,(veg==1),(veg==2),zeros(n)))%画图drawnowiend

运行效果如下图,其中黑色的点的值为0,代表此处没有树木,红色的点的值为1,代表此处的树木正在燃烧,绿色的点对应的值为2,代表此处有树木

代码参考地址/qq_43434831/article/details/100146269

如果觉得《基于元胞自动机的森林火灾matlab模拟》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。