使人惊艳的算法——蒙特卡洛采样法

蒙特卡洛算法
使用几率来求π(圆周率)和定积分,在不使用任何公式和特殊计算方法的前提下,实现小数点后多位的准确率,真的惊艳到我了。
我第一次接触蒙特卡洛算法,是在作数据采样的时候,这个名字是20世纪40年代美国在第二次世界大战中研制原子弹的“曼哈顿计划”计划的成员乌拉姆和冯·诺伊曼首先提出。 冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo来命名。
但其实早在1777年,法国数学家布丰提出用投针实验的方法求圆周率,就已经用到了蒙特卡罗法,只是那个时候并无特别命名。

什么是蒙特卡洛法?

假如篮子里有1000个苹果,让你每次闭着眼睛找一个最大的,能够不限制挑选次数。 因而,你能够闭着眼随机拿了一个,而后再随机拿一个与第一个比,留下大的,再随机拿一个,与前次留下的比较,又能够留下大的。 循环往复这样,拿的次数越多,挑出最大苹果的可能性也就越大,但除非你把1000个苹果都挑一遍,不然你没法确定最终挑出来的就是最大的一个。
也就是说,蒙特卡洛算法是样本越多,越能找到最佳的解决办法,不过不保证是最好的,由于若是有10000个苹果的话,说不定就能找到更大的。
也就是,经过大量随机样本,不使用任何公式和计算方法,获得所要计算的值。 接下来,咱们用4个例子一块儿来看看蒙特卡洛法的应用吧。

例子1:求10000个整数的中位数
先从中抽取m个数,m<10000,把它们的中位数近似地看做这个集合的中位数。 随着m增大,近似结果是最终结果的几率也在增大。

例子2:求圆周率
给定一个边长为1的正方形,其内部有一个相切的圆
根据高中知识,能够简单算出它们的面积之比是π/4。
当咱们在(0,1)的范围内随机选择一个坐标(x, y)时,每一个坐标点被选中的几率相等。 则坐标落在直径为1的正方形中的圆的几率为:
由切比雪夫不等式可知,在生成大量随机点的前提下咱们能获得尽量接近圆周率的值。
如今,在这个正方形内部,随机产生10000个点(即10000个坐标对 (x, y)),计算它们与中心点的距离,从而判断是否落在圆的内部。
若是这些点服从均匀分布,那么圆内的点应该占到全部点的 π/4,所以将这个比值乘以4,就是π的值。经过R语言随机模拟30000个点,π的估算值与真实值相差0.07%。

例子3:设0≤f(x)≤1,求定积分
设随机变量XX服从[0,1]上的均匀分布,则Y=f(X)的数学指望为
以估计J的值就是估计f(X)的数学指望值。 由辛钦大数定律,能够用f(X)的观察值的均值取估计f(X)的数学指望。 具体作法:
先用计算机产生n个服从[0,1]上均匀分布的随机数:
对每个xi,计算f(xi)。 而后计算
其精确值和用蒙特卡洛法获得的模拟值以下:

例子4:求天然底数e
首先考虑以下积分
接下来分别用蒙特卡洛积分牛顿莱布尼兹公式计算,在蒙特卡洛方法中样本不少时,它们的值应该相等。 利用蒙特卡洛方法,图像大体以下
上述积分的目的是求阴影部分的面积,因此先在所标矩形内取n对随机点
对于每一对
考察是否知足以下条件
假设知足上述条件的点有 m个,而所有的点有 n 个,因此获得近似公式为
而依据牛顿莱布尼兹公式能够获得
这两种方法结果应该是相等的,即有


更多机器学习、编程、AI相关知识,欢迎关注个人公众号“图灵的猫”。后台回复“学习资料”,便可得到海量机器学习、深度学习书籍等免费PDF资源~web


往期文章:算法

    推荐资源:编辑器

做者简介:godweiyang知乎同名华东师范大学计算机系硕士在读,方向天然语言处理与深度学习喜欢与人分享技术与知识,期待与你的进一步交流~人工智能


个人微信:weiyang792321264。有任何问题均可以在评论区留言,也欢迎加我微信深刻沟通~



本文分享自微信公众号 - 算法码上来(GodNLP)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索