利用亂數,在複雜的多個條件下,透過模擬而得到參考答案,在計算科學越來越進步的情況下,此法應用的領域範圍,已獲得大爆發式的增加。本文利用Excel VBA工具,來產生兩種亂數表,一個是均勻分配、另一個是標準常態分配亂數。
首先要說明的是,Excel VBA與其他軟體一樣,都有內建的亂數產生機制,基於實驗後的回顧檢察需求,我個人的需求是一個亂數種子(Seed),可以對應一個足夠亂的亂數表,而足夠亂的意思就是產生的數字要不重複、沒有週期循環的要求。如果再加上簡單易懂、易學的要求,那麼『平方取中法』最適合推薦。
以一個六位數整數的亂數表製作來說,平方取中法顧名思義就是第一步先隨機選取一個六位數整數,也就是種子作為整張亂數表的第一個亂數,接者第二個亂數的產生方式就是將前一個六位數整數對自己相乘(就是平方),原則上會獲得一個12位整數的數值,此時再把前後頭尾的三位數消去,如此就可以取出中段的六個整數數字,此即為取中的意思,然後第三個亂數、第四個…,依序透過迴圈方式給予產生出來。
例如取543710這個六位數做為種子,平方後會得到295620564100這個12位數,
1. 對該數字乘以0.001並取整數,可得295620564這個9位整數數
2.再對該數字乘以0.000001,可得295.620564這個3位整數與6位小數
3.取出小數,然後乘以1000000,如此可得620564這個亂數,並重複步驟1、2、3,即可獲得一張均勻分配的亂數表
當然,此法有需要作出防呆處理,亦即六位數整數自我相乘,萬一僅只得出11位數,而非12位數,固定去除頭尾三位數的運作下,得到的亂數必然越來越小,進而變成重複出現,而本文提供的防呆機制為亂數數值過小,就運用簡單的加法、乘法、取餘數的機制,再次確保亂數表可以順利編制產生。
既然已經會製作均勻分配的亂數表,再利用已知的常態分配公式,
搭配取捨法這個刪除機制,就能改變均勻分配的狀態,以下針對4個標準差範圍內的亂數表製作說明如下:
1. 首先製作兩張亂數表
2. 對6位數整數除以80000,取其餘數,然後減40000,接者除以10000,此時數字範圍變成-3.9999~3.9999之間的均勻分配亂數,並帶入常態分配公式計算出函數值,且已知該函數值最大不會超過0.4
3. 捨的部分:利用第二個亂數表產生0~0.4之間的均勻分配亂數,並且跟步驟2的函數值作大小比較,只要函數值不超過第二個0~04之間的均勻分配亂數,就予以保留
4. 重複步驟2、3,累積製作足夠所需的亂數數量
Excel VBA程式碼與註解請參考如下(平方取中法,均勻分配亂數)
Excel VBA程式碼與註解請參考如下(取手法,標準常態分配亂數)