Data Mining - Homework 1
求pi值
在1*1的区域内,随机坐标点,计算与圆心的距离判断其是否在圆内,并据此根据公式
$$
S_扇 = \frac{S_内}{N}
$$
计算扇形面积.
并根据公式推出pi的计算方法:
$$
\pi = S_扇 * 4
$$
随机采样
结果
N | mean | variance |
---|---|---|
20 | 3.196 | 0.133584 |
50 | 3.1432 | 0.066086 |
100 | 3.1428 | 0.038376 |
200 | 3.137 | 0.011779 |
300 | 3.130133 | 0.008907 |
500 | 3.13648 | 0.005124 |
1000 | 3.1406 | 0.002293 |
5000 | 3.146328 | 0.000691 |
可以看出
- 求出的pi在真实值两侧波动。
- 方差随着采样点的增加而降低。
求解简单积分
$$
\int^1_0x^3
$$
均匀分布采样
1 | x = random.random() |
根据N的值重复上述步骤,每次结果加上(1-0)*y/N
,计算积分结果的期望,并对此过程重复100次。计算100次内所求的积分结果的均值和方差,结果如下。
N | mean | variance |
---|---|---|
5 | 0.256824 | 0.013612 |
10 | 0.255383 | 0.009499 |
20 | 0.25415 | 0.003882 |
30 | 0.252468 | 0.003206 |
40 | 0.249425 | 0.002229 |
50 | 0.253835 | 0.001218 |
60 | 0.250496 | 0.001627 |
70 | 0.250794 | 0.001097 |
80 | 0.250277 | 0.001191 |
100 | 0.253963 | 0.000806 |
- 采样取得的结果大部分比真实值0.25大,猜测是均匀分布的随机采样导致的。
- 方差大体上随着N的增加而降低。
求解复杂积分(二重积分)
$$
\int^4_{x=2}\int^1_{y=-1}f(x,y) = \frac{y^2e^{-y^2} +x^4e^{-x^2}}{x*e^{-x^2}}
$$
由于积分过程中涉及到对
$$
\int e^{-x^2}dx
$$
的求解,因而无法通过公式求解。
均匀分布采样
假设x, y满足均匀分布,则在范围内每个值的概率均等。直接使用Python random
包的random()
实现随机。
1 | x = random.random() * 2 + 2 # x in [2, 4] |
重复蒙特卡洛100次后得到的结果如下(输出文件为test3.csv):
N | mean | variance |
---|---|---|
10 | 114360.7 | 13878564835 |
20 | 111494.6 | 5569440463 |
30 | 106297 | 4787094413 |
40 | 113941.8 | 3436205685 |
50 | 108208 | 2410939505 |
60 | 118424 | 2306120360 |
70 | 111722.6 | 1486991942 |
80 | 110579.2 | 1632578538 |
100 | 116911.1 | 1635650179 |
200 | 112678.5 | 592460179.8 |
500 | 112312.4 | 194789459.6 |
- 重复100次蒙特卡洛方法可以得到积分结果在正确值两侧振动,且随着重复次数增多,更接近真实结果。
纵坐标×pow(10, 10)为真实的方差
- 方差随着N的增大呈下降趋势。