5

在处理与韦斯坦猜想(https://cs.uwaterloo.ca/journals/JIS/VOL7/Sloane/sloane15.pdf)相关的问题时,我需要为n =生成所有n x n (0,1) 矩阵2, 3, 4,... 如果您考虑正确的二进制序列并相应地对它们进行分区,这并不难。例如,这里是所有 3 x 3 矩阵:

With[{n = 3}, 
 lis = PadLeft[IntegerDigits[#, 2], n^2]& /@ Range[0, 2^n^2 - 1]; 
 mats = (Partition[#, n] & ) /@ lis
]; 

Weisstein 猜想涉及,对于每个n = 2, 3, ...,计算特征值都是实数和正数的矩阵的数量。对于n = 2,有 3 个;对于n = 3,有 25 个;对于n = 4,有 543 个;等等。特征值计算耗时但简单。

不过,我感兴趣的是找到枚举n x n矩阵的其他方法。为了得到所有这些,我使用了整数的基数 2 表示,最多为 2^( n ^2) 并分区以制作矩阵。必须有其他(更有效的?)方法。

4

1 回答 1

9

我们可以使用内置的 Mathematica 函数Tuples。您的 3x3 示例简单地变为

ms = Tuples[{1, 0}, {3, 3}];

排序的枚举可以通过二进制数来完成

FromDigits[#, 2] & /@ Flatten /@ ms

在此处输入图像描述

可视化排序:

ArrayPlot[#, ImageSize -> 20, Mesh -> All] & /@ ms

在此处输入图像描述

于 2012-12-30T13:46:24.670 回答