
matlab随机数
合取范式-中子的发现
2023年2月18日发(作者:trpe)matlab逆变换法产⽣随机数_关于matlab⽣成随机数
⼀,matlab中⽣成随机数主要有三个函数:rand,randn,randi
1,rand⽣成均匀分布的伪随机数。分布在(0~1)之间
主要语法:rand(m,n)⽣成m⾏n列的均匀分布的伪随机数
rand(m,n,'double')⽣成指定精度的均匀分布的伪随机数,参数还可以是'single'
rand(RandStream,m,n)利⽤指定的RandStream(我理解为随机种⼦)⽣成伪随机数
2,randn⽣成标准正态分布的伪随机数(均值为0,⽅差为1)
主要语法:和上⾯⼀样
3,randi⽣成均匀分布的伪随机整数
主要语法:randi(iMax)在开区间(0,iMax)⽣成均匀分布的伪随机整数
randi(iMax,m,n)在开区间(0,iMax)⽣成mXn型随机矩阵
r=randi([iMin,iMax],m,n)在开区间(iMin,iMax)⽣成mXn型随机矩阵
⽰例验证:
均值分布
概率分布图:
y=rand(1,3000000);
hist(y,2000);
散点图:
y=rand(1,3000000);
plot(y)
正态分布
概率分布图:
y=randn(1,3000000);
hist(y,2000);
散点图:
y=randn(1,3000000);
plot(y);
⼆,关于随机种⼦,伪随机数的重复⽣成
正常情况下每次调⽤相同指令例如rand⽣成的伪随机数是不同的,
例如:
rand(1,3)
rand(1,3)
matlab的输出为:
ans=
0.1390.7340.3949
ans=
0.6150.9379237450194220.7192
如何使两个语句⽣成的随机数相等呢?
Matlab帮助中的下⾯章节有所叙述:
Managingthe
DefaultStream
管理默认(缺省)流
rand,randn,andrandi
drawrandomnumbersfroman
underlyingrandomnumberstream,calledthedefaultstream.
The@RandStreamclassallowsyoutogetahandletothedefaultstream
andcontrolrandomnumbergeneration.
rand,randn,和randi从⼀个基础的随机数流中得到随机数,叫做默认流。你可以通过
@RandStream类得到默认流的句柄从⽽控制随机数的⽣成。
Getahandletothedefaultstreamas
follows:
以下为得到默认流句柄的代码:
defaultStream=aultStream
defaultStream=
mt19937arrandomstream(currentdefault)
Seed:0
RandnAlg:Ziggurat
Returnthepropertiesofthestreamobjectwiththegetmethod:
⽤get⽅法返回流对象属性:
get(defaultStream)
Type:'mt19937ar'
NumStreams:1
StreamIndex:1
Substream:1
Seed:0
State:[625x1uint32]
RandnAlg:'Ziggurat'
Antithetic:0
FullPrecision:1
savetheStateofdefaultStream.
state属性是发⽣器的内部状态,你可以保存默认流的状态:
myState=;
UsingmyState,youcanrestorethestateofdefaultStreamandreproducepreviousresults.
利⽤myState你可以恢复默认流状态重新⽣成前⾯的结果:
myState=;
A=rand(1,100);
=myState;
B=rand(1,100);
isequal(A,B)
ans=
1
你也可以直接使⽤@RandStream类的reset静态⽅法重置种⼦状态来获取相同的随机⽣成序列,下⾯是⽰例代码:
stream=
aultStream;%获取默认的随机种⼦(暂时这么叫,帮助有详细解释)
reset(stream);%重置
rand(stream,1,3)
reset(stream);%重置
rand(stream,1,3)
matlab的输出为:
ans=
0.81790.9190.3506
ans=
0.81790.9190.3506
可以看出⽣成的随机码是相等的,这样可以⽤于重复实验上来