blob: 438db99914b6a4fa778f826632014fc6a1fc9a18 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#lang racket
;; 5
(define (monte-carlo trials experiment)
(define (iter trials-remaining trials-passed)
(cond ((= trials-remaining 0)
(/ trials-passed trials))
((experiment)
(iter (- trials-remaining 1) (+ trials-passed 1)))
(else
(iter (- trials-remaining 1) trials-passed))))
(iter trials 0))
(define (random-in-range low high)
(let ((r (- high low)))
(+ low (* r (random)))))
(define (estimate-integral P x1 x2 y1 y2 n)
(* (monte-carlo n (lambda () (P (random-in-range x1 x2) (random-in-range y1 y2))))
(* (- x2 x1)
(- y2 y1))))
(estimate-integral
(lambda (x y) (<= (+ (sqr (- x 5)) (sqr (- y 7))) 1))
4 6
6 8
100)
;; 6
(define (make-rand seed)
(define (rand-update)
(random))
(define (rand-reset reset)
(random-seed reset))
(define (dispatch m . args)
(cond ((eq? m 'generate) (rand-update))
((eq? m 'reset) (rand-reset (car args)))))
dispatch)
(define rand (make-rand 43))
(rand 'generate)
(rand 'reset 42)
|