📜  用Python计算Pi(1)

📅  最后修改于: 2023-12-03 15:40:52.781000             🧑  作者: Mango

用Python计算Pi

计算 Pi 已经有很多种方法,其中最简单直接的方法是使用蒙特卡罗方法。蒙特卡罗方法主要是通过模拟实验来解决问题,这种方法通常在计算机模拟的场合中非常有用。

蒙特卡罗方法计算Pi

蒙特卡罗方法计算Pi的基本思想是这样的:假设有一个单位的圆,其半径为1,那么圆的面积为 π, 而这个圆内接正方形的面积为 4, 那么圆周率 π 的值就等于圆的面积除以正方形的面积。

因为我们知道正方形的面积是 4,而圆的面积是 π, 所以我们只需随机向正方形内生成 n 个点,并计数有多少个点落在圆内,这个比例就是圆的面积与正方形面积的比值,而圆周率 π 的值就等于这个比值乘以4.

下面我们将Python代码实现蒙特卡罗方法,来计算圆周率π的近似值。

import random

def monte_carlo_pi(n):
    inside = 0
    for i in range(n):
        x, y = random.random(), random.random()
        if x*x + y*y < 1:
            inside += 1
    return 4.0 * inside / n

print(monte_carlo_pi(1000000))

运行这个函数时,n需要表示模拟实验的点的数量,值越大,结果越接近π。

雷神之锤计算法

另一种 计算π 的方法是使用随机数生成,这被称为 反置拟合 (Dart Throwing)算法,该算法通过计算随机撒点的百分比来预测圆周率π的值。

这个方法基于全新的计算构造创建了射线交叉。 作者(由于粗心)和他的孪生兄弟经常发现自己在交叉口上挂着,认为这是一个有趣的效应,并用正确的参数计算出了圆的面积,最后使用 π 就可以解决问题。

import random

def dart_throwing_pi(n):
    inside = 0

    for i in range(n):
        x, y = random.random(), random.random()
        if x**2 + y**2 < 1:
            inside += 1

    return 4 * inside / n

print(dart_throwing_pi(1000000))

值得注意的是,这个算法也使用蒙特卡罗方法,但计算 π 值的方式与基本的蒙特卡罗方法不同。

结论

计算π 是一个会引起人们兴趣的问题,有多种方法可以解决,我们在这里尝试了两种,但它们的精度取决于随机数的数量,因此每个人都可以在不同的值上得到不同的结果。