循环通过可能的矩阵MatLab

时间:2013-08-21 00:31:52

标签: matlab matrix combinations

我正在尝试编写一个程序来检查 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 )我还想让它尽可能长时间地运行以检查尽可能多的 5 5x5 并看到我检查过的那些,这是最好的结果。)

1 个答案:

答案 0 :(得分: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