Cleve's Corner:数学和计算上的Clyver

科学计算,数学和更多

生命游戏,第2部分,稀疏矩阵

生命的游戏,包括无限膨胀的宇宙,是MATLAB稀疏矩阵的华丽应用。

内容

代码

生命游戏中的宇宙是由稀疏矩阵表示的X这主要是零。唯一的非零元素是Live Cells的元素。首先通过描述实现Conway规则的代码:

  • 一个带有两个现场邻居的直播细胞或任何带有三个现场邻居的细胞,在下一步中活着。

在进化中的任何特定步骤中,X只代表宇宙中有限的一部分。如果有任何细胞接近这部分的边缘,我们将重新分配存储以适应不断扩大的人口。这只需要添加更多的列指针,所以它并不代表大量的额外内存。

基本操作计数现场邻居。这涉及索引矢量P这样就避免了边缘元素。

% m = size(X,1);%p = 2:m-1;

这是创建稀疏矩阵的代码N与之间的元素08给予现场邻居的数量。

%n =稀疏(m,m);% N (p, p) = X (p - 1, p - 1) + (p, p - 1) + X (p + 1, p - 1) + (p - 1, p) +…% X(p-1,p+1) + X(p,p+1) + X(p+1,p);

这是我最喜欢的MATLAB语句之一。利用MATLAB对稀疏矩阵进行矩阵逻辑运算,得到康威规则:

% X = (X & (N == 2)) | (N == 3);

滑翔机

让我们看看这个在滑翔机上的效果。

x =稀疏(7,7);X(3:5,3:5)= [0 1 0;0 0 1;1 1 1];disp ('X')t = int2str(x);t (t = =' 0 ') =“。”;DISP(T)
X . . . . . . . . . . . . . . . . .1 . . . . . . .1 . . . .1 1 1 . . . . . . . . . . . . . . . .

数一数这八个邻居中有多少人还活着。我们得到了围绕着滑翔机的价值云,提供了邻居的人口普查。

m =大小(X, 1);p = 2: m - 1;N =稀疏(m m);N (p, p) = X (p - 1, p - 1) + X (p, p - 1) + (p + 1, p - 1) + X (p - 1, p) +X(p-1,p+1) + X(p,p+1) + X(p+1,p));disp (“N”) t = int2str(N);t (t = =' 0 ') =“。”;DISP(T)
N . . . . . . . . .1 1 1 . . . .1 1 2 1。1、1、2、3、3、3、3、1 1 3 2 2。1 2 3 2 1 . . . . . . . .

只有滑翔机的鼻子还活着,有两个现场邻居。

disp ('X & (N == 2)')t = int2str(x&(n == 2));t (t = =' 0 ') =“。”;DISP(T)
x&(n == 2)。。。。。。。。。。 . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . . .

另外四个细胞有三个现场邻居

disp ('n == 3')t = int2str(n == 3);t (t = =' 0 ') =“。”;DISP(T)
N = = 3  . . . . . . . . . . . . . . . . . . . . . . .1。1 . . . . .1 . . . . . .1 . . . . . . . . . .

“OR-ing”这最后两个矩阵与“|”一起给出滑翔机的下一个方向。

disp ('(X & (N == 2)) | (N == 3)') t = int2str((X & (N == 2)) | (N == 3));t (t = =' 0 ') =“。”;DISP(T)
(X & (N = = 2)) | (N = = 3 ) . . . . . . . . . . . . . . . . . . . . . . .1。1 . . . . .1 1 . . . . .1 . . . . . . . . . .

重复这三次将滑翔机向下移动到右侧。

生活词典

生活词典是一种文化宝藏。它应该被列入联合国教科文组织世界遗产名录。主站点由Stephen A. Silver维护。他得到了很多人的帮助。上周我在博客的第一部分给出了这两个链接。去四处看看。这是很大的乐趣。

文本版本:

图形版本:< http://www.bitstorm.org/gameoflife/lexicon>

这个词典有866个词条。其中大约一半是历史和计算复杂性的兴趣。阅读它们来学习生活游戏的历史。例如,被称为“方舟”的初始人口需要736692个步骤来稳定。其中一半,447,是我们可以用来作为初始总体的矩阵。

Achim p144

Life_lex.如果尚不存在,请读取Lexicon的文本版本并缓存本地副本。然后它使用随机条目作为起始配置。作为一个例子,我们从1994年的Achim Flammenkamp,Dean Flammenkamp,Dean Flammenkamp,Dean Hickerson和David Bell找到了以下人口,并且其时期是144.我们每四个步骤都显示。




使用MATLAB®7.14发布

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击这里登录到您的MathWorks帐户或创建一个新帐户。