统计模拟中有一个重要的问题就是,给定一个概率分布p(x)p(x),我们如何使用计算机生成(generate)服从该分布的样本。一般而言均匀分布Uniform(0,1)\textrm{Uniform}(0, 1)的样本相对容易生成。

1. 使用均匀分布仿真高斯分布

均匀分布比较优良的性质是,我们常见的各种概率分布,无论是连续的还是离散的分布,都可以基于Uniform(0,1)\textrm{Uniform}(0, 1)的样本生成,例如正太分布可以通过著名的Box-Muller\textrm{Box-Muller}变换得到,

定理 Box-Muller变换,如果随机变量U1,U2U_1,\,U_2独立且U1,U2∼Uniform[0,1]U_1,\,U_2\sim\textrm{Uniform}[0, 1],则

Z0=−2lnU1−−−−−−−√cos(2πU2)Z1=−2lnU2−−−−−−−√cos(2πU1)

Z_0=\sqrt{-2\ln U_1}\cos(2\pi U_2)\\Z_1=\sqrt{-2\ln U_2}\cos(2\pi U_1)
则 Z0,Z1Z_0,\,Z_1独立且服从标准正太分布。

import numpy as np
import matplotlib.pyplot as pltU1 = np.random.uniform(0, 1, 1000)
U2 = np.random.uniform(0, 1, 1000)Z0 = np.sqrt(-2*np.log(U1))*np.cos(2*np.pi*U2)cnts, bins, _ = plt.hist(Z0, 30, normed=True)
plt.plot(bins, 1./np.sqrt(2*np.pi)*np.exp(-bins**2/2), c='r', lw=2)
plt.show()

2. 使用蒙特卡洛的方法逼近π\pi

import numpy as np
N = 10000
cnt = 0
for i in range(N):x, y = np.random.uniform(0, 1, 2)if (x-1/2)**2+(y-1/2)**2 < 1/4:cnt += 1
print('sample times: {}, pi approx: {}'.format(N, 4*cnt/N))

数学与编程——统计与编程(均匀分布仿真高斯分布)相关推荐

  1. 程序员的数学3 线性代数_在编程大佬眼中,线性代数到底是什么样的?

    线性代数是什么? 在大学数学学科中,线性代数是最为抽象的一门课,从初等数学到线性代数的思维跨度比微积分和概率统计要大得多.很多人学过以后一直停留在知其然不知 其所以然的阶段,若干年之后接触图形编程或机 ...

  2. 数学建模中的常用编程软件

    从本科阶段第一次参加全国大学生数学建模竞赛,到去年9月参加第十五届中国研究生数学建模竞赛,数学建模在我本硕不到六年的时间里占据了近五年的时间.在数学建模中用过的编程软件,粗略的总结一下,大致有如下几种 ...

  3. 编程c语言要数学很好吗,编程与数学的关系:学好编程就能学好数学吗?

    原标题:编程与数学的关系:学好编程就能学好数学吗? 在大学数学学科中 线性代数是最为抽象的一门课 从初等数学到线性代数 思维跨度比微积分和概率统计要大得多 大多数小伙伴学过以后一直停留在 知其然不知其 ...

  4. 基于jupyter notebook的python编程-----通过python编程实现RSSI测距定位技术仿真

    基于jupyter notebook的python编程-----通过python编程实现RSSI测距定位技术仿真目录 一.RSSI测距定位简介 1.什么是RSSI测距定位 2.RSSI测距定位优点 3 ...

  5. 编程统计BUF字单元数据中所含1的个数,并将结果存入COUNT单元中。

    编程统计BUF字单元数据中所含1的个数,并将结果存入COUNT单元中. 代码如下: DATA SEGMENT BUF DW 2345H ;随机存储一下数据 COUNT DB ? ;用于统计BUF字单元 ...

  6. java 打印abcd_用JAVA编程统计字符串ABCD123!@#$%ab中大写字母、小写字母、数字、其它字符的个数并打印出来...

    /** * 编程统计字符串"ABCD123!@#$%ab"中大写字母.小写字母.数字.其它字符的个数并打 印出来. */ public class Job1Test { publi ...

  7. c语言数组模拟骰子6000次,单选:模拟骰子的6000次投掷,编程统计并输出骰子的6个面各自出现的概率。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。...

    单选:模拟骰子的6000次投掷,编程统计并输出骰子的6个面各自出现的概率.按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求. #include _________ #include &l ...

  8. c语言编程统计学生个数,c编程统计并显示500至800之间所有素数的总个数以及总和...

    编一个程序,输入10个整数,统计并输出其中正数.负数和零的个数.要求用C语言编程. #includemain(){intt,i,c0=0,c1=0,c2=0;for(i=0;i excel 统计某列数 ...

  9. 数学建模python实现基础编程练习4

    数学建模python实现基础编程练习4 1.使用networkx实现最短路和最短距离 import networkx as nx list1 = [(1,2,7),(1,3,3),(1,4,12),( ...

最新文章

  1. Git合并和变基简介:它们是什么,以及如何使用它们
  2. Linux环境下查PG库的慢sql,postgresql慢SQL
  3. IP地址修改后ORACLE不能使用问题
  4. Outlook通过RPC或RPC over HTTPS访问Exchane邮箱:Exchange2003系列之四
  5. pandas DataFrame 索引(二)
  6. ADO.NET Entity Framework 深入分析, Part 5
  7. 在wdos系统下搭建Dns服务器
  8. 【转】Beagleboard:BeagleBoneBlack
  9. Win11系统调节屏幕亮度的方法
  10. 微服务架构设计基础之领域驱动设计
  11. java 构造器 null_java - 主结尾处的Java构造函数用户输入在构造函数中为Null - 堆栈内存溢出...
  12. ENVI计算不同轨道号范围中的平均高程
  13. 前端五个拿来就能用的炫酷动画登录页面
  14. 家用计算机设置网络,手把手教您设置安装家庭无线网络
  15. jquery实现菜单点击左右滑动效果
  16. round函数与roundup函数
  17. 第十四届校模拟赛第一期(一)
  18. 对mtk平台的一些认识
  19. ShardingSphere笔记(一): 经验和踩坑总结
  20. Linux-scheduler之负载均衡(一)

热门文章

  1. Doris FE配置参数(全面)
  2. android edittext换行位置不变,Android EditText使用自动换行但无硬性返回
  3. vue查询列表中所有用户信息_vue实现全匹配搜索列表内容
  4. java oop试题_java oop 试题
  5. python解包wxapkg_微信小程序wxapkg解包器c++版(免装py环境 绿色90k)
  6. 2 Linux磁盘管理
  7. 分页 Paginator
  8. python学习笔记 -- map() 操作可迭代序列
  9. 在ps中画两个同心圆并且把两个同心圆进行任意角度切割
  10. Android手机分辨率基础知识(DPI,DIP计算)(转)