2012-08-24 63 views
0

夥計們我有問題通過考慮一些約束和另一個矩陣來製作隨機矩陣。如何通過考慮約束和另一個矩陣來製作隨機矩陣

我有矩陣:

A= [ 1 4 3 5 2 6 8 7 10 11 12 9; 
    4 1 2 3 6 5 9 8 7 10 11 12; 
    1 2 3 4 5 6 12 9 8 10 11 7] 

然後,我想打一個矩陣B(3,12),其具有0和2([0 2])之間的隨機值。 但有一些限制:

a. no consecutive zeros (0) more than 2. 
b. sum all element in each row in matrix B <=11, 
c. if there is value 1 or 2 or 3 or 4 in coordinate (a,b) in matrix A. so we have to force in coordinate(a,b+1) in matrix B have value zero (0). 

感謝您的幫助之前,球員。

+2

考慮你的[其他問題](http://stackoverflow.com/questions/12000476/how-to-make-random-matrix-whose-rows-must-all-sum-11-and-which-cannot-包含)以及你到達那裏的答案,我認爲你現在應該真的能夠自己解決這個問題。我很樂意提供幫助,但這個問題非常類似於你問過的其他問題,所以我幾乎認爲你甚至沒有做出任何努力。所以:前兩個約束,你知道該怎麼做。 **你有什麼**試圖得到最後一個約束? –

+0

@RodyOldenhuis:是的,我知道第一和第二,因爲你先生。但真的,我不知道什麼時候需要編譯上面的三個約束。你知道我是新手吧。在我問這裏之前,我總是先嚐試你認識的先生。但如果我不知道如何解決,我會在這裏問。對於第三個約束:如果我使用while循環,將需要很長時間。我只想分享給其他人(紅色:這裏),如果有人會幫助我,我會非常感謝。只需要幫助先生。其實我不想問另一個,如果我知道如何解決。 –

+1

對於這樣的小矩陣,與使用向量化方法相比,使用顯式循環語句(嵌套2或3或4深度)的任何可能的性能下降相對於您花這些問題花費的時間來說都是微不足道的。如果你可以用循環來實現你想要的,那就使用它們。如果你發佈一個問題,比如*你能幫我改進這些循環的性能嗎?*你會得到比這裏提出的問題更好的答案。你是否有這樣的印象,即厭倦了爲你編寫代碼而沒有看到你在做更多自己的工作? –

回答

0

所以,如果你使用this answer,生成一個B它滿足約束條件1和2,你可以使用類似這個

B = rand(3, 12); %# Just an example matrix. 
idx = bitand(A >= 1, A <= 4); 
B([false(size(idx, 1), 1) idx(:,1:end-1)]) = 0 

執行第三約束。

+0

非常感謝你,先生, –