Solution - Monte Carlo Simulation for π
Problem.
write a Java program to use Monte Carlo Simulation to estimate the value of π
.
写一个Java程序,用蒙特卡洛模拟近似计算π
的值。
Solution.
- 在一个单位正方形里随机投掷一个点,如果该点处在以原点为中心、半径为1的四分之一圆里,则为一次成功投掷。
- 易得成功投掷的概率为四分之一单位圆的面积,
π/4
。(如图所示)
Fig. 1. 蒙特卡洛模拟近似计算π
- 如果投掷点在单位圆内(成功投掷),其距离原点的距离小于1;
- 重复随机投掷n次,令成功投掷的次数为m,那么模拟求得的
π = 4 * m / n
.
MonteCarloForPi.java
public class MonteCarloForPi {
public static void main(String[] args) {
int totalNum = 5000000; // 总投掷次数
Random rand = new Random(); // 创建生成随机数的对象
int successfulNum = 0; // 记录成功投掷次数的变量
double x, y; // 投掷点的坐标
for (int i = 0; i < totalNum; i++) {
x = rand.nextDouble(); // 随机生成(0,1)内的x坐标
y = rand.nextDouble(); // 随机生成(0,1)内的y坐标
if (len(x, y) < 1) { // 如果其距原点的距离小于1,则成功投掷次数+1
successfulNum++;
}
}
System.out.println("Estimated Pi = " + 4 * successfulNum / (double) totalNum);
}
static double len(double x1, double y1) {
return Math.sqrt(Math.pow(x1, 2) + Math.pow(y1, 2));
}
}