File tree Expand file tree Collapse file tree 4 files changed +75
-3
lines changed
Expand file tree Collapse file tree 4 files changed +75
-3
lines changed Original file line number Diff line number Diff line change 2525 习题完成情况:
2626 - 章节一: 43/46
2727 - 章节二: 88/97
28- - 章节三: 70 /82
28+ - 章节三: 71 /82
2929 - 章节四: TODO
3030 - 章节五: TODO
3131* 运行
121121
122122 当直接计算π困难时,可通过概率实验间接逼近。
123123
124- 这里利用了数论中的概率规律,将π与随机事件联系起来。(对于高数也只是低分飘过的我来说,不知道数论的东西也太正常了 )
124+ 这里利用了数论中的概率规律,将π与随机事件联系起来。(高数对于我来说已是雪泥鸿爪,更遑论数论的知识了 )
125125
126126 #+begin_src racket
127127 #lang racket
Original file line number Diff line number Diff line change 1+ #lang racket
2+ (require "stream.rkt " )
3+ (require "rand.rkt " )
4+
5+ (define (random-stream requests seed)
6+ (if (stream-null? requests)
7+ the-empty-stream
8+ (let ((request (stream-car requests))
9+ (rest-requests (stream-cdr requests)))
10+
11+ (cond ((eq? 'generate request)
12+ (let ((next-random (rand-update seed)))
13+ (cons-stream next-random
14+ (random-stream rest-requests next-random))))
15+
16+ ((and (pair? request) (eq? 'reset (car request)))
17+ (let ((new-seed (cadr request)))
18+ (random-stream rest-requests new-seed)))
19+
20+ (else
21+ (random-stream rest-requests seed))))))
22+
23+ (module+ test
24+ (require rackunit)
25+
26+ (test-case "Test for random-stream "
27+ (define requests (list-to-stream '(generate
28+ generate
29+ generate
30+ (reset 42 )
31+ generate
32+ generate
33+ generate
34+ generate)))
35+ (define random-numbers (random-stream requests 42 ))
36+ (check-equal? (stream-take-n random-numbers 8 ) '(2027382 1226992407 551494037 2027382 1226992407 551494037 961371815 ))
37+ )
38+ )
Original file line number Diff line number Diff line change 11#lang racket
22(require "stream.rkt " )
33(require "exercise3-50.rkt " )
4+ (require "rand.rkt " )
45
56(define (integers-starting-from n)
67 (cons-stream n (integers-starting-from (+ n 1 ))))
5253 int)))
5354 int)
5455
55- (provide add-streams scale-stream ones integers fibs interleave pairs integral)
56+ (define random-number-stream
57+ (cons-stream random-init
58+ (stream-map rand-update random-number-stream)))
59+
60+ (define (map-successive-pairs f s)
61+ (cons-stream
62+ (f (stream-car s) (stream-car (stream-cdr s)))
63+ (map-successive-pairs f (stream-cdr (stream-cdr s)))))
64+
65+ (define cesaro-stream
66+ (map-successive-pairs (lambda (r1 r2) (= (gcd r1 r2) 1 ))
67+ random-number-stream))
68+
69+ (define (monte-carlo experiment-stream passed failed)
70+ (define (next passed failed)
71+ (cons-stream
72+ (/ passed (+ passed failed))
73+ (monte-carlo
74+ (stream-cdr experiment-stream)
75+ passed
76+ failed)))
77+ (if (stream-car experiment-stream)
78+ (next (+ passed 1 ) failed)
79+ (next passed (+ failed 1 ))))
80+
81+ (define pi-stream
82+ (stream-map (lambda (p) (sqrt (/ 6 p)))
83+ ;; bypass division by zero problem
84+ (stream-filter (lambda (p) (not (= p 0 )))
85+ (monte-carlo cesaro-stream 0 0 ))))
86+
87+ (provide add-streams scale-stream ones integers fibs interleave pairs integral monte-carlo)
5688
5789(module+ test
5890 (require rackunit)
Original file line number Diff line number Diff line change 2121 (let ((range (- high low)))
2222 (+ low (random range))))
2323
24+ (provide random-init rand-update)
25+
2426(module+ test
2527 (require rackunit)
2628 (require rackunit/text-ui)
You can’t perform that action at this time.
0 commit comments