在fft海面模拟中,需要生成服从标准生成分布的随机数(见:杨超:fft海面模拟(一))。

我们知道数构造服从目标分布的随机数发生器,一般是采用反函数法:对目标分布的CDF求反函数,则当其输入服从U(0,1)的随机数时,就返回服从目标分布的随机数。(参考pbrt第三版第13章第3节)。

不过由于正态分布的CDF无法用初等函数表达,所以上面方法走不通,需另辟蹊径。

通常使用称为Box-Muller转换(Box-Muller transform)的方法来生成服从标准正态分布的随机数(对儿)。

一,Box-Muller转换的基本形式(basic form)

设U1,U2相互独立,均服从分布U(0,1)

X=

Y=

则X、Y相互独立且均服从标准正态分布。

证明:

U1,U2~U(0,1) 所以

因为

,同样,根据一元随机变量函数分布,有:

(因为

,所以

,所以 )

因为U1、U2互相独立,而

只取决于U2,R只取决于U1,所以

、R互相独立。而独立随机变量联合分布等于边缘分布之积。所以

因为

其中

所以

(因为

,所以)

所以

(注意其中积分正好是标准正态分布密度函数的积分,故积分结果为1)

同理可得:

可见X和Y均服从标准正态分布。又因可验证

,所以X,Y互相独立。

证毕。

二,Box-Muller转换的极坐标形式(polar form)

设u,v相互独立,均服从分布U(-1,1),但拒绝掉

的(u,v)对儿。

X=

Y=

其中

则X、Y相互独立且均服从标准正态分布。

证明:

实际上在Box-Muller转换的标准形式

X=

Y=

中,作变换(*):

即得

X=

Y=

但问题是上述变换(*)能满足“U1,U2相互独立,均服从分布U(0,1)”吗?

验证如下:

(1)首先确认U1,U2的取值范围均为(0,1):

如图,因为(u,v)均匀分布在单位圆内,而

故U1取值范围为(0,1)。

又由图中看出

即为辐角θ,因为θ取值范围为

,故U2取值范围为(0,1)。

(2)再看U1,U2的分布:

因为(u,v)均匀分布在单位圆内,故

根据二元随机变量函数分布,有:

其中

好求:

则需隐函数求导:

两边对v求导,得:

解得:

(因为

,所以)

同理,将

两边对u求导,可解得:

所以:

(因为

,所以)

所以

所以

(因为U2取值范围为(0,1),所以)

同理

故U1,U2均服从U(0,1)。

,故U1,U2相互独立。

证毕。

三,代码

采用极坐标形式:

public Vector2 gaussianRandomVariablePair() {

float x1, x2, w;

do {

x1 = 2f * Random.Range(0f,1f) - 1f;

x2 = 2f * Random.Range(0f,1f) - 1f;

w = x1 * x1 + x2 * x2;

} while ( w >= 1f );

w = Mathf.Sqrt((-2f * Mathf.Log(w)) / w);

return new Vector2(x1 * w, x2 * w);

}

参考:

wps生成正态分布的随机数_生成服从标准正态分布的随机数相关推荐

  1. 生成两组相互独立服从标准正态分布的随机数(推导过程)

    生成两组相互独立服从标准正态分布的随机数(推导过程) 预备知识:均匀分布的特殊地位 生成两组独立的服从标准正态分布的随机数 预备知识:均匀分布的特殊地位 设 F ( x ) F(x) F(x)满足:( ...

  2. catia钣金根据线段折弯,CATIA钣金实例教程_生成棱边弯曲_生成局部折叠或展开

    CATIA钣金实例教程_生成棱边弯曲_生成局部折叠或展开,使用 5.3 节的钣金零件.模型如图 5-40. @PLONQ9KOT2[YI0M)I9MT05.png (62.9 KB, 下载次数: 82 ...

  3. 设z服从标准正态分布_【填空题】设Z服从标准正态分布,则 (保留四位小数)

    [填空题]设Z服从标准正态分布,则 (保留四位小数) 更多相关问题 听力原文:I have no money with me now.How about lending me 100 yuan?(4) ...

  4. java生成指数分布随机数_生成特定分布随机数的方法

    生成随机数是程序设计里常见的需求.一般的编程语言都会自带一个随机数生成函数,用于生成服从均匀分布的随机数.不过有时需要生成服从其它分布的随机数,例如高斯分布或指数分布等.有些编程语言已经有比较完善的实 ...

  5. java高斯分布随机数_生成符合高斯分布或者其他任意分布的随机数

    在一些情况下经常需要用到随机数,而高斯随机数又是最常用到的.这一篇讲一下如何编程生成符合正态分布的高斯随机数,甚至任何其他分布的随机数. 我们知道C语言的标准库函数可以生成符合均匀分布的伪随机数.那么 ...

  6. z变换公式表_如何使用标准正态分布表?

    正态分布这个概念在统计学中很常见,在做与正态分布有关计算的时候经常会用到标准正态分布表.如果知道一个数值的标准分数即z-score,就可以非常便捷地在标准正态分布表中查到该标准分数对应的概率值.任何数 ...

  7. 20以内分数化小数表_如何使用标准正态分布表?

    正态分布这个概念在统计学中很常见,在做与正态分布有关计算的时候经常会用到标准正态分布表.如果知道一个数值的标准分数即z-score,就可以非常便捷地在标准正态分布表中查到该标准分数对应的概率值.任何数 ...

  8. python求上α分位点_什么是标准正态分布的上α分位点以及怎样求?

    展开全部 标准正态分布的上α分位点:设X~N(0,1),对于任给的62616964757a686964616fe4b893e5b19e31333431363638α,(0Zα)= α的点Zα为标准正态 ...

  9. java生成不重复随机数_生成不重复随机数 java

    生成不重复随机数 java java生成随机数可以使用Math类中的方法.不随机可以使用List进行判断存储.(推荐教程:java教程 ) 1 . 调用java.lang下面Math类中的random ...

  10. python生成泊松分布随机数_生成满足泊松分布的随机数,以及python实现

    泊松分布是一个离散型随机变量分布,其分布律是: image 其中参数λ是单位时间(或单位面积)内随机事件的数学期望. k是随机事件发生的个数 泊松分布适合于描述单位时间内随机事件发生的次数的概率分布. ...

最新文章

  1. oracle 11g goldengate DML单向复制测试环境搭建
  2. 地摊经济和夜经济-国情讲坛·周荣江:城市生态谋定治理转型
  3. [Python] NotImplemented 和 NotImplementedError 区别
  4. python人工智能pdf_800G人工智能学习资料:AI电子书+Python语言入门+教程+机器学习等限时免费领取!...
  5. ICCV 2019 | 旷视提出MetaPruning:基于元学习和AutoML的模型压缩新方法
  6. u盘启动 联想一体机_联想笔记本电脑怎么重装win10系统
  7. [转]上海五年的奋斗历程 从月薪3500到700万(感人!催人振奋!)
  8. 几种常用的键盘钩子技术
  9. 华为92家核心供应商名单公布
  10. 嵌入式工程师应该知道的C语言
  11. 签证者的武林秘笈(一)—-来自太傻的签证哲学
  12. MIP实操指南,你真的需要配置吗?
  13. wordpress cookies 遇到预料外错误 阿里云虚拟机
  14. 问题 A: 买牛奶  某同学负责给班里的同学买牛奶 ,每人两瓶。输入一个整数,表示班级人数。输出牛奶瓶数
  15. python 题目是idle的文件模式是什么_python的idle如何使用
  16. cocos2d-x屏幕适配原理
  17. 谈谈B端、C端、G端的产品区别
  18. stm32 驱动 TFT LCD
  19. android系统源码中添加app源码(源码部署移植)
  20. 腾讯安全联手知道创宇应对全球勒索攻击事件

热门文章

  1. 华为od 面试题及流程 (前后端)
  2. 教你如何破解无线网络密码(无线网络密码破解)
  3. 主板检测卡c5_电脑主板检测卡代码大全
  4. Eclipse配置android开发环境详解
  5. android开发环境搭建——android studio
  6. Qt是什么?Qt简介(非常全面)
  7. 思科模拟器-单臂路由tftp配置
  8. android木马的制作方法,实现木马病毒的详细步骤
  9. stardic字典文件
  10. alienware 15 r2 linux驱动下载,外星人笔记本驱动-外星人Alienware驱动下载 官方版-下载啦...