MATLAB中常用的几种随机数生成函数

1:rand函数的用法
命令:rand(N),rand(M,N)等
对于rand(N),通过help rand得到的解释是:R = rand(N) returns an N-by-N matrix containing pseudorandom values drawn from the standard uniform distribution on the open interval(0,1).
即rand(N)是生成一个符合标准均匀分布的矩阵,其值位于开区间0~1。
由概率论知识可知,当一个序列服从(0,1)区间的标准均匀分布时,其期望为0.5,方差为1/12(0.08333)。
可以用程序检验一下:

a=rand(1,10);
b=rand(1,1000);
c=rand(1,100000);
mean(a)
ans =0.5890
mean(b)
ans =0.4900
mean(c)
ans =0.5000
var(a)
ans =0.0634
var(b)
ans =0.0834
var(c)
ans =0.0833

可见,随着数据长度的增加,rand函数生成的数据期望越来越接近0.5,方差越来越接近1/12。
若想生成在区间[a,b]服从标准均匀分布的序列时,可用公式:r=a+(b-a).*rand(M,N),如下例:

%%在区间[10,100]服从标准均匀分布,其期望为55,方差为90^2/12=675
r=10+90.*rand(1,100000);
mean(r)
ans =54.9954
var(r)
ans =673.8957

2:randi函数的用法
命令:randi(IMAX,N),randi(IMAX,M,N),randi(IMAX,[M,N]),randi([IMIN,IMAX],…)等
对于randi(N),通过help randi得到的解释是:
R = randi(IMAX,N) returns an N-by-N matrix containing pseudorandom integer values drawn from the discrete uniform distribution on 1:IMAX.
R = randi([IMIN,IMAX],…) returns an array containing integer values drawn from the discrete uniform distribution on IMIN:IMAX
即randi生成1:IMAX或者IMIN:IMAX之间的离散均匀分布的整数矩阵。如:

r1=randi(10,2,5)%生成数据在1:10之间的2*5矩阵

r1 =

     7     1     3     7     5
     6     6    10     5     1

>> r2=randi([10,100],2,5)%生成数据在10:100之间的2*5矩阵

r2 =

    93    49    51    89    63
    53    95    98    36    18

在进行通信系统仿真时,可以利用randi来生成0,1比特序列。如msg_bit=randi([0,1],1,length_tran_msg};

3:randn函数的用法
命令:randn(N),randn(M,N)等
对于randn(N),通过help randn得到的解释是:R = randn(N) returns an N-by-N matrix containing pseudorandom values drawn from the standard normal distribution.
即randn(N)是生成一个符合标准正态分布的矩阵,其值位于开区间0~1

%生成一组服从(0,1)标准正态分布的序列
r=randn(1,100000);
>> mean(r)%均值
ans =
   -0.0015
>> var(r)%方差
ans =
    0.9975
hist(r,1000)%将数据分成1000个组并进行绘制

这里写图片描述

4:随机数据生成控制语句
在早期的MATLAB版本中,用’seed’,’state’,’twister’等命令控制随机数据的生成,但是这些命令将在未来的版本中被移除。现在用rng语句来代替这些命令,以控制随机数据的生成。见MATLAB中的updating your random number generator syntax
下面介绍rng的使用:
1)当使用rand,randi,randn语句时,其默认的是每次生成的数据不同(使用不同的随机数生成种子)

%前后2次调用rand(1,5)生成不同的数据
rand(1,5)
ans =
    0.8147    0.9058    0.1270    0.9134    0.6324
rand(1,5)
ans =
    0.0975    0.2785    0.5469    0.9575    0.9649

而如果你想使得随机数生成命令返回默认状态,只需在随机数据生成命令前加上:

rng('default');

即可。

2)如果想使得生成的随机数据每次都相同,则可以将随机数生成环境保存下来

s=rng;%保存环境
i1=randi(10,1,5)
i1 =
     2     5    10     8    10
rng(s)%调用之前的环境,则下次生成相同的数据
i2=randi(10,1,5)
i2 =
     2     5    10     8    10
i3=randi(10,1,5)
i3 =
     7     1     9    10     7
rng(s)
i3=randi(10,1,5)
i3 =
     2     5    10     8    10

3)若想依据当前的时间来生成一个种子,进而生成每次不同的随机数据,可以用以下命令:

rng('shuffle');
randi(10,1,5)
ans =
     9     7     9     1     4
randi(10,1,5)
ans =
     2     8     3    10     1
  • 10
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值