前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蒲丰投针问题

蒲丰投针问题

作者头像
用户3577892
发布2020-06-10 17:20:11
1.1K0
发布2020-06-10 17:20:11
举报
文章被收录于专栏:数据科学CLUB

问题描述数学解法Python模拟

18世纪法国科学家Buffon提出的一种计算圆周率π的方法——随机投针法,就是用一枚普普通通的针就可以计算出圆周率 ,是不是很神奇,现在带着你的疑惑和我一探究竟吧。

问题描述

平面上画着一些平行线,它们之间的距离都等于 ,向此平面任投一长度为 的针,试求此针与任一平行线相交的概率.

数学解法

以 表示针的中点到最近的一条平行线的距离, 表示针与平行线的交角.针与平行线的位置关系如下图所示

显然有 ,以 表示边长为 及 的长方形.为使针与平行线相交,必须 ,满足这个关系式的区域记为 ,在图中用阴影表出,

所求的概率为

的面积的面积

由于最后的答案与 有关,因此不少人想利用它来计算 的数值,其方法是投针N次,计算针与线相交的次数n,再以频率作为概率p之值代入上式,求得

粗看这是一个笨办法,耗时费力,而且很难达到当时用数学方法已经算得小数点后一百多万位精确数值这样一个精度。但仔细思考会发现这是一个了不起的创意,他提出了一个全新的计算方案:建立一个概率模型,它与我们感兴趣的量 ——有关,然后设计随机试验,并通过实验结果来确定这些量。

历史上有不少实验者,下表给出有关资料

Python模拟

代码语言:javascript
复制
import numpy as np

def buffon(a,l,n):
# a为平行线之间的长度,n实验次数,l针的长度
    k = 0
    m = 2*l/a
    x = np.random.uniform(low=0.0,high=l/2,size=n)
    y = np.random.uniform(low=0.0,high=np.pi/2,size=n)
    for i in range(n):
        if x[i]<(a/2)*np.sin(y[i]):
            k +=1
    p = k/n
    print('圆周率为:{}'.format(m/p))
代码语言:javascript
复制
buffon(1,0.8,1000000)
代码语言:javascript
复制
圆周率为:2.19752750686384
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学CLUB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 数学解法
  • Python模拟
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档