Module: Distribution::Uniform::Ruby_

Defined in:
lib/distribution/uniform/ruby.rb

Class Method Summary collapse

Class Method Details

.cdf(x, lower = 0, upper = 1) ⇒ Object

The uniform cumulative density function (CDF) == Arguments If you are referring the wiki page for this continuous distribution the arguments can be translated as follows

  • +x+ - same as continuous random variable
  • +lower+ - lower limit or a, must be a real number
  • +upper+ - upper limit or b, must be a real number

== Reference

The implementation has been adpoted from GSL-1.9 gsl/cdf/flat.c


54
55
56
57
58
59
60
61
62
# File 'lib/distribution/uniform/ruby.rb', line 54

def cdf(x, lower = 0, upper = 1)
  if x < lower
    0
  elsif x > upper
    1
  else
    (x - lower) / (upper - lower)
  end
end

.pdf(x, lower = 0, upper = 1) ⇒ Object

Uniform probability density function on [a, b]

== Arguments If you are referring the wiki page for this continuous distribution the arguments can be translated as follows

  • +x+ - same as continuous random variable
  • +lower+ - lower limit or a, must be a real number
  • +upper+ - upper limit or b, must be a real number

== Reference

The implementation has been adopted from GSL-1.9 gsl/randist/flat.c


35
36
37
38
39
# File 'lib/distribution/uniform/ruby.rb', line 35

def pdf(x, lower = 0, upper = 1)
  upper, lower = lower, upper if lower > upper
  return 1 / (upper - lower) if (lower..upper).member? x
  0
end

.quantile(qn, lower = 0, upper = 1) ⇒ Object Also known as: p_value

The uniform inverse CDF density function / P-value function == Arguments If you are referring the wiki page for this continuous distribution the arguments can be translated as follows

  • +qn+ - same as integral value
  • +lower+ - lower limit or a, must be a real number
  • +upper+ - upper limit or b, must be a real number

== Returns

The implementation has been adpoted from GSL-1.9 gsl/cdf/flatinv.c


80
81
82
83
84
85
# File 'lib/distribution/uniform/ruby.rb', line 80

def quantile(qn, lower = 0, upper = 1)
  fail RangeError, 'cdf value(qn) must be from [0, 1]. '\
  "Cannot find quantile for qn=#{qn}" if qn > 1 || qn < 0

  qn * upper + (1 - qn) * lower
end

.rng(lower = 0, upper = 1, seed = nil) ⇒ Object

Returns a lambda that emits a uniformly distributed sequence of random numbers between the defined limits

== Arguments

  • +lower+ - Lower limit of the distribution
  • +upper+ - Upper limit of the distribution
  • +seed+ - Seed to set the initial state, randomized if ommited

15
16
17
18
19
# File 'lib/distribution/uniform/ruby.rb', line 15

def rng(lower = 0, upper = 1, seed = nil)
  seed = Random.new_seed if seed.nil?
  prng = Random.new(seed)
  -> { prng.rand * (upper - lower) + lower }
end