#### 原理见下图:
被称为利用投飞镖的方法求PI
![circle pi](http://www.yinqisen.cn/wp-content/uploads/2015/11/toubiaopi.jpg)
#### 以下总结选自其他网友:
1. Figure2是Figure1的右上角的部分。
2. 向Figure2中投掷飞镖若干次(一个很大的数目),并且每次都仍在不同的点上。
3. 如果投掷的次数非常多,Figure2将被刺得“千疮百孔”。
4. 这时,“投掷在圆里的次数”除以“总投掷次数”,再乘以4,就是PI的值!(具体的推导过程参见原文)
在这个算法中,很重要的一点是:如何做到“随机地向Figure2投掷”,就是说如何做到Figure2上的每个点被投中的概率相等。
有人总结了一下,这个实际上叫做蒙特卡洛算法,我们取一个单位的正方形(1 x 1) 里面做一个内切圆(单位圆),则 单位正方形面积 :内切单位圆面积 = 单位正方形内的飞镖数 : 内切单位圆内的飞镖数 ,通过计算飞镖个数就可以把单位圆面积算出来, 通过面积,在把圆周率计算出来。 注意 ,精度和你投掷的飞镖次数成正比。
#### 我的PHP源码实现:
PHP自带的mt_rand随机函数偏差较大,换成Halton sequence的方法,测试结果见后面
~~~.php
<?php
$count = 0;
// 忍受不了运算时间,可以把$num 改小
// $num 越大,越接近真值
$num = 100000;
for ($i = 0; $i < $num; $i++) {
// list($x, $y) = array(mt_rand(0, 10000), mt_rand(0, 10000));
// $x /= 10000; $y /= 10000;
$x = halton($i, 3);
$y = halton($i, 7);
if (($x*$x + $y*$y) < 1) {
$count++;
}
}
$pi = 4.0 * $count / $num;
echo $pi."\n";
// 参考Halton sequence
// https://en.wikipedia.org/wiki/Halton_sequence
function halton($index, $base) {
$result = 0;
$f = 1;
$i = $index;
while ($i > 0) {
$f /= $base;
$result += $f * ($i % $base);
$i = floor($i / $base);
}
return $result;
}
~~~
源码中halton传入参数是经过几次调整后的,更精确一些,测试PI = 3.14156
mt_rand误差较大,3次结果如下:
mt_rand-1 => 3.142904
mt_rand-2 => 3.143196
mt_rand-3 => 3.139312
转自:http://www.yinqisen.cn/blog-676.html
分享到:
相关推荐
概率算法及其实现 概率算法是一种常用的数值方法,用于计算复杂的数学问题。通过随机数生成和统计方法,可以近似计算积分、概率分布和其他数学对象。本文将详细讲解概率算法的原理、分类和实现方法,并给出多个实例...
9. 最简二次根式:问题9涉及到最简二次根式,最简二次根式要求根号内的表达式不含平方因子,a的最小正整数解需要满足此条件。 10. 极差:问题10中的极差是统计学中的概念,表示一组数据的最大值与最小值之差,用来...
- 对于二维型的几何概率问题,例如投镖击中圆形区域的概率,可以通过生成两组均匀随机数作为点的坐标,统计落在目标区域内的点的比例来估算概率。 7. **模拟法步骤** - 一般包括:生成随机数,进行必要的坐标变换...
- 第10题涉及几何概率,某人向圆内投镖,投中正方形区域的概率是正方形面积与圆面积之比。 - 第16题,小鱼被取到的概率是任意取1升水时包含小鱼的概率,即0.1。 4. **数学应用**: - 第11题是数论问题,涉及到数...
2. **概率计算**:例如第2题,要求至少有一个白球的概率,可以使用排除法,即1减去没有白球的概率。第9题,求一白一黑的概率,可以通过组合数来计算。 3. **程序框图**:题目中的6、7、11题涉及到程序框图,这是...
解答时,可以运用排除法、特值法、图形分析等策略。例如题目1和2可以通过直接计算或者理解题意来确定答案。 2. **分层抽样**:在统计学中,分层抽样是根据总体的某些特征将其分为几个部分,然后从每个部分中按照...
7. 圆内的概率问题,投镖入圆内并投中正方形区域的概率,需要理解圆和正方形的相对面积来计算。 8. 递归程序的执行结果,涉及到循环和变量的更新,输出结果与具体编程语言的规则有关。 9. 广告费与销售额的线性...
具有各种动作(跳跃、二段跳、躲避、投镖等)的忍者玩家角色 动画使用精灵表图像,可以轻松重新设计角色皮肤 使用tilemap创建的关卡 用于购买物品、升级玩家、访问 IAP 和删除广告的商店系统 能够通过UnityAds/Admob...
投镖击中阴影部分的概率可以通过几何面积比来计算,即阴影部分的面积除以木板总面积。 6. **线性代数**:第6小题涉及到向量的数量积,需要计算两向量的点积,然后与两向量的模长进行比较。 7. **立体几何**:第7小...
14. 第二题是几何概率问题,要求计算投镖击中特定图形区域的概率,需要利用面积比来求解。 15. 第十五题的内容没有给出,但根据之前的题型,可能是继续考察概率或统计相关的知识。 以上就是从题目中提取出的计数...
1. 理解与应用:在具体的游乐场场景中,深化学生对乘法和除法的理解,使他们能够在实际问题中运用这些运算。例如,学生可能需要计算乘坐旋转木马的总费用,或者根据游乐设施的开放时间安排游玩计划。 2. 口头表达:...
参与者需遵守规则,如双脚禁止同时离地、不得跨越投镖线等,以确保比赛公平公正。 3. 自助烧烤是活动的核心,提供不限量的烧烤食材和啤酒小吃,鼓励来宾自行动手,增进互动性。 4. 演艺节目和抽奖环节将贯穿整个活动...
9. 投镖游戏的概率计算涉及到面积比例,阴影部分的面积除以总面积。 10. 点P坐标满足(x-2)²+(y-2)²≤4,这是圆心在(2,2),半径为2的圆内的点,需要计算在|x|≤2, |y|≤2这个正方形内,满足圆内条件的点的比例。 ...
体育课是小学生最喜爱的课程之一,它结合了趣味性和自由性,能够满足孩子们活泼好动的天性。通过体育游戏的教学方式,教师能够激发学生对体育学习的热情,进而提升他们的身体素质。本文将深入探讨体育游戏在小学体育...
课件通过实例,如投圈游戏和投镖游戏,帮助学生理解这些概念,并给出了练习,如画图判断点与圆的位置关系,以及根据半径和点到圆心的距离来确定点是在圆内、圆上还是圆外。 最后,课件给出了例题,比如判断点P、A、...
- Scilab语言:能够生成0到1之间或指定范围a到b之间的随机数,通过不同的函数实现。 3. **几何概型**:几何概型是概率模型的一种,其特点是事件发生的概率与其在空间中的尺寸成比例。尺寸可以是长度、面积或体积。...
3. 这是一道概率题,考察的是圆内投镖击中特定区域的概率计算,需要用到几何概率的知识。 4. 题目给出了线性回归方程,求解p的值,需要掌握线性回归模型的建立和参数估计方法。 5. 双曲线的性质及标准方程是这道题...
- 在游戏中,如甲乙两人投镖游戏,要判断游戏是否公平,要看两个区域面积是否相等,或者两色区域的比例是否对应获胜概率相等。 - 转盘游戏的成功机会取决于转盘上蓝色区域的面积,而不只看转盘的大小。 通过这些...
- 投镖游戏中的公平性问题可以通过将人排成圆形队列来确保每个人投掷的距离相等。 - 车轮设计成圆形的原因在于,只有这样,无论车轮滚动到何处,其边缘上的任何一点到轴心的距离(半径)保持不变,从而保证车辆...