Blog

Brandon Rozek

Photo of Brandon Rozek

Software Developer, Researcher, and Linux Enthusiast.

Real Analysis Sequences in Haskell

Published on

Updated on

In Real Analysis it is useful to look at terms of a sequence. One of the best ways I’ve found to do this is in believe it or not Haskell. This is mainly for these two reasons

  • Support for infinite data structures

  • Built-in Data Type to keep fractional precision

Code

Let’s get started, first let us define a sequence by the following: $$ f(1) = 1, f(2) = 2, f(n) = \frac{1}{2}(f(n - 2) + f(n - 1)) $$ That is equivalent to the following haskell code:

f :: Integral a => a -> Ratio a
f 1 = 1
f 2 = 2
f n = 0.5 * (f (n - 2) + f (n - 1))

Now to generate the sequence we just need to map $f$ onto the natural numbers.

nsequence = map f [1..]

If you want to look at specific subsequences, such as even or odd:

odd_generator n = 2 * n - 1
odds = map odd_generator [1..]

even_generator n = 2 * n
evens = map odd_generator [1..]

To look at the differences between each term:

diff x = map (\(a, b) -> a - b) $ zip (tail x) (init x)
Reply via Email

Have you published a response to this? :