实验1随机数产生及直方图统计

实验1随机数产生及直方图统计

ID:32884450

大小:83.50 KB

页数:5页

时间:2019-02-17

实验1随机数产生及直方图统计_第1页
实验1随机数产生及直方图统计_第2页
实验1随机数产生及直方图统计_第3页
实验1随机数产生及直方图统计_第4页
实验1随机数产生及直方图统计_第5页
资源描述:

《实验1随机数产生及直方图统计》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、实验1随机数产生及直方图统计一、实验目的(1)掌握在一般微型计算机上产主随机数的方法。(2)统计随机数的概率分布密度函数。二、实验内容1.用计算机产生[0,1]均匀分布的(伪)随机数。2.由[0,1]均匀分布随机数产生其它分布的随机数,例:正态N(0,l)分布的随机数。3.用直方图统计随机数的分布密度。三、实验设备微型计算机及其高级程序语言编译环境,例C++、FORTRAN、PASCAL等,也可以应用工程计算工具软件如MATLAB等。四、实验原理1.计算机产生均匀分布随机数若设R是[0,1]上均匀分布的随机变量,则它们的密度函数为:在计算机算法

2、中,为实现方便,通常使用伪随机数(序列)来代替(真)随机数。伪随机序列是有周期性的数值序列,当其周期N相对很大时,统计特性一定程度上逼近随机序列,故效果与(真)随机数相近。在本课程的以下部分,对伪随机数(序列)和真随机数(序列),称谓上不再加以严格区分。在计算机程序中,产生均匀分布伪随机数(序列)可以采用所谓“线性同余法”,有关资料可以自行查阅。不过,高级编程语言都有现成的产生均匀分布随机数的功能函数,如C语言中包含有随机函数RANDOM(N),用产生一个0~N-1之间的符合统计要求的均匀分布的伪随机数(序列)。每调用一次该函数,得到均匀分布随

3、机数的一次抽样,如语句A=RANDOM(1000),则变量A就赋以一次抽样的随机数。在实验中,我们可以采用这种方法来获得均匀分布的随机数列。2.高斯分布随机数的获得1-5实际研究当中,高斯(正态)分布是经常被使用到的数学模型,可以近似描述很多随机事件的统计特性。所以,如何产生高斯分布随机序列,是在本课程中必须掌握的内容。通常,我们可以采用非线性变换法,对比较容易产生的均匀分布随机序列进行变换,(近似)得到高斯分布随机序列。公式(1-2)和(1-3)中,若R1和R2是[0,1]区间两个均匀分布随机变量,理论上可以证明XC和XS是标准正态分布(均值

4、为0,方差为1的高斯分布)的随机变量。(1-2)(1-3)因为两变换式的正交性,XC和XS是统计独立的。所以,在实际应用中,可以单独或同时使用式(1-2)和(1-3)。当然,在一些较新的工具软件中,也已提供了直接的库函数,来生成高斯分布随机数。比如在MATLAB中,randn函数可以直接生成高斯分布随机数(矩阵)。3.直方图对于一个随机变量,假如我们知道它是正态的(或其它分布形式)我们可以从随机变量的抽样估计它的均值和方差,从而得到它的分布密度函数。如果预先对一个随机变量分布一无所知,要估计它的分布密度函数可借助于直方图统计方法:其方法介绍于下

5、:图1密度函数的取值量化设有图1所示密度函数fx(x)把随机变量X的取值量化,量化阶为2ε,例如对于以x=2为中心的量化阶内,如果ε足够小。有1-5当X抽样X1,X2,……,XN,是独立且同分布时,则当N较大能用频率代替概率。所以可以得到概率密度的估计值k=1,…,N显然x=2并不特殊,可以重复进行其它x值上的密度估计。这样我们就得到密度函数fx(x)的离散估计值。这就是直方图方法。这种直方图估计的准确度可以进行专门分析。分析它的方差可以知道,N和ε的选择有一定的要求。显然,数据样点数N越大越好,而区间密度ε选择与N值相适应为好。有表1可供参考

6、。表1样点数与直方单元数N50010002000500010000K2230395674N-数据样点数;K-随机变量取值范围量化的单元数。实验中要求用计算机对所产生的随机数用直方图估计其概率密度函数,井打印出分布函数的图形。为了便于编写直方图统计程序,下面给出一个C语言的例子,供参考。例:学生考试成绩统计。要统计出得100分的学生有几个,得90分到99分之间的学生有几个,得80分到89分之间的学生有几个,得70~79分之间的学生有几个,……,并且打印出分数分布图形其程序如下:#include"stdio.h"staticintscore[100

7、]={65,57,71,75,80,90,91,88,78,82,77,86,45,38,44,46,83,82,79,85,70,68,83,59,98,92,100,97,85,73,80,77,-1};voidmain(){inti,j;staticints[11];for(i=0;i<100;i++){if(score[i]==-1)1-5break;j=int(score[i]/10);s[j]++;}for(i=0;i<=10;i++){if(i<10){printf("%d",10*i);printf("---");printf(

8、"%dt",10*i+9);}else{printf("%dt",10*i);}for(j=0;j

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。