[心得] 線上開發MMA夢想成真

作者: jurian0101 (Hysterisis)   2014-08-24 04:00:03
好消息,你是不是也時常遇到各式數學小問題,
設想計算一陣子卡在手邊欠缺MMA奧援
TADA! https://programming.wolframcloud.com/
這下MMA的功能全在線上了,這下子除了Wolfram Alpha又多了別的選擇。
**只能說 Wolfram Alpha 自始至終還是蠻難用的,雖然前陣子突然可以吃大部分MMA代碼
卻在雲端編程平台這個新功能出現之後自動銷聲匿跡。不過xkcd似乎習慣用它解微分方
程 =)
- - - - 本文到此結束以下是多餘部分的分隔線 - - - -
舉個實例,可以在短時間想一想然後丟Woldram Progamming Cloud (下稱MMA雲)
解出的小專案
例如說 我下載了這個手機醒腦小遊戲
https://play.google.com/store/apps/details?id=jp.tekunodo.ttn 它只是個
音樂節奏遊戲的簡單版--5X5方格中放置1~25的數字,挑戰是最快依序1點到25
假設我是堅持一指神功,而數字是隨機放置,這樣我的手指需要移動的路徑長就是
一個隨機變數。於是,我想知道的是「這25!條路徑的 Mean 與 Variance」
** 最短路徑明顯是20單位長,那麼最長路徑是什麼呢,這又是另一個待解之謎

1 2 3 4 5 │
10 9 8 7 6 ←
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
(*產生座標*)
grid55= Flatten[#,1]&@ Outer[List,Range[5],Range[5]]
(*所有C(25,2)=300條線段*)
segments= Subsets[grid55,{2}]
(*300條線段總長*)
sumD= Total[EuclideanDistance@@@segments]
輸出:= 240 + 100 Sqrt[2] + 72 Sqrt[5] + 32 Sqrt[10] + 24 Sqrt[13] +
16 Sqrt[17] =796.114...
(*先來偷瞄一眼答案大概是多少,採用隨機抽樣*)
{Mean@#,Variance@#}&@
Table[
Total[EuclideanDistance@@@Partition[RandomSample[grid55],2,1]]*1.0
,{10000}]
輸出:= {63.6934,23.3471}
(*甚至可以畫出直方圖*)
Histogram[
Table[
Total[EuclideanDistance@@@Partition[RandomSample[grid55],2,1]]*1.
,{100000}]
,100]
設想我把所有25!種線段組合寫出來--當然不是真的寫,這樣得出的數據根本無法處理,
也一定會顯示記憶體不足,所以要腦內假想 :)
問題是裡面(1,1)到(1,2)的線段會出現幾次呢?
答案是 24 * 25! / 300 = 2/25 * 25! 條,
所有合法線段出現次數必然相同,均攤。因為所有組合嘛,不受1~25的任意置換影響
所以所有1-25總距離的平均 E(X) = 2/25 * sumD = 63.6891245... ###
變異數怎麼算? 利用 Var(X) = E(X^2) - E(X)^2
~~~~~~
要算這個
因為 X 的形式是像 s1 + s2 + ... + s24 , s_i是數字i到i+1的線段
X^2 就是 (s1^2+...+s24^2) + 2(s1s2 + s1s3 + ... + s23s24)
[ 共C(24,2)=276項 ]
將所有 X^2 總共 25! 種寫出來,加總,則不同的
形如 s_i^2 , i in Range[300] 的項要出現幾次? 還是 24*25!/ 300 = 2/25 * 25! 次
那形如 2 s_i s_j 的項呢? 是 276*25! / C(300,2) = 2/325 * 25! 次
求一下 sumD2= Total[(EuclideanDistance@@@segments)^2] = 2500
sumDiDj= Total[Times @@@ Subsets[EuclideanDistance @@@ segments,{2}]]
或者 ((sumD)^2 - sumD2)/2 = 315648.795...
因此 Var(X) = sumD2* 2/25 + 2* sumDiDj* 2/325 - (2/25 * sumD)^2
= 28.6036699...
←我不確定對否。為啥和抽樣的結果差這麼多,N=100000, (N-1)/N ->1
附上一部分程式碼的雲端版,無須登入即可看
https://www.wolframcloud.com/objects/c69f8c9c-3c0f-4aa1-a077-a8e1ad54ea78
神秘的常態分佈!
作者: leo80042 (嗯嗯啊啊去洗澡)   2014-08-24 23:13:00
cool!
作者: obelisk0114 (追風箏的孩子)   2014-08-29 13:16:00
要有Wolfram ID 才能用
作者: alfadick (悟道修行者)   2014-08-31 09:58:00
感覺好卡=_=

Links booklink

Contact Us: admin [ a t ] ucptt.com