python蒙特卡洛方法求圆周率
蒙特卡洛方法求解圆周率pi
工具
python3.7 + pycharm
求解思路
首先使用random函数随机生成单位正方形之间的点,记录其分布情况,再求出1/4圆内的点与单位正方形内点的比值,将该值乘以4即为pi值,重复上述过程20次,利用numpy.mean函数和numpy.var函数求出均值mean和方差variance。改变投点个数,记录对应的mean和variance,用PrettyTable绘制结果表格。
python源代码
1. import random
2. import numpy as np
3. from prettytable import PrettyTable
4.
5.
6. def getPi():
7. arr = []
8. table = PrettyTable(["point num", "mean", "variance"])
9. time = [20, 50, 100, 200, 300, 500, 1000, 5000]
10. for t in time:
11. # print(t)
12. for j in range(20):
13. cnt = 0
14. for i in range(t):
15. x = random.uniform(0, 1) # 从一个均匀分布中随机采样,区间为左闭右开
16. y = random.uniform(0, 1)
17.
18. if (x * x + y * y) < 1:
19. cnt += 1
20. # 点分布在圆内的数量,因为正方形的面积为1,所以这个同时也是圆内的点与正方形内点的比值
21. vpi = 4.0 * (cnt / t) # 4 * pi/4 = pi
22. arr.append(vpi)
23. mean = np.mean(arr)
24. variance = np.var(arr)
25. table.add_row([t, mean, variance])
26. print(table)
27.
28.
29. getPi()
运行结果