commit 80164e3efa5ed478ac8c8f548722d5651cf6f8a1
parent c2cad7d41c1000eb85ae5414dfc46f55dde521aa
Author: Jared Tobin <jared@jtobin.ca>
Date: Sat, 19 Oct 2013 13:58:11 +1300
Add volume & a Lebesgue measure analog.
Diffstat:
1 file changed, 15 insertions(+), 4 deletions()
diff git a/src/Measurable.hs b/src/Measurable.hs
@@ 2,10 +2,10 @@
module Measurable where
+import Control.Applicative
import Control.Monad
import Data.List
import Data.Monoid
import Control.Applicative
import Numeric.Integration.TanhSinh
  A measure is a set function from some sigmaalgebra to the extended real
@@ 71,6 +71,10 @@ push :: (a > b) > Measure a > Measure b
push f mu = Measure pushforward
where pushforward g = measure mu $ g . f
+  The volume is obtained by integrating against a constant.
+volume :: Measure a > Double
+volume mu = measure mu (const 1)
+
  The mean is obtained by integrating against the identity function.
mean :: Measure Double > Double
mean mu = measure mu id
@@ 81,7 +85,8 @@ variance mu = measure mu (^ 2)  mean mu ^ 2
  Create a measure from a collection of observations from some distribution.
fromObservations :: Fractional a => [a] > Measure a
fromObservations xs = Measure $ \f > average . map f $ xs
+fromObservations xs = Measure $ \f >
+ average . map f $ xs
  Create a measure from a density function.
fromDensity :: (Double > Double) > Measure Double
@@ 96,8 +101,14 @@ convolute mu nu = Measure $ \f > measure nu
  The (sum) identity measure.
identityMeasure :: Fractional a => Measure a
identityMeasure = fromObservations [0]

+identityMeasure = fromObservations []
+
+  Lebesgue measure.
+lebesgue :: Double > Double > Measure Double
+lebesgue a b = fromDensity rectangle
+ where rectangle x  x >= a && x <= b = 1
+  otherwise = 0
+
  Simple average.
average :: Fractional a => [a] > a
average xs = fst $ foldl'