蒲豐投針問題

蒲豐投針問題

18世紀,布豐提出以下問題:設我們有一個以平行且等距木紋鋪成的地板(如圖),現在隨意拋一支長度比木紋之間距離小的針,求針和其中一條木紋相交的概率。並以此概率,布豐提出的一種計算圓周率的方法——隨機投針法。這就是蒲豐投針問題(又譯“布豐投針問題”)。

投針步驟


法國數學家布豐(1707-1788)最早設計了投針試驗。
這一方法的步驟是:
1)取一張白紙,在上面畫上許多條間距為a的平行線。
2)取一根長度為l(l≤a)的針,隨機地向畫有平行直線的紙上擲n次,觀察針與直線相交的次數,記為m。
3)計算針與直線相交的概率.
18世紀,法國數學家布豐提出的“投針問題”,記載於布豐1777年出版的著作中:“在平面上畫有一組間距為a的平行線,將一根長度為l(l≤a)的針任意擲在這個平面上,求此針與平行線中任一條相交的概率。”
布豐本人證明了,這個概率是:
(其中π為圓周率)
由於它與π有關,於是人們想到利用投針試驗來估計圓周率的值。
布豐驚奇地發現:有利的扔出與不利的扔出兩者次數的比,是一個包含π的表示式.如果針的長度等於a/2,那麼有利扔出的概率為1/π.扔的次數越多,由此能求出越為精確的π的值。

實驗數據

下面是利用這個公式,用概率的方法得到圓周率的近似值的一些資料。
試驗者時間投擲次數相交次數圓周率估計值
Wolf1850年600025323.1596
Smith1855年32041218.53.1554
C.De Morgan1860年600382.53.137
Fox1884年10304893.1595
Lazzerini1901年340818083.1415929
Reina1925年25208593.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
#include
#include
#include
using namespace std;
int main()
{
longi,in,N=1000000;
doublex,y,pi;
srand(time(NULL));
for(i=0,in=0;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<
getch();
return 1;
}
蒙特卡洛方法適用範圍很廣泛,它既能求解確定性的問題,也能求解隨機性的問題以及科學研究中的理論問題.例如利用蒙特卡洛方法可以近似地計算定積分,即產生數值積分問 題。
任意曲邊梯形面積的近似計水塘的面積.應該怎樣做呢?測量方法如下:假定水塘位於一塊面積已知的矩形農田之中。如圖 所示:隨機地向這塊農田扔石頭使得它們都落在農田內。被扔到農田中的石頭可能濺上了水,也可能沒有濺上水,估計被“濺上水的”石頭量佔總的石頭量的百分比。試想如何利用這估計的百分比去近似計算該水塘面積?
  • 目錄