aivika-0.7: Simulation/Aivika/Dynamics/Random.hs
-- |
-- Module : Simulation.Aivika.Dynamics.Random
-- Copyright : Copyright (c) 2009-2013, David Sorokin <david.sorokin@gmail.com>
-- License : BSD3
-- Maintainer : David Sorokin <david.sorokin@gmail.com>
-- Stability : experimental
-- Tested with: GHC 7.6.3
--
-- Below are defined random functions that return the 'Dynamics' computations.
-- The values are initially defined in the integration time points and then
-- they are passed in to the 'memo0Dynamics' function to memoize and then interpolate.
--
module Simulation.Aivika.Dynamics.Random
(newRandomDynamics, newNormalDynamics) where
import System.Random
import Data.IORef
import Control.Monad.Trans
import Simulation.Aivika.Simulation
import Simulation.Aivika.Random
import Simulation.Aivika.Dynamics
import Simulation.Aivika.Dynamics.Memo.Unboxed
-- | Return the uniform random numbers in the integration time points.
newRandomDynamics :: Dynamics Double -- ^ minimum
-> Dynamics Double -- ^ maximum
-> Simulation (Dynamics Double)
newRandomDynamics min max =
memo0Dynamics $ do
x <- liftIO $ getStdRandom random
min + return x * (max - min)
-- | Return the normal random numbers in the integration time points.
newNormalDynamics :: Dynamics Double -- ^ mean
-> Dynamics Double -- ^ variance
-> Simulation (Dynamics Double)
newNormalDynamics mu nu =
do g <- liftIO newNormalGen
memo0Dynamics $ do
x <- liftIO g
mu + return x * nu