matlab逆变换法产生随机数_关于matlab生成随机数

本文介绍了MATLAB中生成随机数的常用函数,包括rand、randn和randi,以及如何利用逆变换法实现特定分布的随机数。同时,详细讨论了如何设置和控制随机种子,以便于重复生成相同的随机数序列,这对于科学研究中的重复实验至关重要。通过示例代码,展示了如何使用RandStream类进行随机数流的管理和重置。
摘要由CSDN通过智能技术生成

一,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.139043482536049 0.734007633362635 0.194791464843949

ans =

0.602204766324215 0.937923745019422 0.149285414707192

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

Matlab帮助中的下面章节有所叙述:

Managing the

Default Stream

管理默认(缺省)流

rand, randn, and randi

draw random numbers from an

underlying random number stream, called the default stream.

The @RandStream class allows you to get a handle to the default stream

and control random number generation.

rand,randn,和randi 从一个基础的随机数流中得到随机数,叫做默认流。你可以通过

@RandStream 类得到默认流的句柄从而控制随机数的生成。

Get a handle to the default stream as

follows:

以下为得到默认流句柄的代码:

defaultStream=RandStream.getDefaultStream

defaultStream =

mt19937ar random stream (current default)

Seed: 0

RandnAlg: Ziggurat

Return the properties of the stream object with thegetmethod:

用get方法返回流对象属性:

get(defaultStream)

Type: 'mt19937ar'

NumStreams: 1

StreamIndex: 1

Substream: 1

Seed: 0

State: [625x1 uint32]

RandnAlg: 'Ziggurat'

Antithetic: 0

FullPrecision: 1

The State property is the internal state of the generator. You can save the State of defaultStream.

state属性是发生器的内部状态,你可以保存默认流的状态:

myState=defaultStream.State;

Using myState, you can restore the state of defaultStream and reproduce previous results.

利用myState你可以恢复默认流状态重新生成前面的结果:

myState=defaultStream.State;

A=rand(1,100);

defaultStream.State=myState;

B=rand(1,100);

isequal(A,B)

ans =

1

你也可以直接使用@RandStream 类的reset静态方法重置种子状态来获取相同的随机生成序列,下面是示例代码:

stream =

RandStream.getDefaultStream;%获取默认的随机种子(暂时这么叫,帮助有详细解释)

reset(stream);%重置

rand(stream,1,3)

reset(stream);%重置

rand(stream,1,3)

matlab的输出为:

ans =

0.814723686393179 0.905791937075619 0.126986816293506

ans =

0.814723686393179 0.905791937075619 0.126986816293506

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值