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