Serie de Leibniz
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
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
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:
- 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
La serie de Leibniz puede ser optimizada considerablemente utilizando algoritmos propuestos por Antonio Molina [ver en github:]:
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)
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)
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)
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_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 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.
- George E. Andrews, Richard Askey, Ranjan Roy (1999), Special Functions, Cambridge University Press, p. 58, ISBN 0521789885.
- Gupta, R. C. (1992), «On the remainder term in the Madhava-Leibniz's series», Ganita Bharati 14 (1-4): 68-71.