开始使用免费开始使用

计算 π 的值

现在来做一个经典示例——估计 \(\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))
编辑并运行代码