最近找工作看了许多面经,其中看到了重复出现多次的问题:

使用概率论计算π

因此,查找并推导了如下可两种方法,具体如下:

目录

1.投针法:

1.1实验数据

1.2Python模拟程序

2.圆周法

2.1Python模拟程序

1.投针法:

------引自百度百科:蒲丰投针问题

18世纪,布丰提出以下问题:设我们有一个以平行且等距木纹铺成的地板(如图),现在随意抛一支长度比木纹之间距离小的针,求针和其中一条木纹相交的概率。并以此概率,布丰提出的一种计算圆周率的方法——随机投针法。这就是蒲丰投针问题(又译“布丰投针问题”)。

这一方法的步骤是:
1) 取一张白纸,在上面画上许多条间距为a的平行线。
2) 取一根长度为l(l≤a) 的针,随机地向画有平行直线的纸上掷n次,观察针与直线相交的次数,记为m。
3)计算针与直线相交的概率

令事件A=‘针与某条平行线相交’,那么针与平行线相交的情况也就上图的几种形式,设h为针重点到最近的一条平行线的距离,且线相交的角度为a,针与平行线的交点到中点的距离为k,那么明显的有:

因此就可以得到事件A发生的条件等价于:dis <= l*sin(deg),CSDN的公式输入真是难用!具体的推导我直接手写了~~

1.1实验数据

试验者

时间

投掷次数

相交次数

圆周率估计值

Wolf

1850年

5000

2532

3.1596

Smith

1855年

3204

1218.5

3.1554

C.De Morgan

1860年

600

382.5

3.137

Fox

1884年

1030

489

3.1595

Lazzerini

1901年

3408

1808

3.1415929

Reina

1925年

2520

859

3.1795

1.2Python模拟程序

'''
===========================================@author:  renjiaxin         @time:    2018/8/30 0030   16:33
===========================================
'''import random
import mathdef puf(n, l=0.6, a=1):''':param l: 针的长度:param a: 横线之间的间距:param n: 实验的次数:return: 圆周率π'''# 相交次数m = 0for i in range(n):# 针的中点与最近的线的距离dis = random.uniform(0, a / 2)# 针与线相交的度数deg = random.uniform(0, math.pi)if dis <= (l / 2) * math.sin(deg):m += 1return (2 * l * n) / (a * m)pi = puf(1000000)

可以看到程序求得π=3.1413088739855306,利用更大的实验次数可以得到更加精确的π值

2.圆周法

该方法利用一个正方形的内切圆,用随机数生成随机点,落在圆内的概率是圆面积与正方形面积的比。具体如下:

设圆的半径为r,面积为S0;则正方形边长d=2r,面积为S1;那么事件A=‘随机点落在圆内’的概率P(A)=S0/S1,则有:

,由此可推出:

2.1Python模拟程序

'''
===========================================@author:  renjiaxin         @time:    2018/8/30 0030   14:16
===========================================
'''
import randomdef pai(x):''':param x: 实验次数:return: 圆周率π'''cir = 0for i in range(x):a = random.uniform(0, 1)b = random.uniform(0, 1)if a**2 + b**2 <= 1:cir += 1return 4 * cir / xpi = pai(1000000)

可以看到程序求得π=3.14187976,利用更大的实验次数可以得到更加精确的π值

概率论计算圆周率(π)相关推荐

  1. bbp公式求圆周率、python_【并行计算】六种方法计算圆周率

    计算π的历史 圆周率π可能是科学界内外最广为人知的自然常数了.早在公元5世纪时,南朝宋数学家祖冲之用割圆法将圆周率计算到小数点后7位数字.大约同一时间,印度的数学家也将圆周率计算到了小数点后5位.历史 ...

  2. python计算圆周率_python模拟蒙特·卡罗法计算圆周率

    蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题. 假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x, ...

  3. Hadoop安装配置,并使用Hadoop计算圆周率测试Hadoop是否安装成功

    一.实验目的 掌握如何安装.配置和运行Hadoop,并使用Hadoop计算圆周率测试Hadoop是否安装成功. 二.实验环境 (1)Linux Ubuntu 16.04 (2)jdk-8u162-li ...

  4. 用Machin公式计算圆周率的源程序

    用Machin公式计算圆周率的源程序 /* Program to compute PI, by Jason Chen, May 1999 ** ** Open VC++ IDE, new a win3 ...

  5. 用Python解“计算圆周率”题

    7-15 计算圆周率 根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值. ​​π/2=1 + 1 / 3 + 2! / (​3×5) + 3! / (3×5×7) +⋯+ n! / (3×5 ...

  6. UA MATH564 概率论 计算至少有一个发生的概率:容斥原理与庞加莱公式

    UA MATH564 概率论 计算至少有一个发生的概率:容斥原理与庞加莱公式 事件的并的Poincare公式 事件的交的Poincare公式 上一讲介绍了P(⋃i=1nAi)P(\bigcup_{i= ...

  7. UA MATH564 概率论 计算至少有一个发生的概率:Boole不等式

    UA MATH564 概率论 计算至少有一个发生的概率:Boole不等式 Boole不等式 Gunias不等式 钟开莱-艾尔迪希(Chung-Erdos)不等式 概率作为一种特殊的测度,满足有限可加性 ...

  8. matlab或_如何利用MATLAB计算圆周率

    圆周率是圆的周长与直径的比值,一般用希腊字母π表示,是一个在数学及物理学中普遍存在的数学常数.π也等于圆形之面积与半径平方之比.是精确计算圆周长.圆面积.球体积等几何形状的关键值. MATLAB中的表 ...

  9. 【Python】蒙特卡罗方法计算圆周率及给定随机数种子

    蒙特卡罗方法 利用随机点分布,让随机点足够的多,用指定区域随机点数与总区域随机点数做比值来求取指定区域面积 求解圆周率,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值. 代码 ...

最新文章

  1. 什么?分布式事务现在不是都在用么?你还不会?
  2. typedef 函数指针
  3. 对象不支持“abigimage”属性或方法
  4. 设计模式系列6:适配器模式(Adapter Pattern)
  5. 关于站库分离渗透思考总结
  6. c++虚函数的前奏--函数指针与回调
  7. 条件编译#ifdef 和#endif
  8. 小程序显示服务器开小差,小程序提交一直显示网络错误,网络开小差,请刷新重试,切换网络也上不去,请问是?...
  9. 的mvc_浅谈MVC
  10. QT连接MySQL记录
  11. 对香草冰淇淋过敏的汽车
  12. XP Mod Android6,手机瞬间变电脑 主题软件XP MOD有惊喜
  13. 计算机编程游戏本还是商务本,游戏本和商务本哪个比较适合编程?
  14. 中职网络安全大赛攻防阶段加固(仅供参考!!!)
  15. mysql入门 博客园_FreeSql (一)入门 – FreeSql – 博客园
  16. TFS映射关系出错的几种
  17. api接口—淘宝搜索
  18. 音频LC3编码算法资料
  19. 变分法求解两点间直线距离最短
  20. 在虚拟机里配置mysql环境

热门文章

  1. git常用命令及常见问题
  2. Python3读写txt文件
  3. Matplotlib绘制图片——膨胀算法
  4. java全国二级考点,java计算机全国二级考试时间
  5. Unity接入高德SDK实现定位
  6. -1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常...
  7. 构造方法--带参构造方法
  8. Win10远程桌面出现身份验证错误,由于CredSSP加密Oracle修正 解决方法
  9. 【学习笔记】stm32+ESP8266+阿里云+云智能APP
  10. 大端模式和小端模式的判别!