蒲丰投针 ―― Monte Carlo 算法 背景: 蒙特卡罗方法(Monte Carlo),也称统计模拟方法,是在二次世界大战期间随着科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为基础的一类非常重要的数值计算方法。蒙特卡罗方法在应用物理、原子能、固体物理、化学、生态学、社会学以及经济行为等领域中得到广泛利用。 蒙特卡罗方法的名字来源于世界著名的赌城 —— 摩纳哥的蒙特卡罗。其历史起源可追溯到1777年法国科学家蒲丰提出的一种计算圆周的方法 —— 随机投针法,即著名的蒲丰投针问题。 问题: 设在平面上有一组平行线,间距为d,把一根长L的针随机投上去,则这根针和平行线相交的概率是多少?(其中 L < d ) 分析:由于 L < d,所以这根针至多只能与一条平行线相交。设针的中点与最近的平行线之间的距离为 y,针与平行线的夹角为 (0 )。 相交情形 不相交情形 易知针与平行线相交的充要条件是: yx由于y[0, Lsin 21d], [0, ],且它们的取值均2满足平均分布。建立直角坐标系,则针与平行线的相交条件在坐标系下就是曲线所围成的曲边梯形区域(见右图)。所以有几何概率可知针与平行线相交的概率是 p 0Lsin d2L2 1dd21 Monte Carlo方法: 随机产生满足平均分布的 y 和 ,其中y[0, 1d], [0, ],判断 y 是否在曲边2梯形内。重复上述试验,并统计 y 在曲边梯形内的次数 m,其与试验次数 n 的比值即为针与平行线相交的概率的近似值。 clear; n = 100000; L = 1; d = 2; m = 0; for k = 1 : n theta = rand(1)*pi; y = rand(1)*d/2; if y < sin(theta)*L/2 m = m + 1; end end fprintf('针与平行线相交的概率大约为 %f\n', m/n) 计算π的近似值 利用该方法可以计算 的近似值: p0Lsin d2Lm2nL2 1dnmdd2年代 1850 1855 1680 1884 1901 1925 投掷次数 5000 3204 600 1030 3408 2520 相交次数 2531 1219 383 489 1808 859 圆周率估计值 3.1596 3.1554 3.137 3.1595 3.1415929 3.1795 下面是一些通过蒲丰投针实验计算出来的 的近似值: 实验者 沃尔夫 史密斯 德摩根 福克斯 拉泽里尼 赖纳 蒲丰投针问题的重要性并非是为了求得比其它方法更精确的π值,而是在于它是第一个用几何形式表达概率问题的例子。计算π的这一方法,不但因其新颖,奇妙而让人叫绝,而且它开创了使用随机数处理确定性数学问题的先河,是用偶然性方法去解决确定性计算的前导。 2 本文来源:https://www.wddqw.com/doc/029f024fee3a87c24028915f804d2b160a4e860c.html