日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蒙特卡洛模型之神奇的布丰投针实验

發(fā)布時(shí)間:2023/12/31 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蒙特卡洛模型之神奇的布丰投针实验 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【問題的提出】
18世紀(jì),法國(guó)數(shù)學(xué)家布豐(1707-1788)提出提出了一種計(jì)算圓周率的方法——隨機(jī)投針法,即蒲豐投針問題(又譯“布豐投針問題”)
(如圖)

【實(shí)驗(yàn)步驟】
布豐的實(shí)驗(yàn)步驟如下:
1) 取一張白紙,在上面畫上許多條間距為a的平行線。
2) 取一根長(zhǎng)度為l(l≤a) 的針,隨機(jī)地向畫有平行直線的紙上擲n次,觀察針與直線相交的次數(shù),記為m。
3)計(jì)算針與直線相交的概率.
18世紀(jì),法國(guó)數(shù)學(xué)家布豐提出的“投針問題”,記載于布豐1777年出版的著作中:“在平面上畫有一組間距為a的平行線,將一根長(zhǎng)度為l(l≤a)的針任意擲在這個(gè)平面上,求此針與平行線中任一條相交的概率。”
布豐本人證明了,這個(gè)概率是:

(其中π為圓周率)
由于它與π有關(guān),于是人們想到利用投針試驗(yàn)來估計(jì)圓周率的值。
布豐驚奇地發(fā)現(xiàn):有利的扔出與不利的扔出兩者次數(shù)的比,是一個(gè)包含π的表示式.如果針的長(zhǎng)度等于a/2,那么有利扔出的概率為1/π.扔的次數(shù)越多,由此能求出越為精確的π的值。
【蒙特卡洛法介紹】
蒙特卡羅法又稱統(tǒng)計(jì)模擬法,是一種以抽樣和隨機(jī)數(shù)的產(chǎn)生為基礎(chǔ)的隨機(jī)性方法,因此也稱為隨機(jī)抽樣法、計(jì)算機(jī)隨機(jī)模擬法等。蒙特卡羅方法的基本原理是通過數(shù)字模擬試驗(yàn),得到所要求解的出現(xiàn)某種事件的概率,作為問題的近似解。很久之前人們就已經(jīng)開始使用蒙特卡羅方法來解決問題了,早在17世紀(jì),發(fā)生事件的概率是用發(fā)生事件的頻率來決定的。在20世紀(jì)計(jì)算機(jī)的使用,使得這樣的實(shí)驗(yàn)可以大量快速的進(jìn)行模擬。近年來,隨著蒙特卡羅方法不僅被用于數(shù)學(xué)、物理、化學(xué)等領(lǐng)域,還應(yīng)用于核科學(xué)與技術(shù)、機(jī)械工程、天文學(xué)和儀器科學(xué)與技術(shù)等。該法產(chǎn)生了不同的分支,有直接蒙特卡羅法,動(dòng)力學(xué)蒙特卡羅法等
【本題思路】
由于蒙特卡羅法是基于概率論思想,因此可適用在布豐投針實(shí)驗(yàn)中。經(jīng)過次數(shù)足夠大的實(shí)驗(yàn),針與平行線相交的概率即為實(shí)驗(yàn)中該現(xiàn)象發(fā)生的頻率。
那么如何與π相聯(lián)系呢?
(如圖)

注:圖片來自網(wǎng)絡(luò)
圖片中的解決思路即將為針與平行線的關(guān)系轉(zhuǎn)化為面積之比的關(guān)系,問題也隨之轉(zhuǎn)化為了求解概率問題。
【matlab求解思路】
可將針與平行線相交轉(zhuǎn)化為數(shù)學(xué)公式1即:

實(shí)驗(yàn)重復(fù)次數(shù)可為n=1:10000(按自己需求)
判斷上式是否成立,若成立,則m=m+1(m為相交次數(shù),初始可為0)
直至循環(huán)結(jié)束
則頻率(概率)為:

再根據(jù)公式1,將p帶入,得出π的近似值。
*****實(shí)際問題轉(zhuǎn)化為數(shù)學(xué)語言表述
【代碼部分(matlab)】

l = 0.502; % 針的長(zhǎng)度(任意給的) a = 1.4; % 平行線的寬度(大于針的長(zhǎng)度l即可) n = 1000000; % 做n次投針試驗(yàn) m = 0; % 記錄針與平行線相交的次數(shù) x = rand(1, n) * a / 2 ; % 在[0, a/2]內(nèi)服從均勻分布隨機(jī)產(chǎn)生n個(gè)數(shù), x中每一個(gè)元素表示針的中點(diǎn)和最近的一條平行線的距離 fai= rand(1, n) * pi; % 在[0, pi]內(nèi)服從均勻分布隨機(jī)產(chǎn)生n個(gè)數(shù),phi中的每一個(gè)元素表示針和最近的一條平行線的夾角 % axis([0,pi, 0,a/2]); box on; % 畫一個(gè)坐標(biāo)軸的框架,x軸位于0-pi,y軸位于0-a/2, 并打開圖形的邊框 for i=1:n % 開始循環(huán),依次看每根針是否和直線相交if x(i) <= l / 2 * sin(phi (i)) % 如果針和平行線相交m = m + 1; % 那么m就要加1plot(fai(i), x(i), 'r.') % 模仿書上的那個(gè)圖,橫坐標(biāo)為phi,縱坐標(biāo)為x , 用紅色的小點(diǎn)進(jìn)行標(biāo)記hold on % 在原來的圖形上繼續(xù)繪制end end p = m / n; % 針和平行線相交出現(xiàn)的頻率 mypi = (2 * l) / (a * p); % 我們根據(jù)公式計(jì)算得到的pi disp(['蒙特卡羅方法得到pi為:', num2str(mypi)])%輸出結(jié)果

也可多次求解,求其平均值,提高準(zhǔn)確率
代碼如下:

result = zeros(100,1); % 初始化保存100次結(jié)果的矩陣 l = 0.520; a = 1.314; n = 1000000; for num = 1:100m = 0; x = rand(1, n) * a / 2 ;phi = rand(1, n) * pi;for i=1:nif x(i) <= l / 2 * sin(phi (i))m = m + 1;endendp = m / n;mypi = (2 * l) / (a * p);result(num) = mypi; % 把求出來的myphi保存到結(jié)果矩陣中 end mymeanpi = mean(result); % 計(jì)算result矩陣中保存的100次結(jié)果的均值 disp(['蒙特卡羅方法得到pi為:', num2str(mymeanpi)])

感悟:首先是知道了前輩們求解圓周率π的另一種方法,即基于多次試驗(yàn)的統(tǒng)計(jì)結(jié)果,這給今后解決問題提供了一個(gè)思路。其次,通過投針試驗(yàn),大致了解了蒙特卡洛法的基本思路,其主要的思想便是在不知道問題的本質(zhì)求解的方法時(shí),可通過多次試驗(yàn),從實(shí)驗(yàn)中的概率統(tǒng)計(jì)結(jié)果中找到問題的近似解。另外,在編程實(shí)現(xiàn)方面,雖然有一定的matlab基礎(chǔ),但是對(duì)于具體的思路的實(shí)現(xiàn)仍較為困難,通過看建模視頻中提出的各個(gè)問題,跟上思路,積極思考,多看代碼多學(xué)習(xí),我想一段時(shí)間后,編程解決問題的能力還是可以提高的,在此感謝清風(fēng)大哥!

總結(jié)

以上是生活随笔為你收集整理的蒙特卡洛模型之神奇的布丰投针实验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。