概述
1.repmat ------Replicate and tile an array -------复制并且平铺函数
2. clock
3.rand中seed,state,以及twister参数
具体解释:
Matlab产生随机数函数rand和randn的“state”和“seed”参数 - CSDN博客 https://blog.csdn.net/leo2351960/article/details/42457881
设置随机数初始状态有三种语法形式,如下
<pre name="code" class="html">rand('seed', S)
rand('state', S)rand('twister', S)
S是表示初始状态的整数。
seed、state、twister就比较奇怪,令人捉摸不透,不知道该选用哪个。这实际上是产生随机数的不同算法。
seed表示采用v4版本的随机数产生器,state是v5版本的随机数产生器,最后的twister用的则是Mersenne Twister随机数产生器。
“ Generator = 'seed' referred to the MATLAB v4 generator, not to the seed initialization value.
rand(‘seed’ ,key)中的ke与产生的随机数并没有任何的关系,不是说从key开始
Generator = 'state' referred to the MATLAB v5 generators, not to the internal state of the generator.
Generator = 'twister' referred to the Mersenne Twister generator, now the MATLAB startup generator. ”
那么具体该用哪一个呢?在新版本的语法说明中,Matlab给出了答案:前两个随机数产生器都是“flawed”,推荐大家使用twister随机数产生器。
此外,MathWorks公司意识到了这几个参数可能会产生误导,于是在新版本(2012及以后)的Matlab中更新了语法。
rng Control the random number generator used by RAND, RANDI, and RANDN.
rng(SD) seeds the random number generator using the non-negative
integer SD so that RAND, RANDI, and RANDN produce a predictable
sequence of numbers.
rng('shuffle') seeds the random number generator based on the current
time so that RAND, RANDI, and RANDN produce a different sequence of
numbers after each time you call rng.
rng(SD,GENERATOR) and rng('shuffle',GENERATOR) additionally specify the
type of the random number generator used by RAND, RANDI, and RANDN.
GENERATOR is one of:
Generator Description
------------------------------------------------------------------
'twister' Mersenne Twister
'simdTwister' SIMD-oriented Fast Mersenne Twister
'combRecursive' Combined Multiple Recursive
'multFibonacci' Multiplicative Lagged Fibonacci
'v5uniform' Legacy MATLAB 5.0 uniform generator
'v5normal' Legacy MATLAB 5.0 normal generator
'v4' Legacy MATLAB 4.0 generator
新版的Matlab默认采用Mersenne Twister随机数产生器,rng(S) 函数表示设定初始状态,rng('shuffle') 表示随机分配一个初始状态。
如何产生非重复的随机数
用2012版本之后的用户比较方便,在产生随机数之前使用rng('shuffle')洗一下就可以(shuffle是洗牌的意思)。
对于旧版本的用户,还不支持rng函数。以前一般是rand('state',sum(100*clock))来根据当前时间设定初始状态,但时间始终是递增的,而且变化幅度相对来说很小,效果不是很好。
有很多人用别的方式设定初始状态(如rand('twister', fix(mod(1e11*(sum(clock)-2009), 2^31)));),为简便起见,个人推荐采用新版Matlab中rng函数语法,即rand('twister',mod(floor(now*8640000),2^31-1)) ,这样可以产生的不同的随机数。采用这种办法大约每497天种子才会重复一次,一般使用的话足够了。
最后
以上就是霸气小天鹅为你收集整理的9.Matlab中的repmat,clock,rand以及seed,state,twister参数的全部内容,希望文章能够帮你解决9.Matlab中的repmat,clock,rand以及seed,state,twister参数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复