使用错误生成随机矩阵
问题描述:
我想生成一个有一些错误的矩阵,但它应该是不同的每一个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帮助将不胜感激。
答
问题是,由于每次使用相同的种子,每次运行程序时,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
paisanco感谢您的答案,但我想用种子来控制我的随机数。我不想为第二个循环控制rand,而是我希望B矩阵始终保持不变,但Rp会不同。 –
在这种情况下,您应该可以像以前一样使用种子进行调用,同时生成B矩阵,然后在运行之后让您的Rp不同之后再调用rng('shuffle')。 – paisanco
非常感谢你paisanco .. –