Nosotros aquí se describe cómo utilizar el problema voto aguja de Buffon para calcular π \ piπ , introduzcamos otro método, que es esencialmente el mismo, utilizando el método Monte Carlo.
Como se muestra en la figura, una longitud de lado aleatoria es 1 1Lanzarnnen el cuadrado de 1n frijoles, supongamos que haykkk cayó en1 4 \ frac {1} {4}41En el círculo unitario, el punto rojo en la figura. Luego, de acuerdo con la probabilidad geométrica, kn = π 4 1 \ frac {k} {n} = \ frac {\ frac {\ pi} {4}} {1}nortek=14P., Por lo tanto, π = 4 kn \ pi = \ frac {4k} {n}Pi=norte4 k。
Implementado en Python:
import numpy as np
def get_pi(n):
"""
:param n: 实验次数
:return: π的估计值
"""
#获得n个服从均匀分布U(0, 1)的随机数X, Y
X = np.random.uniform(0, 1, n)
Y = np.random.uniform(0, 1, n)
#实验成功的次数,用向量形式实现,比用for循环要快的多,特别是n很大的时候
k = np.sum(X ** 2 + Y ** 2 <= 1)
#得到π的估计并返回
pi = 4 * k / n
return pi
print(get_pi(10000))
Salida: 3.1424
El resultado de salida es mucho peor que el conocido 3.1415926, porque solo simulamos 10,000 experimentos, y el número de experimentos se puede aumentar para reducir el error.