关于π值的计算问题
2014-08-27 21:48
204 查看
近期遇到很多用概率论求π值得问题,在此写文总结一下下。
方法一:
(2014年深度学习算法研发工程师笔试题)此方法是百度的多次面试加笔试题。看往年笔试题遇到。题目如下:
在平面上有一组间距为d的平行线,将一根长度为l(l<a)的针任意掷在这个平面上,求此针与平行线中任意一根相交的概率,用高等数学(微积分、概率的方法)求解,基于布丰投针的结论,任选一种编程语言(C/C++,
matlab, python,java),写出模拟投针实验(程序中允许把一个理想的Pi作为常量使用),求解圆周率。(15分)
其实这是很有名的普丰投针问题,用以计算圆周率π。
下面我们用数学分析的方法来证明上述实验求π的可行性:
证明:设A=‘针与某平行线相交’,针落在平面上的情况不外乎图中的几种。设x为针的中点到最近的一条平行线的距离。α为针与平行线的夹角。则
0<=x<=d/2,0<=α<=π/2,不等式确定了平面上的一个区域S。
A发生等价于x≤lsina/2 ,不等式确定了S的子域A,
所以p(A)=s(A)/s(S)这里用到了积分。直接传手写图了。因为数学类的公式真心不怎么会敲。
![](http://img.blog.csdn.net/20140827211903106?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmd5dWVodWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20140827211910265?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmd5dWVodWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
方法二:
用了很朴素的数学思想:一个正方形的内切圆,用随机数生成大于零小于1的点,落在圆内的概率是圆面积与正方形面积的比(近似)p=π/4,由于当计算次数越大,实验概率越接近理论概率,计算出的π结果值越精确。p =[ π(a/2)*(a/2)] / (a*a) 得p(近似)=π/4.
![](http://img.blog.csdn.net/20140827212240773?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmd5dWVodWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
代码:
方法三:(摘自论坛http://www.newsmth.net/nForum/#!article/IQDoor/75341)
利用随机整数互素的概率来得到π的近似值.具体过程如下.
取一大整数N,在1到N之间随机地取一对整数a,b,找到它们的最大公约数(a,b),做n次这样的实验,记录(a,b)=1的情况次数m,计算出p=m/n的值.
在Knuth的TAOCP书上有证明,我这里简述如下吧。
设两个数u,v互质的概率为p,则gcd(u,v)=d当且仅当d|u,d|v,gcd(u/d,v/d)=1。所以任
两个数最大公约数为d的概率为p/d/d,即p/(d^2)
在正整数集合上有p+p/4+p/9+……p/(n^2)+……=1,容易求得p=6/(π*π)。
参考文献:http://wenku.baidu.com/link?url=xO4CtaDw99ZtksN6sy2BUIghP-Y6y9t-T0tnXNzKooqCd3Uc6JmrKC_Bm8dgV5G9KEp8c4CeeyLYGY60ud3RtOeIISCHfRVoE***vJQWrgJ_
方法一:
(2014年深度学习算法研发工程师笔试题)此方法是百度的多次面试加笔试题。看往年笔试题遇到。题目如下:
在平面上有一组间距为d的平行线,将一根长度为l(l<a)的针任意掷在这个平面上,求此针与平行线中任意一根相交的概率,用高等数学(微积分、概率的方法)求解,基于布丰投针的结论,任选一种编程语言(C/C++,
matlab, python,java),写出模拟投针实验(程序中允许把一个理想的Pi作为常量使用),求解圆周率。(15分)
其实这是很有名的普丰投针问题,用以计算圆周率π。
下面我们用数学分析的方法来证明上述实验求π的可行性:
证明:设A=‘针与某平行线相交’,针落在平面上的情况不外乎图中的几种。设x为针的中点到最近的一条平行线的距离。α为针与平行线的夹角。则
0<=x<=d/2,0<=α<=π/2,不等式确定了平面上的一个区域S。
A发生等价于x≤lsina/2 ,不等式确定了S的子域A,
所以p(A)=s(A)/s(S)这里用到了积分。直接传手写图了。因为数学类的公式真心不怎么会敲。
方法二:
用了很朴素的数学思想:一个正方形的内切圆,用随机数生成大于零小于1的点,落在圆内的概率是圆面积与正方形面积的比(近似)p=π/4,由于当计算次数越大,实验概率越接近理论概率,计算出的π结果值越精确。p =[ π(a/2)*(a/2)] / (a*a) 得p(近似)=π/4.
代码:
public static double compute(int n) { int k=0; for(int i=0; i<=n; i++) { double x = Math.random(); double y = Math.random(); if((x*x + y*y)<=1) } return 4*k/(double)n; }
方法三:(摘自论坛http://www.newsmth.net/nForum/#!article/IQDoor/75341)
利用随机整数互素的概率来得到π的近似值.具体过程如下.
取一大整数N,在1到N之间随机地取一对整数a,b,找到它们的最大公约数(a,b),做n次这样的实验,记录(a,b)=1的情况次数m,计算出p=m/n的值.
在Knuth的TAOCP书上有证明,我这里简述如下吧。
设两个数u,v互质的概率为p,则gcd(u,v)=d当且仅当d|u,d|v,gcd(u/d,v/d)=1。所以任
两个数最大公约数为d的概率为p/d/d,即p/(d^2)
在正整数集合上有p+p/4+p/9+……p/(n^2)+……=1,容易求得p=6/(π*π)。
参考文献:http://wenku.baidu.com/link?url=xO4CtaDw99ZtksN6sy2BUIghP-Y6y9t-T0tnXNzKooqCd3Uc6JmrKC_Bm8dgV5G9KEp8c4CeeyLYGY60ud3RtOeIISCHfRVoE***vJQWrgJ_
相关文章推荐
- 求助:关于计算列的问题!!!
- 关于无线数据传输中产生的流量的一些计算方法以及问题!
- 关于JS下拉列表选择时间计算时间周期的问题解决
- 关于JavaScript中计算精度丢失的问题(二)
- 关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
- 一个关于局域网中【并行计算】的问题
- Java中几个关于日期计算的问题
- 关于浮点数计算时的精度问题
- 关于 Union,Struct and Class的大小计算问题的思考(转)&union和struct类型的大小计算(转)
- 关于EXCEL中公式复制后不自动计算的问题!
- 关于图灵机的妙文(2)——图灵机与计算问题(张江)
- C语言:关于计算字符串中空格数的问题
- 关于 贝叶斯 计算公式的一个问题
- 关于科学计算中的数值误差问题
- 关于类对象大小的 sizeof 计算问题(续)
- 关于日期计算的问题
- 关于SQL计算差值的问题
- 关于内存容量计算的问题
- 关于web直径的计算问题的解答:
- 关于机房有八台计算出现E盘无法更改盘符的问题