En matemáticas, la fórmula de Leibniz sirve para el cálculo de π, nombrada así en honor a Gottfried Leibniz, dice que:

La expresión anterior es una serie infinita denominada serie de Leibniz, que converge a π ⁄ 4. También se la denomina serie de Gregory-Leibniz para reconocer el trabajo de James Gregory, contemporáneo de Leibniz. Usando el símbolo de suma, la serie se puede expresar como

Esta serie o fórmula es un caso especial de una expansión más general de la serie para la función tangente inversa, la cual fue descubierta en el siglo XV por Madhava de Sangamagrama, un matemático indio y fundador de la escuela de astronomía y matemáticas de Kerala, unos 300 años antes de que Leibniz publicara su serie específica. En reconocimiento a su trabajo, también se conoce esta fórmula como la serie de Madhava-Leibniz.[1][2]

Demostración

editar

Considérese la serie geométrica infinita

 

Integrando los dos miembros de la igualdad, se obtiene una serie de potencias para la arcotangente:

 

Al introducir el valor x = 1 se obtiene la fórmula de Leibniz (la arcotangente de 1 es π ⁄ 4). El problema de este razonamiento es que 1 no se encuentra en el radio de convergencia de esta serie de potencias, por lo que hace falta un argumento más sólido para mostrar que la serie converge a tan−1(1) para x = 1. Una opción es mostrar la convergencia de la serie mediante el criterio de Leibniz para luego aplicar el teorema de Abel para demostrar que debe converger a tan−1(1). Sin embargo, también se puede utilizar un argumento completamente elemental.

Argumento elemental

editar

Considérese la siguiente descomposición:

 

Para |x| < 1, la fracción de la derecha es la suma de los términos restantes de la serie geométrica. Sin embargo, la ecuación no utiliza series infinitas, y se cumple para cualquier valor real de x. Integrando los dos miembros de 0 a 1, se obtiene:

 

A medida que  , la suma de los términos de la ecuación excepto la integral tiende a la serie de Leibniz, y la integral tiende a 0:

 

Esto demuestra la fórmula de Leibniz.

Eficiencia en el cálculo de π

editar

En la práctica, la fórmula de Leibniz es muy poco eficiente para el cálculo de π, pues requiere un número enorme de pasos para obtener cierta precisión. Para calcular π con 10 decimales correctos hacen falta más de cinco mil millones de operaciones matemáticas, que los ordenadores tardarán más en realizar que en calcular π con millones de decimales correctos mediante fórmulas más eficientes.

Sin embargo, si se trunca la serie en el momento adecuado, la representación decimal de la aproximación será correcta para muchos más dígitos, exceptuando cifras aisladas o grupos de cifras. Tomando 5 millones de términos, se obtiene:

3.1415924535897932384646433832795027841971693993873058...

donde las cifras subrayadas son incorrectas. De hecho, los errores son predecibles: están generados por los números de Euler En según la fórmula asintótica

 

donde N es un número entero divisible por 4. Si N es una potencia de diez, cada uno de los términos de la derecha es una fracción decimal finita. La fórmula es un caso especial de la fórmula de Boole de suma de series alternas. En 1992, Jonathan Borwein y Mark Limber calcularon π con 5.263 decimales utilizando sólo los mil primeros términos de la fórmula de Leibniz.

Mejora de la Eficiencia

editar

La serie de Leibniz puede ser optimizada considerablemente utilizando algoritmos propuestos por Antonio Molina [ver en github:[1]]:

Serie de Pi:

 


El Método Original: este método requiere demasiadas iteraciones, ya que, se ajusta por sobre y luego por debajo del número objetivo, es una serie que tiene como límite Pi, por esto tardara mucho en ir ajustándose, además por cada iteracion realizara un ajuste cada vez más pequeño y así hasta el infinito, pero este método puede ser utilizado como base para un algoritmo de optimización. el algoritmo original requiere un millón de iteraciones para lograr 5 decimales de precisión y con 100 iteraciones solo alcanza 1 decimal de precisión.

Pi_original(1000000) => 3.14159_16535897743     (5 decimales)
Pi_original(100) => 3.1_315929035585537         (1 decimal)
 
Gráfico de serie infinita de Leibniz para encontrar el valor de Pi


Método 1: promediar los últimos 2 resultados de una serie, por ejemplo 100 iteraciones, promediando el resultado 99 y el 100, obteniendo así un resultado más preciso incluso que el obtenido tras un millón de iteraciones del algoritmo original.

Pi_promedio(100) => 3.141592_138310996           (6 decimales)
 
Gráfico del promedio escalonado de la serie de Leibniz


Método 2: aplicar el método 1 a dos series continuas ej: 34 y 35 y posteriormente promediar sus resultados.

Pi_34 = Pi_promedio(34) => 3.1415_787467182046   (4 decimales)
Pi_35 = Pi_promedio(35) => 3.141_605369457352    (3 decimales)
(Pi_34 + Pi_35 )/2  => 3.141592_0580877783       (6 decimales)
 
comparación entre Serie Leibniz y su promedio escalonado


Método 3: analizado los métodos anteriores, se concluye que realizar promedios escalonados y luego realizar una cascada de promedios, logra acercarse al límite de la función mucho más rápido, reduciendo considerablemente la cantidad de iteraciones necesarias.

Promedios escalonados: en una analogía simple, es como subir por una escalera, en un instante tendrás los dos pies en la escalera, escalones distintos (sacas el promedio entre ambos) y luego subirás solo un peldaño manteniendo un escalón en común con el estado anterior (sacas el promedio entre ambos)

Útil en este algoritmo, ya que, se puede apreciar en el gráfico de la Serie de Leibniz y Serie en dos Grupos, que siempre esta por sobre o por debajo del objetivo y como su distancia se acorta bruscamente en comparación entre la primera y las siguientes iteraciones, se puede ver como si las restas fueran más grandes que las sumas, pero solo es un efecto visual, ya que, estas diferencias se va reduciendo por cada iteracion como una curva, por lo que, no sirve promediar todos sus resultados, si se ve la Serie en dos Grupos se notara que los promedios se mantienen alejados del centro objetivo.

 
Gráfico a de los dos grupos que conforman la serie y como convergen


Promedios en cascadas: en cuanto se cuente con los últimos N promedios escalonados de la serie, se debe realizar lo mismo para el siguiente nivel, calculando los promedios escalonados a los N resultados, obteniendo como la cantidad de N-1 resultados y luego volver a realizarlo para el siguiente nivel, hasta obtener solo un número como resultado N=1

Por cada N promedio habrá N niveles de profundidad antes de alcanzar un único número como resultado

Útil para un ajuste rápido, llegando a ganar incluso un decimal de precisión por cada nivel

 
Gráfico de promedios en Cascada


Resumen del Método propuesto por Antonio Molina: Se realiza en dos pasos:

- Se calcula la serie de Leibniz hasta una cantidad muy baja (ver cuadro resultados)

- Se realiza el cálculo de los promedios escalonados en cascada

- y se devuelve el último número obtenido como la aproximación de Pi


Este método logró a obtener los 6 decimales con solo 13 iteraciones y 10 promedios:

pi_optimizado(iter=13, prom=10)  => 3.141592_1043704067    (6 decimales)


Resultados Obtenidos:

Pi = 3.141592653589793

iter, prom, error,     result
   9,   6   err:5e-5   3.1415_3820036173 
  11,   7   err:-6e-6  3.14159_86833943497   <-  el original requirió 1 millón de iter para esto
  13,  10   err:5e-7   3.141592_1043704067 
  16,   9   err:3e-8   3.1415926_186270062 
  17,  11   err:-6e-9  3.14159265_9926378
  20,  11   err:4e-10  3.141592653_10039 
  21,  14   err:6e-11  3.1415926535_244623
  23,  14   err:9e-12  3.14159265358_0177 
  25,  18   err:7e-13  3.141592653589_0586
  27,  18   err:7e-14  3.1415926535897_16
  29,  18   err:9e-15  3.1415926535897_833
  30,  18   err:-6e-15 3.14159265358979_93
  31,  20   err:-4e-16 3.141592653589793_6   <- 15 dígitos de precisión la máxima capacidad de float


El código del algoritmo propuesto por Antonio Molina es el siguiente:

 def pi_optimizado(n_iter: int, n_prom = 1) -> float:
    pi : float = 0
    sum_res = 1
    dato = []
  
    # calcula serie
    for i in range(1, n_iter, 2):  # iteracion de impares
        pi += sum_res * (4/i)
        sum_res *= -1
  
        # acumula últimos N resultados para promediar
        if(i>=n_iter-n_prom): dato.append(pi)
  
    # cascada de promedios
    while(len(dato) > 1):
      prom = []
  
      # calcula promedios escalonados
      for i, num in enumerate(dato[0:-1]):
          prom.append( (num + dato[i+1]) /2 )
  
      dato = prom.copy()
  
    return dato[0]
Para más detalle ver -> ver fuente en Github [enlace[https://github.com/antoniomolinabravo/calculos-varios]]

Ejemplo pasos del Método 3:

Calcular Pi con 7 decimales utilizando el método optimizado por Antonio Molina, para esto iteraremos 16 veces y promediaremos los últimos 9 resultados en cascada y escalonados.

pi_optimizado(iter=16, prom=9)

Calcula las 16 primeras iteraciones de la serie de Leibniz

solo nos interesan las últimas 9+1 secuencias de las 16 Iteraciones (+1 para obtener 9 promedios)

Iter    4/i     i   S/R     Result
  7 0,307692308 13   1      3,283738484
  8 0,266666667 15  -1      3,017071817
  9 0,235294118 17   1      3,252365935
 10 0,210526316 19  -1      3,041839619
 11 0,19047619  21   1      3,232315809
 12 0,173913043 23  -1      3,058402766
 13 0,16        25   1      3,218402766
 14 0,148148148 27  -1      3,070254618
 15 0,137931034 29   1      3,208185652
 16 0,129032258 31  -1      3,079153394

   S/R: Suma o Resta
     i: secuencia números impares
Result: resultado anterior secuencia con suma o resta de 4/i

Proceso de Promedios de los últimos N resultados de la Iteraciones

promedio escalonado: promedio entre dos números y avanza uno
cascada de promedios: siguiente nivel realiza promedios del anterior, reduciendo en uno sus resultados y así repetitiva-mente hasta obtener solo un numero resultado

nivel 1      nivel 2      nivel 3      nivel 4      nivel 5      nivel 6      nivel 7      nivel 8      nivel 9 
3,15040515                
3,134718876  3,142562013              
3,147102777  3,140910826  3,14173642            
3,137077714  3,142090245  3,141500536  3,141618478          
3,145359288  3,141218501  3,141654373  3,141577455  3,141597966        
3,138402766  3,141881027  3,141549764  3,141602069  3,141589762  3,141593864      
3,144328692  3,141365729  3,141623378  3,141586571  3,14159432   3,141592041  3,141592952    
3,139220135  3,141774413  3,141570071  3,141596725  3,141591648  3,141592984  3,141592512  3,141592732  
3,143669523  3,141444829  3,141609621  3,141589846  3,141593285  3,141592467  3,141592725  3,141592619  3,141592675

NOTA: si lo pueden notar en este ejemplo por cada nivel gana aprox. un decimal de precisión

Resultado 3,1415926_75 (7 decimales)

Cantidad de Iteraciones 16 => 16 pasos

Cantidad de Promedios 9 => NxN/2 = 9x9/2 = 41 pasos

Cantidad Total de pasos => 16 + 41 = 57 pasos

Los 57 pasos vs 1 millón de pasos y se obtuvo mejor precisión


Próximas Mejoras:

Antonio Molina esta trabajando en mejorar el proceso o lograr un método distinto que logre proyectar la curva de la serie de Leibniz, recientemente incluyó una mejora al método 1, donde no sería necesario promediar, sino cambiar en la iteracion 4/i por 2/i que es resultado de los promedios de la suma y la resta con respecto a Pi, dando 4/i/2 => 2/i, esto ahorra el cálculo del promedio, pero aun esta realizando pruebas.

También ha considerado trabajar en base al cálculo del número A (de Antonio) que es 0.7853981633974 utilizado para ahorrar cálculos relacionados con círculos, que imaginariamente son proyectados en cuadrados que lo contienen (forma simple -> 78,5%).

 
Comparación series Pi

Comparación con otras Series Pi:

Se incluye Gráfica animada donde se compara algunas de las series Pi de eficiencia similar con la versión Leibniz optimizada a nivel 6 (por Antonio Molina), esto significa que toma los últimos 6 promedios y los desarrolla en cascada, para acelerar la convergencia, teniendo un bajo costo computacional en comparación a otros cálculos más complejos para alcanzar este nivel.


Referencias

editar
  • Jonathan Borweinn, David Bailey & Roland Girgensohn, Experimentation in Mathematics - Computational Paths to Discovery, A K Peters 2003, ISBN 1-56881-136-5, pages 28-30.
  1. George E. Andrews, Richard Askey, Ranjan Roy (1999), Special Functions, Cambridge University Press, p. 58, ISBN 0521789885 .
  2. Gupta, R. C. (1992), «On the remainder term in the Madhava-Leibniz's series», Ganita Bharati 14 (1-4): 68-71 .