第一篇:产生随机数,并实现0—1分布,验证中心极限定理,实现标准正态分布,并画出分布直方图
随机信号大作业
题目:产生随机数,并实现0—1分布,验证中心极限定理,实现标准正态分布,并画出分布直方图。
一.思路
1.产生随机数。首先要确保数的随机性,利用时间的随机性来实现。
x2.产生0—1分布。随机数是在一定范围内产生的,利用数值x(a,b),得ba
到0-1均匀分布。
3.产生高斯分布。利用中心极限定理——设从均值为μ、方差为δ²(有限)的任意一个总体中抽取样本量为n的样本,当n充分大时,样本均值的抽样分布近似服从均值为μ、方差为δ²/n的正态分布。
二.实现方法。
1.利用函数来调用系统的时间,产生初值——随机数种子Seed,利用乘同余法产生随机数列:
rnxn/Mxn1xn
2.产生0—1分布。a[i]=seed/M产生0—1分布数。在这里要注意处理溢出情况,当Seed<0时,用seed=seed+M来消除溢出。
3.利用中心极限定理将0—1分布实现标准正态分布。算法实现步骤如下:随机选取n个随机数,利用下公式:
nnx(ri)/ 212i1n
在这里我们取n=12来化简计算:
标准正态分布数y=x。
代码如下:
int seed;
float a[100],b[100]={0};seed=sys.wMilliseconds;//随机种子输入 int i,j,w,k;float x,y;for(w=0;w<5000;w++){
x=0;y=0;for(i=0;i<100;i++){};for(j=20;j<32;j++){};y=x-6;//产生正态分布随机数 printf(“%lf”,y);for(j=0;j<100;j++){} if(-3+0.2*j
4.画图程序。
三.代码
详细代码见gauss.cpp文件。
执行结果如图所示,表明可基本实现正态分布:
(1)
(2)
(3)
(4)
四.总结
1.输出图形与标准正态分布存在差异,主要是因为选取随机数数量有限,导致结果存在差异。但已经能初步验证中心极限定理的正确性。
2.本次作业主要困难在于画图的实现。暴露出编程能力欠缺太多的问题。