35 lines
1.1 KiB
Haskell
35 lines
1.1 KiB
Haskell
import Data.List (mapAccumL)
|
|
|
|
feigenbaumApprox :: Int -> [Double]
|
|
feigenbaumApprox mx = snd $ mitch mx 10
|
|
where
|
|
mitch :: Int -> Int -> ((Double, Double, Double), [Double])
|
|
mitch mx mxj =
|
|
mapAccumL
|
|
(\(a1, a2, d1) i ->
|
|
let a =
|
|
iterate
|
|
(\a ->
|
|
let (x, y) =
|
|
iterate
|
|
(\(x, y) -> (a - (x * x), 1.0 - ((2.0 * x) * y)))
|
|
(0.0, 0.0) !!
|
|
(2 ^ i)
|
|
in a - (x / y))
|
|
(a1 + (a1 - a2) / d1) !!
|
|
mxj
|
|
d = (a1 - a2) / (a - a1)
|
|
in ((a, a1, d), d))
|
|
(1.0, 0.0, 3.2)
|
|
[2 .. (1 + mx)]
|
|
|
|
-- TEST ------------------------------------------------------------------
|
|
main :: IO ()
|
|
main =
|
|
(putStrLn . unlines) $
|
|
zipWith
|
|
(\i s -> justifyRight 2 ' ' (show i) ++ '\t' : s)
|
|
[1 ..]
|
|
(show <$> feigenbaumApprox 13)
|
|
where
|
|
justifyRight n c s = drop (length s) (replicate n c ++ s)
|