最简化的元胞自动机(CA)模型

uban2001、uban2005和pg均为txt文件,内容是经Arcgis导出的栅格矩阵值
% author:dayon
% 读数据
uban2001 = textread('uban2001.txt');
uban2005 = textread('uban2005.txt');
pg = textread('pg.txt');

% 替换掉-9999为nan
ind = find(uban2001 == -9999);
uban2001(ind) = nan;
ind = find(uban2005 == -9999);
uban2005(ind) = nan;
ind = find(pg == -9999);
pg(ind) = nan;

% 确定范围
[rows, cols] = size(pg);
Time = 20;  % 迭代次数

% 计算邻域影响值(周围有8个邻域元胞)
Dataset= cell(Time,1);
Dataset{1,1} = uban2001;

for t =2 : Time
    data = Dataset{t-1, 1};
        % 中间区域元胞
      for i = 1 : rows
          for j = 1 : cols
              if   (i >=2 && i<=rows-1 ) && (j >=2 && j<=cols-1)
                    rcells = [data(i,j+1)  data(i+1,j+1)  data(i+1,j)  data(i+1,j-1)  data(i,j-1)  data(i-1,j-1)  data(i-1,j)  data(i-1,j+1)];
              end
            % 东西南北4个角落
              if  i== 1 && j==1
                  rcells = [data(i,j+1)  data(i+1,j+1)  data(i+1,j)];
              end
              if i==1 && j==cols
                  rcells = [data(i+1,j)  data(i+1,j-1)  data(i,j-1)];
              end
              if i ==rows && j==cols
                  rcells = [ data(i,j-1)  data(i-1,j-1)  data(i-1,j)];
              end
              if i ==rows && j==cols
                 rcells = [data(i-1,j)  data(i-1,j-1) data(i,j-1)];
              end
          % 东西南北四个边
             if i == 1 && ( j>=2 && j<=cols-1)
                rcells = [data(i,j+1)  data(i+1,j)  data(i,j-1)];
             end
             if i == rows && ( j>=2 && j<=cols-1)
                rcells = [data(i,j+1)  data(i,j-1) data(i-1,j)];
             end
             if j == 1 && (i>=2 && i<=rows-1)
                  rcells = [data(i,j+1)  data(i+1,j)  data(i-1,j)];
             end
             if j == cols && (i>=2 && i<=rows-1)
                 rcells = [data(i+1,j)   data(i,j-1)  data(i-1,j)];
             end
             tempcon = sum(rcells(~isnan(rcells)));
             con = tempcon;

             % 计算随机影响因子
             ranind = rand;

             % 读取空间变量发展概率
              pgdata = pg(i, j);

              % 计算综合发展概率
              delp = con * ranind * pgdata;

              % 设置阈值
              if delp > 0.8 % 这里以0.8为阈值
                 tmp(i, j) = 1;
              else
                 tmp(i, j) = data(i, j);
              end
          end
      end
      Dataset{t, 1} = tmp;
end

for   k = 1: Time
        xt = Dataset{k, 1};
        cgrid(k) = sum(xt(:)==1)
end
bar(cgrid)
xlabel('迭代次数')
ylabel('城市元胞数量')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大雨海深

感谢您的支持和鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值