0

我正在尝试编写一个程序来检查5 个单独的5x5矩阵的所有可能组合的结果,其中所有矩阵中的每个元素都是布尔值。但是,我的问题是我无法找到一种方法来使矩阵检查每个组合。

说明我希望2x2矩阵发生的情况。我希望我的程序产生如下矩阵:

(1) [0 0;0 0] 
(2) [1 0;0 0] 
(3) [1 1;0 0]
(4) [1 1;1 0]
(5) [1 1;1 1]
(6) [1 0;0 1]
(7) [1 1;0 1]
…

依此类推,直到完成所有可能的矩阵。我如何实现这一点,以便我对这些矩阵组合中的每一个进行一些操作?

(我意识到这可能需要很长时间才能完全循环通过5 个 5x5矩阵,但是我也希望对较小的矩阵(3 个 3x3's)进行此操作,并且我还想让它尽可能长时间地运行以检查尽可能多的5 个 5x5并看到,在我检查过的那些中,这是最好的结果。)

4

1 回答 1

2

所以,正如你所看到的,你有几个零矩阵的组合,你想加一个,对吧?

我们可以说您有以下可能的组合要添加一个。对于二维情况:

addOnes =

   Empty matrix: 1-by-0


onePossibleCombination =

     0     0
     0     0


addOnes =

     1


onePossibleCombination =

     1     0
     0     0


addOnes =

     2


onePossibleCombination =

     0     0
     1     0


addOnes =

     3


onePossibleCombination =

     0     1
     0     0


addOnes =

     4


onePossibleCombination =

     0     0
     0     1


addOnes =

     1     2


onePossibleCombination =

     1     0
     1     0


addOnes =

     1     3


onePossibleCombination =

     1     1
     0     0


addOnes =

     1     4


onePossibleCombination =

     1     0
     0     1


addOnes =

     2     3


onePossibleCombination =

     0     1
     1     0


addOnes =

     2     4


onePossibleCombination =

     0     0
     1     1


addOnes =

     3     4


onePossibleCombination =

     0     1
     0     1


addOnes =

     1     2     3


onePossibleCombination =

     1     1
     1     0


addOnes =

     1     2     4


onePossibleCombination =

     1     0
     1     1


addOnes =

     1     3     4


onePossibleCombination =

     1     1
     0     1


addOnes =

     2     3     4


onePossibleCombination =

     0     1
     1     1


addOnes =

     1     2     3     4


onePossibleCombination =

     1     1
     1     1

我们怎样才能做到这一点?我们所需要的只是取 0、1、2、3 和 4 的所有组合。为此,我们使用nchoosek如下方法:

matrixSize = 2;
for k=0:matrixSize^2
  combinations=nchoosek(1:matrixSize^2,k);
  for m = 1:size(combinations,1)
    addOnes = combinations(m,:);
    onePossibleCombination = zeros(matrixSize,matrixSize);
    onePossibleCombination(addOnes) = 1;
    % Do your operation here with the matrix onePossibleCombination
  end
end
于 2013-08-21T01:15:50.390 回答