2015-10-14 153 views
1

我想生成一個有一些錯誤的矩陣,但它應該是不同的每一個trail.But在我的情況下,我得到完全相同的矩陣與每個trail.My代碼是錯誤的 -使用錯誤生成隨機矩陣

N=50; 
R=50; 
TrialNum=100; 
Error,Pe=0.05; 

A(1:N,1:N) = eye(N); 

seed=6; 
rng(seed,'twister'); 
B = round((rand(R,N))); 

C=[A;B]; 

for t=1 : TrialNum 
    Rp = C ; 
    for i=1:(N+R) 
     if(rand < Pe) 
      Rp(i,:) = 0; 
     end 
    end 
end 

從這段代碼中,我每次得到A作爲對角矩陣,而B將使用帶有種子的隨機數生成矩陣。 C是總共100×50矩陣。該矩陣將進入下一個循環,並且由於Pe,每個軌跡不同數目的分組將丟失。

C矩陣將是相同的所有軌跡,但每個審判Rp矩陣將是不同的,但我在每個軌跡上獲得完全相同的Rp矩陣。

對於示例 -

trial=1, N=3, R=2 
Rp=1 0 0 
    0 1 0 
    0 0 0 
    1 0 1 
    0 1 1 

trial=2, N=3, R=2 
Rp=1 0 0 
    0 0 0 
    0 0 1 
    1 0 1 
    0 0 0 

需要一些專家comment.Any幫助將不勝感激。

回答

1

問題是,由於每次使用相同的種子,每次運行程序時,Matlab的隨機數生成器都會生成相同的隨機數實現。

而不是使用RNG了種子,你不應該使用的種子,並要求隨後蘭特功能來生成隨機矩陣,並在循環的隨機數之前調用

rng('shuffle') 

一次。

換句話說修改代碼以

rng('shuffle') 
B = round((rand(R,N))); 

    C=[A;B]; 

    for t=1 : TrialNum 
     Rp = C ; 
     for i=1:(N+R) 
      if(rand < Pe) 
       Rp(i,:) = 0; 
      end 
     end 
    end 

您將獲得隨機數的不同實現爲您的MATLAB程序的不同運行,因爲種子將被基於MATLAB系統時鐘如果使用隨機播放設置。現在

,如果你想矩陣B是重複的,但在循環中的隨機數是不同的,你可以做

seed=6; 
rng(seed,'twister'); 
B = round((rand(R,N))); 

C=[A;B]; 

其次

rng('shuffle') 
for t=1 : TrialNum 
    Rp = C ; 
    for i=1:(N+R) 
     if(rand < Pe) 
     Rp(i,:) = 0; 
     end 
    end 
end 
+0

paisanco感謝您的答案,但我想用種子來控制我的隨機數。我不想爲第二個循環控制rand,而是我希望B矩陣始終保持不變,但Rp會不同。 –

+0

在這種情況下,您應該可以像以前一樣使用種子進行調用,同時生成B矩陣,然後在運行之後讓您的Rp不同之後再調用rng('shuffle')。 – paisanco

+0

非常感謝你paisanco .. –