蒙特卡羅演算法求圓周率Pi的值

面壁者~羅輯發表於2020-11-14

在這裡插入圖片描述

	已知這是一個單位圓,每個小正方形的面積是1,每個四分之一圓的面積則是 

S=Pi R ^2=Pi/4,將四乘到等式左邊即可得到 Pi=4(S扇/S 正)
也就是說,如果能求出 S扇/S 正,就可以求出***Pi***
在這裡插入圖片描述

	這裡,我們用撒點計數的方法,向正方形中隨機撒一些點

在這裡插入圖片描述

	***S扇/S正方形=落在扇形區域點的數量/總共撒的點的數量***   
	點撒的越多,精度越高

下面進行程式碼實現

import java.util.Random;

import static org.datanucleus.NucleusContext.random;

/**
 * @auther iris
 * @date 2020/11/14
 * @ desc :
 **/
public class MonteCarloTest_1 {
    public static void main(String[] args) {
        //定義變數
        int count = 0;// 記錄落在扇形區域的點的數量
        int total = 1000000000;  //記錄總共撒的點的數量

        //定義一個隨機數

        Random random = new Random();
        for (int i = 0; i < total; i++) {
            double x = random.nextDouble();//生成橫座標,[0,1)範圍的隨機數
            double y = random.nextDouble();//生成縱座標y, [0,1)範圍的隨機數
            if (x * x + y * y < 1) {
                count++;
            }
        }

        double pi = 4 * (count * 1.0 / total);
        System.out.println("蒙特卡洛演算法求得的Pi值為:" + pi);

    }
}

相關文章