文章目錄

我要很認真的說、我真的不是數學系的~ = . .=

這次想要來筆記一下、一個超好用的東西~ @ 0@++ 雖然、過程也許可能有點難懂,不過、it’s ok。最重要的只是不要害怕
算式。(← 順便提醒自己一下)

rand number、是個跑模擬會用到、基本到不行的一樣東西。不管是在哪種語言,只要、srand()、rand(),然後…rand num
就會被生出來了。可是、挑剔的我,絕對不會因此滿足的,因為、根據情況不同,資料的數據分佈肯定會不一樣。

而、這次要講的box muller、在實做上、只需要短短的幾行就可以解決了我的問題阿~ (握拳) 為了怕自己忘記、一定要認真
的紀錄一下整個過程(有的過程、我大概會跳過啦~ XDDD 很多東西沒那摸熟 哈)

不想看無趣(又不正確?)的推導嗎~XDDDD
那就直接看精簡版吧~

box muller、和一般的rand有啥不同咧~ 其實、一般程式裡面用的rand、都是線性的,無論是從系統出的、還是尼很自豪的
說,『我那可是用內建的rand函數跑出來的咧~』其實、都跳脫不了那個線性的框框。很前一陣子、我異常的著迷於rand~。
就在那時候、我挖到了box muller,它和系統出的不同在於,box muller有著、最常見的圖形分佈,也就是『常態分佈』,
所謂的常態分佈就是…. 統計裡面最常看到的 → 中間高、兩邊低。而這種分佈圖、在各方面都有蠻多運用的。也有很多
讓人容易混亂的別名(中間定理、鐘型分佈、高斯分佈…balabala),和類似常態分佈(柯西分佈、韋伯分佈…)的其他圖形
。其實、我沒有很認真的去比較過它們的不同啦~ = “””= 功力不夠~ XDD 我只都覺得、它們就是中間比較高、其他地方比較
低。可能有些會牽扯到收不收斂的問題、還有對不對稱…這類的。

而其中、box muller、就是要用到常態分佈
圖形和其算式啦~ @ @+++

常態分佈圖形及算式如下,代表著期望值0、變異數1、其相關的變化,基本上就是基於修改這2數所產生的變化:

$$
\begin{equation}
p(x): = \frac {e ^{-\frac{x^2}{2}}} {\sqrt {2 \pi}} \Longleftarrow N(0, 1)
\text{ ,$ \\\ $ the mean = 0, variance = 1 }
\label{eq:fn1}
\end{equation}
$$

我們將 $ \eqref{eq:fn1} $ 經過轉換、可以得到下式 $ \eqref{eq:fn2} $ :

$$
\begin{equation}
\int _{-\infty} ^{\infty} {dxe^{-\frac{x^2}{2}}} = \sqrt {2 \pi}
\label{eq:fn2}
\end{equation}
$$

將$ \eqref{eq:fn2} $取平方、並做簡單的拆解(科、那種平方啦、座標啦~最容易想到的就是x、y 轉 r、$\theta$的極座標了
,還蠻直覺的)。

$$ \begin{equation} (\int _{-\infty} ^{\infty} {dxe^{-\frac{x^2}{2}}})^2 = \int _{-\infty} ^{\infty} {dxdye^{- \frac {x^2 + y^2} {2}}} \end{equation} $$

如同上段所說、我們利用xy座標系轉極座標系如下$\eqref{eq:block1}$以及$\eqref{eq:block2}$的基本資料、代入
$\eqref{eq:fn2}$

$$
\begin{gather}
& x = r cos {\theta} \
& y = r sin {\theta}
\label{eq:block1}
\end{gather}
$$


$$
\begin{gather}
x^2 + y^2 = r^2 \
\tan^{-1} {\frac{y}{x}} = \theta \
\frac {\mid \partial(x, y) \mid} {\mid \partial(r, \theta) \mid} = r
\label{eq:block2}
\end{gather}
$$

把上面那些都塞進去算式、利用一下超好用的Jacobian,我們可以得到$\eqref{eq:fn3}$

$$ \begin{equation} \begin{aligned} \int _{-\infty} ^{\infty} {dxdye^{-\frac{x^2 + y^2}{2}}} & = \int _{0} ^{2 \pi} {d\theta \int _{0} ^{\infty} {drre^{- \frac {r^2}{2}}}} \\ & = 2 \pi \int _{0} ^{\infty} {due^{-u}} ~~~~ (u = \frac {r^2} {2}) \\ & = 2 \pi [ -e^{-u} ] _{0} ^{\infty} = 2 \pi \end{aligned} \label{eq:fn3} \end{equation} $$

一直到這邊、其實我們都在證明…. 常態分佈的算式和$r$、$\theta$… ㄜ、是有關係的。 (應該是可以這摸說….吧~)
接下來、好不容易要進入正題了~ @ @+++

我們將$\eqref{eq:fn3}$ 移來移去然後、再順便帶入一下$\eqref{eq:block2}$、我們可以得到下面這個$\eqref{eq:fn4}$

$$
\begin{equation}
1 = \frac {1} {2 \pi} \int _{-\infty} ^{\infty} {dxdye ^{- \frac {x^2 + y^2} {2}}}
\label{eq:fn4}
\end{equation}
$$

然後、我們將$\eqref{eq:fn4}$ 整個整理好成為 $R$ 的關係式、得到$\eqref{eq:fn5}$:

$$ \begin{equation} \begin{aligned} U(R) & = \frac {1} {2 \pi} \int _{0} ^{2 \pi} {d \theta \int _{0} ^{R} {drre^{- \frac {r^2} {2}}}} \\ & = \int _{0} ^{\frac {R^2} {2}} {due ^{-u}} = 1 - e ^{- \frac {R^2} {2}} \end{aligned} \label{eq:fn5} \end{equation} $$

其實、我們也可以很清楚的知道$\eqref{eq:block3}$的內容,就…. 算式講得很白啦~ XDD 跳過~

$$ \begin{gather} \lim _{R \to 0} U(R) & = & 0 \\ \lim _{R \to \infty} U(R) & = & 1 \label{eq:block3} \end{gather} $$

再回去看一下$\eqref{eq:fn5}$、我們令它$ = p$、然後再交換交換…就可以得到$\eqref{eq:fn6}$

$$
\begin{equation}
U(R) = p ~ \Longrightarrow ~ R = \sqrt{-2 log (1 - p)}
\label{eq:fn6}
\end{equation}
$$

~結果、終於要出現囉~ 科科科

我們再利用一下$\eqref{eq:block1}$的東西、把R帶入…然後經過一些整理、將它們表達為$s$、$t$的函數、得到$\eqref{eq:fn7}$

$$
\begin{equation}
\begin{split}
s := 1 - p \in [0, 1], t \in [0, 1] \
x = \cases {
\sqrt{-2log(s)}cos(2 \pi t) \cr
\sqrt{-2log(s)}sin(2 \pi t)
}
\end{split}
\label{eq:fn7}
\end{equation}
$$

最後一步囉~ (歐耶~) 我們將$\eqref{eq:fn7}$ 分別引入常態分佈的mean和variance,就完成…box muller的隨機數產生
器啦~

$$
\begin{equation}
\begin{split}
& z = \mu + \sigma \sqrt {-2log(s)} cos(2 \pi t) \
& \text {or,} \
& z = \mu + \sigma \sqrt {-2log(s)} sin(2 \pi t) \
\end{split}
\label{eq:fn8}
\end{equation}
$$

好好、我相信…大家看完一定還是霧颯颯的、所以… 我們利用$\eqref{eq:fn8}$來一個精簡版總結:

  • 我們只要決定好$\mu$和$\sigma$,用這個決定好隨機數分佈範圍和樣貌。 (←這個就是邪惡的圖形函數)

  • 利用系統產生隨機數$s$和$t$。 (←利用這2個隨機數、讓圖形產生變動、其實讓$s=t=rand()$也不是不行、就按照需求吧
    一般來說、我比較愛2個都是隨機~ XDDD)

  • 最後把所有的東西統統帶入 $\eqref{eq:fn8}$、就完成啦~ XDDDD

很簡單、很簡單、很簡單的吧~ @ @+++

也就是說、我們依照上面的精簡版,可以得到一個簡單到不行的規律,就是….. 只要、爽爽的把圖形函數換掉,然後…
其他通通帶入算式就好啦~(撒花轉圈圈) 想要什摸分佈、就會是什摸分佈囉~ (←請考慮合理的情況下~ = . .=|||)

文章目錄