计算 π 的值
现在来做一个经典示例——估计 \(\pi\) 的取值。
设想一个边长为 \(2\) 的正方形,以原点 \((0, 0)\) 为中心,四个顶点坐标为 $(1, 1)、(1, -1)、(-1, 1)、(-1, -1)$。该正方形面积为 $2\times 2 = 4$。再设想一个半径为 \(1\) 的圆,以原点为圆心,恰好内接于该正方形。这个圆的面积为 $\pi \times \text{radius}^2 = \pi$。
为估计 $\pi$,我们在该正方形内随机抽样多个点,并计算落在圆内的点的比例(满足 $x^2 + y^2 <= 1$)。圆的面积约为 \(4\) 倍的这一比例,从而得到对 \(\pi\) 的估计。
完成本练习后,您将掌握如何用模拟来进行数值计算。
本练习是课程的一部分
Python 中的统计模拟
练习说明
- 在控制台中使用
np.pi查看 \(\pi\) 的真实值。将sims初始化为 10000,将circle_points初始化为 0。 - 在
for循环中,使用np.random.uniform()在 -1 到 1 之间生成一个点(x 与 y 坐标),设置size=2。 - 使用方程 \(x^2 + y^2 <= 1\) 判断该点是否位于单位圆内,赋值给
within_circle,并相应增加circle_points。 - 打印对 \(\pi\) 的估计值
pi_sim,其为落在圆内的点所占比例的 4 倍。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Initialize sims and circle_points
sims, circle_points = ____, ____
for i in range(sims):
# Generate the two coordinates of a point
point = ____
# if the point lies within the unit circle, increment counter
within_circle = point[0]**2 + point[1]**2 <= 1
if ____ == True:
circle_points +=1
# Estimate pi as 4 times the avg number of points in the circle.
pi_sim = ____
print("Simulated value of pi = {}".format(pi_sim))