蒙特卡洛(Monte Carlo)方法求PI值
蒙特卡洛(Monte Carlo)方法,又称为随机抽样或统计试验方法,是以概率和统计理论方法为基础的一种计算方法.
# 统计原理
蒙特卡洛(Monte Carlo)方法本质是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。它将所求解的问题同一定的概率模型相联系,以获得问题的近似解。
利用圆与其外接正方形面积之比为pi/4的关系,通过产生大量均匀分布的二维点,计算落在单位圆和单位正方形的数量之比再乘以4便得到pi的近似值,即4*(圆内点数/总点数)
。样本点越多,计算出的数据将会越接近真识的pi.
Copy
# 随机data生成
let inCount = 0, total = 35000;
const data = Array(total).fill(1).map(_ => {
const [x, y] = [Math.random(), Math.random()];
const dis = Math.sqrt(x ** 2 + y ** 2)
let color = '#c4ebad';
if (dis <= 1) {
color = '#3fb1e3'
inCount += 1
}
return {
value: [x, y],
itemStyle: {
color,
opacity: 0.8
}
}
})
# echarts 配置
const opt = {
xAxis: {},
yAxis: {},
grid: {
width: '340px',
height: '340px',
left: '35%',
},
title: {
subtext: `模拟${total}个点求得PI值:${(4 * inCount / total).toFixed(6)}`,
bottom: 0,
right: 0
},
series: [
{
symbolSize: 2,
data,
type: 'scatter'
}
],
animationDuration: 5000,
animationEasingUpdate: 'quinticInOut'
}
蒙特卡洛方法并没有什么高深的理论支撑,如果一定要说有理论也就只有概率论或统计学中的大数定律了。蒙特卡洛的基本原理简单描述是先大量模拟,然后计算一个事件发生的次数,再通过这个发生次数除以总模拟次数,得到想要的结果。蒙特卡洛方法当然也可以运用在很多领域,如金融,工程,物理,生物医学等等。