投針步驟 法國數學家
布豐 (1707-1788)最早設計了投針試驗。
這一方法的步驟是:
1) 取一張白紙,在上面畫上許多條間距為a的平行線。
2) 取一根長度為l(l≤a) 的針,隨機地向畫有平行直線的紙上擲n次,觀察針與直線相交的次數,記為m。
3)計算針與直線相交的機率.
18世紀,法國數學家
布豐 提出的“投針問題”,記載於布豐1777年出版的著作中:“在平面上畫有一組間距為a的
平行線 ,將一根長度為l(l≤a)的針任意擲在這個平面上,求此針與平行線中任一條相交的
機率 。”
布豐本人證明了,這個機率是:
由於它與π有關,於是人們想到利用投針試驗來估計圓周率的值。
布豐驚奇地發現:有利的扔出與不利的扔出兩者次數的比,是一個包含π的表示式.如果針的長度等於a/2,那么有利扔出的
機率 為1/π.扔的次數越多,由此能求出越為精確的π的值。
實驗數據 下面是利用這個公式,用機率的方法得到圓周率的近似值的一些資料。
試驗者 時間 投擲次數 相交次數 圓周率估計值 Wolf
1850年
5000
2532
3.1596
Smith
1855年
3204
1218.5
3.1554
C.De Morgan
1860年
600
382.5
3.137
1884年
1030
489
3.1595
Lazzerini
1901年
3408
1808
3.1415929
Reina
1925年
2520
859
3.1795
公元1901年,義大利數學家拉茲瑞尼宣稱進行了多次的投針試驗,每次投針數為3408次,平均相交數為1808次,給出π的值為3.1415929——準確到
小數 後6位。不過,不管拉茲瑞尼是否實際上投過針,他的實驗還是受到了美國猶他州奧格登的國立韋伯大學的L·巴傑的質疑.通過
幾何 、
微積分 、
機率 等廣泛的範圍和渠道發現π,這是著實令人驚訝的!
布豐 投針實驗是第一個用幾何形式表達機率問題的例子,他首次使用隨機實驗處理確定性數學問題,為機率論的發展起到一定的推動作用。
證明 證明一: 找一根鐵絲彎成一個圓圈,使其直徑恰恰等於
平行線 間的距離d。可以想像得到,對於這樣的圓圈來說,不管怎么扔下,都將和平行線有兩個交點。因此,如果圓圈扔下的次數為n次,那么相交的交點總數必為2n。構想把圓圈拉直,變成一條長為πd的鐵絲。顯然,這樣的鐵絲扔下時與平行線相交的情形要比圓圈複雜些,可能有4個交點,3個交點,2個交點,1個交點,甚至於都不相交。由於圓圈和直線的長度同為πd,根據機會均等的原理,當它們投擲次數較多,且相等時,兩者與平行線組交點的總數期望也是一樣的。這就是說,當長為πd的鐵絲扔下n次時,與平行線相交的交點總數應大致為2n。
轉而討論鐵絲長為l的情形。當投擲次數n增大的時候,這種鐵絲跟
平行線 相交的最大的交點總數m應當與長度l成正比,因而有:m=kl,式中k是
比例係數 。
為了求出k來,注意到l=πd時的特殊情形,有m=2n。於是求得
。
代入前式就有:
,將此結論推廣到l=a/2,那么最多也只有一個交點,m與n的比值是針與直線相交的機率。但此證明較不嚴謹,例如圓和直線期望相等,鐵絲與平行線的交點成正比。接下來用機率論和微積分提供嚴謹的證明。
證明二 :由於向桌面投針是隨機的,所以用二維隨機變數(X,Y)來確定它在桌上的具體位置。設X表示針的中點到平行線的的距離,Y表示針與平行線的夾角,如果
時,針與直線相交。
並且X在
服從均勻分布,Y在
服從均勻分布,XY相互獨立,由此可以寫出(X,Y)的機率密度函式
蒙特卡羅方法 像投針實驗一樣,用通過機率實驗所求的機率來估計我們感興趣的一個量,這樣的方法稱為
蒙特卡羅 方法(Monte Carlo method)。當由於這類模型含有不確定的隨機因素,分析起來通常比確定性的模型困難.有的模型難以作定量分析,得不到解析的結果,或者是雖有解析結果,但計算代價太大以至不能使用.在這種情況下,可以考慮採用 Monte Carlo 方法,蒙特卡羅方法是在第二次世界大戰期間隨著計算機的誕生而興起和發展起來的。這種方法在套用物理、
原子能 、固體物理、化學、生態學、社會學以及經濟行為等領域中得到廣泛利用。
利用鈍角三角形的邊長計算圓周率
此外,隨便說出3個正數,以這3個正數為邊長可以圍成一個鈍角三角形的機率P也與π有關,這個機率為 (π-2)/4,證明如下:
設這三個正數為x,y,z,不妨設x≤y≤z,對於每一個確定的z,則必須滿足x+y>z,x^2+y^2﹤z^2,容易證明這兩個式子即為以這3個正數為邊長可以圍成一個鈍角三角形的充要條件,用線性規劃可知滿足題設的可行域為直線x+y=z與圓x^2+y^2=z^2;圍成的弓形,總的可行域為一個邊長為z的正方形,則可以圍成一個鈍角三角形的機率P=S弓形/S正方形=(πz^2/4-z^2/2)/z^2=(π-2)/4.因為對於每一個z,這個機率都為(π-2)/4,因此對於任意的正數x,y,z,有P=(π-2)/4,命題得證。
為了估算π的值,我們需要通過實驗來估計它的機率,這一過程可交由計算機編程來實現,事實上x+y>z,x^2+y^2﹤z^2等價於(x+y-z)(x^2+y^2-z^2)﹤0,因此只需檢驗這一個式子是否成立即可。若進行了m次隨機試驗,有n次滿足該式,當m足夠大時,n/m趨近於(π-2)/4,令n/m=(π-2)/4,解得π=4n/m+2,即可估計出π值。
值得注意的是這裡採用的方法:設計一個適當的試驗,它的機率與我們感興趣的一個量(如π)有關,然後利用試驗結果來估計這個量,隨著計算機等現代技術的發展,這一方法已經發展為具有廣泛套用性的
蒙特卡羅 方法。
計算機模擬
Monte Carlo方法是計算機模擬的基礎,它的名字來源於世界著名的賭城——
摩納哥 的
蒙特卡洛 , 其歷史起源於 1777 年法國科學家
蒲豐 提出的一種計算圓周π 的方法——隨機投針法,即著名的蒲豐投針問題。
Monte Carlo方法的基本思想是首先建立一個
機率模型 ,使所求問題的解正好是該模型的參數或其他有關的特徵量. 然後通過模擬一統計試驗, 即多次隨機抽樣試驗 (確定 m和 n) ,統計出某事件發生的百分比。只要試驗次數很大,該百分比便近似於事件發生的機率.這實際上就是機率的統計定義。利用建立的機率模型,求出要估計的參數。
蒙特卡洛方法 屬於試驗數學的一個分支。
MATLAB語言編程實現:
l=1;
n=1000;
d=2;
m=0;
for k=l:n
x=unifrnd(0,d/2);
p=unifrnd(0,pi);
if x<0.5*sin(p)
m=m+1;
else
end
end
p=m/n
pi_m=1/p
運行,即得結果。
c++語言編程實現:
#include<conio.h>
#include<stdlib.h> #include<time.h> #include<iostream> using namespace std; int main() { longi,in,N=1000000; doublex,y,pi; srand(time(NULL)); for(i=0,in=0;i<N;i++) { x=2.0*rand()/RAND_MAX-1; y=2.0*rand()/RAND_MAX-1; if((x*x+y*y)<=1) in++; } pi=4.0*in/N; cout<<pi<<endl; getch(); return 1; }
蒙特卡洛方法 適用範圍很廣泛,它既能求解確定性的問題,也能求解隨機性的問題以及科學研究中的理論問題.例如利用蒙特卡洛方法可以近似地計算
定積分 ,即產生
數值積分 問 題。
任意曲邊梯形面積的近似計水塘的面積.應該怎樣做呢?測量方法如下:假定水塘位於一塊面積已知的矩形農田之中。如圖 所示:隨機地向這塊農田扔石頭使得它們都落在農田內。被扔到農田中的石頭可能濺上了水,也可能沒有濺上水,估計被“濺上水的”石頭量占總的石頭量的百分比。試想如何利用這估計的百分比去近似計算該水塘面積?
蒙特卡洛方法(8.2)