annotate 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
rev   line source
rlm@10 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rlm@10 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rlm@10 3 ;;
rlm@10 4 ;; Monte-Carlo application examples
rlm@10 5 ;;
rlm@10 6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rlm@10 7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rlm@10 8
rlm@10 9 (ns
rlm@10 10 #^{:author "Konrad Hinsen"
rlm@10 11 :skip-wiki true
rlm@10 12 :doc "Examples for monte carlo methods"}
rlm@10 13 clojure.contrib.probabilities.random.examples-monte-carlo
rlm@10 14 (:require [clojure.contrib.generic.collection :as gc])
rlm@10 15 (:use [clojure.contrib.probabilities.random-numbers
rlm@10 16 :only (lcg rand-stream)])
rlm@10 17 (:use [clojure.contrib.probabilities.finite-distributions
rlm@10 18 :only (uniform)])
rlm@10 19 (:use [clojure.contrib.probabilities.monte-carlo
rlm@10 20 :only (random-stream discrete interval normal lognormal exponential
rlm@10 21 n-sphere
rlm@10 22 sample sample-sum sample-mean sample-mean-variance)]
rlm@10 23 :reload)
rlm@10 24 (:use [clojure.contrib.monads
rlm@10 25 :only (domonad state-m)]))
rlm@10 26
rlm@10 27 ; Create a linear congruential generator
rlm@10 28 (def urng (lcg 259200 7141 54773 1))
rlm@10 29
rlm@10 30 ;; Use Clojure's built-in random number generator
rlm@10 31 ;(def urng rand-stream)
rlm@10 32
rlm@10 33 ; Sample transformed distributions
rlm@10 34 (defn sample-distribution
rlm@10 35 [n rt]
rlm@10 36 (take n (gc/seq (random-stream rt urng))))
rlm@10 37
rlm@10 38 ; Interval [-2, 2)
rlm@10 39 (sample-distribution 10 (interval -2 2))
rlm@10 40 ; Compare with a direct transformation
rlm@10 41 (= (sample-distribution 10 (interval -2 2))
rlm@10 42 (map (fn [x] (- (* 4 x) 2)) (take 10 (gc/seq urng))))
rlm@10 43
rlm@10 44 ; Normal distribution
rlm@10 45 (sample-distribution 10 (normal 0 1))
rlm@10 46
rlm@10 47 ; Log-Normal distribution
rlm@10 48 (sample-distribution 10 (lognormal 0 1))
rlm@10 49
rlm@10 50 ; Exponential distribution
rlm@10 51 (sample-distribution 10 (exponential 1))
rlm@10 52
rlm@10 53 ; n-sphere distribution
rlm@10 54 (sample-distribution 10 (n-sphere 2 1))
rlm@10 55
rlm@10 56 ; Discrete distribution
rlm@10 57 (sample-distribution 10 (discrete (uniform (range 1 7))))
rlm@10 58
rlm@10 59 ; Compose distributions in the state monad
rlm@10 60 (def sum-two-dists
rlm@10 61 (domonad state-m
rlm@10 62 [r1 (interval -2 2)
rlm@10 63 r2 (normal 0 1)]
rlm@10 64 (+ r1 r2)))
rlm@10 65
rlm@10 66 (sample-distribution 10 sum-two-dists)
rlm@10 67
rlm@10 68 ; Distribution transformations
rlm@10 69 (sample-distribution 5 (sample 2 (interval -2 2)))
rlm@10 70 (sample-distribution 10 (sample-sum 10 (interval -2 2)))
rlm@10 71 (sample-distribution 10 (sample-mean 10 (interval -2 2)))
rlm@10 72 (sample-distribution 10 (sample-mean-variance 10 (interval -2 2)))
rlm@10 73