Mercurial > lasercutter
diff src/clojure/contrib/test_contrib/probabilities/examples_monte_carlo.clj @ 10:ef7dbbd6452c
added clojure source goodness
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 21 Aug 2010 06:25:44 -0400 |
parents | |
children |
line wrap: on
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/clojure/contrib/test_contrib/probabilities/examples_monte_carlo.clj Sat Aug 21 06:25:44 2010 -0400 1.3 @@ -0,0 +1,73 @@ 1.4 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1.5 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1.6 +;; 1.7 +;; Monte-Carlo application examples 1.8 +;; 1.9 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1.10 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1.11 + 1.12 +(ns 1.13 + #^{:author "Konrad Hinsen" 1.14 + :skip-wiki true 1.15 + :doc "Examples for monte carlo methods"} 1.16 + clojure.contrib.probabilities.random.examples-monte-carlo 1.17 + (:require [clojure.contrib.generic.collection :as gc]) 1.18 + (:use [clojure.contrib.probabilities.random-numbers 1.19 + :only (lcg rand-stream)]) 1.20 + (:use [clojure.contrib.probabilities.finite-distributions 1.21 + :only (uniform)]) 1.22 + (:use [clojure.contrib.probabilities.monte-carlo 1.23 + :only (random-stream discrete interval normal lognormal exponential 1.24 + n-sphere 1.25 + sample sample-sum sample-mean sample-mean-variance)] 1.26 + :reload) 1.27 + (:use [clojure.contrib.monads 1.28 + :only (domonad state-m)])) 1.29 + 1.30 +; Create a linear congruential generator 1.31 +(def urng (lcg 259200 7141 54773 1)) 1.32 + 1.33 +;; Use Clojure's built-in random number generator 1.34 +;(def urng rand-stream) 1.35 + 1.36 +; Sample transformed distributions 1.37 +(defn sample-distribution 1.38 + [n rt] 1.39 + (take n (gc/seq (random-stream rt urng)))) 1.40 + 1.41 +; Interval [-2, 2) 1.42 +(sample-distribution 10 (interval -2 2)) 1.43 +; Compare with a direct transformation 1.44 +(= (sample-distribution 10 (interval -2 2)) 1.45 + (map (fn [x] (- (* 4 x) 2)) (take 10 (gc/seq urng)))) 1.46 + 1.47 +; Normal distribution 1.48 +(sample-distribution 10 (normal 0 1)) 1.49 + 1.50 +; Log-Normal distribution 1.51 +(sample-distribution 10 (lognormal 0 1)) 1.52 + 1.53 +; Exponential distribution 1.54 +(sample-distribution 10 (exponential 1)) 1.55 + 1.56 +; n-sphere distribution 1.57 +(sample-distribution 10 (n-sphere 2 1)) 1.58 + 1.59 +; Discrete distribution 1.60 +(sample-distribution 10 (discrete (uniform (range 1 7)))) 1.61 + 1.62 +; Compose distributions in the state monad 1.63 +(def sum-two-dists 1.64 + (domonad state-m 1.65 + [r1 (interval -2 2) 1.66 + r2 (normal 0 1)] 1.67 + (+ r1 r2))) 1.68 + 1.69 +(sample-distribution 10 sum-two-dists) 1.70 + 1.71 +; Distribution transformations 1.72 +(sample-distribution 5 (sample 2 (interval -2 2))) 1.73 +(sample-distribution 10 (sample-sum 10 (interval -2 2))) 1.74 +(sample-distribution 10 (sample-mean 10 (interval -2 2))) 1.75 +(sample-distribution 10 (sample-mean-variance 10 (interval -2 2))) 1.76 +