module StatisticalMechanics.Ensemble where
import Numeric.Log
import Statistics.Probability
class StateProbability a where
stateProbability
∷ Double
→ a
→ Probability NotNormalized Double
stateLogProbability
∷ Double
→ a
→ Log (Probability NotNormalized Double)
instance StateProbability Double where
stateProbability :: Double -> Double -> Probability 'NotNormalized Double
stateProbability Double
kT Double
x = Double -> Probability 'NotNormalized Double
forall (n :: IsNormalized) x. x -> Probability n x
Prob (Double -> Probability 'NotNormalized Double)
-> (Double -> Double)
-> Double
-> Probability 'NotNormalized Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Double -> Double
forall a. Floating a => a -> a
exp (Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Double -> Double
forall a. Num a => a -> a
negate (Double -> Probability 'NotNormalized Double)
-> Double -> Probability 'NotNormalized Double
forall a b. (a -> b) -> a -> b
$ Double
xDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
kT
{-# Inline stateProbability #-}
stateLogProbability :: Double -> Double -> Log (Probability 'NotNormalized Double)
stateLogProbability Double
kT Double
x = Probability 'NotNormalized Double
-> Log (Probability 'NotNormalized Double)
forall a. a -> Log a
Exp (Probability 'NotNormalized Double
-> Log (Probability 'NotNormalized Double))
-> (Double -> Probability 'NotNormalized Double)
-> Double
-> Log (Probability 'NotNormalized Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Double -> Probability 'NotNormalized Double
forall (n :: IsNormalized) x. x -> Probability n x
Prob (Double -> Probability 'NotNormalized Double)
-> (Double -> Double)
-> Double
-> Probability 'NotNormalized Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Double -> Double
forall a. Num a => a -> a
negate (Double -> Log (Probability 'NotNormalized Double))
-> Double -> Log (Probability 'NotNormalized Double)
forall a b. (a -> b) -> a -> b
$ Double
xDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
kT
{-# Inline stateLogProbability #-}