Menu Close

Límites de sucesiones

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 soluciones de “Límites de sucesiones

  1. frahidzam
    limite :: [Double] -> Double -> Int -> Double
    limite (n:ns) x a
      | abs (n - maximum (take (a-1) ns)) < x = n
      | otherwise                             = limite ns x a
  2. adogargon
    limite :: [Double] -> Double -> Int -> Double
    limite (x:xs) a n
      | and [abs (x - y) < a | y <- take (n - 1) xs] = x
      | otherwise                                    = limite xs a n
  3. luipromor
    limite :: [Double] -> Double -> Int -> Double
    limite (y:xs) n a = aux n (y:xs) y a 
      where aux a (x:xs) n b
              | abs (n - maximum (take (b-1) (x:xs))) < a = n
              | otherwise                                 = aux a xs x b
  4. berarcmat
    limite :: [Double] -> Double -> Int -> Double
    limite (x:xs) a n
      | maximum (map (z -> abs (z - x)) (take (n-1) xs)) < a = x
      | otherwise = limite xs a n

Leave a Reply

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.