Latest Posts:

18 de marzo de 2013

El algoritmo de Chudnovsky (o cómo se calculan los decimales de Pi en el siglo XXI)

Hoy, día 14 de marzo, es el día de Pi (por la forma de expresar las fechas en Estados Unidos: 3-14), y vamos a celebrarlo presentando uno de los algoritmos más útiles de la actualidad para calcular decimales de Pi: el algoritmo de Chudnovsky.

A lo largo de la historia han sido muchas las formas utilizadas por el ser humano para calcular aproximaciones cada vez más exactas de este número Pi, cociente entre la longitud de una circunferencia cualquiera y el diámetro de la misma: se han usado las áreas de polígonos inscritos y circunscritos a una circunferencia, se han encontrado interesantes aproximaciones numéricas con algunas fracciones sencillas, se han desarrollado series infinitas y productos infinitos de todas las formas que uno pueda imaginar…Vamos, de todo. Pero de entre todos estos métodos hay varios que destacan sobre el resto, y uno de los que más lo hacen es el denominado algoritmo de Chudnovsky.

El algoritmo de Chudnovsky es un algoritmo creado por David Volfovich Chudnovsky y Gregory Volfovich Chudnovsky, hermanos y matemáticos ucranianos nacionalizados estadounidenses, mediante el cual podemos obtener muy buenas aproximaciones del número Pi. Se basa en la siguiente expresión relacionada con el número Pi que encontró Ramanujan:

\cfrac{1}{\pi} = \cfrac{2\sqrt{2}}{9801} \; \displaystyle{\sum^\infty_{k=0} \cfrac{(4k)!(1103+26390k)}{(k!)^4 396^{4k}}}

La expresión del algoritmo de Chudnovsky es la siguiente:

 \cfrac{1}{\pi} = 12 \; \displaystyle{\sum^\infty_{k=0} \cfrac{(-1)^k (6k)! (13591409 + 545140134k)}{(3k)!(k!)^3 640320^{3k + 3/2}}}

y con ella obtenemos 14 decimales exactos más de Pi con cada término de la misma. ¿Qué significa esto? Muy sencillo. Vamos a partir del valor de Pi hasta su decimal número 50:

3.14159265358979323846264338327950288419716939937511

Si calculamos el primer término de esa suma, el correspondiente a k=0, la aproximación de Pi obtenida será 1 dividido entre ese resultado, que nos da lo siguiente:

\mathbf{3.1415926535897} 3420766845359157829834076223326091571

En negrita resalto la parte de ese resultado que coincide con el valor de Pi. Calculemos ahora los dos primeros términos. La aproximación de Pi ahora será 1 dividido entre la suma de los mismos. Obtenemos esto:

3.1415926535897 \mathbf{93238462643383} 58735068847586634599637

Como veis, los decimales que ya eran exactos con el primer término se mantienen con este segundo término, y añadimos 14 más (son los resaltados en negrita). Por hacer otro más, veamos que la tendencia continúa con el término siguiente. Al calcular 1 dividido entre la suma de los tres primeros términos obtenemos la siguiente aproximación de Pi:

3.141592653589793238462643383 \mathbf{27950288419716} 767885485

Los anteriores se mantienen y se añaden 14 nuevos decimales exactos. Y así sucesivamente.

Es una barbaridad obtener 14 decimales exactos más con cada término, ya que con muy poquitos términos obtenemos una aproximación escandalosamente cercana al valor real. Por eso este algoritmo es tan bueno, y por eso ha servido para obtener varios récords mundiales de cálculo de decimales del número Pi (por ejemplo, para éste de 5 billones de agosto de 2010 y para éste de 10 billones de octubre de 2011). 

Por eso es uno de los más utilizados en la actualidad para el cálculo de buenas (más bien buenísimas) aproximaciones de esta constante que tanto nos gusta.

Por cierto, para obtener los resultados que aparecen en esta entrada he utilizado Mathematica de la siguiente forma:
  • Definimos mediante una función el término general de la serie: a[k_]:=(12 (-1)^k (6 k)! (13591409+545140134 k))/((3 k)! (k!)^3 640320^(3 k+3/2))
  • Ahora, para calcular cada término utilizo el comando Sum. Por ejemplo, para calcular el primero uso Sum[a[k],{k,0,0}]
    pero como lo que quiero es calcular la aproximación de Pi que corresponde con este término hago lo siguiente (como quería 50 decimales le pongo un 51, 51 cifras significativas):
    N[1/Sum[a[k],{k,0,0}],51]
  • Para ampliar el número de términos simplemente cambiamos el segundo cero de {k,0,0}. Por ejemplo, para calcular la aproximación con los dos primeros términos N[1/Sum[a[k],{k,0,1}],51]
    y para los tres primeros
    N[1/Sum[a[k],{k,0,2}],51]
Si se os ocurre alguna otra manera de realizar estos cálculos con Mathematica os agradecería que nos lo comentarais.

Por cierto, una última curiosidad. Con
N[Pi,51]

Mathematica nos muestra una aproximación del número Pi con 50 decimales. Evidentemente, podemos aumentar el número de decimales para conseguir aproximaciones cada vez más exactas. ¿A que no sabéis que algoritmo utiliza el propio Mathematica para obtener dichas aproximaciones? Efectivamente, el algoritmo de Chudnovsky.

Imagen tomada de aquí, donde podéis encontrar mucha información sobre el cálculo del número Pi.

Fuente:

Gaussianos
google.com, pub-7451761037085740, DIRECT, f08c47fec0942fa0