蒙特卡罗法(Monte Carlo method)也称统计模拟法、统计试验法。是把概率现象作为研究对象的数值模拟方法。蒙特卡罗是摩纳哥公国的一座城市,位于法国的东南方,世人称之为“赌博之国”,该法为表明其随机抽样的本质而命名。是使用随机数来解决很多计算问题的方法。
比如要圆周率 π ,如下图所示,在正方形内生成尽可能多的点,总的点个数为 n ,落在圆内点的个数为 k ,根据 n 和 k 我们就可以计数出 π 的大概值,当然这个值是不准确的,一般情况下当 n 越大的时候,π 的值精确度就越高。
private static double calculatePai() {
Random random = new Random();// 生成随机数
int n = 100000000;// 执行次数
int k = 0;// 落在范围内的个数。
for (int i = 0; i < n; i++) {
double x = random.nextDouble();
double y = random.nextDouble();
if (x * x + y * y <= 1)
k++;
}
return 4.0 * k / n;// x,y都是正的,第一象限,所以要乘以4
}
参考: