【元胞自动机】基于元胞自动机3D森林火灾模型matlab源码

2023-11-10 12:50

本文主要是介绍【元胞自动机】基于元胞自动机3D森林火灾模型matlab源码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介

元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状态。变化规则适用于每一个元胞并且同时进行。典型的变化规则,决定于元胞的状态,以及其( 4 或 8 )邻居的状态。
1 对元胞自动机的初步认识
元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元
胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状
态。变化规则适用于每一个元胞并且同时进行。
2 元胞的变化规则&元胞状态
典型的变化规则,决定于元胞的状态,以及其( 4 或 8 )邻居的状态。
3 元胞自动机的应用
元胞自动机已被应用于物理模拟,生物模拟等领域。
4 元胞自动机的matlab编程
结合以上,我们可以理解元胞自动机仿真需要理解三点。一是元胞,在matlab中可以理解为矩阵中的一点或多点组成的方形块,一般我们用矩阵中的一点代表一个元胞。二是变化规则,元胞的变化规则决定元胞下一刻的状态。三是元胞的状态,元胞的状态是自定义的,通常是对立的状态,比如生物的存活状态或死亡状态,红灯或绿灯,该点有障碍物或者没有障碍物等等。

二、源代码

clear all;
n=300; 
H=cell2mat(struct2cell(load('Z-HIGH.mat'))); %读取数据
S=cell2mat(struct2cell(load('Z-SHI.mat'))); 
T=cell2mat(struct2cell(load('Z-TEM.mat'))); 
W=cell2mat(struct2cell(load('Z-WIN.mat'))); 
h=0.08441;
s=-0.07848;
t=0.08785;
w=0.08332;
load lll.dat
x=lll(:,1);y=lll(:,2);z=lll(:,3);
[X, Y, Z1]=griddata(x,y,z,linspace(min(x),max(x),n)',linspace(min(y),max(y)',n),'cubic');A=max(max(Z1));B=min(min(Z1));%A=A(1,1);B=B(1,1);Z=(Z1-B)./(A-B);Z=Z.*1000;
figure(1)
cdata=cat(3,zeros(size(X)),ones(size(X)),zeros(size(X)));%绿色
surf(X,Y,Z,cdata);
T1=h.*H+s.*S+t.*T+w.*W;
T1=flipdim(T1,1);%二维到三维的变化中会形成矩阵列颠倒
T2=ones(n);%隔离带
R=0.85;
for j=1:5T2(50*j,:)=R;T2(50*j+1,:)=R;T2(50*j-1,:)=R;
end
for j=1:5T2(:,50*j)=R;T2(:,50*j+1)=R;T2(:,50*j-1)=R;
end
[XX,YY]=find(T2==0.85)
XX=X(1,XX);
YY=Y(YY,1);
T=mapminmax(T1,0.6,1).*T2;%影响因素归一化
pspread=0.63; 
pgrowth=0; 
ul=[n,1:n-1]; 
dr=[2:n,1];  
hang=175;
lie=175;
veg=2*ones(n); 
veg(hang,lie)=1 
for i=1:300
e(i,1)=length(find(veg==0)); 
if(e(i,1)>81000) 
break 
else 
h1=veg;  
h2=h1;  
h3=h2; 
h4=h3;  
h1(n,1:n)=0;  
h2(1:n,n)=0; 
h3(1:n,1)=0; 
h4(1,1:n)=0;  
sum=(h1(ul,:)==1)+(h2(:,ul)==1)+(h3(:,dr)==1)+(h4(dr,:)==1); 
sum1=((sum==1).*(1-(1-pspread))); 
sum2=((sum==2).*(1-(1-pspread)^2)); 
sum3=((sum==3).*(1-(1-pspread)^3));  
sum4=((sum==4).*(1-(1-pspread)^4)); 
s=sum1+sum2+sum3+sum4; 
veg=2*(veg==2)-((veg==2)&((sum>0)&(rand(n,n)<s.*T)))+2*((veg==0)&rand(n,n)<pgrowth);  
[xx,yy]=find(veg==1);
zz=diag(Z(xx(:,1),yy(:,1)));
xx=X(1,xx);
yy=Y(yy,1);
% if((i>100)&(length(zz)<10))
%     break;
% else
hold on;
plot3(yy,xx,zz,'r.');
% [xx,yy]=find(veg==1);
% [xx1,yy1]=find(veg==0);
% zz=Z(xx,yy);% % zz1=Z(xx1,yy1);
% hold on;
% plot3(xx,yy,zz,'r.');
% % hold on;
% % plot3(xx1,yy1,zz1,'r.');
xlabel('横坐标');
ylabel('纵坐标');
zlabel('海拔');
% figure(2)
% contour(X,Y,Z,10)%画10条等高线
% plot()
drawnow
title(i)
end
end
% end
xlabel('经度');
ylabel('纬度');
zlabel('海拔');
figure(2)
surf(X,Y,T);%概率分布图
xlabel('经度');
ylabel('纬度');
title('蔓延率');shading interp;figure(3)

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于【元胞自动机】基于元胞自动机3D森林火灾模型matlab源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382731

相关文章

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很