Exercise 3-82 Original
Exercise 3.82. Redo Exercise 3.5 on Monte Carlo integration in terms of streams. The stream version of Estimate-integral is not a argument telling how many trials to perform. Instead, it'll produce a stream of estimates based on successively more trials.
Code
(define ( Random-in-range Low High) (let ( (range ( - High low) ) ) (+ low (* (random ) range) ) ) ) (define (random-number-pairs low1 high1 low2 high2)(cons-stream ( Cons (random-in-range low1 high1) (random-in-range low2 high2)) (random-number-pairs low1 high1 low2 high2 ))) (Define (Monte-carlo experiment-stream passed failed) (define ( next Passed failed) (cons-stream (/ passed ( + passed failed) ) (monte-carlo (stream-cdr experiment-stream) Passed failed) ) ) (if (stream-car experiment-stream)(next (+ passed 1 ) (failed)(next passed (+ failed 1) ))) (Define (estimate-integral p x1 x2 y1 y2) ( Let (Area (* (- x2 x1) (- y2 y1))( randoms (random-number-pairs x1 x2 y1 y2 ))) (scale-stream (monte-carlo (stream-map p randoms) 0 0) area))) (define (sum-of-square x y) ( + (* x x) ( * y y ))) (define F ( lambda (x ) ( not > ( (- (car x) 1 ) (- (cdr x) 1 ) ) 1 ) ) ) ) (define pi-stream (estimate-integral f 0 2 0 2))
"SICP Exercise" 144 Exercise 3.82