均匀随机数生成

  先来说说均匀随机数生成,这是非均匀随机数的生成基础。

  例如,我们现在有drand()函数,可以随机生成[0,1]范围内的均匀随机数.

要求一个drand2()函数,能够生成[0,2]内的均匀随机数。

  显然有:

\[drand2()=2*drand()
\]

  但是很多时候,我们希望生成的随机数是有一定概率偏向的。

  比如生成[0,2]的随机数,越偏向2的数,出现的概率越大,显然上面的\(2*drand()\)无法满足要求

  例如,我们的随机数的概率密度分布如下:

生成指定概率密度的随机数

  先上结论:

  设概率密度函数\(f(x)\),概率累计分布函数\(F(x)\),生成概率密度为\(f(x)\)的随机数的函数如下:

\[F^{-1}(drand())
\]

  那么,为什么使用累积分布函数(CDF)的反函数,就能生成符合概率密度分布函数(PDF)的随机数呢?

证明

  设概率密度函数\(f(x)\),概率累计分布函数\(F(x)\),\(\xi\)表示服从\((0,1)\)均匀分布的随机变量,变换函数为\(G\),随机变量\(X=G(\xi)\),其中\(F(x)\)为单调递增函数。

  由概率分布定义知:

\[P\{X<a\}=F(a)
\]
\[P\{G(\xi)<a\}=F(a)
\]

  若\(G(\xi)\)为单调递增函数,可得:

\[P\{\xi<G^{-1}(a)\}=F(a)
\]

  已知\(\xi\)在\((0,1)\)上均匀分布,可得:

\[P\{\xi<b\}=b,b \in (0,1)
\]
\[P\{\xi<G^{-1}(a)\}=F(a)=G^{-1}(a)
\]

  故有F,G互为反函数,即:

\[X=G(\xi)=F^{-1}(\xi)
\]

  更多拓展见:https://zhuanlan.zhihu.com/p/191487550

蒙特卡洛——使用CDF反函数生成非均匀随机数的更多相关文章

  1. shell 生成指定范围随机数与随机字符串 .

    shell 生成指定范围随机数与随机字符串         分类:             shell              2014-04-22 22:17     20902人阅读     评 ...

  2. random and password 在Linux下生成crypt加密密码的方法,shell 生成指定范围随机数与随机字符串

    openssl rand -hex n (n is number of characters) LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head ...

  3. 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。

    题目: 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数,该函数能够生成1-10的随机数. 思路: 假如已知一个函数能够生成1-49的随机数,那么如何以此生成1-10的随机数呢? 解法 ...

  4. 【原创】开源Math.NET基础数学类库使用(14)C#生成安全的随机数

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...

  5. js 生成m位随机数入门实例

    1.根据时间生成m位随机数,最大13位随机数,并且不能保证首位不为0. 例子: function ran(m) { m = m > 13 ? 13 : m; var num = new Date ...

  6. C#生成不重复随机数列表

    C#生成不重复(随机数 http://www.jbxue.com/tags/suijishu.html)列表实例的代码.例子: ;             Random rnd = ; i <  ...

  7. 非均匀B样条拟合MATLAB程序

    直接上代码,多的不再说了. %------------------非均匀B样条拟合MATLAB程序----------------- clear k=; x=load('data.txt'); [n, ...

  8. [转载]C# Random 生成不重复随机数

    Random 类 命名空间:System 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备. 伪随机数是以相同的概率从一组有限的数字中选取的.所选数字并不具有完全的随机性,因为它 ...

  9. 开源Math.NET基础数学类库使用(14)C#生成安全的随机数

    原文:[原创]开源Math.NET基础数学类库使用(14)C#生成安全的随机数                本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/ ...

随机推荐

  1. 详解稳定币圣杯USDN

    稳定币飞速发展,USDN 一骑绝尘,但因合规问题饱受质疑.合规稳定币作为后来者,奋起直追,亦光耀夺目.而更符合区块链精神的稳定币(抵押其他资产生成稳定币),长期以来只有 Maker 的 DAI 能够在 ...

  2. C语言数据类型思维导图

  3. Fast R-CNN训练自己的数据集时遇到的报错及解决方案

    最近使用Fast R-CNN训练了实验室的数据集,期间遇到一些报错,主要还是在配置环境上比较麻烦,但可以根据提示在网上找到解决这些错误的办法.这里我只记录一些难改的报错,以后再遇见这些时希望能尽快解决 ...

  4. 【HTB系列】靶机Access的渗透测试详解

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...

  5. 刚学会 C++ 的小白用这个开源框架,做个 RPC 服务要多久?

    本文适合有 C++ 基础的朋友 本文作者:HelloGitHub-Anthony HelloGitHub 推出的<讲解开源项目>系列,本期介绍基于 C++ 的 RPC 开源框架--rest ...

  6. window下象MAC一样工作的工具

    前面是MAC 后面是windows对应工具,只是做一个列表说明,具体使用自行百度 1.item2 vs Cmder 命令行 2.Homebrew vs Chocolatey 包管理器 3.Spotli ...

  7. 力扣119. 杨辉三角 II

    原题 1 class Solution: 2 def getRow(self, rowIndex: int) -> List[int]: 3 ans = [1] 4 for i in range ...

  8. 力扣350. 两个数组的交集 II

    原题 1 class Solution: 2 def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]: 3 di ...

  9. 在Arch上使用Fcitx5

    目录 卸载Fcitx4 安装Fcitx5 配置 修改环境变量 系统登陆后默认启动Fcitx5输入法 配置主题 最终使用效果 参考文档 我是一个Arch+KDE的用户,所以下面的方法可能不适合所有的Li ...

  10. HDOJ-4081(次小生成树+Prim算法)

    Qin Shi Huang's National Road System HDOJ-4081 本题考查的是次小生成树的问题,这里的解决方法就是先使用Prim算法求解最小生成树. 在求解最小生成树的时候 ...