蒙特卡罗模拟圆周率的思想方法

图:
新建一个坐标系,上面的四个点(-1,-1)、(1,-1)、(1, 1)、(-1, 1)分别为正方形的四个顶点,做一个正方形的内切圆。

数学分析:
圆的半径是1,圆的面积是PI,正方形的面积是4. 那么在横坐标[-1,1],纵坐标[-1,1]两个区间确定的一个随机点落在圆内的概率是PI/4.
在正方形内随机产生10000000个点落在圆内的概率用numberOfHits来统计,数学分析出他的值大概是10000000PI/4. 由此估算出PI的值是: 4numberOfHits/10000000.

public class MonteCarloSimulation {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		final int NUMBER_OF_TRIALS = 10000000;
		int numberOfHits=0;
		
		for(int i = 0 ; i < NUMBER_OF_TRIALS ; i++) {
			
			double x = Math.random()*2.0 - 1 ;         //产生[-1,1)的随机数
			double y = Math.random()*2.0 - 1 ;
//			System.out.printf("%f   %f\n",x,y);
			if(x*x+y*y < 1)                           //面积小于等于1也就是点落在圆内部
				numberOfHits++;   
		}
    	System.out.printf("%d\n",numberOfHits);      //输出有多少次是位于圆内的
		double PI = 4.0 *numberOfHits /NUMBER_OF_TRIALS;        
		System.out.println(" PI is "+PI);
	
	}

}

你可能感兴趣的:(Java基础学习)