小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
每天一小步,成功一大步。大家好,我是程序猿小白 gw_GW,很高兴能和大家一起学习每天小知识。
以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。
摘要
本文主要讲诉如何使用蒙特卡洛算法来近似求Π,主要让大家理解什么是蒙特卡罗算法,并且能够应用。
蒙特卡罗算法
首先借用一下百度百科的专业介绍:
蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术
的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。
是指使用[随机数](或更常见的伪随机数)来解决很多计算问题的方法。
这里就来解释一下:
其实蒙特卡罗算法就是在一块区域内通过随机数进行撒点,如果撒的点落在了指定范围内,那么这个点就是命中点,统计所有的命中点的个数,命中点的个数/所有撒点的总数 即为命中概率。
一般来说,我们撒点的一块区域都是规则的形状,面积比较好求,我们只需要求出这个面积然后乘以命中概率,就得到了不规则区域的面积。
蒙特卡罗算法实例(求Π)
我们可以求出四分之一单位圆的面积,进而得到Π的值。
来看具体代码:
# 首先引入随机数库
from random import random
# 撒点数,可自由定义,撒点数越大越接近真实值
DARTS = 1000*1000
# 命中点数
hits = 0
# 开始撒点
for i in range(DARTS+1):
# 撒点
x = random()
y = random()
# 如果命中就记录点数
if pow((x ** 2 + y ** 2), 0.5) <= 1:
hits += 1
# 求出概率
probability = hits / DARTS
# 概率乘以面积
PI4 = probability * 1
print("Π的近似值为:{:.6f}".format(PI4 * 4))
结语
蒙特卡罗算法不仅可以用来求PI,还可以用来求定积分等其他类似的问题。希望大家理解思想后熟练应用。