rand()似乎不会产生真正的随机数。我有一个简单的程序,通过调用来返回一个6位数的数字:
for i=1:6
r=rand(1,1)
end 所以我昨天跑了4-5次。并保存了输出。今天,我再次打开MATLAB,并再次调用相同的函数4-5次.同样的号码也被归还了。
为什么会发生这种情况?
我应该提供一个随机种子或任何其他解决办法吗?
谢谢你的帮助!
发布于 2015-02-14 00:28:27
在Mathworks文档中,可以使用
rng('shuffle');在调用rand设置“随机”种子之前(基于当前时间)。手动设置种子(通过在启动时不更改种子、使用rng('default')重置种子或通过rng(number)手动设置种子)允许您准确地重复以前的行为。
发布于 2015-02-14 00:29:58
为了扩展@alexforrence的答案,rand和其他相关函数产生了伪随机数(PRNs),需要一个初始值才能开始生成。这些数字并不是真正随机的,因为在初始种子之后,这些数字是通过一种算法产生的,该算法根据其本质是确定性的。
然而,伪随机并不一定是坏事,因为使用PRN的模型(例如Monte方法)可以在许多用户和平台上产生可移植的、可重复的结果。此外,可以更改种子以创建一组随机数和结果,这些随机数和结果在统计上是独立的,但也会产生可重复的结果。对于许多科学应用来说,这是非常重要的。另外,“真”随机数(下一段)往往“聚在一起”,在空间的小样本范围内分布不均匀,这将降低一些依赖随机过程的方法的性能。
有一些方法可以通过引入各种模拟源(例如硬件噪声)的随机性来创建“真-呃”随机数。这些类型的数字对于密码安全PRN来说是非常重要的,在这里,不可重复是一个重要的特性(与科学使用不同)。真正的随机数发生器需要利用自然噪声(例如量子效应)的特殊硬件。尽管如此,重要的是要记住,可以生成和计算使用的随机数的总数受到所使用数字的精度的限制。
您可以使用rng函数用伪随机种子重新播种MATLAB .但是,“在会话中频繁地重新播种生成器并不是一个好主意,因为随机数的统计属性可能会受到不利影响”[src]。
https://stackoverflow.com/questions/28510971
复制相似问题