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二者的状态共同决定的。 

 

转:http://www.ilovematlab.cn/thread-164109-2-1.html

 


  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: rand: rand函数是MATLAB中的一个随机数生成函数,用于产生范围在0到1之间均匀分布的随机数。其语法为rand(),不带参数时返回一个随机数,可以通过设置参数来生成多个随机数。例如,rand(3,4)将返回一个3行4列的矩阵,其中的元素为0到1之间的随机数。 randn: randn函数是MATLAB中的一个随机数生成函数,用于产生符合正态分布(均值为0,方差为1)的随机数。其语法与rand函数类似,randn()返回一个符合正态分布的随机数,可以通过设置参数来生成多个随机数。例如,randn(3,4)将返回一个3行4列的矩阵,其中的元素为符合正态分布的随机数。 randi: randi函数是MATLAB中的一个随机数生成函数,用于产生整数随机数。其语法为randi(n)或randi([a,b]),n代表随机数的上限,生成的随机数范围为1到n;[a,b]代表随机数的范围,生成的随机数范围为a到b。例如,randi(10)将返回一个1到10之间的整数随机数,randi([5,10])将返回一个5到10之间的整数随机数。与randrandn函数类似,randi函数也可以通过设置参数来生成多个随机数。例如,randi([1,10],3,4)将返回一个3行4列的矩阵,其中的元素为1到10之间的整数随机数。 ### 回答2: rand函数是MATLAB中的一个随机数生成函数,用于生成一个0到1之间的均匀分布的随机数。可以设置生成的随机数的维度和大小。例如,使用rand函数生成一个3x3的随机矩阵: x = rand(3,3) 运行结果可能如下: 0.8147 0.9134 0.2785 0.9058 0.6324 0.5469 0.1270 0.0975 0.9575 randn函数也是一个随机数生成函数,用于生成服从标准正态分布的随机数。它生成的随机数具有零均值和单位方差。和rand函数类似,可以设置生成随机数的大小和维度。例如,使用randn函数生成一个2x2的随机矩阵: y = randn(2,2) 运行结果可能如下: 0.5377 0.3188 1.8339 -0.3150 randi函数是MATLAB中的一个随机整数生成函数,用于生成指定范围内的随机整数。可以设置生成随机整数的大小、范围和维度。例如,使用randi函数生成一个1到10之间的3x1的随机整数向量: z = randi([1,10],3,1) 运行结果可能如下: 7 3 9 这三个函数在MATLAB中的应用非常广泛,可以用于生成随机数进行模拟、随机样本生成、数值计算或其他需要应用到随机数的情况中。 ### 回答3: matlab函数rand产生一个0到1之间的随机数或多个0到1之间的随机数矩阵。它是基于均匀分布的随机数生成器。使用rand函数时,可以通过指定参数矩阵的大小来生成想要的随机数矩阵。例如,rand(2, 3)将生成一个2行3列的随机数矩阵。 matlab函数randn也是用来生成随机数,但是它是基于正态分布的。与rand函数不同,randn函数生成的随机数具有均值为0和方差为1的正态分布。 matlab函数randi用来生成随机整数。它可以生成介于两个给定整数之间的一个随机整数。例如,randi(10)将生成一个介于1到10之间的随机整数。同时,也可以指定生成整数的范围和大小。例如,randi([5, 15], 2, 3)将生成一个2行3列,取值范围在5到15之间的随机整数矩阵。 总之,这三个函数都是用来生成随机数的,但是它们所基于的分布不同。rand是基于均匀分布,randn是基于正态分布,randi则是生成随机整数。根据具体的需求,可以选择适合的函数来生成所需要的随机数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值