2014-09-05 221 views
0

如何从PRNG生成时间序列用于实验的T独立运行?每个T的种子会不同吗? rand()或randn()会生成随机数,但是如果初始条件相同或者种子是固定的,则它将变为确定性或伪随机性。Matlab:如何生成伪随机数

有人可以展示如何生成PRNG?请问randn(seed)哪里有seed = randn()生成PRNG?

+0

[This](http://www.mathworks.com/help/matlab/random-number-generation.html)和[this](http://www.mathworks.com/help/matlab/ref/) rng.html)可能会有所帮助。另外,我建议编辑你的问题,重点关注一个特定的主题。我认为您可以询问有关随机数字生成的内容,而不必考虑过滤器设计的所有细节。 – horchler 2014-09-06 00:40:41

+0

@horchler:感谢您提出编辑问题的建议。另外,我研究了你提供的链接,并且在我的问题中提到了关于使用rand()或randn()生成随机数的疑问。问题在于伪随机数生成领域。我没有使用s = rng,而是尝试使用固定数字,但不重复随机数字序列。 – SKM 2014-09-08 00:09:07

回答

1

通常使用几种方法来生成T独立运行的伪随机变量。首先要注意的是,对于给定的种子值,由rand(或randn等)产生的每个变量彼此独立,即它们是independent and identically distributed (i.i.d.)。这意味着,在许多情况下,你可以一次通过rng设置你的随机数生成的种子,然后代码将在每次运行时产生重复的伪随机值:

生成牛逼独立的N均匀分布值游 - 每次运行这段时间,相同的随机值将被以同样的顺序,只要产生您拨打rng与年初相同的说法:

rng(1); % Set seed to 1, calls to rand, randn are now based on this seed 
N = 100; 
T = 10; 
for i = 1:T 
    r = rand(N,1); 
    % Do something with r 
end 

2. 分配所有随机01-0069-04一次吃得快。下面r列将等同于每个r在上述for循环:

rng(1); 
N = 100; 
T = 10; 
r = rand(N,T); 
for i = 1:T 
    % Do something with r(:,i) 
end 

有时你希望能够再现任意运行,而无需进行模拟它们的所有T。您可以通过增加每次运行的种子值rng来达到此目的。 r中的值将与上述两种情况中的值不同。此外,要知道,重置种子是昂贵的操作这样这个有点会减慢你的代码(事实上,你应该避免重设种子尽可能):

N = 100; 
T = 10; 
for i = 1:T 
    rng(i); 
    r = rand(N,1); 
    % Do something with r 
end 

4. 有时我们可能希望模拟多个CPU上的T运行,并在每个CPU上并行生成随机变量。有关详细信息,请参阅my answer here,您可能会这样做。在一个CPU上生成所有变量然后在每个并行进程中共享结果数组的适当部分可能会更简单也更稳健。 Distributed arrays可以促进这一点。

在Matlab中的documentation for random number generation是广泛的,并有许多先进的功能。我建议阅读更多内容并尝试一些示例。 This video也可能有帮助。

+0

我模拟了Ans(1)并得到了10组不同的随机数,这两组数字既不相同也不可重复。如果随机数对同一个种子重复,这些将成为伪随机数。但是,这不是(1)中发生的事情,还是我应该拯救种子?这正是我一直面临的问题,甚至通过使用rng()而不是获取可重复的数字,我得到了所有不同的集合。我没有正确理解> – SKM 2014-09-08 18:08:02

+0

@SKM:我很困惑你的问题。看起来这不适合你,但你也接受了我的答案 - 这是什么?是的,你应该拯救种子。这就是种子的全部概念:它简化了将随机数生成器重置为单个数字。每次你运行上面#1中的整个代码(从'rng(1);'开始),一系列随机值将*完全相同*。在许多情况下(即我的答案中的#1和#2),除非您想要查看更改结果,否则不需要超过一个种子(您可以在文件中进行硬编码)。 – horchler 2014-09-08 18:58:01

+0

我接受了你的答案,因为它按照理论进行,但我无法在我的机器中生成相同的随机数。另外,为了保存种子,我不应该使用类似mySeed = rng(1)的变量?我真的不知道为什么随机数在我的结尾是不可重复的。 – SKM 2014-09-09 16:31:18