我是靠谱客的博主 无私心锁,最近开发中收集的这篇文章主要介绍matlab while两个条件_matlab实现“生命游戏”,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在著名作家刘慈欣的科幻小说《镜子》中,人类拥有的无限运算能力的计算机。于是,人类将宇宙大爆炸的初始条件输入程序,并按照一定的规则在夸克数量级推演,最终得到了精确的镜像宇宙。

下面给大家介绍一个模拟生命演化的游戏,即1970年由英国数学家约翰提出著名的“Game of Life”。

它的演化规则较为简单,即在一个二维方格平面上,由1或者0代表一个细胞的状态,其中1代表活着,0代表嗝屁了。以一个方格为中心的九宫格内,对应着八个方格邻居,如果一个细胞周围活着的邻居的个数小于2,它就会因为孤独而死(想象一下你一个人在深山老林,肯定得被狼叼走啊);当活着的邻居数是2或者3时,这个细胞可以正常活着;如果大于3,就会因为生存空间不足而死。另外,假如一个死去的细胞周围有3个细胞,它就可以活过来。规则看似简单,却蕴含着整个生命演化的历程。接下来,将在matlab实现这个游戏,下图是截取的生命演化过程中的某个时间点的生命状态。

cff8a8070122d542aad1c0730c407f44.png

经过足够的时间后,整个生命系统会稳定下来。而且,在初始条件不变的情况下,生命系统的状态在每个时间都是固定的,最终达到一个相对稳定的动态平衡,就像《镜子》里面的宇宙镜像一样。

width=80;
cell=5;
screen=zeros(cell*width,width*cell);
state=zeros(width,width);
%初始状态假设都为死的now_state=zeros(width,width);%初始化细胞状态,假设由40%的细胞活着for i=1:width
for j=1:width
if rand<0.4
state(i,j)=1;
end
endend

以上代码是初始化细胞的状态,一个零矩阵代表所有的细胞都是死的。后面两个for循环让一定比例的细胞活过来,这些活过来的细胞就是初始条件。其他迭代产生的细胞都是这些细胞的后代。

在后面的计算中,用到了一个While语句。让生命系统无限次循环,每循环一次,代表生命系统更新一代。

s1=0;
if i-1>0&&j-1>0
s1=s1+state(i-1,j-1);
end
if i-1>0&&j+1<=width
s1=s1+state(i-1,j+1);
end
if i+1<=width&&j+1<=width
s1=s1+state(i+1,j+1);
end
if i+1<=width&&j-1>0
s1=s1+state(i+1,j-1);
end
if j-1>0
s1=s1+state(i,j-1);
end
if j+1<=width
s1=s1+state(i,j+1);
end
if i-1>0
s1=s1+state(i-1,j);
end
if i+1<=width
s1=s1+state(i+1,j);            end

这些语句作用是统计一个方格周围有多少活着的细胞,两个for循环可以统计所有的方格周围情况。这样,所有的方格周围的活细胞数量都表示出来了。在整个while运算中我们会根据规则更新各个方格状态,并且在图像中表示出来,然后更新图像。

以下是完整代码:

width=80;
cell=5;
screen=zeros(cell*width,width*cell);
state=zeros(width,width);
%初始状态假设都为死的now_state=zeros(width,width);%初始化细胞状态,假设由40%的细胞活着for i=1:width
for j=1:width
if rand<0.4
state(i,j)=1;
end
endendfigure;while true
for i=1:width
for j=1:width
%
计算这个细胞还有几个活着的邻居
s1=0;
if i-1>0&&j-1>0
s1=s1+state(i-1,j-1);
end
if i-1>0&&j+1<=width
s1=s1+state(i-1,j+1);
end
if i+1<=width&&j+1<=width
s1=s1+state(i+1,j+1);
end
if i+1<=width&&j-1>0
s1=s1+state(i+1,j-1);
end
if j-1>0
s1=s1+state(i,j-1);
end
if j+1<=width
s1=s1+state(i,j+1);
end
if i-1>0
s1=s1+state(i-1,j);
end
if i+1<=width
s1=s1+state(i+1,j);            end
now_state(i,j)=state(i,j);
if state(i,j)==0
if s1==3
now_state(i,j)=1;
end
elseif state(i,j)==1
if s1<2||s1>3
now_state(i,j)=0;
end            end
if now_state(i,j)==0
screen(((i-1)*cell+1):i*cell,((j-1)*cell+1):j*cell)=0;
else
screen(((i-1)*cell+1):i*cell,((j-1)*cell+1):j*cell)=150;
end
end    end
state=now_state;
imshow(screen);
title('生命游戏');end
dc1d506e4d43b1b52aabb79b1806b825.png

本文作者:南海一号

1f48dae106f6ea3eb0feb528e06b410d.png a939f172d52280502d5115f1570052ff.png d24d169a6637e0db05c4bdf9beb60ae2.png f2649ab83397a4bdfe73bd047c11d988.png 赞赏 是一种鼓励   分享 是一种支持  留言 是一种习惯

71fe89b9879190721a3c6bb571b71d29.png

最后

以上就是无私心锁为你收集整理的matlab while两个条件_matlab实现“生命游戏”的全部内容,希望文章能够帮你解决matlab while两个条件_matlab实现“生命游戏”所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部