Mercurial > lasercutter
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 examples5 ;;6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9 (ns10 #^{:author "Konrad Hinsen"11 :skip-wiki true12 :doc "Examples for monte carlo methods"}13 clojure.contrib.probabilities.random.examples-monte-carlo14 (:require [clojure.contrib.generic.collection :as gc])15 (:use [clojure.contrib.probabilities.random-numbers16 :only (lcg rand-stream)])17 (:use [clojure.contrib.probabilities.finite-distributions18 :only (uniform)])19 (:use [clojure.contrib.probabilities.monte-carlo20 :only (random-stream discrete interval normal lognormal exponential21 n-sphere22 sample sample-sum sample-mean sample-mean-variance)]23 :reload)24 (:use [clojure.contrib.monads25 :only (domonad state-m)]))27 ; Create a linear congruential generator28 (def urng (lcg 259200 7141 54773 1))30 ;; Use Clojure's built-in random number generator31 ;(def urng rand-stream)33 ; Sample transformed distributions34 (defn sample-distribution35 [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 transformation41 (= (sample-distribution 10 (interval -2 2))42 (map (fn [x] (- (* 4 x) 2)) (take 10 (gc/seq urng))))44 ; Normal distribution45 (sample-distribution 10 (normal 0 1))47 ; Log-Normal distribution48 (sample-distribution 10 (lognormal 0 1))50 ; Exponential distribution51 (sample-distribution 10 (exponential 1))53 ; n-sphere distribution54 (sample-distribution 10 (n-sphere 2 1))56 ; Discrete distribution57 (sample-distribution 10 (discrete (uniform (range 1 7))))59 ; Compose distributions in the state monad60 (def sum-two-dists61 (domonad state-m62 [r1 (interval -2 2)63 r2 (normal 0 1)]64 (+ r1 r2)))66 (sample-distribution 10 sum-two-dists)68 ; Distribution transformations69 (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)))