我只是想在Matlab中创建随机数集以及它与“全局流”的关系方面有一些澄清。
我知道如果可以再次运行代码,可以为结果的可重复性设置全局流:
s = RandStream('mt19937ar','Seed',7);
RandStream.setGlobalStream(s);
A = rand(1,10);
每次运行此命令,A都是相同的。 例如,
s = RandStream('mt19937ar','Seed',7);
RandStream.setGlobalStream(s);
B = rand(1,10);
我应该发现isequal(A,B)是正确的。
现在我的问题涉及以下方面,
s = RandStream('mt19937ar','Seed',7);
RandStream.setGlobalStream(s);
A = rand(1,10);
B = rand(1,10);
如果运行此命令,则A和B是不同的数字集。 我可以将它们视为独立集合,还是它们之间存在某种关联? 如果我想确保A和B之间更强的独立性,是否应该在创建A之后但在创建B之前创建一个新的,不同的globabl流? 例如,
sA = RandStream('mt19937ar','Seed',7);
RandStream.setGlobalStream(sA);
A = rand(1,10);
sB = RandStream('mt19937ar','Seed',3);
RandStream.setGlobalStream(sB);
B = rand(1,10);
Matlab从“已知”但复杂的函数中生成随机数,
所有的伪随机数生成器都基于确定性算法,并且都将无法通过足够具体的随机统计检验
当您更改种子编号(也可以使用rng(your_desired_seed_number)进行更改)时,它仅使用函数的另一部分,该部分与之前的随机数序列无关(至少我认为是这样),(这是一个数学问题)
但我建议使用不同的生成器以具有最大的独立随机数,
rng(5,'twister'); % you could also use randstream instead of rng
A=rand(1,10);
rng(3,'combRecursive');
B=rand(1,10);