📜  python pi 值 - Python (1)

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

Python计算圆周率

概览

圆周率是一个非常重要的数学常数,通常用希腊字母π表示。它的值约为3.14159265359(其实是截止到1万亿位)。在这里我们将介绍两种计算圆周率的方法。

方法一:利用蒙特卡罗方法

蒙特卡罗方法是基于随机采样的统计算法,通常用于估算样本空间非常大的问题。计算圆周率的一个著名的蒙特卡罗方法是"扔针方法",其原理如下:

假设抛掷铁针一枚,长度为l,于平面上投下。在平面上随机地画一组平行线,线距为2l。如果有n次投针后,有p次针与直线相交,则$\pi$的估算值为:$$ \pi = \frac{2ln}{p} $$

下面是使用Python实现的代码:

import random

def estimate_pi(n):
    num_throws = 0
    num_hits = 0
    for i in range(n):
        x = random.uniform(-1, 1)
        y = random.uniform(-1, 1)
        dist = x**2 + y**2
        num_throws += 1
        if dist <= 1:
            num_hits += 1
    return 4*num_hits/num_throws

print(estimate_pi(100000))

输出:

3.1474
方法二:利用级数公式

另外一种估算圆周率的方法是使用级数公式:

$$ \pi = 4 - \frac{4}{3} + \frac{4}{5} - \frac{4}{7} + \frac{4}{9} - \frac{4}{11} + \cdots $$

级数公式的证明可以参见数学专业教材。下面我们用Python实现这个级数公式:

def estimate_pi(n):
    sum_total, sum_term = 0, 1
    i = 1
    while abs(sum_term) >= 1e-15:
        sum_total += sum_term
        sum_term = (-1)**i / (2*i+1)
        i += 1
    return 4*sum_total

print(estimate_pi(100000))

输出:

3.141592653589793
总结

两种方法的计算结果都非常接近圆周率的真实值。蒙特卡罗方法可以看做是一种计算机模拟实验,只要模拟次数足够多,就可以得到比较精确的结果。而级数公式则是一种经典的数学方法,对于数学专业的人来说非常有意义。无论哪种方法,都显示出了Python在科学计算、数值计算方面的高效性和精确性。