均匀随机数生成

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

  例如,我们现在有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. 「NGK每日快讯」2021.2.11日NGK公链第100期官方快讯!

  2. 聚焦 2021 NGK 新加坡区块链技术峰会,探讨DeFi未来新生态!

    2021年1月31日14时,备受行业关注的"2021 NGK 新加坡区块链技术峰会"如期举行.本次峰会由NGK官方主办,以"DeFi"为主题,探讨了区块链技术革 ...

  3. Python学习笔记_生成验证码

    import random def verification_code(): num = [str(x) for x in range(10)] # 列表生成器0-9 upper = [chr(x) ...

  4. JUnit5学习之三:Assertions类

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. SpringBoot+Vue豆宝社区前后端分离项目手把手实战系列教程02---创建后端工程

    本节代码开源地址 代码地址 项目运行截图 搭建后端工程 0.导入sql 在数据库导入 /* Navicat Premium Data Transfer Source Server : localhos ...

  6. java 阿里云短信发送

    记录自己的足迹,学习的路很长,一直在走着呢~ 第一步登录阿里云的控制台,找到此处: 点击之后就到此页面,如果发现账号有异常或者泄露什么,可以禁用或者删除  AccessKey: 此处方便测试,所以就新 ...

  7. JavaWeb之servlet管理机制

    一.什么是Servlet 简单的说,浏览器发出请求到tocat服务器,服务器就会初始化一个servlet实例(servlet采取生命托管的方式实现单例,不存在时才会创建实例),servlet示例会启动 ...

  8. 1.3.1 apache的配置(下)

    (1)httpd.conf的配置 使用文本编辑工具(推荐使用Editplus.UltraEdit等工具),打开httpd.conf. 其中,行首为#的部分为注释部分,不会被apache服务器程序进行读 ...

  9. 二叉树、平衡二叉树、红黑树、B树、B+树与B*树

    转: 二叉树.平衡二叉树.红黑树.B树.B+树与B*树 一.二叉树 1️⃣二叉查找树的特点就是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大,如图: 基于二叉查找树的这种特点,在查找某个节点 ...

  10. 002-LED闪烁

    LED闪烁 功能:控制LED模块的小灯闪烁 #include<reg52.h> // 头文件 sbit LED = P2^0; // LED接低电平 void main() //主函数 { ...