蒙特卡洛法計算圓周率π(Python,Java,c 三種方式詳解)

一、蒙特卡洛法簡介

蒙特·卡羅方法(Monte Carlo method),也稱統計模擬方法,一種以概率統計理論爲指導的一類非常重要的數值計算方法。是指使用隨機數(或更常見的僞隨機數)來解決很多計算問題的方法。


二、蒙特卡洛法計算圓周率的原理

正方形的面積爲:2r\times 2r=4r^{2}

圓的面積爲:\pi r ^{2}

圓的面積比上正方形的面積爲:π / 4

所以我們使用蒙特卡洛法在正方形內隨機撒點,落在圓內的點 / 落在正方形內的點(全部的點),就約等於圓的面積 / 正方形的面積 = π / 4

三、使用編程語言實現計算過程

1、Python實現蒙特卡洛法計算圓周率π

import random

def count_pi(n):
    i = 0
    count = 0
    # n 爲傳入的總點數量
    while i < n:
        # 隨機產生x,y座標
        x = random.random()
        y = random.random()
        # 如果x平方 + y平方 < 1,說明在圓內
        if (pow(x, 2) + pow(y, 2)) < 1:
            count += 1
        i += 1
    # π的值爲:4 * (落在圓內的點/總的點)
    return 4 * (count / n)


pi = count_pi(100000)
print(pi)

2、Java實現蒙特卡洛法計算圓周率π

package practice;

/**
 * 
 * @author 你的壞機器人
 * @郵箱:[email protected]
 * @修改日期:2020.1.30
 * @描述:使用蒙特卡洛方法計算圓周率π的值
 *
 */
public class MonteCarlo {

	public double countPI(double n) {
		int i = 0;
		int count = 0;
		double pi = 0;
		double x = 0;
		double y = 0;
		while(i < n) {
			x = Math.random();
			y = Math.random();
			if ((x * x) + (y * y) < 1) {
				count++;
			}
			i++;
		}
		pi = 4 * (count / n);
		return pi;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MonteCarlo monteCarlo = new MonteCarlo();
		double pi = 0;
		pi = monteCarlo.countPI(100000);
		System.out.println("蒙特卡洛計算圓周率pi的值爲:"+pi);
	}

}

3、c語言實現蒙特卡洛法計算圓周率π

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

double countPI(double n)
{
	int i = 0;
	int count = 0;
	double pi = 0;
	double x = 0;
	double y = 0;
	srand((unsigned)time(NULL));
	while (i < n)
	{
		x = rand() / (double)(RAND_MAX);
		y = rand() / (double)(RAND_MAX);
		if ((x * x) + (y * y) < 1)
		{
			count++;
		}
		i++;
	}
	pi = 4 * (count / n);
	return pi;
}

int main(){
	double pi = 0;
	pi = countPI(100000);
	printf("%lf\n",pi);
	return 0;
}

早在17世紀,人們就知道用事件發生的“頻率”來決定事件的“概率”。這也是蒙特卡洛法的基本思想。當樣本數量足夠大時,我們可以用頻率去估計概率。這也是求圓周率π的常用方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章