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 ) に対しても実行したいと考えており、チェックするためにできるだけ長く実行したままにしたいと考えています。可能な限り多くの 5x5を見て、私がチェックしたもののうち、これが最良の結果です。)

4

1 に答える 1

2

ご覧のとおり、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 に答える