Python 蒙特卡羅計算圓周率

2021-09-13 03:36:34 字數 1668 閱讀 6923

蒙特卡羅方法於20世紀40年代美國在第二次世界大戰中研製原子彈的「曼哈頓計畫」計畫的成員s.m.烏拉姆和j.馮·諾伊曼首先提出。數學家馮·諾伊曼用馳名世界的賭城—摩納哥的monte carlo—來命名這種方法,為它蒙上了一層神秘色彩。在這之前,蒙特卡羅方法就已經存在。2023年,法國數學家布豐(georges louis leclere de buffon,1707—1788)提出用投針實驗的方法求圓周率π。這被認為是蒙特卡羅方法的起源。

簡單來說:就是乙個正方形框裡有乙個內切圓(如下圖),往框裡隨機投放大量的點,利用落在圓裡的點的數目來求出圓周率

我們知道,正方形和內切圓面積之比的4:π(不信你可以算一下),所以圓周率=落在圓內的隨機點數*4/投點次數

不多說,我們直接上**!!!

import numpy as np

import matplotlib.pyplot as plt

from matplotlib.patches import circle

#投點次數

n=10000

#圓的基本資訊

r=1.0

a,b=(0.,0.)

#隨機點的正方形區域邊界

x_min,x_max=a-r,a+r

y_min,y_max=b-r,b+r

#開始投放隨機點

x=np.random.uniform(x_min,x_max,n) #均勻分布,左閉右開

y=np.random.uniform(y_min,y_max,n)

#計算隨機點到圓心的距離

d=np.sqrt((x-a)**2+(y-b)**2)

#統計落在單位圓的隨機點數目

count=sum(np.where(d結果顯示:

可能有些語句函式會看不懂,下面我來簡單的說一下,僅供參考:

1)random.uniform(low,high,size):在區間[low,high)內隨機生成size個樣本數目,需要注意的是uniform不能單獨使用,需要通過random庫呼叫

2)np.where(condition,x,y):根據條件生成新的陣列,condition是條件,符合條件的就是x,不符合條件的就等於y,所以np.where(d3)add_subplot(111):意思是把畫布分割成一行一列,圖形在第乙個位置,建立完figure物件後不能直接畫圖

4)plt.axis('equal'):圖形的x軸和y軸的範圍相等

5)add_patch():在之前的111位置上新增乙個東西,這裡新增的是圓形

小結一下畫圖的步驟:

(1)建立figure物件

(2)建立乙個或多個subplot子圖

(3)在子圖上繪畫圖形

(4)展示圖形

總結:蒙特卡羅法就是通過多次投放隨機點,模擬概率,

python菜鳥 蒙特卡羅方法計算圓周率

蒙塔卡洛方法 四分之一圓 正方形 利用 random 函式生成隨機點 for in 迴圈 pow x 2 y 2,0.5 小於 圓半徑1的計數 點數越多越精確 自己嘗試寫的 import random defjudge a,b if pow a 2 b 2,0.5 1.0 return true e...

python模擬蒙特 卡羅法計算圓周率

蒙特 卡羅方法是一種通過概率來得到問題近似解的方法,在很多領域都有重要的應用,其中就包括圓周率近似值的計問題。假設有一塊邊長為2的正方形木板,上面畫乙個單位圓,然後隨意往木板上扔飛鏢,落點座標 x,y 必然在木板上 更多的時候是落在單位圓內 如果扔的次數足夠多,那麼落在單位圓內的次數除以總次數再乘以...

用蒙特卡羅方法求解圓周率 python

如何用蒙特卡羅方法計算圓周率 正方形內部有乙個相切的圓,它們的面積之比是 4 現在,在這個正方形內部,隨機產生10000個點 即10000個座標對 x,y 計算它們與中心點的距離,從而判斷是否落在圓的內部。如果這些點均勻分布,那麼圓內的點應該佔到所有點的 4,因此將這個比值乘以4,就是 的值。fro...