0 | module Statistics.Distribution.Uniform
 1 |
 2 | import Data.So
 3 | import Statistics.Distribution.GSL
 4 | import System.Random
 5 |
 6 | ||| Sample from Uniform distribution
 7 | %foreign "C:gsl_ran_flat, libgsl"
 8 | gsl_uniform_c : (seed : AnyPtr) -> (min : Double) -> (max : Double) -> Double
 9 |
10 | public export
11 | gsl_uniform :(min : Double) -> (max : Double) -> GslRng -> IO Double
12 | gsl_uniform min max (MkGslRng seed) = pure $ gsl_uniform_c seed min max
13 |
14 | ||| Compute PDF from Uniform distribution
15 | public export
16 | gsl_uniform_pdf : (min : Double) -> (max : Double) -> (obs : Double) -> Double
17 | gsl_uniform_pdf min max y with (y < max && y > min)
18 |  _ | True = 1/(max - min)
19 |  _ | _    = 0
20 |
21 | ||| Sample from Uniform distribution using inverse CDF. It must hold that '0 < r < 1'.
22 | %foreign "C:gsl_cdf_flat_Pinv, libgsl"
23 | gsl_uniform_cdf_inv_c : (r : Double) -> (min : Double) -> (max : Double) -> Double
24 |
25 | public export
26 | gsl_uniform_cdf_inv : (min : Double) -> (max : Double) -> (r : Double) -> Double
27 | gsl_uniform_cdf_inv min max r = gsl_uniform_cdf_inv_c r min max