c语言数组中点法则求圆周率,概率论计算圆周率(π)

1.投针法:

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

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

这一方法的步骤是:l

1) 取一张白纸,在上面画上许多条间距为a的平行线。

2) 取一根长度为l(l≤a) 的针,随机地向画有平行直线的纸上掷n次,观察针与直线相交的次数,记为m。

3)计算针与直线相交的概率

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

5d9a57d17c5c1411d1861a7fbbb76f68.png

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

652ce85827166007b3dafe0f6259c43e.png

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 math

def puf(n, l=0.6, a=1):

'''

:param l: 针的长度

:param a: 横线之间的间距

:param n: 实验的次数

:return: 圆周率π

'''

# 相交次数

m = 0

for i in range(n):

# 针的中点与最近的线的距离

dis = random.uniform(0, a / 2)

# 针与线相交的度数

deg = random.uniform(0, math.pi)

if dis <= (l / 2) * math.sin(deg):

m += 1

return (2 * l * n) / (a * m)

pi = puf(1000000)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值