-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path3.5.rkt
42 lines (38 loc) · 1.06 KB
/
3.5.rkt
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 scheme
; pre-defined
(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 ((range (- high low)))
(+ low (random range))))
; required
(define (estimate-integral P x1 x2 y1 y2 trials)
(define (experiment)
(P (random-in-range x1 x2)
(random-in-range y1 y2)))
(monte-carlo trials experiment))
; test
(define (square x) (* x x))
(define (P x y)
(let ((a (- x 5))
(b (- y 7)))
(<= (+ (square a) (square b))
(square 3))))
; (2,4)-(8,10)
; pi * r^2 = S, r = 3
(define (estimate-pi trials)
(define (estimate-s times)
(* (* 6 6)
(estimate-integral P 2 8 4 10 times)))
(/ (estimate-s trials) (square 3.0)))
(display "estinate-pi(10000x): ")
(display (estimate-pi 10000))