Matlab生成随机数解读
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/2/29
© 谢中华, 天津科技大学数学系.
1. 创建RandStream类对象
生成随机数
RandStream类方法列表
方法 RandStream
create
说明 创建一个随机数流 创建多个独立的随机数流
get
获取 RandStream 类对象的属性
list
列出可用的随机数生成算法
getDefaultStream
获取默认随机数流
setDefaultStream
设置默认随机数流
reset
重置一个流到它的初始内部状态
rand
生成均匀分布伪随机数
randn
生成标准正态分布伪随机数
randi
生成离散均匀分布伪随机整数
randperm
生成一个随机排列
2020/2/29
© 谢中华, 天津科技大学数学系.
2. RandStream函数的调用方法
生成随机数
【例4.1-2】调用RandStream函数创建一个指定随机数生成算法 的RandStream类对象,然后利用对象的randn方法生成10×10 的标准正态分布随机数矩阵,并将矩阵按列拉长,画出频数直 方图
% 创建一个RandStream类对象s,其随机数生成器的算法为‘mlfg6331_64’, 初始种子为10,对象s的randn方法的算法为'Inversion' >> s = RandStream('mlfg6331_64', 'seed', 10, 'RandnAlg', 'Inversion'); % 调用对象s的randn方法生成10行10列的随机数矩阵x,其元素服从标准正 态分布 >> x = s.randn(10) >> y = x(:); % 将x按列拉长成一个列向量 >> hist(y) % 绘制频数直方图 >> xlabel('标准正态分布随机数'); % 为X轴加标签 >> ylabel(‘频数’); % 为Y轴加标签
此算法能产生闭区间 [253,1 253 ] 上的所有双精度值,理论上能产生 21492 个不重复
值 利用乘同余算法(multiplicative congruential algorithm),是 MATLAB 4 中的默认算法。
此算法产生闭区间[1/(231 1), 11/(231 1)] 上的双精度值,周期为 231 2
参数名 Seed RandnAlg
参数值 非负整数,默认值为 0 'Ziggurat'、'Polar' 或 'Inversion',默认 值为'Ziggurat'
说明 设定随机数种子,用来初始化随机数生成器 设定标准正态分布随机数函数 randn 所用算法
2020/2/29
© 谢中华, 天津科技大学数学系.
生成随机数
生成随机数
2020/2/29
© 谢中华, 天津科技大学数学系.
教材
生成随机数
2020/2/29
© 谢中华, 天津科技大学数学系.
生成随机数
2020/2/29
© 谢中华, 天津科技大学数学系.
主要内容
生成随机数
➢ 生成一元分布随机数 ➢ 生成多元分布随机数 ➢ 蒙特卡洛方法
2020/2/29
© 谢中华, 天津科技大学数学系.
生成随机数
第一节 生成一元分布随机数
2020/2/29
© 谢中华, 天津科技大学数学系.
生成随机数
一、均匀分布随机数和标准正态分布随机数
1. rand函数
调用格式: Y = rand Y = rand(n) Y = rand(m,n) Y = rand([m n]) Y = rand(m,n,p, …) Y = rand([m n p …]) Y = rand(size(A))
生成随机数
调用格式:
s = RandStream('gentype') […] = RandStream('gentype','param1',val1,'param2',val2,…)
gentype有6个可能的取值:mcg16807、mlfg6331_64、 mrg32k3a、mt19937ar、shr3cong和swb2712,对应随机数生 成器的6个不同算法,默认值为mt19937ar
2020/2/29
© 谢中华, 天津科技大学数学系.
二、RandStream类
生成随机数
MATLAB 7.7及以后的版本中,依然支持rand函数的 上述两种调用方式,但已经是过时的调用方式了,因 为MATLAB 7.7中对生成随机数作了重大调整,给出 了RandStream(随机数流)类,通过调用类的构造 函数并传递合适的参数可以创建类对象,然后调用类 对象的rand,randn,randi,randperm方法生成随 机数。
© 谢中华, 天津科技大学数学系.
2. randn函数 调用格式: 与rand函数类似
生成随机数
2020/2/29
© 谢中华, 天津科技大学数学系.
生成随机数
【例4.1-1】设置随机数生成器的算法为Mersenne Twister算法, 生成均匀分布随机数矩阵
% 设置随机数生成器的算法为Mersenne Twister算法,初始种 子为1 >> rand('twister',1); % 生成2行6列的随机数矩阵,其元素服从[0,1]上均匀分布 >> x1 = rand(2,6)
2020/2/29
© 谢中华, 天津科技大学数学系.
生成随机数
在MATLAB7.7以前的版本中,rand函数还可以这样调用:
rand(method, s)
s = rand(method)
பைடு நூலகம்
其中method是字符串变量,它的可能取值如下表所列:
method 参数的取值 'twister'
说明 利用 Mersenne Twister 算法(译为马特赛特旋转演算法,个人认为译为梅森旋转算法更 合适),在 MATLAB7.4 及以后版本中默认采用这个算法。它是由 Makoto Matsumoto (松
本)和 Takuji Nishimura (西村)于 1997 年开发的。此算法产生闭区间[253,1 253 ] 上
'state' 'seed' 2020/2/29
的双精度值,周期为 (219937 1) / 2
利用 Marsaglia's subtract with borrow 算法,在 MATLAB 5 至 7.3 中默认采用这个算法。