Aproximación entre pi y e
El día 11 de noviembre, se publicó en la cuenta de Twitter de Fermat’s Library la siguiente curiosa identidad que relaciona los números e y pi:
Definir las siguientes funciones:
1 2 |
sumaTerminos :: Int -> Double aproximacion :: Double -> Int |
tales que
- (sumaTerminos n) es la suma de los primeros n términos de la serie 1/(π²+ 1) + 1/(4π²+1) + 1/(9π²+1) + 1/(16π²+ ) + … Por ejemplo,
1 2 3 4 |
sumaTerminos 10 == 0.14687821811081034 sumaTerminos 100 == 0.15550948345688423 sumaTerminos 1000 == 0.15641637221314514 sumaTerminos 10000 == 0.15650751113789382 |
- (aproximación x) es el menor número de términos que hay que sumar de la serie anterior para que se diferencie (en valor absoluto) de 1/(e²-1) menos que x. Por ejemplo,
1 2 3 4 |
aproximacion 0.1 == 1 aproximacion 0.01 == 10 aproximacion 0.001 == 101 aproximacion 0.0001 == 1013 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
-- 1ª definición de sumaTerminos sumaTerminos :: Int -> Double sumaTerminos n = sum [1 / (((x ^ 2) * (pi ^ 2)) + 1) | x <- [1 .. fromIntegral n]] -- 2ª definición de sumaTerminos sumaTerminos2 :: Int -> Double sumaTerminos2 0 = 0 sumaTerminos2 n = 1 / (m^2 * pi^2 + 1) + sumaTerminos2 (n-1) where m = fromIntegral n -- Definición de aproximacion aproximacion :: Double -> Int aproximacion x = head [n | n <- [0..] , abs (sumaTerminos n - 1 / (e^2 - 1)) < x] where e = exp 1 |
Pensamiento
«Sólo sé que no se nada» contenía la jactancia de un excesivo saber, puesto que olvidó añadir: y aun de esto mismo no estoy completamente seguro.
Antonio Machado