📅  最后修改于: 2023-12-03 15:18:57.970000             🧑  作者: Mango
圆周率是一个非常重要的数学常数,通常用希腊字母π表示。它的值约为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在科学计算、数值计算方面的高效性和精确性。