Matlab生成随机数

文章目录

最近用到matlab生成随机数,虽然这是一个很简单的功能,但是真到用时却感觉不是那么熟悉。在这里做一下总结,留待以后查看。

常用的3个函数

1,rand 生成均匀分布的伪随机数。分布在(0~1)之间
语法:

1
2
3
rand(m,n)            生成m行n列的均匀分布的伪随机数
rand(m,n,'double')   生成指定精度的均匀分布的伪随机数,参数还可以是'single'
rand(RandStream,m,n) 利用指定的RandStream(我理解为随机种子)生成伪随机数

2,randn 生成标准正态分布的伪随机数(均值为0,方差为1)
语法:和上面一样

3, randi 生成均匀分布的伪随机整数
语法:

1
2
3
randi(iMax)            在开区间(1,iMax)上生成均匀分布的伪随机整数
randi(iMax,m,n)      在开区间(1,iMax)生成mXn型随机矩阵
randi([iMin,iMax],m,n) 在开区间(iMin,iMax)生成mXn型随机矩阵

伪随机数的重复生成

正常情况下每次调用相同指令例如rand生成的伪随机数是不同的,
例如:

1
2
rand(1,3)
rand(1,3)

matlab的输出为:

1
2
3
4
ans =
   0.139043482536049   0.734007633362635   0.194791464843949
ans =
   0.602204766324215   0.937923745019422   0.149285414707192

如何使两个语句生成的随机数相等呢?

rand,randn,和randi 从一个基础的随机数流中得到随机数,叫做默认流。你可以通过RandStream类得到默认流的句柄从而控制随机数的生成。

1、赋值相同的默认流状态

1
2
3
4
5
6
7
defaultStream=RandStream.getDefaultStream;  %获取默认流
myState=defaultStream.State;                %获取默认流状态
A=rand(1,100); 
defaultStream.State=myState;                %赋值默认流状态
B=rand(1,100); 
isequal(A,B)
ans = 1

2、重置随机种子
使用RandStream 类的reset静态方法重置种子状态来获取相同的随机生成序列

1
2
3
4
5
stream = RandStream.getDefaultStream; %获取默认流
reset(stream);                        %重置
rand(1,3)
reset(stream)                         ;%重置
rand(1,3)

matlab的输出为:

1
2
3
4
ans =
   0.814723686393179   0.905791937075619   0.126986816293506
ans =
   0.814723686393179   0.905791937075619   0.126986816293506

其他函数

其他函数还包括:

betarnd 贝塔分布的随机数生成器

binornd 二项分布的随机数生成器

chi2rnd 卡方分布的随机数生成器

exprnd 指数分布的随机数生成器

frnd f分布的随机数生成器

gamrnd 伽玛分布的随机数生成器

geornd 几何分布的随机数生成器

hygernd 超几何分布的随机数生成器

lognrnd 对数正态分布的随机数生成器

nbinrnd 负二项分布的随机数生成器

ncfrnd 非中心f分布的随机数生成器

nctrnd 非中心t分布的随机数生成器

ncx2rnd 非中心卡方分布的随机数生成器

normrnd 正态(高斯)分布的随机数生成器

poissrnd 泊松分布的随机数生成器

raylrnd 瑞利分布的随机数生成器

trnd 学生氏t分布的随机数生成器

unidrnd 离散均匀分布的随机数生成器

用法:R = unidrnd(N);%产生一个最大值为N的随机正整数R,R为1到N之间

unifrnd 连续均匀分布的随机数生成器

weibrnd 威布尔分布的随机数生成器

本文出自 TENNFY博客,转载时请注明出处及相应链接。

本文永久链接: https://www.tennfy.com/1246.html

下一篇文章:

上一篇文章:

2人参与了讨论

  1. Faris 说:

    确实。有时候很简单的东西,想用的时候却难住了~~哈哈~~可能是我太弱了~~~

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

2 + 5 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部