File: gsl.rb

package info (click to toggle)
ruby-distribution 0.8.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 624 kB
  • sloc: ruby: 4,535; makefile: 10
file content (36 lines) | stat: -rw-r--r-- 1,075 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
module Distribution
  module Uniform
    module GSL_
      class << self
        # Returns a lambda to call for uniformly distributed random numbers
        # returns a double precision float in [0, 1]
        def rng(lower = 0, upper = 1, seed = nil)
          seed = Random.new_seed.modulo 100000007 if seed.nil?
          rng = GSL::Rng.alloc(GSL::Rng::MT19937, seed)
          
          -> { lower + (upper - lower) * rng.uniform }
        end
        
        # :nodoc:
        def pdf(x, lower = 0, upper = 1)
          # rb-gsl/blob/master/ext/gsl_native/randist.c#L1732
          GSL::Ran.flat_pdf(x, lower, upper)
        end
        
        # :nodoc:
        def cdf(x, lower = 0, upper = 1)
          # rb-gsl/blob/master/ext/gsl_native/cdf.c#L644
          GSL::Cdf.flat_P(x, lower, upper)
        end
        
        # :nodoc:
        def quantile(qn, lower, upper)
          # rb-gsl/blob/master/ext/gsl_native/cdf.c#L646
          GSL::Cdf.flat_Pinv(qn, lower, upper)
        end
        
        alias_method :p_value, :quantile
      end
    end
  end
end