MATLAB 中奇怪的 rand() 行为

Strange rand() behaviour in MATLAB

运行d() 似乎并没有生成真正的 运行dom 数字。我有一个简单的程序,通过调用 returns 一个 6 位数字:

for i=1:6
 r=rand(1,1)
end 

所以我昨天 运行 这 4-5 次。并保存输出。今天我再次打开 MATLAB,再次调用同一个函数 4-5 次。返回相同的数字。

为什么会这样?

我应该提供 运行dom 种子或任何其他修复程序吗?

感谢您的帮助!

Mathworks documentation开始,您可以使用

rng('shuffle');

在调用 rand 之前设置一个 "random" 种子(基于当前时间)。手动设置种子(通过在启动时不更改种子,使用 rng('default') 重置,或通过 rng(number) 手动设置种子)允许您完全重复之前的行为。

为了扩展@alexforrence 的回答,rand 和其他相关函数生成需要初始值才能开始生成的伪随机数 (PRN)。这些数字并不是真正随机的,因为在初始种子之后,数字是通过一种算法产生的,该算法本质上是确定性的。

但是,伪随机不一定是坏事,因为使用 PRN 的模型(例如,Monte Carlo 方法)可以在许多用户和平台上生成可移植、可重复的结果。 此外,可以更改种子以创建一组随机数和结果,这些结果在统计上是独立的,但也产生可重复的结果。 对于许多科学应用来说,这非常重要。 此外,"true" 个随机数(下一段)有 "clump" 在一起的趋势,并且不会在 space 的小样本范围内均匀分布,这会降低某些方法的性能依赖于随机过程。

有一些方法可以通过从各种模拟源(例如硬件噪声)引入随机性来创建 "true-er" 随机数。这些类型的数字对于利用自然噪声(例如量子效应)的 cryptographically secure PRNs, where non-repeatability is an important feature (in contrast to the scientific usage). True random number generators require special hardware 极为重要。 不过,重要的是要记住,可以生成和计算使用的随机数总数受所使用数字的精度限制。

您可以使用 rng 函数使用伪随机种子重新为 MATLAB 播种。 然而,"reseeding the generator too frequently within a session is not a good idea because the statistical properties of your random numbers can be adversely affected"[src].