资源描述
随机数生成及各概率分布
一.随机数生成及(0,1)均匀分布
1.乘同余法生成随机数:
乘同余法的迭代式如下:
Xn+1=Lamda*Xn(mod M)
Rn+1=Xn/M
这里取X0=1,Lamda=7^5,M=2^31-1;
利用乘同余法生成的300个(0,1)之间的随机数为(这里仅显示200个数据)
0.0000 0.1315 0.7556 0.4587 0.5328 0.2190 0.0470 0.6789 0.6793 0.9347 0.3835 0.5194 0.8310 0.0346 0.0535 0.5297 0.6711 0.0077 0.3834 0.0668 0.4175 0.6868 0.5890 0.9304 0.8462 0.5269 0.0920 0.6539 0.4160 0.7012 0.9103 0.7622 0.2625 0.0475 0.7361 0.3282 0.6326 0.7564 0.9910 0.3653 0.2470 0.9826 0.7227 0.7534 0.6515 0.0727 0.6316 0.8847 0.2727 0.4364 0.7665 0.4777 0.2378 0.2749 0.3593 0.1665 0.4865 0.8977 0.9092 0.0606 0.9047 0.5045 0.5163 0.3190 0.9866 0.4940 0.2661 0.0907 0.9478 0.0737 0.5007 0.3841 0.2771 0.9138 0.5297 0.4644 0.9410 0.0501 0.7615 0.7702 0.8278 0.1254 0.0159 0.6885 0.8682 0.6295 0.7362 0.7254 0.9995 0.8886 0.2332 0.3063 0.3510 0.5133 0.5911 0.8460 0.4121 0.8415 0.2693 0.4154 0.5373 0.4679 0.2872 0.1783 0.1537 0.5717 0.8024 0.0331 0.5344 0.4985 0.9554 0.7483 0.5546 0.8907 0.6248 0.8420 0.1598 0.2128 0.7147 0.1304 0.0910 0.2746 0.0030 0.4143 0.0269 0.7098 0.9379 0.2399 0.1809 0.3175 0.8870 0.6521 0.1503 0.6813 0.3858 0.3877 0.4997 0.1475 0.5872 0.8456 0.5901 0.9554 0.5561 0.1482 0.9833 0.4088 0.1418 0.5649 0.2521 0.4885 0.4640 0.9611 0.1260 0.1998 0.3192 0.6293 0.1267 0.6513 0.6216 0.8031 0.2478 0.4764 0.3893 0.2033 0.0284 0.9017 0.4265 0.1420 0.9475 0.4103 0.1312 0.8856 0.0922 0.1622 0.0711 0.3653 0.2531 0.1351 0.7832 0.4553 0.3495 0.4523 0.8089 0.9317 0.6516 0.2152 0.6796 0.9089 0.2501 0.8609 0.4713 0.5060 0.6004 0.8176 0.7558 0.4622 0.9514 0.6327 0.4393 0.8247 2.(0,1)
均匀分布数据的检验
(1) 通过计算得均值为,二阶矩为,方差为
(2) 均基本满足(0,1)均匀分布的均值,二阶矩为,方差为
所以认为该随机序列基本上符合(0,1)均匀分布。
(3) (0,1)均匀分布的随机序列
图1 用matlab产生的(0,1)均匀分布的随机序列
(4) (0,1)均匀分布的各随机数数的直框图
图2 乘同余法生成的300随机数的分布情况
分析:从图1,2可知产生的随机数基本符合(0,1)均匀分布。
二. 指数分布的随机数生成与检验
(1)指数分布的分布函数
,这里取,
利用反函数法,可以求得: x=-2lnR;
(2) 指数分布的随机序列
图3 用matlab产生的指数分布的随机序列
(3) 参数为0.5的指数分布的各随机数的直框图
图4 用反函数法生成的300随机数的指数分布情况
分析:可以看出,生成的随机量较好的符合了指数分布特征。
三. 正态分布的随机数生成与检验
(1) Box-Muller法生成两个相互独立的正态分布(这里只弄了一个)
假设U1,U2均服从(0,1]区间上的均匀分布且相互独立,则由下式给出:
Y1=
其中Y1服从标准正态分布。
(2) 标准正态分布的随机序列
图5 用matlab产生的标准正态分布的随机序列
(3) 标准正态分布的各随机数的直框图
图6 用Box-Muller法生成的10000个随机数的标准正态分布情况
分析:从上图看所生成的随机序列基本上符合标准正态分布的要求。
四. 泊松分布的随机数生成与检验
(1)在泊松分布中,求出X取何值时,p(X=k)取最大值时,设为Pxmax.
其时,这样当于求解f(x)=lamda^k/k! 在k取何值时有最大值,虽然,这道题有一定的难度,但在程序中可以能过一个循环来得到取得f(x)取最大值时的整数自变量Xmax。
(2)通过迭代,不断生成0-1区间上的随机数,当随机数<Pxmax时,则终止迭代,否则重复(2)
(3)记录迭代过程的次数,即为所需要得到的符何泊松分布的随机量。
(4)泊松分布的公式为,这里取=1,则Pmax=P(x=1)==0.3679.
五. 符合二项分布的随机变量的生成
(1) 设二项分布B(p,N),其中,p为每个单独事件发生的概率(这里p取成0.3):
Matlab代码:
结果为
这种算法将每个独立的事件当作一个0-1分布来做,生成的0-1区间上的随机数,若小于1-p则不发生,否则认为发生,结果也基本上吻合。
六.实验小节:
(1) 对于随机数的生成是要求生成伪随机数还是真随机数开始不是很清楚,导致一直在查找有关真随机数的生成方法,但后来听同学说是伪随机数才开始着手做。
(2) 对于随机数的生成开始用C++语言进行编写硬是出现每隔一定的周期就重复的数据,所以后来用Matlab试了下结果比较好一点。
(3) 关于连续的分布的随机变量的生成还感觉简单点,后边的离散的随机分布就不是那么理解了,所以没怎么有感觉对于离散的随机分布。
展开阅读全文