MATLAB模擬布豐投針實驗


MATLAB模擬布豐投針實驗

標簽(空格分隔): 算法


Buffon's Needle

桌面上有距離為a的若干平行線,將長度為L的針隨機丟在桌面上,則這根針與平行線相交的概率是多少?假定L < a.
思路:從針據橫線的距離與夾角得出。
解決:

  1. 假設針的中點到最近橫線的距離為y,則\(y\in[0,\frac{a}{2}]\);
  • 因為投針是隨機的,所以y服從均勻分布:

\[ f(y) = \begin{cases} \frac{2}{a}, & \text{$0 \leq y \leq \frac{a}{2}$} \\ 0, & \text{others} \end{cases} \]

  1. 假定橫線向右為正向,記投針與橫線正向的角為\(\theta\),則\(\theta \in[0, \pi]\),為均勻分布。

\[f(\theta) = \begin{cases} \frac{1}{\pi}, & \text{$0 \leq \theta \leq \pi$} \\ 0, & \text{others} \end{cases} \]

投針與橫線有交點,即\(y \leq \frac{L}{2}sin\theta\)

布豐投針估算\(\pi\) -- 蒙特卡羅模擬

針與橫線有交點的概率:
\(P(x) = \int_{0}^{\pi}\int_{0}^{\frac{L}{2}sin\theta}f(y,\theta)dyd\theta = \int_{0}^{\pi}\int_{0}^{\frac{L}{2}sin\theta}f(y)f(\theta)dyd\theta \\ = \int_{0}^{\pi}\int_{0}^{\frac{L}{2}sin\theta}\frac{2}{a} * \frac{1}{\pi}dyd\theta = \frac{2L}{a\pi}\)

如果做n次投針實驗,其中有k次針與橫線相交,則針與橫線相交的頻率為:\(\frac{k}{n}\),根據大數定理,頻率也就為概率。
$ \frac{2L}{a\pi} \approx \frac{k}{n}$ 即, \(\pi \approx \frac{2Ln}{ak}\)

MATLAB模擬實驗

用布豐投針實驗近似計算\(pi\)的值:
代碼如下:

l = 0.6; %針的長度
a = 1; %平行線的寬度
n = 1000000; %做n次投針試驗
k = 0; %記錄針與平行線相交的次數
y = unifrnd(0, a/2, 1, n); %在[0, a/2]內服從均勻分布隨機產生n個數
theta = unifrnd(0, pi, 1, n); %在[0, pi]內服從均勻分布隨機產生n個數
for i=1:n
    if y(i) < (l/2)*sin(theta(i)) 
        k = k + 1;
    end
end
f = k / n;
Pi = (2*l*n)/(a*k);

結果如圖所示:
此處輸入圖片的描述
如此進行多次實驗,進行估計。
如圖為進行100次重復投針實驗,每次投針1000000次,結果如圖所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM