java实现蒙特卡洛方法求圆周率

前言

蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
今天我们使用蒙特卡洛方法来求圆周率的值。

实现


圆的面积    =   PI*R*R
正方形面积  =   (2*R)*(2*R) = 4*R*R
PI         =   4*圆面积/正方形面积

代码实现

public class Client {

  private static double monteCarlo(int n) {
    int insidePoints = 0;//在圆中的点个数
    int totalPoints = n;//在正方形中点个数
    int R = 100;//圆半径
    for (int i = 0; i < n; i++) {
      int x = (int) (Math.random() * (2 * R));
      int y = (int) (Math.random() * (2 * R));
      if (contain(x, y, R)) {
        insidePoints++;
      }
    }
    return 4 * 1.0 * insidePoints / totalPoints;
  }

  private static boolean contain(int x, int y, int R) {
    return Math.pow(x - R, 2) + Math.pow(y - R, 2) <= R * R;
  }

  public static void main(String[] args) {
    System.out.println("PI = " + monteCarlo(10000));
    System.out.println("PI = " + monteCarlo(100000));
    System.out.println("PI = " + monteCarlo(1000000));
    System.out.println("PI = " + monteCarlo(10000000));
  }
}

输出结果为

PI = 3.1668
PI = 3.12992
PI = 3.139812
PI = 3.140758

点数越多,PI值越精确。

参考

蒙特卡洛方法求圆周率与定积分及python实现。-知乎
java 蒙特卡洛_java算法3_蒙特卡洛方法(Monte Carlo method)求PI和椭圆面积。-CSDN

原文地址:https://www.cnblogs.com/strongmore/p/14595232.html