摘要:文章描述了如何用蒙特卡罗算法计算圆周率π和不规则函数定积分的值,蒙特·卡罗方法,也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
关键词:蒙特卡罗算法;随机;圆周率,积分;
The monte Carlo method is used to calculate the value of PI and definite integral
YE Chuhan Guan Mengyu Luo Yudong
(Software College, Shenyang Normal University, Shenyang 110034, China)
Abstract: Article describes how to use a monte carlo algorithm calculating the value of PI and irregular function of definite integral, monte carlo method, also known as statistical simulation method, in the mid - 1940 due to the development of science and technology and the invention of the computer, and proposed a kind of probability and statistics theory as the guidance of a class of important numerical method.Random Numbers (or, more commonly, pseudorandom Numbers) are used to solve many computational problems.
Keywords: Monte Carlo method; Pi; random; Definite integral;
引言:综述目前研究现状,人们很早就发现了圆周率,中国古代数学家刘徽在三国时期,就利用割圆术计算了圆周率小数点后3位。计算定积分的方法同样也非常多。本文采用蒙特卡洛方法,蒙特卡罗是摩纳哥的一个地名,以赌场闻名于世,而赌博和概率有关,所以通过概率统计模拟,来进行数值计算的方法,统称为蒙特卡罗算法。
1技术方法
首先要说明这种方法,举一个射击的例子:一位枪手拿枪向一个特殊的靶子射击,靶子如图1-1所示,这是一个正方形的靶子,然后在这个正方形内画一个内接圆,现在枪手漫无目的的向靶子开枪(没有目标,完全随机),过一段时间之后,枪手射击完毕,靶子情况如图1-2所示,然后来统计靶上的情况。
因为枪手完全随机的击中靶子,而且靶子上所有的点中弹的概率处处相等。那么落在圆内的子弹数量,和所有中靶的子弹数量之间,应该满足:
那么对于内接圆来说,就是,所以理论上开40枪,就会有31次左右在内接圆内;开枪400次,就会有314枪左右落在内接圆内;开4000次就会有3141次左右落在内接圆内,实验次数越多,得到的π值就会越精确。像这种通过概率统计模拟进行数值计算的方法,就是蒙特卡罗方法。
2实验
2.1布丰投针实验
在一个平板上,画上等间距的平行线,再准备一些针,针的长度要小于等于平行线的间距,然后开始随机投掷(如图2.1-1所示),通过统计总投掷次数,以及针和线相交的次数,可以求出π值。
下面来解释计算过程:
假设向等间距的平行线间距为d,针长为l。
2.1.1情况1
这次加上了强磁场的束缚,使得每次投下去的针都是垂直于平行线的。如图2.1.1-1.
一根针的长度是l,针的顶点为准,加入针的顶点距离下端平行线的距离大于l,则针无法交于下端平行线,反之如果针的顶点距离下端平行线的距离小于l,则针可以和下端平行线相交,所以此时针与平行线相交的概率P为:
2.1.2情况2
现在撤去磁场,使得针每次落到平行线上都与平行线有一个特定的夹角。如图2.1.2-1所示:
那么现在相交的概率,根据2.1.1可知,是针的投影和间距d的比值。
2.1.3情况3
如果投下去的针都与平行线平行,如图2.1.3-1所示:
可知,如果针水平与平行线,则相交的概率几乎必然为0。
2.1.4情况总结
假设现在的投针可以任意角度,那么把与平行线成的角度作为横坐标,纵坐标为d,当角度为0或π时,情况如2.1.3-1所示,概率几乎必然为0;当角度为时,也就是如2.1.1-1所示,长度为l;当角度为任意角时,概率为。把所有的点连起来就可以发现,这条曲线是一个正弦函数,如图2.1.4-1所示。
图2.1.4-1
所以与平行线相交的概率就是的积分与矩形面积的比值。
整理可得,布丰的针与平行线相交的概率为:
由公式可知,当l=d时,针与平行线相交的概率为。
2.2布丰的面条
当投掷的不是一根针,而是一些不规则的形状,比如面条,那么相交的点可能有0个,1个或者多个,情况如图2.2-1所示。
图2.2-1
分析2.1.4的结论,针长为l,平行线间距为d,当l<d的时候,投掷了n次,交点的数量为m,可以知道,m/n趋向于相交的概率,即:
把这个公式换一种方式理解,平均每投一次针,就会产生个交点。这就代表每次投针的期望为。期望是线性的,因为每投一次,期望都是一个定值。所以此问题与面条的形状无关,只与长度有关,那么可以得到如下公式:
2.3思考延伸
根据2.2得出的结论,需要得到比例系数k,因为投针问题与针形状无关,那么可以把针想象成一个圆,圆的直径l等于平行线的间距d,如图2.3-1所示:
图2.3-1
这样,无论圆处在平行线中的什么位置,圆与平行线的交点必有两个,即:
2.4 C语言算法
double MontePI(int n)
{double x, y,PI;int sum=0;srand(time(NULL));
for (int i = 1; i < n; i++)
{x = (double)rand() / RAND_MAX;y = (double)rand() / RAND_MAX;
if ((x*x + y*y) <= 1)
sum++;}
PI = 4.0*sum / n;
return PI;}
3.蒙特卡洛与积分
3.1.计算定积分
如图3-1所示,在计算不规则函数的定积分时同样也可以使用蒙特卡洛方法,定积分的值表示为图中阴影部分的面积。
那么当我们在[a,b]间的任意一点取x,对应的函数值为f(x),然后我们可以根据(b-a)f(x)来粗略估计定积分的值,如图3-2表示为黄色的面积。
粗略估计的面积可能与实际面积相差很大,但是,可以通过多次曲随机面积,如图3-3.黄色部分面积分别为S1,S2,S3,S4,S5。
在使用蒙特卡洛方法经过多次计算,可以得出如下公式:
同样的,如果把实验进行的次数越多,定积分的值越精确。即:
4.实验结果讨论
利用蒙特卡罗算法,理论上如果投点时间无限长,π值可以精确到小数点后的无限位数,在统计的次数接近于无限大时,定积分的值也可以无限趋近于准确值。但是显然是不能无穷的计算下去的,假设把宇宙中所有的原子都作为1bit来存储π值,最多只有个bit,资源是有限的,算力也就一定是有限的,但是不妨碍蒙特卡洛方法在某些问题可以作为最佳解决方案。
5.结语
应用蒙特卡罗方法不单单可以计算π的值,定积分的值,蒙特卡洛方法与遗传算法、粒子群算法等智能优化算法有相似之处,比如都属于随机近似方法,蒙特卡洛是一种模拟统计方法,如果问题可以描述成某种统计量的形式,那么就可以用蒙特卡洛方法来解决,虽然方法较为笨重,可能需要很多的时间和数据,但是今后对于机器学习等需要时间的技术可以提供很大的帮助。
参考文献:
[1]王信峰,李承耕. 概率论与数理统计[M] 北京:清华大学出版社 2016.
[2]强春晨,刘兴祥,岳育英. 圆周率计算方法发展史[J] 延安大学学报(自然科学版) 2012(02)
[3]Kaczkowski Stephen. A Riemann Sum Approach to Buffon’s Needle[J] The College Mathematics Journal 2019(03)
[4]徐五光. 数学美与数学的统一美[j] 杭州师范学院学报 1994(03).
[5] Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto