如果是这样,你在这段程序的前面给sum预分配个空间sum=zeros(size(cells,1),size(cells,2))。
然后注意遍历x,y的时候,不要到边界上,否则x+1,y+1之类的就越界了。
代码来自《元胞自动机与MATLAB》,是元胞自动机中“生命游戏”模型的代码核心代码:
x = 2:n-1
y = 2:n-1
sum(x,y) = cells(x,y-1) + cells(x,y+1) + ...
cells(x-1, y) + cells(x+1,y) + ...
cells(x-1,y-1) + cells(x-1,y+1) + ...
cells(x+1,y-1) + cells(x+1,y+1)
cells = (sum==3) | (sum==2 &cells) %%%%此处出错
运行部分:
while (stop==0)
if (run==1)
%nearest neighbor sum
sum(x,y) = cells(x,y-1) + cells(x,y+1) + ... %%%此处出错
cells(x-1, y) + cells(x+1,y) + ...
cells(x-1,y-1) + cells(x-1,y+1) + ...
cells(3:n,y-1) + cells(x+1,y+1)
% The CA rule
cells = (sum==3) | (sum==2 &cells)
%draw the new image
set(imh, 'cdata', cat(3,cells,z,z) )
%update the step number diaplay
stepnumber = 1 + str2num(get(number,'string'))
set(number,'string',num2str(stepnumber))
end
if (freeze==1)
run = 0
freeze = 0
end
drawnow %need this in the loop for controls to work
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)