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
showList :: [Euler] -> ShowS
$cshowList :: [Euler] -> ShowS
show :: Euler -> String
$cshow :: Euler -> String
showsPrec :: Int -> Euler -> ShowS
$cshowsPrec :: Int -> Euler -> ShowS
Show, Euler -> Euler -> Bool
(Euler -> Euler -> Bool) -> (Euler -> Euler -> Bool) -> Eq Euler
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Euler -> Euler -> Bool
$c/= :: Euler -> Euler -> Bool
== :: Euler -> Euler -> Bool
$c== :: 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
showList :: [EndEuler] -> ShowS
$cshowList :: [EndEuler] -> ShowS
show :: EndEuler -> String
$cshow :: EndEuler -> String
showsPrec :: Int -> EndEuler -> ShowS
$cshowsPrec :: Int -> EndEuler -> ShowS
Show, EndEuler -> EndEuler -> Bool
(EndEuler -> EndEuler -> Bool)
-> (EndEuler -> EndEuler -> Bool) -> Eq EndEuler
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EndEuler -> EndEuler -> Bool
$c/= :: EndEuler -> EndEuler -> Bool
== :: EndEuler -> EndEuler -> Bool
$c== :: EndEuler -> EndEuler -> Bool
Eq)
instance Discretize Euler where
dDrift :: 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 :: 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 :: a -> Euler -> Dot -> Double
dDt a
_ Euler
e Dot
_ = Euler -> Double
eDt Euler
e
instance Discretize EndEuler where
dDrift :: 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 :: 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 :: a -> EndEuler -> Dot -> Double
dDt a
_ EndEuler
e Dot
_ = EndEuler -> Double
eeDt EndEuler
e