packages feed

dde-0.2.0: bench/Impl2.hs

{-# LANGUAGE FlexibleContexts #-}
module Impl2 ( mgModel ) where

import           Linear.V1
import           Numeric.DDE
import           Numeric.DDE.Model
import qualified Data.Vector.Storable as V

parMG0 :: MackeyGlass
parMG0 = MackeyGlass { _beta = 0.2
                     , _gamma = 0.1
                     }

-- | The Mackey-Glass model (with no external input).
-- Typical hStep = 0.1
mgModel :: Double -> Int -> (V1 Double, V.Vector (V1 Double))
mgModel hStep totalIters = r
  where
    -- Initial state x(t0) = 0.2
    state0 = V1 0.2
    len1 = 17 * round (recip hStep)  -- tauD = 17, delay time
    -- Initial conditions
    hist0 = V.replicate len1 state0
    inp = Input (V.replicate (totalIters + 1) 0.0)
    rhs' = mackeyGlassRhs parMG0
    -- Stepper implements Runge-Kutta schema
    stepper = rk4 hStep rhs'
    -- Provide the last state and the time trace
    r = integ' stepper len1 totalIters totalIters (state0, hist0, inp)