3.6.2 随机数生成

生成随机数

原文出处:https://zhuanlan.zhihu.com/p/28133598 

真正的随机数是使用武力现象产生的,这里介绍的是由计算机按照一定数学方法生成的伪随机数,这里的“伪”是有规律的意思,因为用数学方法产生的随机数列是根据确定的算法推算出来的,严格说来并不是随机的。主要函数如下:

Y=rand %生成一个服从[0,1]上均匀分布的随机数
Y=rand(n)%生成n*n的随机数矩阵
Y=rand(m,n)%生成m*n的随机数矩阵

MATLAB统计工具箱中函数名以rnd结尾的函数用来生成常见分布的随机数。

R=binornd(N,p,m,n)%二项分布
R=chi2rnd(V,m,n)%卡方分布
R=evrnd(mu,sigma)%极值分布
R=exprnd(mu,m,n)%指数分布
R=frnd(V1,V2,m,n)%F分布
R=gamrnd(A,B,m,n)%Gamma分布
R=geornd(P,m,n)%几何分布
R=gprnd(K,sigma,theta,M,N....)%广义帕累托分布
R=hygernd(M,K,N)%超几何分布
r=logrnd(quantiles,m,n)%对数正态分布
R=normrnd(mu,sigma)%正态分布
R=poissrnd(lambda,m,n)%泊松分布
R=trnd(V,m,n)%t分布
R=unifrnd(A,B,m,n)%连续均匀分布

m,n均为矩阵维度,mu和sigma为均值和标准差。

举例:

%调用random函数生成1000行1列的随机数向量x,元素服从二项分布B(10,0.3)
x=random('bino',10,0.3,1000,1);
[fp,xp]=ecdf(x);
ecdfhist(fp,xp,50);
xlabel('二项分布(n=10,p=0.3)随机数');
ylabel('f(x)');


生成多元分布随机数

MATLAB自带多元分布随机函数有mnrnd(多项分布),mvnrnd,mvtrnd,wishrnd等。

三项分布:如果做一件事情有三种情况,第一种情况k1出现的概率为p1,第二种情况k2出现的概率为p2,第三种情况k3出现的概率为p3

则这种情况发生的总共的可能种数有:A=C(k1+k2+k3,k1)*C(k2+k3 , k2)*C(k3 , k3)

C(n , k)表示从n个抽出k个的组合总数。

则概率为:P=A*p1^k1*p2^k2*p3^k3.

n=100; %多项分布的参数n
p=[0.2 0.3 0.5];%多项分布的参数p
%调用mnrnd函数生成10组3项分布随机数
r=mnrnd(n,p,10)
r =

    14    30    56
    16    31    53
    21    25    54
    22    26    52
    13    38    49
    17    27    56
    15    43    42
    19    35    46
    18    30    52
    21    33    46
%调用mnrnd函数生成10000组3项分布随机数
r=mnrnd(n,p,10000);
hist3(r(:,1:2),[50,50])%绘制前两维的频数直方图

二元正态分布

mu=[10 20];    %二元正态分布的均指向量
sigma=[1 3;3 16] %二元正态分布的协方差矩阵
%调用mvrnd函数生成10000组二元正太分布随机数
xy=mvnrnd(mu,sigma,10000);
hist3(xy,[15,15]); %绘制二元正太缝补随机数的频率直方图