matlab twister,MATLAB——rand 与 randn 'twister'、'state'、'seed'

rand与 randn  'twister'、'state'、'seed'

MATLAB中有两个经常会用到的(伪)随机数发生函数:rand与randn。

rand函数——生成均匀分布伪随机数。

randn函数——生成正态分布伪随机数。

统计工具箱(StatisticalToolbox)中较为复杂的随机数发生函数都是通过调用rand函数和randn函数来实现的。

例如:均匀分布函数unifrnd要调用rand,正态分布函数normrand要调用randn,等等。

每次启动MATLAB时rand与randn的初始状态都会被自动重置,从而产生完全相同的伪随机序列。即:启动MATLAB时,输入命令rand,得到0.8147,接着输入randn,得到1.8339(R2011b)。重启MATLAB后再次运行rand和randn,会得到完全一样的结果。如果想得到不同的伪随机序列,可以重置随机数发生函数的状态,相应语句为 rand(method,s)和randn(method,s)。

-----------------参数的说明----------------

参数method是一个字符串,指明伪随机数的生成算法,rand函数中method有三种选择:‘twister’、 ‘state’、 ‘seed’。

其中最新的‘twister’方法产生的伪随机序列重复周期最长,是MATALB 7.4 以上版本的默认方法。randn函数中只包括‘state’和‘seed’,默认方法是‘state’。

参数s设置所选方法的状态,可以用rand(method)和randn(method)查看method方法当前的状态(该命令并不改变随机数发生函数当前使用的算法):

‘seed’方法的状态是一个数,而‘state’与‘twister’方法的状态是一个数组。

用来设置状态的参数s是一个自然数,它将随机数发生器所选定的状态设置为‘第s个’可能的状态。

需要特别注意的是,无论使用何种方法,s的取值最好限制在0到2^31-1之间。

超出这个范围时,不同的s可能对应同一个状态。

可以证明,所有不小于2^32-1的s所对应的状态都与s=2^31-1所对应的状态相同。

s取2^31到2^32-2之间的不同值时对应的状态可能不同,但这些状态都已在s取0到2^31-1时出现过。

-------------得到不同伪随机序列的方法-------

rand的帮助文档中给出了一个示例方案rand('twister',sum(100*clock)),可以使每次运行得到的伪随机序列都不一样(rand‘'state',sum(100*clock)类似)。

该类方法将状态值设置为时变的。clock函数返回当前是时间的1*6数组(年,月,日,时,分,秒)。

sum(100*clock)一般不是整数,虽然貌似不太合乎规范,但运行起来没有问题,但该方法效率并不高。

主要原因是总状态数为2^31,约等于2.15e9;而sum(100*clock)的上届仅约为2.1e5,而且并非小于这个上界的每个值都取到。

http://newsgroups.derkeiler.com/Archive/Comp/comp.soft-sys.matlab/2006-02/msg04828.html对这个问题进行了详细分析,并且给出了一个效率较高的方法rand('twister',fix(mod(1e11*(sum(clock))-2009),2^31))。

除了rand和randn这两个基本函数之外,MATLAB统计工具箱还提供一个函数randg,用来产生归一化的服从Gamma分布的随机数。

Gamma分布随机数生成函数gamrnd和泊松分布随机数产生函数poissrnd需要调用randg来实现功能。

通过randg的帮助文档,可以发现randg这个随机数发生器的状态是由rand和randn二者的状态共同决定的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值