我有一个我无法弄清楚的问题。对于模拟,我随机生成人工数据,随机绘制方差,平均值为0.为了实现这一点,我首先创建一个可能的方差向量,然后随机绘制向量的索引,如下例所示
%% Covariance Matrix
% Variances of explanatory variables
var1 = 0.1:0.1:100;
var2 = 0.1:0.1:100;
var3 = 0.1:0.1:100;
%% Randomly selecting variances
% if exist('s','var')
% rng(s) % Loading Random generator settings for replication
% else
% s=rng; % Saving Random generator settings for replication
% end
ind_1=randi([0 1000]);
ind_2=randi([0 1000]);
ind_3=randi([0 1000]);
var_11=var1(ind_1);
var_22=var2(ind_2);
var_33=var3(ind_3);
由于某种原因,随机数生成器似乎在第一个(ind_1 = 815,ind_2 = 906,ind_3 = 127)和第二次运行中给出了相同的数字(ind_1 = 914,ind_2 = 632,ind_3 = 97 )重新启动matlab后,如果我先生成方差向量。我也能够在不同的PC上复制它。是否有一个我忽略或正在制作的功能,我会想象我是一个至关重要的错误? (我很清楚matlab中只有伪随机数,但这似乎对我来说太伪了)
谢谢, 理查德
答案 0 :(得分:3)
这是因为matlab中的种子生成器,当你启动matlab时总是一样看看这个
>> rng('default')
>> ind_1=randi([0 1000])
ind_2=randi([0 1000])
ind_3=randi([0 1000])
ind_1=randi([0 1000])
ind_2=randi([0 1000])
ind_3=randi([0 1000])
rng('default')
ind_1=randi([0 1000])
ind_2=randi([0 1000])
ind_3=randi([0 1000])
ind_1 =
815
ind_2 =
906
ind_3 =
127
ind_1 =
914
ind_2 =
632
ind_3 =
97
ind_1 =
815
ind_2 =
906
ind_3 =
127
因此,您每次生成新数字时,唯一需要做的就是更改初始种子:
在rng('shuffle') it reseeds the generator using a different seed based on the current time.
>> rng('default')
>> [randi([0 1000]), randi([0 1000]), randi([0 1000])]
ans =
815 906 127
>> rng('shuffle')
>> [randi([0 1000]), randi([0 1000]), randi([0 1000])]
ans =
404 10 838
>> [randi([0 1000]), randi([0 1000]), randi([0 1000])]
ans =
31 459 534
>> rng('shuffle')
>> rng('shuffle')
>> [randi([0 1000]), randi([0 1000]), randi([0 1000])]
ans =
708 963 21
>> rng('default')
>> [randi([0 1000]), randi([0 1000]), randi([0 1000])]
ans =
815 906 127
>> [randi([0 1000]), randi([0 1000]), randi([0 1000])]
ans =
914 632 97
>> rng('default')
>> [randi([0 1000]), randi([0 1000]), randi([0 1000])]
ans =
815 906 127