在前面matble中函数rand()中,介绍了rand()函数的一般用法,
通过rand()或者randn()函数使用‘seed’,‘state’,‘twister’来控制随机数发生器 ,例如
rand('twister',5489),就是matble重置随机生成数编译器,使在不同方法(算法)下有相同的初始化,同时又可以保证实验结果可以复现。
rand('seed',sd) randn('seed',sd) rand('state',s) randn('state',s) rand('twister',5489)
这些语法指的是不同类型的生成器,因此不再推荐它们,原因如下:
1)术语‘seed’与‘state’是生成器的错误名称。
2)所有上面这些生成器,除了‘twister’,其余都有缺陷。
3)它们不必要为rand与randn使用不同的生成器。
要评估替换现有代码中不鼓励语法的影响,请在MATLAB会话开始时执行以下命令:
warning('on','MATLAB:RandStream:ActivatingLegacyGenerators')
warning('on','MATLAB:RandStream:ReadingInactiveLegacyGeneratorState')
替换语法说明 :
使用rng函数来控制,rand,randn,randi和所有其他随机数生成函数(如randperm,sprand等),所使用的共享生成器。因此要使用rng函数来替换现有语法,需要多花时间了解这些函数的功能。
rand(Generator,s)或randn(Generator,s)的第一个输入指定了发生器的类型
Generator='seed' 引用的是Matble的v4生成器
Generator='state' 引用的是Matble的v5生成器
Generator='twister' 引用的是Mersenne Twister生成器,这也是Matble现在使用的生成器
v4与v5生成器不在推荐,除非你试图精确复现随机数,在早期matble版本上。最简单的方式是更新代码采用rng函数
rng函数替换rand与randn中的generator,如下:
rand/randn Generator Name | rng Generator Name |
'seed' | 'v4' |
'state' | 'v5uniform' (for |