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]
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
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 π
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:
donde las cifras subrayadas son incorrectas. De hecho, los errores son predecibles: están generados por los números de EulerEn 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.
Los propios astrónomos-matemáticos de la escuela de Kerala, en particular Madhava de Sangamagrama y varios de sus discípulos, lograron mejoras notables en el ritmo de convergencia a π de la serie que Madhava mismo descubrió, 300 años antes que James Gregory y Gottfried Leibniz. La comunidad matemática sugiere que Madhava pudo llegar a dichas mejoras, en un principio, comparando los resultados parciales de la serie de Madhava-Leibniz, con la mejor aproximación de π que se tenía en la época:
Mejora de la Eficiencia
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.
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.
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.
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
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 = 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
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 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
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.