我正在尝试生成一个有一些错误的矩阵,但每条路径应该不同。但在我的情况下,我在每条路径上得到完全相同的矩阵错误。我的代码在下面 -
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总共为100x50矩阵。此矩阵将进入下一个循环,并且由于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
需要一些专家评论。非常感谢。
答案 0 :(得分:1)
问题是,由于每次使用相同的种子,Matlab的随机数生成器每次运行程序时都会产生相同的随机数实现。
不应使用带种子的rng,而应使用无种子并调用
rng('shuffle')
在调用后续的rand函数之前生成随机矩阵和循环中的随机数。
换句话说,将代码修改为
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程序的不同运行,您将获得随机数的不同实现,因为如果您使用shuffle,种子将由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