【问题标题】:Forest Fire simulation in Octave or MatlabOctave或Matlab中的森林火灾模拟
【发布时间】:2015-04-03 05:59:41
【问题描述】:

在本页https://courses.cit.cornell.edu/bionb441/CA/forest.m

我发现了一个名为“森林火灾”的代号 我试图弄清楚这段代码是如何用于教育目的的。

规则如下:

细胞可以处于 3 种不同的状态。 state=0 为空,state=1 为燃烧,state=2 为森林。

如果一个单元格的 4 个邻居中有一个或多个正在燃烧并且它是森林 (state=2),那么新的状态正在燃烧 (state=1)。

正在燃烧的单元格 (state=1) 变为空 (state=0)。

森林细胞(状态=2)开始自行燃烧(来自闪电)的概率很低(0.000005)。

空单元格变成森林以模拟生长的概率很低(例如,0.01)。

它是如何工作的不是很清楚......

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) ;

运行代码没有问题,只是我很困惑这些向量(sum 和 veg)是什么。尤其是什么使 (veg(1:n,[n 1:n-1])==1)。

我看到的是,两者都是矩阵,而 veg 是绘图的数据(带有 0 和 1 和 2 的矩阵)。

非常感谢您提供的任何帮助。

【问题讨论】:

  • 您遇到的问题/错误是什么?请更新。

标签: octave simulation automata


【解决方案1】:

矩阵和标量上的二进制比较运算符返回与原始矩阵的标量和相应元素进行二进制比较的元素矩阵。

sum 是一个矩阵,其中每个单元格包含相应矩阵 veg 中着火的相邻单元格的数量 (==1)。

(veg(1:n,[n 1:n-1])==1)是逻辑1和0的矩阵(不知道数据类型是不是静态的或动态),其中当 veg 中相应单元格左侧的单元格着火时,每个单元格等于 1 (==1)。

【讨论】:

    【解决方案2】:

    https://courses.cit.cornell.edu/bionb441/CA/

    查看 URL,返回树查看源代码。

    规则: 细胞可以处于 3 种不同的状态。 state=0 为空,state=1 为燃烧,state=2 为森林。 如果 4 个邻居中的一个或多个,如果一个细胞正在燃烧并且它是森林(状态 = 2),那么新的状态是燃烧(状态 = 1)。 森林细胞(状态=2)开始自行燃烧(来自闪电)的可能性很低(例如 0.000005)。 正在燃烧的单元格 (state=1) 变为空 (state=0)。 空细胞变成森林以模拟生长的概率很低(例如,0.01)。 该阵列被认为是环形连接的,因此向左侧燃烧的火焰将在右侧开始燃烧。顶部和底部类似地连接。 更新代码:

    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) ;
    

    注意,环形连接是通过下标的排序来实现的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-11
      • 2020-03-15
      • 2016-10-26
      • 2018-11-05
      • 2013-06-18
      • 2017-05-14
      • 2016-03-01
      • 1970-01-01
      相关资源
      最近更新 更多