网站首页 | 站长视频 | 往昔追忆 | 浮光掠影 | 科学园地 | 技术广角 | 笑傲江湖 | 翻译作品 | 站长微博 | 评论选录 | |||||||||||||
Welcome to Changhai Lu's Homepage |
圆周率两则
:: 前一篇主题:关于科普量子力学的建议 ::
lifubo 发表文章数: 522 |
圆周率两则 [文章类型: 原创]
第一个问题,圆周率的密率为355/113.
因为355/113=3.14159292. 所以,我们一般认为圆周率的密率给出了前7个有效数字,即3.141592 但是不一定如此。 如果以3.1416作为圆周率的近似值,作连分数展开,得到 第一位3,余0.1416; 求其倒数得1/0.1416=7.062,取整数部分得连分数第二位7,余数0.062; 继续求倒数得1/0.062=16.1,取整数部分得连分数第三位16. 因此得到一个连分数[3;7,16,...]. 取连分数的前三项,即为3+1/(7+1/16)=355/113,亦即密率。 也就说,如果我们求出圆周率的近似值3.1416,则由此所得连分数前三项的值为355/113,即密率。 简而言之,3.1416和圆周率的连分数展开的前三项是相同的,而且刚好给出密率。 所以,圆周率的密率很可能不是由近似值的前7个有效数字算出来的,而是由前5个有效数字得到的,只不过由此所得的表达式的前7个有效数字刚好又与圆周率真值的前7个有效数字相同。
|
||
River 发表文章数: 85 |
Re: 圆周率两则 [文章类型: 混合]
有趣。
|
||
lifubo 发表文章数: 522 |
Re: 圆周率两则 [文章类型: 原创]
第二个问题:蒲丰投针问题。
先简述蒲丰投针问题如下。 1,取一张白纸,在上面画上许多条间距为a的平行线。 2,取一根长度为b(b<a)的针,随机地投掷n次,设针与直线相交的次数为m,于是可知相交的频率为m/n. 3,理论上针与直线相交的概率为P=2b/(a\pi). 其中\pi=3.14159...为圆周率。 由于频率近似等于概率,故可得m/n=2b/(a\pi). 即\pi=2bn/(ma),这样我们通过概率统计方法得到了圆周率的一个近似计算公式。 不妨设平行线的间距为a=1.故\pi=2bn/m. 这个公式通常也作为蒙特卡洛方法的的一个介绍。通常会接着介绍一个故事:由蒲丰公式得到的高度精确的圆周率。 1901年,意大利数学家Lazzerini作了蒲丰投针试验,其中,平行线间距为1,针长5/6,共投针3408次,相交1808次。由此给出圆周率\pi的近似值为3.1415929,准确到小数后6位。顺便说一句很多书都搞错了一点,就是将针长5/6换算成了0.83. 由此可知\pi=2*5/6*3408/1808,由此可得上述近似值。 下面要说明这个数据根本不可信。 首先,\pi=2bn/m仅仅是一个近似公式,而且是带有概率的,根本不是等号。严格一点,应该将\pi写成\pi^表示这是一个有统计得到的估计量。 公式中有3个量: 其一,\pi的估计值\pi^和真实值之间的偏差,我们用c=|\pi^ - \pi|来表示这个偏差。也可以说c表示精确度。 其二,试验的次数,即投针的次数n. 其三,没有明显给出的量,即蒲丰公式的可靠性,即估计值的可靠程度,即P{|\pi^ - \pi|<c},记作r. 也就是区间估计的置信水平。 (1),给定试验的次数n=3408,置信水平r=0.95,容易算出,精确程度大约为c=0.1.即实际上只有2位有效数字,以及估计值虽然算出来等于3.1415929,但是实际上只有3.1是可靠的。 (2),给定试验次数n=3408,由此得到的\pi的近似值有6个有效数字的可靠性也容易算出来,非常小,只有10%. 也就是说Lazzerini的估计值可以说完全不可靠、不靠谱。实际上,仅仅精确到小数点后两位,即得到估计值3.14,Lazzerini的3408次试验给出的可靠性都是非常低的。 (3),假设我们要以95%的可靠性得到\pi的近似值的前7个有效数字,可以算出需要的试验次数,亦即投针的次数的数量级为n=10^13. 简而言之,虽然Lazzerini表面上得到了\pi的有7位有效数字的近似值,但是,他的结果非常不可靠。有这样几种可能性:或者Lazzerini根本没有做投针试验;或者他做了3408次试验,极其偶然地有1808次相交;或者,他的投针试验每一轮都进行3408次,其中又一轮试验刚好有1808次相交,他只报告了这一轮试验。 下面分析,为什么Lazzerini要做这么多次试验。 将Lazzerini的数据代入蒲丰公式可知, \pi^=2*5/6*3408/1808, 化简可知即为 \pi^=355/113. 刚好就是圆周率的密率。 据此我们可以还原Lazzerini是怎么做假的:他正是根据圆周率的密率来设计他的“试验”,以达到一个惊人的结果。 我们要么承认Lazzerini造假,要么认为他估计的圆周率其实只有2为有效数字3.1.
|
||
dfj 发表文章数: 282 |
Re: 圆周率两则 [文章类型: 原创]
假设每投一根针就根据到目前为止的相交率算一次圆周率,到得出的圆周率小数点后六位正确时停止,那么,平均需要的投针次数是多少?
|
||
dfj 发表文章数: 282 |
Re: 圆周率两则 [文章类型: 原创]
搞了一个小小的蒙特卡洛试验。
用ipython notebook的同学可以直接把下面的代码拷过去运行。欢迎挑bug。 做20次Lazzarini试验,每次投针次数不超过5000,结果发现,在20次中有4次算出的圆周率误差不超过百万分之一,且在这四次“成功”试验里,最少只需要两百来次投针就可以了。 下面是挑出来的成功率很高的输出,三个数字的含义是(投针次数,相交次数,算出的pi): (2769, 1469, 3.1415929203539825) (2130, 1130, 3.1415929203539825) (639, 339, 3.1415929203539825) (213, 113, 3.1415929203539825) (3834, 2034, 3.1415929203539825) (1704, 904, 3.1415929203539825) %pylab inline def one_throw(b): '''Assume a=1, hence b=b/a is the ratio between the length of the needle and the separation between the lines.''' zcen = rand() angle = pi*rand() delz = b/2*sin(angle) if delz >= zcen or delz >= (1.0-zcen): return True else: return False def one_Lazzarini_trial(b,n,eps=1e-6): c_cross = 0 for i in xrange(n): if one_throw(b): c_cross += 1 this_pi = double(2.0)*b*double(i)/double(c_cross) if abs(this_pi-pi) < eps: return i, c_cross, this_pi ############################# b = double(5)/double(6) n = 5000 for i in xrange(20): res = one_Lazzarini_trial(b, n, 1e-6) if res != None: print res
|
||
dfj 发表文章数: 282 |
Re: 圆周率两则 [文章类型: 原创]
楼上的python代码格式乱了。
可以在下面的链接看到 nbviewer.ipython.org/urls/dl.dropbox.com/s/fegqy0yzk6g36jc/20140507-Buffon_s%20needle-Pi.ipynb?create=1
|
||
dfj 发表文章数: 282 |
Re: 圆周率两则 [文章类型: 原创]
投针213次,相交次数平均为113次,标准差为7次,也就是说,大致只需要重复十来次这个实验,每次投针213次,就会碰巧有一次得到精确到小数点后6位的圆周率值,总共需要的投针次数约2000。不妨一试。
|
||
lifubo 发表文章数: 522 |
Re: 圆周率两则 [文章类型: 原创]
我前两个帖子中的计算是用中心极限定理作的近似计算,其中有一个写错了,但不影响结论。这个写错的地方是说:给定试验次数n=3408,由此得到的\pi的近似值有6个有效数字的可靠性也容易算出来,非常小,只有10%.其实概率更小,不到10%,只有1%.
也可以直接用二项分布来计算。 3408次试验,要得到pi的精确到0.01的近似值,则相交次数m需要介于1804--1824之间。而3408次试验中相交次数介于上述两个值之间的概率为三分之一左右。 再说一个理由。假设我们进行了3408次试验,相交也刚好为1808次。如此得到pi的近似值为3.1415929.好了,我们再做一次试验,即总共3409次试验,若最后一次投针是相交的,则由蒲丰公式得到pi的近似值为2*5/6*3409/1809=3.1408;若不相交则由蒲丰公式得到pi的近似值为2*5/6*3409/1808=3.1425.但是我们知道,随着试验次数的增加,所得近似值的精确程度应该越来越高。但是,很不幸,Lazzerini的结果不满足这一条。 3408次试验,97.5%的情况下相交次数介于1751--1864之间,如此所得pi的值介于3.04--3.24之间。 dfj网友的模拟试验和我的说法并不矛盾。因为我们讨论的是两个本质上不同的问题。我讨论的是蒲丰投针方法的可靠性,dfj网友讨论的是蒲丰试验的偶然结果--刚好凑巧等于pi的近似值。 若试验次数为n=213,则相交次数为m=113的概率为0.055. 故213次投针试验平均需要投针1/0.55=18轮就可以得到一次113次相交的情形。 显然若只投针213次就给出pi的近似值3.1415929,这是非常不可信的,恐怕没有人会相信。为了掩盖这个次数213太小的问题,于是就增加投针的次数,就是按照 213:113的比例增加试验次数n和相交次数m. 如果我们不是事先就知道pi的值,那么,没有人会相信3408次试验能给出精确到10^{-6}的近似值。Lazzerini计算出来的近似值其实是作弊的结果。 dfj网友的模拟可以这样说:为了得到一个作弊的结果,刚好等于pi的前七位有效数字,需要多少次试验。简而言之,就是最佳的作弊次数问题,即:最少多少次试验就可以达到作弊的效果?
|
||
dfj 发表文章数: 282 |
Re: 圆周率两则 [文章类型: 原创]
如果把Lazzarini实验看成一个数学魔术而不是骗局,其实挺有意思的。不知道他提出这个东西的目的是什么,是为了娱乐,还是认真的?
从这篇文章看: www.jstor.org/discover/10.2307/2690682?uid=3739728&uid=2&uid=4&uid=3739256&sid=21104133224783 似乎Lazzarini并不是为了娱乐,真有不少人被骗了。 那篇文章的作者还说Lazzarini可能真做了实验。做18次每次投213次实验成功的几率为0.3,但实验次数增加至无穷时成功几率并不趋近于1(具体数字作者也不知道),所以运气不好的话可能永远得不到精确的355/113。涉及的证明并不简单。 不过到后面作者又说Lazzarini可能确实造假了,因为Lazzarini给的表格里的数字太接近期望值,缺乏应有的涨落。 作者还列举了“优化”Lazzarini骗局的几种可能性,在提高欺骗性和/或得到更高精度的Pi。比如采用长度为7.1厘米的长针以及宽度为10厘米的格子会显得比较“自然”。 如果用长度为5.492厘米的针和宽为6.643厘米的格子,则每投19次就有可能得到精度为百亿分之一的圆周率值。 最后作者说当代的造假者比Lazzarini更牛了,会人为加入涨落。 我觉得在自然科学中确实需要警惕Lazzarini式的骗局,很多时候这些骗局甚至是无意的。 比如某个理论预言了某个物理量的值,然后做实验的就会去测这个值。一开始不对,找原因发现是某个仪器没调好,或者某个实验量忘了修正,如此不断实验直到测出的值跟理论预言一致,然后就停止实验了。这种做法至少在表面上看来跟上面的Lazzarini骗局是类似的。 在现在这个实验成本越来越高,实验过程和数据处理越来越复杂,重复实验很少或者没有的时代,我觉得尤其需要注意这种有意无意的骗局。比如最近的BICEP2测出的引力波张量模,就有人觉得这个结果似乎太好了。具体如何,拭目以待。
|
:: 新用户注册 | 用户登陆 | 回复 | 刷新 :: |
您尚未登陆 | 用户登陆 |