module QuantLib.Stochastic.Discretize
( module QuantLib.Stochastic.Discretize )
where
import QuantLib.Stochastic.Process
data Euler = Euler { Euler -> Double
eDt :: Double }
deriving (Int -> Euler -> ShowS
[Euler] -> ShowS
Euler -> String
(Int -> Euler -> ShowS)
-> (Euler -> String) -> ([Euler] -> ShowS) -> Show Euler
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Euler -> ShowS
showsPrec :: Int -> Euler -> ShowS
$cshow :: Euler -> String
show :: Euler -> String
$cshowList :: [Euler] -> ShowS
showList :: [Euler] -> ShowS
Show, Euler -> Euler -> Bool
(Euler -> Euler -> Bool) -> (Euler -> Euler -> Bool) -> Eq Euler
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Euler -> Euler -> Bool
== :: Euler -> Euler -> Bool
$c/= :: Euler -> Euler -> Bool
/= :: Euler -> Euler -> Bool
Eq)
data EndEuler = EndEuler { EndEuler -> Double
eeDt :: Double }
deriving (Int -> EndEuler -> ShowS
[EndEuler] -> ShowS
EndEuler -> String
(Int -> EndEuler -> ShowS)
-> (EndEuler -> String) -> ([EndEuler] -> ShowS) -> Show EndEuler
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EndEuler -> ShowS
showsPrec :: Int -> EndEuler -> ShowS
$cshow :: EndEuler -> String
show :: EndEuler -> String
$cshowList :: [EndEuler] -> ShowS
showList :: [EndEuler] -> ShowS
Show, EndEuler -> EndEuler -> Bool
(EndEuler -> EndEuler -> Bool)
-> (EndEuler -> EndEuler -> Bool) -> Eq EndEuler
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EndEuler -> EndEuler -> Bool
== :: EndEuler -> EndEuler -> Bool
$c/= :: EndEuler -> EndEuler -> Bool
/= :: EndEuler -> EndEuler -> Bool
Eq)
instance Discretize Euler where
dDrift :: forall a. StochasticProcess a => a -> Euler -> Dot -> Double
dDrift a
p Euler
e Dot
dot = a -> Dot -> Double
forall a. StochasticProcess a => a -> Dot -> Double
drift a
p Dot
dot Double -> Double -> Double
forall a. Num a => a -> a -> a
* Euler -> Double
eDt Euler
e
dDiff :: forall a. StochasticProcess a => a -> Euler -> Dot -> Double
dDiff a
p Euler
e Dot
dot = a -> Dot -> Double
forall a. StochasticProcess a => a -> Dot -> Double
diff a
p Dot
dot Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sqrt (Euler -> Double
eDt Euler
e)
dDt :: forall a. StochasticProcess a => a -> Euler -> Dot -> Double
dDt a
_ Euler
e Dot
_ = Euler -> Double
eDt Euler
e
instance Discretize EndEuler where
dDrift :: forall a. StochasticProcess a => a -> EndEuler -> Dot -> Double
dDrift a
p EndEuler
e Dot
dot = a -> Dot -> Double
forall a. StochasticProcess a => a -> Dot -> Double
drift a
p Dot
nextDot Double -> Double -> Double
forall a. Num a => a -> a -> a
* EndEuler -> Double
eeDt EndEuler
e
where nextDot :: Dot
nextDot = Double -> Double -> Dot
Dot (Dot -> Double
getT Dot
dot Double -> Double -> Double
forall a. Num a => a -> a -> a
+ EndEuler -> Double
eeDt EndEuler
e) (Dot -> Double
getX Dot
dot)
dDiff :: forall a. StochasticProcess a => a -> EndEuler -> Dot -> Double
dDiff a
p EndEuler
e Dot
dot = a -> Dot -> Double
forall a. StochasticProcess a => a -> Dot -> Double
diff a
p Dot
nextDot Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sqrt (EndEuler -> Double
eeDt EndEuler
e)
where nextDot :: Dot
nextDot = Double -> Double -> Dot
Dot (Dot -> Double
getT Dot
dot Double -> Double -> Double
forall a. Num a => a -> a -> a
+ EndEuler -> Double
eeDt EndEuler
e) (Dot -> Double
getX Dot
dot)
dDt :: forall a. StochasticProcess a => a -> EndEuler -> Dot -> Double
dDt a
_ EndEuler
e Dot
_ = EndEuler -> Double
eeDt EndEuler
e