Matlab每次启动会重置rand()和randn()的初始状态(重置为0),也就是说,你产生的随机数会出现两次随机数一模一样的情况,
1) rand(‘state’,1)
设定初始状态使得只需保存那时初始状态再运行一遍程序即可重现先前结果。
rand(‘state’,1)
rand(3,1)
ans =
0.9528
0.7041
0.9539
rand(3,1)
ans =
0.5982
0.8407
0.4428
rand(‘state’,1)
rand(3,1)
ans =
0.9528
0.7041
0.9539
2)为增加随机数的随机性和可控性,用rand(‘state’,X)来设置随机数流的状态
rand(‘state’,sum(clock)):
用当前时间sum(clock)作为随机数的初始状态
clock返回一个6元素的向量:年月日时分秒
sum求和 即 随机数的初始状态
因为每次运行程序时间不同,所以所得随机数序列也不同
但是
这个算法有一个问题是,如果计算机太快的话,仍然会生成相同随机数。
3)可考虑用 rand(‘state’,sum(clock)rand(1))
4)在产生随机数之前使用rng(‘shuffle’)洗一下也可以
5)rand(‘twister’,mod(floor(now8640000),2^31-1)) ,这样可以产生的不同的随机数。采用这种办法大约每497天种子才会重复一次,一般使用的话足够了。
参考:https://blog.csdn.net/u013346007