jef*_*eff 1 random matlab random-seed
rand()似乎不会生成真正随机的数字.我有一个简单的程序,通过调用返回一个6位数字:
for i=1:6
r=rand(1,1)
end
Run Code Online (Sandbox Code Playgroud)
所以我昨天跑了4-5次.并保存了输出.今天我再次打开MATLAB并再次调用相同的函数4-5次.返回了相同的数字.
为什么会这样?
我应该提供随机种子或任何其他修复?
谢谢你的帮助!
要扩展@ alexforrence的答案,rand其他相关函数会生成需要初始值才能开始生成的伪随机数(PRN).这些数字并不是真正随机的,因为在初始种子之后,数字是通过算法产生的,该算法本质上是确定性的.
然而,伪随机不一定是坏事,因为使用PRN的模型(例如,蒙特卡罗方法)可以在许多用户和平台上生成可移植的,可重复的结果.此外,可以更改种子以创建随机数集和结果,这些数据在统计上是独立的,但也会产生可重复的结果.对于许多科学应用,这非常重要.此外,"真正的"随机数(下一段)倾向于"聚集"在一起并且不能均匀地扩展到它们的范围内以进行小的空间采样,这将降低依赖于随机过程的一些方法的性能.
存在通过引入来自各种模拟源(例如,硬件噪声)的随机性来创建"真实"随机数的方法.这些类型的数字对于加密安全的PRN非常重要,其中不可重复性是一个重要特征(与科学用法相反).真随机数发生器需要利用自然噪声(例如,量子效应)的特殊硬件.尽管如此,重要的是要记住,可以生成和计算使用的随机数的总数受所使用数字的精度限制.
您可以使用该rng函数使用伪随机种子重新种子MATLAB .但是,"在会话中过于频繁地重新生成发生器并不是一个好主意,因为随机数的统计特性会受到不利影响" [src].