You are on page 1of 7

數學與資訊科技

機率的眼見為實
作者:吳宇藤


目錄:

 發想

 運作原理

 使用器材

 實驗圖片

 完整程式碼

 個別區塊程式碼

 實驗結果

 心得

2
發想:
最近數學正好學到條件機率,有些觀念雖然淺顯易懂
卻有些抽象,譬如投擲一骰子,則投到每一點的機率皆為
1/6,但是現實中由於時間有限加上外力等因素,無法實測
多次投擲後是否每一點點數出現機率趨近 1/6,因此我欲結
合資訊科技所學到的 Arduino,製造一顆骰子,以大量投擲
的方式去證明單一點數出現的機率著實靠近 1/6。
使用器材:
12C LCD 1602 液晶顯示模
組。
用於顯示文字及資訊
LED 燈。
用於製作骰子之視覺效果

無源蜂鳴器。
用於提醒測試者實驗完成

3
運作原理:
當 Arduino 開始執行後實驗隨即開始,此實驗以第五
點做為代表。一開始 LCD 螢幕上顯示 n(fifth) =0,代表第
五點現在被擲到的次數為零次,而 rounds 代表執行的回合
數,也就是骰子的骰出次數,一開始亦為零,第一輪執行
時,若骰到的點數恰為第五點,則第五顆 LED 燈泡將會亮
起,n(fifth)會顯示 1,rounds 顯示 1,若骰到的點數不為第
五點,舉例骰到第一點,則第一顆燈泡將亮起,rounds 顯
示 1(每一局 rounds 都會再加一),按照此邏輯持續往下
一局進行,直到回合數達到設定值,則實驗停止,蜂鳴器
發出聲音提醒實驗者回來紀錄數據。
實驗圖片:

本次實驗將最終回合數設為
3000,左下圖為結果上兩張
為過程及接線。接線的部分
簡單地將彼此並聯。

4
完整程式碼:

格別區塊程式碼請見下頁。

5
個別區塊程式碼:
第一二行引進函式庫,first 到 sixth
為骰子的點數,代表第二到第七腳
位。fifth_rem 代表此時骰到第五點
的次數總和,lim 代表停止實驗的數
值,setup()裡面將腳位和 LCD 等初
始化。

Remember()中,傳入當前骰到的點
數,例如骰到點數 5 則 fifth_rem 加
一,而此現象會在 total 小於 lim 時
失效。

Remember_all()中,簡易地將每回合
結束後將 total 加一。Thorw()也就是
此實驗隨機的關鍵,以 random 函式
將骰子一到六號的出現隨機化。

Warn()當實驗結束時以發出不同音
調的方式提醒實驗人員,其中
tone(觸發腳位,音調編號,持續時
間)。

迴圈中,設置完 LCD 即進入擲骰子


環節,投擲完畢後,將骰到的點數
對應的 LED 燈點亮並記錄次數,接
著將 n(fifth)的數值顯示出來,並在
下一行顯示總回合數(以
Remember_all 幫助),而如果投擲次
數超過 lim 則上述事件將停止發
生,並藉由 Warn()提醒實驗已完
成。

6
實驗結果:
實驗結果為當回合數進行至 3000 時,第五點被投擲的
次數為 477 次,得知此次實驗第五點被投擲機率為 0.159,
與預先期待的 1/6,約 0.167 相差只有 0.008 左右,考量到
次數並非非常多以及其他因素,此次實驗的數據我個人相
當滿意。
心得:
此次實驗讓我心裡有種踏實感,以前學機率時被告知
的當你投擲硬幣時兩面出現機率會相等,而當你大量投擲
後單面出現的機率也會靠近 1/2,此種說法我並非完全信服,
因為內心總有許多對機率存疑的態度與矛盾的生活經驗。
但是經過這次實驗後,我徹底被此實驗數據給說服,此次
實驗約耗費我十五分鐘左右,而若是我將終止數值調成
10000 之類的次數,以及縮短 delay 時間,或許能在短時間
內完成更精確的實驗。當初異想天開用 Arduino 結合機率
去完成這次的實驗,花費了我頗多時間構想,包括打程式
碼的過程,循序漸進的先製造隨機骰子,再到加入紀錄時
間的功能,最後到 LCD 顯示與蜂鳴器提醒等,我都花費了
不少心力去完成,即便途中遇到些許困難譬如 LCD 顯示不
佳以及不少的錯誤及例外,都靠著思考以及尋求問題而最
終獲得解決。

You might also like