✅ 操作成功!

matlab随机数

发布时间:2023-06-05 作者:admin 来源:文学

matlab随机数

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

可以看出⽣成的随机码是相等的,这样可以⽤于重复实验上来

👁️ 阅读量:0