El límite de una sucesión, con una aproximación a y una amplitud n, es el primer término x de la sucesión tal que el valor absoluto de x y cualquiera de sus n siguentes elementos es menor que a.
Definir la función
limite :: [Double] -> Double -> Int -> Double |
tal que (limite xs a n) es el límite de xs xon aproximación a y amplitud n. Por ejemplo,
λ> limite [(2*n+1)/(n+5) | n <- [1..]] 0.001 300 1.993991989319092 λ> limite [(2*n+1)/(n+5) | n <- [1..]] 1e-6 300 1.9998260062637745 λ> limite [(1+1/n)**n | n <- [1..]] 0.001 300 2.7155953364173175 |
Soluciones
import Data.List (tails) limite :: [Double] -> Double -> Int -> Double limite xs a n = head [ x | (x:ys) <- segmentos xs n , all (\y -> abs (y - x) < a) ys] -- (segmentos xs n) es la lista de los segmentos de la lista infinita xs -- con n elementos. Por ejemplo, -- λ> take 5 (segmentos [1..] 3) -- [[1,2,3],[2,3,4],[3,4,5],[4,5,6],[5,6,7]] segmentos :: [a] -> Int -> [[a]] segmentos xs n = map (take n) (tails xs) |
Pensamiento
De diez cabezas, nueve
embisten y una piensa.
Nunca extrañéis que un bruto
se descuerne luchando por la idea.Antonio Machado
4 Comments