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