【问题标题】:Random number generator issues in matlabmatlab中的随机数生成器问题
【发布时间】:2018-01-03 00:39:07
【问题描述】:

我有一个问题我无法弄清楚。对于模拟,我随机生成人工数据,随机绘制方差和平均值为 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中只有伪随机数,但这对我来说似乎太伪了。)

【问题讨论】:

    标签: matlab random


    【解决方案1】:

    这是因为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') 之前执行,它会根据当前时间使用不同的种子为生成器重新设置种子。

    >> 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 2013-10-21
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      相关资源
      最近更新 更多