Matlab模拟森林火灾传播

news2024/9/28 1:18:01

在这个博客中,我们将会介绍一个简单的模拟森林火灾传播的程序,该程序基于一个基本的规则,根据树木状态的不同,以一定的概率生长、燃烧或是灭火,来模拟森林中火灾的传播过程。

目录

一、模拟效果

二、背景介绍

三、模型介绍

四、代码解析

4.1 参数设置

4.2 初始化森林状态

4.3 模拟森林火灾传播

五、完整代码


一、模拟效果

二、背景介绍

森林火灾对于自然生态系统和人类社会都可能造成严重的破坏。因此,研究森林火灾的传播规律对于采取预防和应对措施至关重要。在这个模型中,我们将使用简单的规则来模拟森林火灾的传播,以便更好地理解火灾的传播机制。

三、模型介绍

 该模型基于以下几个关键假设:

  1. 树的状态有三种:空白(0)、绿树(1)、正在燃烧的树(2)。
  2. 空白的部分以概率 $p$ 生长成为绿树。
  3. 绿树的部分,如果其相邻(包括对角线位置)有燃烧的树,则它以概率 $q$ 变为正在燃烧的树。如果没有,则以概率 $f$(闪电概率)变为正在燃烧的树。
  4. 正在燃烧的树,在下一步变为空白。

四、代码解析

4.1 参数设置

p = 0.03;   % 树生长的概率
q = 0.1;    % 树变为燃烧状态的概率
f = 6e-3;   % 闪电概率
s = 100;    % 森林的尺寸

在这部分,我们定义了模拟中所需的一些参数,包括树生长的概率 p、树变为燃烧状态的概率 q、闪电概率 f 和森林的尺寸 s

4.2 初始化森林状态

forest = round(rand(s) * 2);

我们通过 rand(s) 生成一个 s × s 的随机矩阵,其中元素取值在 0 到 1 之间,然后通过 round 函数将其四舍五入为整数,得到一个由 0、1 和 2 组成的矩阵,表示森林中每个位置的状态,0 表示空白,1 表示绿树,2 表示正在燃烧的树。

4.3 模拟森林火灾传播

while 1
    temp = forest;
    % 燃烧的树在下一步变为空白
    forest(temp == 2) = 0;

    % 空白格的部分以概率 p 生成新的树
    grow_seed = rand(s); % 成长的种子
    forest(temp == 0 & grow_seed < p) = 1;

    % 找到哪些是树
    [row, col] = find(temp == 1);
    for i = 1:length(row)
        x = row(i);
        y = col(i);
        neighbor = temp(max(x - 1, 1):min(x + 1, s), max(y - 1, 1):min(y + 1, s)); % 找到该树的邻居
        if any(neighbor(:) == 2)
            % 如果有正在燃烧的树
            if rand() < q
                forest(x, y) = 2;
            end
        else
            % 如果没有燃烧的树,但是被闪电击中,也会变成燃烧的树
            if rand() < f
                forest(x, y) = 2;
            end
        end
    end

    imagesc(forest);
    drawnow;
end

在这部分代码中,我们使用 while 循环来模拟森林火灾的传播过程。在每一次循环中,我们首先复制当前森林状态 forest 到临时变量 temp 中,然后根据上述规则更新森林的状态。具体来说:

  • 我们首先将所有正在燃烧的树变为空白,因为它们在下一步会烧毁。
  • 然后,对于空白的格子,以概率 p 生成新的树。
  • 接下来,对于每一棵绿树,我们检查其周围的邻居,如果有正在燃烧的树,则以概率 q 将其点燃;如果没有正在燃烧的树,但是被闪电击中,则以概率 f 将其点燃。
  • 最后,我们使用 imagesc 函数将更新后的森林状态可视化,并通过 drawnow 函数立即显示。

通过以上分析,我们了解了该模型的实现过程以及每个部分的功能。这个简单的模型虽然不足以完整地模拟森林火灾的所有细节,但可以作为理解火灾传播机制的起点,同时也可以通过调整参数来探究不同因素对火灾传播的影响。

五、完整代码

%(1)树的状态有三种,空白(0),绿树(1),正在燃烧的树(2)
%(2)空白的部分以概率p生长成为绿树
%(3)绿树的部分,如果其相邻(包括对角线位置)有燃烧的树,则它以概率q变为正在燃烧的树。如果没有,则以概率f(闪电概率)变为正在燃烧的树
%(4)正在燃烧的树,下一步变为荒地(空白)。

clear;clc;close all;
p=0.03;%树生长的概率
q=0.1;% 树变为燃烧状态的概率
f=6e-3;% 闪电概率
s=100;% 森林的尺寸 

% 初始状态为随机状态
forest = round(rand(s)*2);

while 1
    temp = forest;
    % 燃烧的树在下一步变为空白
    forest(temp==2) = 0;

    % 空白格的部分以概率p生成新的树
    grow_seed = rand(s); % 成长的种子
    forest(temp==0 & grow_seed<p) = 1;

    % 找到哪些是树
    [row,col] = find(temp==1);
    for i = 1:length(row)
        x = row(i);
        y = col(i);
        neighbor = temp(max(x-1,1):min(x+1,s),max(y-1,1):min(y+1,s)); % 找到该树的邻居
        if any(neighbor(:)==2)
            % 如果有正在燃烧的树
            if rand()<q
                forest(x,y) = 2; 
            end
        else
            % 如果没有燃烧的树,但是被闪电击中,也会变成燃烧的树
            if rand()<f
                forest(x,y) = 2; 
            end
        end
    end

    imagesc(forest);
    drawnow;
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1644012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode—1396. 设计地铁系统【中等】

2024每日刷题&#xff08;127&#xff09; Leetcode—1396. 设计地铁系统 实现代码 class UndergroundSystem { public:typedef struct Checkin {string startStation;int time;} Checkin;typedef struct Checkout{int tripNum;int totalTime;} Checkout;UndergroundSystem()…

OneNote导出白色背景文件时将笔记墨迹转换颜色

今天用OneNote导出笔记时发现在文件上做的黑色墨迹笔记全部转成了白色。推测是因为onenote会根据背景色自动转换黑色和白色的墨迹&#xff0c;但是其他颜色好像导出的时候不会转换。 于是&#xff0c;我们首先要转换背景&#xff0c;将黑色背景转成白色背景&#xff0c; 然后将…

buu相册

010分析是一个rar文件&#xff0c;7z打开发现是一个apk文件 但没发现什么敏感信息 全局搜索mail 然后就是查看引用与出处 base解密完是一个邮箱&#xff0c;提交对了。

dynamic_cast 静态转换

dynamic_cast 静态转换 const_cast 常量转换 重新解释转换(reinterpret_cast) 最不安全

用LangChain打造一个可以管理日程的智能助手

众所周知&#xff0c;GPT可以认为是一个离线的软件的&#xff0c;对于一些实时性有要求的功能是完全不行&#xff0c;比如实时信息检索&#xff0c;再比如我们今天要实现个一个日程管理的功能&#xff0c;这个功能你纯依赖于ChatGPT或者其他大语言模型&#xff08;后文简称llm&…

C++ | Leetcode C++题解之第61题旋转链表

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode* rotateRight(ListNode* head, int k) {if (k 0 || head nullptr || head->next nullptr) {return head;}int n 1;ListNode* iter head;while (iter->next ! nullptr) {iter iter->next;n…

【备战软考(嵌入式系统设计师)】07 - 计算机网络模型

七层模型 计算机网络中比较常见的有OSI七层模型和TCP/IP四层模型。 软考中主要考七层模型&#xff0c;但是实际中使用的还是四层模型比较多&#xff0c;我们主要是为了考试&#xff0c;那就主要讲讲七层模型。不过实际上四层模型就是将七层模型压缩了三层&#xff0c;本质上是…

JVM笔记4-虚拟机类加载机制

1、概述 Java虚拟机把描述类的数据从Class文件加载到内存中&#xff0c;并对数据进行检验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Java类型。这个过程称为虚拟机的类加载机制。 2、类加载的时机 一个类型从被加载到内存中开始&#xff0c;到卸载出内存…

3. 深度学习笔记--优化函数

深度学习——优化器算法Optimizer详解&#xff08;BGD、SGD、MBGD、Momentum、Adagrad、Adadelta、RMSprop、Adam、Nadam、AdaMax、AdamW &#xff09; 0. GD &#xff08;梯度下降&#xff09; Gradient Descent&#xff08;梯度下降&#xff09;是一种迭代优化算法&#xf…

你必须要知道的P沟道MOSFET场效应管AO3401电流-4A电压-30V

概述 多年前&#xff0c;P沟道MOSFET是很少的&#xff0c;国内新兴的半导体厂家还都没开起来&#xff0c;这个时候出了一款SOT23封装的P沟道MOSFET&#xff0c;这就是AO3401&#xff0c;对于小电流输出的电源控制&#xff0c;就变的简单起来。目前国内已有多家厂商可以生产各种…

【字符串】Leetcode 最长回文子串

题目讲解 5. 最长回文子串 算法讲解 dp[i][j]表示i~j这一段区间的子串是否是回文 当s[i] s[j]的时候&#xff0c;此时是有三种情况的&#xff1a; ij说明一个字符肯定是回文 i1 j也说明一个字符是回文 i1 < j说明需要判断[i1, j-1]这一段区间是否是回文 此时我们就可以…

【每日刷题】Day32

【每日刷题】Day32 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1652. 拆炸弹 - 力扣&#xff08;LeetCode&#xff09; 2. 2058. 找出临界点之间的最小和最大距离 …

深圳网站推广怎么做

深圳是中国最具活力和创新精神的城市之一&#xff0c;拥有众多的互联网企业和创新型公司。如果你是一家深圳企业&#xff0c;想要在市场上获得成功&#xff0c;互联网是不可或缺的一部分。网站推广是你在线上推销你的企业或产品的一种方式&#xff0c;让更多的人知道你&#xf…

Linux: Netfilter 简介

文章目录 1. 前言2. Netfilter 简介2.1 Netfilter 的功能2.2 Netfilter 示例2.3 Netfilter 实现概览2.3.1 Netfilter hook 的 注册 和 注销2.3.2 Netfilter hook 的触发2.3.2.1 NF_INET_PRE_ROUTING2.3.2.2 NF_INET_LOCAL_IN2.3.2.3 NF_INET_FORWARD2.3.2.4 NF_INET_LOCAL_OUT2…

八、Linux进程检测与控制

章节目标 了解进程和程序的关系了解进程的特点能够使用top动态查看进程信息能够使用ps静态查看进程信息能够使用kill命令给进程发送信号能够调整进程的优先级&#xff08;扩展&#xff09; 引言 在运维的日常工作中&#xff0c;监视系统的运行状况是每天例行的工作&#xff…

python数据分析——业务数据描述

业务数据描述 前言一、数据收集数据信息来源 二、公司内部数据&#xff08;1&#xff09;客户资料数据&#xff08;2&#xff09;销售明细数据&#xff08;3&#xff09;营销活动数据 三、市场调查数据1 观察法2 提问法3 实验法 四、公共数据五、第三方数据六、数据预处理七、数…

Vue工程化开发和脚手架Vue CLI

目录 一、介绍 二、使用步骤 1. 全局安装&#xff08;一次&#xff09; 2.查看Vue版本 3.创建项目架子&#xff08;项目名不能使用中文&#xff09; 4.启动项目 一、介绍 Vue CLI是Vue官方提供的一个全局命令工具。可以帮助我们快速创建一个开发的Vue项目的标准化基础架子…

【HCIP】OSPF综合实验报告

一、分析要求 R4为ISP&#xff0c;直连设备间使用公网网段R3、R5、R6、R7为MGRE环境&#xff0c;R3为NHS合理划分172.16.0.0/16网段做NAT配置使私网能够访问R4环回ospf优化&#xff08;汇总和特殊区域&#xff09;&#xff0c;减少计时器时间加快收敛&#xff0c;设备之间做认…

解决:mybatisplus分页查询失效,总是查询到所有数据

目录 问题描述&#xff1a;解决方案&#xff1a;1.配置mybatisplus拦截器PaginationInterceptor2.自行编写SQL语句查询 问题描述&#xff1a; 在前端使用Map<String, Object> params&#xff0c;把page&#xff0c;limit参数作为请求体传送到后端&#xff0c;但是分页查…

WWW‘24 | 课程学习CL+模仿学习IL用于ETF及商品期货交易

WWW24 | 课程学习CL模仿学习IL用于ETF及商品期货交易 原创 QuantML QuantML 2024-05-04 13:47 论文地址&#xff1a;[2311.13326] Curriculum Learning and Imitation Learning for Model-free Control on Financial Time-series (arxiv.org) 本文探讨了在金融时间序列数据上…