Suma de inversos de potencias de cuatro
Esta semana se ha publicado en Twitter una demostración visual de la suma de inversos de potencias de 4:
1 |
1/4 + 1/4² + 1/4³ + ... = 1/3 |
Definir las funciones
1 2 |
sumaInversosPotenciasDeCuatro :: [Double] aproximacion :: Double -> Int |
tales que
- sumaInversosPotenciasDeCuatro es la lista de las suma de la serie de los inversos de las potencias de cuatro. Por ejemplo,
1 2 |
λ> take 6 sumaInversosPotenciasDeCuatro [0.25,0.3125,0.328125,0.33203125,0.3330078125,0.333251953125] |
- (aproximacion e) es el menor número de términos de la serie anterior que hay que sumar para que el valor absoluto de su diferencia con 1/3 sea menor que e. Por ejemplo,
1 2 3 4 5 |
aproximacion 0.001 == 4 aproximacion 1e-3 == 4 aproximacion 1e-6 == 9 aproximacion 1e-20 == 26 sumaInversosPotenciasDeCuatro !! 26 == 0.3333333333333333 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
-- 1ª definición sumaInversosPotenciasDeCuatro :: [Double] sumaInversosPotenciasDeCuatro = [sum [1 / (4^k) | k <- [1..n]] | n <- [1..]] -- 2ª definición sumaInversosPotenciasDeCuatro2 :: [Double] sumaInversosPotenciasDeCuatro2 = [1/4*((1/4)^n-1)/(1/4-1) | n <- [1..]] -- 3ª definición sumaInversosPotenciasDeCuatro3 :: [Double] sumaInversosPotenciasDeCuatro3 = [(1 - 0.25^n)/3 | n <- [1..]] -- 1ª solución aproximacion :: Double -> Int aproximacion e = length (takeWhile (>=e) es) where es = [abs (1/3 - x) | x <- sumaInversosPotenciasDeCuatro3] -- 2ª solución aproximacion2 :: Double -> Int aproximacion2 e = head [n | (x,n) <- zip es [0..] , x < e] where es = [abs (1/3 - x) | x <- sumaInversosPotenciasDeCuatro2] |
Pensamiento
Confiamos
en que no será verdad
nada de lo que pensamos.Antonio Machado