2015/11/06

SICP 問題 3.5

(use srfi-27)

(define (random-in-range low high)
  (let ((range (- high low)))
    (+ low (* (random-real) range))))
;; 問題分には(+ low (random range))となっている.

(define (estimate-integral P x1 x2 y1 y2 trials)
  (let ((x-length (- x2 x1))
        (y-length (- y2 y1)))
    (let ((square-area (* x-length y-length)))
      (* square-area (monte-carlo trials
                                  (lambda () (P (random-in-range x1 x2)
                                                (random-in-range y1 y2))))))))

(estimate-integral (lambda (x y)
                           (<= (+ (square x) (square y)) 1))
                   -1.0 1.0 -1.0 1.0 10000)
gosh> 3.1436

estimate-integralの中で(random-in-range x1 x2)(random-in-range x1 x2)をletで束縛してmonte-carloに渡していたためなかなかうまくいきまんでした.


© 2022 wat-aro