一、蒙特卡洛法簡介
蒙特·卡羅方法(Monte Carlo method),也稱統計模擬方法,一種以概率統計理論爲指導的一類非常重要的數值計算方法。是指使用隨機數(或更常見的僞隨機數)來解決很多計算問題的方法。
二、蒙特卡洛法計算圓周率的原理
正方形的面積爲:
圓的面積爲:
圓的面積比上正方形的面積爲:π / 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世紀,人們就知道用事件發生的“頻率”來決定事件的“概率”。這也是蒙特卡洛法的基本思想。當樣本數量足夠大時,我們可以用頻率去估計概率。這也是求圓周率π的常用方法。