2013-08-21 88 views
0

我試圖寫一個程序來檢查的單獨5x5的矩陣所有可能的組合,其中,在所有的矩陣的每個元素是布爾值的結果。但是,我的問題是我無法找出一種方法來讓矩陣檢查每個組合。自行車通過可能的矩陣MatLab的

舉例說明我想爲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 3×3的),我也想就這麼走了儘可能長時間運行以檢查儘可能多的5 5x5的並查看出我檢查過的那個,這是最好的結果。)

+0

你能提供到目前爲止你已經嘗試了任何的代碼? – Syon

+0

我完全不知道從哪裏開始,我做了5個矩陣,如下: pos1 = [p111 p112 p113 p114 p115; p121 p122 p123 p124 p125; p131 p132 p133 p134 p135; p141 p142 p143 p144 p145 ; p151 p152 p153 p154 p155]
(繼續4個更多的矩陣)它會通過每個元素的每個組合,但我不知道如何讓它這樣做。
我也不確定如何在此網站上正確格式化,對不起。 我也剛剛意識到,有可能有更多的組合,比在5個5x5s中通過合理的,但我也希望做3 3x3s。 – Jack

+0

請參閱**添加註釋**按鈕下方的幫助x) – Werner

回答

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 
+1

非常感謝您的寶貴時間和幫助Werner,這正是我所需要的。我從來沒有聽說過addOnes命令(我試圖教自己的MatLab)。 – Jack

+0

@Jack沒有這樣的命令'addOnes'。我使用的命令叫做'nchoosek'。 'addOnes'只是一個變量x),它實際上只是來自'nchoosek'的**輸出參數**的'combinations'變量中的一列。 – Werner

+0

@Jack不要忘記接受你的答案,並歡迎在這裏。 – Werner