9.Matlab中的repmat,clock,rand以及seed,state,twister参数

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天种子才会重复一次,一般使用的话足够了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值