]> gitweb.factorcode.org Git - factor.git/commitdiff
random: adding lognormal, exponential, weibull, pareto, gauss, and beta distributions.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 31 Mar 2012 00:33:13 +0000 (17:33 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 31 Mar 2012 00:33:13 +0000 (17:33 -0700)
basis/random/random.factor

index 2a1f90c0ff8df879c4b4e1e1028aaa189c19d78e..d5f71e859691824f8d2c6756c414ee0ec04d8c94 100644 (file)
@@ -116,4 +116,24 @@ ERROR: too-many-samples seq n ;
     { [ os unix? ] [ "random.unix" require ] }
 } cond
 
+: lognormal-random-float ( mean sigma -- n )
+    normal-random-float exp ;
+
+: exponential-random-float ( lambda -- n )
+    0. 1. uniform-random-float 1 swap - log neg swap / ;
+
+: weibull-random-float ( lambda k -- n )
+    [ 0. 1. uniform-random-float 1 swap - log neg ] dip 1. swap / ^ * ;
+
+: pareto-random-float ( alpha -- n )
+    [ 0. 1. uniform-random-float 1 swap - ] dip [ 1. swap / ] bi@ ^ ;
+
+: gauss-random-float ( mean sigma -- n )
+    0. 1. uniform-random-float 1 swap - log -2 * sqrt
+    (cos-random-float) * * + ;
+
+: beta-random-float ( alpha beta -- n )
+    [ 1. gauss-random-float ] dip over zero?
+    [ 2drop 0 ] [ 1. gauss-random-float dupd + / ] if ;
+
 "random.mersenne-twister" require