数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 3916|回复: 3

【讨论】用随机数模拟法求圆周率的值——有哪些具体方法

[复制链接]
发表于 2012-2-8 10:08 | 显示全部楼层 |阅读模式
[这个贴子最后由天山草在 2012/02/08 11:09am 第 8 次编辑] [color=#DC143C] 方法一:    在平面直角坐标系中画一个半径为 R = 1 的圆,在圆与 x、y 两坐标轴的四个相交点各作一条切线,四条切线围成一个正方形。    在上述正方形内随机取一个点,问:该点落入圆内的概率是多少?    显然概率 p = π* R^2/(2R * 2R) = π/4    概率的 4 倍即是圆周率的值。    以下用编程模拟:    编程思路——先产生一个随机数 x 在 -1 至 +1 之间。再产生一个随机数 y 在 -1 至 +1 之间。统计点(x,y)落在圆内的次数与总试验次数的比,当总次数很大时,就得到所求的概率。如何知道那个点是落在圆内了呢?很简单,只要 x^2 + y^2 小于 1 ,就是在圆内。    程序如下:     m = 0  ';总试验次数     n = 0  ';试验点落在圆内的次数     For i = 1 To 100000000   '; 试验 1 亿次      m = m + 1      x = 2 * Rnd - 1 ';产生 -1 至 +1 之间的随机整数      y = 2 * Rnd - 1 ';产生 -1 至 +1 之间的随机整数      If x ^ 2 + y ^ 2 <= 1 Then n = n + 1     Next i     pi = 4 * n / m   ';统计结果     Print pi         ';打印结果   程序运行结果: π≈ 3.14158848 [color=#DC143C] 方法二:    在平面上画许多间隔距离等于 2 的平行线,用一根长度等于 1 的针从高处往这个平面上投放。共投针 N 次,其中与任一条平行线相交的次数为 n 次。当试验次数足够多时,N/n 的值就大约等于圆周率之值。[color=#FF00FF]    这个模拟程序如何编写?我还没有想出个头绪。    下面是从网上摘来的——布丰用投针法得出圆周率的故事:    1777年的一天,法国科学家布丰的家里宾客满堂,原来他们是应主人的邀请前来观看一次奇特试验的。    试验开始,但见年已古稀的布丰先生兴致勃勃地拿出一张纸来,纸上预先画好了一条条等距离的平行线。接着他又抓出一大把原先准备好的小针。然后布丰先生宣布:“请诸位把这些小针一根一根往纸上扔吧!不过,请大家务必把扔下的针是否与纸上的平行线相交,以及相交的次数告诉我。”    客人们不知布丰先生要玩什么把戏,只好客随主意,一个个加入了试验的行列。一把小针扔完了,把它捡起来再扔。而布丰先生本人则不停地在一旁数着、记着,如此这般地忙碌了将近一个钟头。最后,布丰先生高声宣布:“先生们,我这里记录了诸位刚才的投针结果,共投针2212次,其中与平行线相交的有704次。总次数2212与相交次数704的比值为3.142。”说到这里,布丰先生故意停了停,并对大家报以神秘的一笑,接着有意提高声调说:“先生们,这就是圆周率π的近似值!”    客人们一片哗然,议论纷纷,大家全都感到莫名其妙:“圆周率π?这可跟投针半点也不沾边呀!”    布丰先生似乎猜透了大家的心思,得意洋洋地解释道:“诸位,这里用的是概率的原理,如果大家有耐心的话,再增加投针的次数,还能得到π的更精确的近似值呢。” 那么,“布丰投针实验”的依据究竟是什么呢?    一根针往【一组平行线】上投放时,针上的任意两点正好落在平行线上的“概率”是相同的。如果这根针不太直,是明显弯曲的,上述结论仍然正确。这就是概率论中的“机会均等原理”。    按照这个原理,假设那组平行线的间距等于d,如果把一个直径为d的铁丝圆圈(它的周长等于πd)往平面上扔,无论圆圈落在哪里,都会跟平行线有两个交点。因此,如果圆圈扔下的次数为n,交点的总数必定是2n。    现在把铁丝圈剪开拉直,变成长度是πd的一根针。用这根针进行投针试验时,针与平行线相交的情形就复杂多了:交点数可能有4个、3个、2个、1个,也可能一个交点也没有。不过,如果只统计总的交点数,就不用每种情况逐个分析统计,再最后汇总相加。这是由于,圆圈的周长跟“长针”的长度相同,根据概率论的“机会均等原理”,这根“长针”扔下n次时,与平行线相交的交点总数也应该大致为2n 个。    现在把“长针”剪短到原长的k分之一,变成长度是πd/k时,则扔针n次,交点总数就会按比例减小到2n/k个,没错吧?这时,投针总次数/交点数 = k/2。    令针的长度πd/k = d/2,也就是等于平行线间隔距离的一半,则 k=2π,此时,投针总次数/交点数 = k/2 = 2π/2 =π。    因此,布丰先生玩的把戏就是,让针的长度等于平行线间隔距离的一半,则投针总次数与相交次数之比就是圆周率的值了。
 楼主| 发表于 2012-2-8 20:33 | 显示全部楼层

【讨论】用随机数模拟法求圆周率的值——有哪些具体方法

[这个贴子最后由天山草在 2012/02/08 08:34pm 第 2 次编辑]

期望能写出“投针求圆周率”程序的网友,能将其程序展示出来,大家互相交流交流。
发表于 2012-2-8 22:36 | 显示全部楼层

【讨论】用随机数模拟法求圆周率的值——有哪些具体方法

[这个贴子最后由luyuanhong在 2012/02/08 10:42pm 第 1 次编辑]
下面引用由天山草2012/02/08 08:33pm 发表的内容:
期望能写出“投针求圆周率”程序的网友,能将其程序展示出来,大家互相交流交流。

投针试验相当于在一个[0,π]×[0,1]的长方形区域中随机投点 (x,y) ,统计
满足 y≤sinx 的点数,与总的投点数之比,所以很容易编写出一个计算机模拟程序:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2012-2-8 23:20 | 显示全部楼层

【讨论】用随机数模拟法求圆周率的值——有哪些具体方法

[这个贴子最后由天山草在 2012/02/08 11:20pm 第 1 次编辑]

谢谢陆教授的精彩分析!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-7-23 05:30 , Processed in 0.094723 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表