为什么在Matlab中,随机数可以在启动后重复出现?
在Matlab中,我们经常需要使用随机数来进行数据的模拟和分析。Matlab提供了很多生成随机数的函数,如rand、randn、randi等等。这些函数都是基于伪随机数生成器(PRNG)实现的。PRNG是一种算法,它可以生成一系列近似随机的数字序列。这些数字序列看起来像是随机的,但实际上是由确定性算法生成的。因此,PRNG生成的随机数序列可以在一定程度上预测和复制。
在Matlab中,PRNG的初始状态是通过调用rng函数设置的。如果不设置初始状态,Matlab会使用默认的状态。默认情况下,初始状态与启动时的时间相关。因此,如果您在同一天中的两个不同时间运行相同的代码,则生成的随机数序列将是不同的。但是,如果您在同一天中的相同时间运行相同的代码,则生成的随机数序列将是相同的。
为了生成可重复的随机数序列,我们可以通过以下两种方法之一来设置初始状态:
- 使用指定的种子
可以通过将种子作为参数传递给rng函数来设置PRNG的初始状态。种子可以是任何非负整数值,并且相同的种子将生成相同的随机数序列。例如,以下代码将生成一个长度为5的随机数序列,并将其保存在变量r中:
rng(123) % 设置种子为123
r = rand(1, 5) % 生成长度为5的随机数序列
如果您再次运行这段代码,则生成的随机数序列将是相同的,因为使用了相同的种子。
- 恢复之前的状态
在Matlab中,可以使用函数save和load来保存和恢复PRNG的状态。通过保存PRNG的状态,我们可以在以后的任何时间恢复该状态,并生成与