Existen muchos métodos que nos permiten aproximarnos al mágico número
. Con un poco de astucia podemos, pensando un poco, imaginar un método para su aproximación. Lo difícil es que seamos capaces de inventar algo eficiente.
Hace algún tiempo comentaba este tema con un amigo. Hablábamos de la Aguja de Buffón, un método que yo acababa de conocer y que me dejó pasmado, pues es tremendamente ocurrente y no demasiado complejo.
Éste método nos dice que, si tenemos una aguja de longitud
y la dejamos caer de forma aleatoria sobre un plano dividido en lineas paralelas entre sí una distancia
, la probabilidad de que la aguja corte a alguna linea es de
. De ahí, y suponiendo
agujas totales y
agujas que cortan una linea, tenemos que
. Cuantas más agujas tiremos, mejor aproximación obtendremos de
. La demostración en el enlace de antes.
Éste método es bastante lento, pues ganamos unos pocos decimales por cada cientos de iteraciones. Pero lo curioso del asunto no es la eficiencia, sino la ocurrencia del método. Si de verdad queremos una buena aproximación deberíamos interesarnos por las Series de Ramanujan (nada recomendable sin un buen nivel de matemáticas), que convergen a
con velocidades de vértigo. Especialmente la descubierta por los hermanos Chudnovsky en 1987, que ofrece ni más ni menos que 15 cifras decimales de
por término:

Existen otros métodos para las aproximaciones de
. Si queréis mas información, echad un vistazo al Algoritmo de Borwein, de orden de convergencia 4 (en cada iteración se cuadruplica el número de decimales) y a sus derivaciones, el Algoritmo de Gauss-Legendre/Brent-Salamin con convergencia de segundo orden, la Fórmula de Bailey-Borwein-Plouffe que permite calcular el n-ésimo dígito de
sin necesidad de calcular los anteriores (¡realmente interesante!), la Fórmula de Leibniz , el Algoritmo de Liu Hui que es bastante gráfico (aunque no tanto como el que enseñaré luego), las fórmulas de tipo Machin, que es el método que se usó para batir el record de cómputo de decimales de
, la solución de Euler al Problema de Basilea o el Producto de Wallis del que hablaré otro día.
El método de la Diana
Lo que yo venía a contar era esto. Como comentaba antes, un día estaba hablando con un colega de la Aguja de Buffón. Yo quedé sorprendido por lo fácilmente aplicable en la vida real que era el método, pero me enseñó otro aún mas sencillo.
Imaginemos un círculo inscrito en un cuadrado de lado
. Éste círculo tendrá, lógicamente, radio 1. El área del cuadrado será
y la del círculo inscrito será
. De aquí en adelante obviaré las unidades.
Ahora bien, ¿cual es la probabilidad de que dado un punto dentro de la figura, éste esté dentro del círculo? O dicho de otra forma: si nuestra figura fuera una diana y estuviéramos jugando a los dardos, ¿cual sería la probabilidad de que un dardo diera en la diana (círculo) y no en el marco?
La probabilidad vendrá dada por la relación que hay entre el área del círculo y la del cuadrado, es decir,
. También podremos calcular la probabilidad a base de pruebas, es decir, tirando dardos al azar (podemos llamar a Steve Wonder y José Feliciano) y viendo la relación que hay entre las veces que acertamos y las totales: 
Podemos por tanto igualar ambas relaciones (la teórica y la experimental):
y despejando
tenemos que 
¿Qué nos dice esto exactamente? Pues, siendo claros, que cuantos más dardos tiremos, más nos acercaremos a
. Siendo técnicos, deberíamos decir que la función
converge a
cuando
tiende a infinito.
Para demostrarlo, podríamos pasarnos días y días tirando dardos con los ojos vendados sobre nuestra diana e ir apuntando los resultados. Pero hombre... para algo están los ordenadores. El siguiente script lo he hecho en python+pythong y calcula decimales de
por éste método para un número de dardos concreto.
PYTHON:
-
def pi_diana(disparos):
-
create_rectangle(0, 0, 1000, 1000, "blue")
-
create_circle(500, 500, 500, "red")
-
dentro=0
-
for i in range(disparos):
-
x=random()*1000
-
y=random()*1000
-
if sqrt(pow(500-x, 2)+pow(500-y, 2))<500:
-
create_point(x, y, "green")
-
dentro+=1
-
else:
-
create_point(x, y, "red")
-
return float(4*dentro/float(disparos))
Como veis, es bastante sencillo. Ahora los resultados para distintos disparos:
Tal y como era de esperar, el resultado nos recuerda un poco a
. Pero tampoco mucho. Hemos estado dos tardes jugando a los dardos, y obtenemos dos únicas cifras significativas, vaya chasco, ¿una cifra por día?
No pasa nada, no nos deprimimos y estamos 2 meses jugando hasta lanzar 10.000 dardos:
Uf, ya hemos hecho un montón de agujeros, ¿eh?. Hemos conseguido otra cifra significativa más. Ya la mayoría de la gente se conformaría con decir que
y se quedarían tan anchos. Pero nosotros no, nosotros somos queremos más.

Después de dos años y medio jugando a los dardos sin parar para comer, los dardos ya no clavan porque no queda diana. Lo que antes era diana, ahora es un gran agujero y nuestros dardos chocan con la pared. Paramos pues, y nos conformamos con lo que tenemos.
Lo peor de todo es que han sido dos años perdidos, pues no hemos conseguido ni una cifra significativa más. Creo que después de esto podemos reconocer que el método no es demasiado efectivo... ¡pero nosotros hemos estado dos años sin ir a trabajar!
En fin, como veis, el ocurrente método es ineficiente como él sólo, pero no importa. La gracia del asunto es ver cómo
, y las matemáticas en general, están más presentes en la vida real de lo que pensamos, y que esos números que en un principio nos parecen inventados como
,
o
nos rodean en todo momento.