问题说明
在Matlab应用中,我们经常需要用到随机数,比如rand(),randn()等函数,都是生成某一类随机数的函数。对于rand()函数来说,每一次启动Matlab软件后,生成的随机数都是相同的
解决方案
因此需要设置一个随时变化的随机数种子,来保证其生成的随机数为真随机数。然而,对于某些需要可重复运行的场景来说,需要设定一个固定的随机数种子,以保证每一次运行都能得到相同的随机数,因此,也需要随机数种子。下面以几个小例子进行说明。
例子
如下图1所示,我们每次输入randn(3)的时候都会输出一个不一样的3x3的矩阵。
生成不重复的随机数
图1
但是我们每次重新开始运行代码的时候生成的随机数就都是一样的了。这是因为我们每次重新运行代码的时候都会重置随机种子,当种子数相同的时候,生成的随机数也是一样的。
生成重复的随机数
下面我给大家演示一下什么叫相同的种子数生成相同的随机数
图2
大家看到,每次我们把seed
设置为100
的时候输出的随机数就都一样了,我们管这种随机数叫伪随机数,它不是真正的随机,因为它可以被重复生成。
结论
所以为什么你每次生成的随机数都一样,因为你每次重新运行程序的时候seed
都默认设置为0
了,所以你每次都会生成一样的随机数,如果你想生成不一样的随机数,你可以在运行randn
前加上这样一行代码
randn('seed',sum(100*clock))
然后再输入
randn(3)
这样你就可以每次都得到不一样的随机数了
具体想了解关于seed是什么的同学可以看一下下面这篇文章