Werden wir Helden für einen Tag

Home | About | Archive

Stupid Monte Carlo

Posted on Jul 21, 2010 by Chung-hong Chan

據說現在已經沒有人用手計 Integration 。記得以前 A. Maths 計過很多,多數是 indefinite integral ,當年是完全不會計的。但是我去考會考時,將題目照抄一次在答題薄都有個 E 合格。學術人生,時至今天都是乎碌撞棍。

假設你要計這樣的東西:

int x3

minimum = 1, maximum = 3

如果用手計的話,就是先求其 antiderivative (F)。如果我的 A.Maths 仍然 valid 的話,F 就是 (x4)/4 + C 吧。之後再將 3 和 1 塞入 x 再相減 (( 即F(max) - F(min) )),即是 (34)/4 - (14)/4 = 20.
如果你相當無聊的話,係可以叫電腦產生 n 個 1 至 3 的亂數,再塞入 x3 n 次。所有 n 個計算結果計其平均值。再將此 mean 值乘以 max 及 min 的差,是可得 Integral 的近似值。
在 R ,如果要產生 n 個一般亂數( Uniform distribution 的亂數),可用 runif 的 function ,例如要產生 10000 個 1-3 之間的亂數:

runif(100000, min=1,max=3)

要計出上面的 definite integral 方法是:

# chew that < -
x<- runif(100000, min=1,max=3)
2*mean(x**3)

為何 mean 要乘 2 ,是因為 max - min = 2 。我求出的數字是 20.00751 ,與手計的 20 近似。當然, int 一次的話手計可能快過用機器模疑。但如果 int 了幾次的話,用這種方法求近似值會較快。


Powered by Jekyll and profdr theme