《正态分布随机数生成算法》由会员分享,可在线阅读,更多相关《正态分布随机数生成算法(7页珍藏版)》请在人人文库网上搜索。

1、概率论与数理统计课程设计题目:正态分布随机数生成算法要编程得到服从均匀分布的伪随机数是容易的。C语言、Java语言等都提供了相应的函数。但是要想生成服从正态分布的随机数就没那么容易了。得到服从正态分布的随机数的基本思想是先得到服从均匀分布的随机数,再将服从均匀分布的随机数转变为服从正态分布。接下来就先分析三个从均匀分布到正态分布转变的方法。然后编程实现其中的两个方法并对程序实现运作的效果进行统计分析。1、 方法分析(1) 利用分布函数的反函数若要得到分布函数为F(x)的随机变量Y。可令, 其中u是服从均匀分布的随机变量,有因而,对于任意的分布函数,只要求出它的反函数,就可以由服从均匀分布的随机。

2、变量实例来生成服从该分布函数的随机变量实例。现在来看正态分布的分布函数,对于,其分布函数为:显然,要想求其反函数是相当困难的,同时要想编程实现也很复杂。可见,用此种方法来生成服从正态分布的随机变量实例并不可取。(2) 利用中心极限定理第二种方法利用林德伯格莱维(LindebergLevi)中心极限定理:如果随机变量序列独立同分布,并且具有有限的数学期望和方差则对一切有因此,对于服从均匀分布的随机变量,只要n充分大,随机变量就服从。我们将实现这一方法。(3) 使用Box Muller方法先证明:令,则令,则有。接下来再来得出Box Muller方法:设为一对相互独立的服从正态分布的随机变量。则有。

3、概率密度函数令,其中,则有分布函数:令如果服从均匀分布,则的分布函数即为。最后,可以用代替,令为,其中,得:从而,只需要有两个服从均匀分布的随机变量,就能通过公式来得到一个服从正态分布的随机变量。用Box Muller方法来生成服从正态分布的随机数是十分快捷方便的。我们也将实现这一方法。2、 实现与分析(1) 利用中心极限定理方法的实现与分析利用中心极限定理来生成随机数的函数(C+语言)编写如下:const int N = 200;double getRand()double s = 0;for (int i = 0; i != N; +i)s += double(rand() % 1000)。

4、 / 1000;return s;函数生成的随机数是N个0,1间服从均匀分布的随机数的和。这里N为200。从而理论上产生的随机数应近似服从,其中n为N,即200,为0.5,为1/12。程序生成了200个随机数,并求出样本均值与样本方差,也即与的最大似然估计:/生成随机数并存储double sum, store200, xi, su = 0, sb = 0, ssb = 0;int cnt = 0;sum = 0;for (int i = 0; i != 200; +i)xi = getRand();sum += xi;storei = xi;/得到样本均匀与样本方差su = sum / 200。

5、;for (int i = 0; i != 200; +i)sb += (storei - su) * (storei - su);sb /= 200;ssb = sqrt(sb);此次选取,它们将实轴分成11个互不相交的区间,从而将样本值分成11组。程序统计了每组中的样本数量。为方便计算,程序还计算出了:int segments12, m = 2;double x1 = 90, x10 = 108;memset(segments, 0, sizeof(segments);for (int i = 0; i != 200; +i)if (storei x10)+segments10;else+。

6、segmentsint(storei - x1) / m + 1);cout i t ni endl;for (int i = 0; i != 11; +i)cout i + 1 t segmentsi;if (i 10)cout t fixed setprecision(2) (90 + i * 2 - su) / ssb;cout endl;程序的最终运行输出如图21所示。图21 最终输出结果对结果的统计如表21所示。由表21中可见,今并令,则由于,故可认为产生的随机数服从正态分布。表21利用中心极限定理的方法虽然可以得到服从正态分布的随机数样本,其思想也较为简单,容易想到。但是这种方法每。

7、次都要先产生若干个服从均匀分布的随机数样本并求它们的和,因而算法的时间复杂度高。(2) Box Muller方法的实现与分析使用Box Muller方法得到随机数的函数如下:double getRand()double u1 = double(rand() % 10000) / 10000, u2 = double(rand() % 10000) / 10000, r;r = 20 + 5 * sqrt(-2.0 * (log(u1) / log(e) * cos(2 * pi * u2);return r;用此函数得到的随机数样本理论上服从。所实现的程序产生了500个随机变量的样本其他与利用中心极限定理的实现基本相同。程序得到的最终结果如图22所示。图2-2对结果的统计如表2-2 所示。表22由表22可见,今并令,则由于,故可认为产生的随机数服从正态分布。Box Muller方法的推导过程较为复杂。但得到的结果却是很令人满意的。只要用两个相互独立的均匀分布就能得到正态分布。而且产生随机数的时间复杂度比利用中心极限定理的方法要低很多。因而若要产生服从正态分布的随机数样例,则Box Muller方法是一个很不错的选择。

正态分布随机数 C语言,正态分布随机数生成算法相关推荐

  1. 正态分布随机数 C语言,C语言产生满足正态分布的随机数

    方法三:由正态分布曲线图形得到的直观结果 图1 正态分布曲线 从上图可以看出,在μ附近的概率密度大,远离μ的地方概率密度小,我们要产生的随 机数要服从这种分布,就是要使产生的随机数在μ附近的概率要大, ...

  2. c语言学习进阶-C语言程序产生正态分布随机数

    C语言程序产生正态分布随机数 目录 C语言程序产生正态分布随机数 **中心极限定理(大数定理)** **Hasiting有理逼近法:** **反函数产生给定分布的随机数法:** **Box-Mulle ...

  3. 如何用均匀分布随机数生成正态分布随机数

    文章目录 前言 The Box–Muller transform The Ziggurat algorithm(金字形神塔) 附录:Inverse transform sampling直观解释 前言 ...

  4. R语言使用rnorm函数生成正态分布随机数、自定义指定生成随机数的个数、均值、方差

    R语言使用rnorm函数生成正态分布随机数.自定义指定生成随机数的个数.均值.方差 目录 R语言使用rnorm函数生成正态分布随机数.自定义指定生成随机数的个数.均值.方差 R 语言特点 R语言使用r ...

  5. 产生正态分布(高斯分布)随机数 C语言实现

    正态分布的概率密度函数如下 通常使用表示均值为,方差为 产生正太分布的方法如下: 设为(0,1)上n个相互独立的均匀分布的随机数,由于,. 根据中心极限定理可知,当n趋向于无穷时 的分布近似于正态分布 ...

  6. 生成正态分布随机变量c语言,C语言--生成正态分布随机数

    摘要: 随机数在实际运用中非常之多,如游戏设计,信号处理,通常我们很容易得到平均分布的随机数.但如何根据平均分布的随机数进而产生其它分布的随机数呢?本文提出了一种基于几何直观面积的方法,以正态分布随机 ...

  7. java实现随机数生成算法_Java 语言实现的随机数生成算法

    广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,疯狂软件年终钜惠,报名java就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询. [导 ...

  8. java正态分布随机数_正态分布的随机数

    一.功能 产生正态分布\(N(\mu, \ \sigma^2)\). 二.方法简介 正态分布的概率密度函数为 \[f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-(x-\mu) ...

  9. R语言使用caret包的preProcess函数进行数据预处理:对所有的数据列进行YeoJohnson变换(将非正态分布数据列转换为正态分布数据、可以处理负数)、设置参数为YeoJohnson

    R语言使用caret包的preProcess函数进行数据预处理:对所有的数据列进行YeoJohnson变换(将非正态分布数据列转换为正态分布数据.可以处理负数).设置method参数为YeoJohns ...

最新文章

  1. 搜索和其他机器学习问题有什么不同?
  2. Java实现单例模式
  3. ReentrantLock实现原理深入探究
  4. 阿里云开源PolarDB数据库,与社区共建云原生分布式数据库生态
  5. UVA11019 Martix Matcher --- AC自动机
  6. 【小题目】输入两个数字以及一个符号,输出这两个数字在这个符号下运算产生的结果
  7. oracle同步恢复目录,Oracle创建恢复目录(catalog)
  8. 及部署 项目案例_盘点丨2019十大边缘计算项目
  9. numpy.argmin 使用
  10. 计算机科学技术编程基础教程
  11. MATLAB中的信号处理
  12. skyworth机顶盒刷linux系统,斐讯N1盒子刷机安装ubuntu斐讯n1刷linux系统详细教程
  13. 微软笔试题2:403 Forbidden
  14. Qt编写邮件客户端IMAP4(一)收取邮件
  15. 如何申请Autodesk ReCap 360 photo的云币(Cloud Credit)
  16. Excel数据筛选匹配
  17. html做出来发给别人链接,FINEBI仪表板的公共链接分享后,将分享的链接发给别人后无法在另外一台电脑上打开该链接网址。...
  18. Civil 3d 路线之固定图元(AlignmentEntity)部分分析
  19. 【软件测试】盘一盘工作中遇到的 MQ 异常测试
  20. swfobject.js 2.2 使用方法

热门文章

  1. 手机号码批量导入通讯录php,怎么从电脑上的excel表格的手机号码导入通讯录到华为手机:...
  2. 数据网格(Data Mesh)是什么?
  3. python xlwt表格写入操作
  4. 操作系统 - - 生产者—消费者问题(PV操作)代码显示
  5. PBR来龙去脉十一:IBL继续积分部分
  6. C语言_钩子函数(回调函数)
  7. 关于奋斗的150条中国名人名言
  8. dnf剑魂buff等级上限_DNF:护石2.0副本将至!新增“金币燃烧机”,30W点一下
  9. 怎么解决网页中播放视频没有声音?
  10. 决策树留一法python代码_从实例中归纳决策树_人工智能一