Transform a sequence urs of uniform random number in the interval [0, 1)
into a sequence of normal random numbers with mean mu and standard
deviation sigma.
(defn normal
"Transform a sequence urs of uniform random number in the interval [0, 1)
into a sequence of normal random numbers with mean mu and standard
deviation sigma."
[mu sigma]
; This function implements the Kinderman-Monahan ratio method:
; A.J. Kinderman & J.F. Monahan
; Computer Generation of Random Variables Using the Ratio of Uniform Deviates
; ACM Transactions on Mathematical Software 3(3) 257-260, 1977
(fn [rs]
(let [[u1 rs] (stream-next rs)
[u2* rs] (stream-next rs)
u2 (- 1. u2*)
s (const (* 4 (/ (. Math exp (- 0.5)) (. Math sqrt 2.))))
z (* s (/ (- u1 0.5) u2))
zz (+ (* 0.25 z z) (. Math log u2))]
(if (> zz 0)
(recur rs)
[(+ mu (* sigma z)) rs]))))
Comments top
No comments for normal. Log in to add a comment.