蒙特卡罗积分(Scheme语言实现)
具体见<计算机程序的构造和解释>第三章习题3.5。
程序如下:
- (define (estimate-pi trails)
- (sqrt (/ 6 (monte-carlo trails experiment))))
- (define (random-in-range low high)
- (let ((range (- high low)))
- (+ low (random (+ 1 range)))));
- (define (monte-carlo trails experiment)
- (define (iter remain res)
- (cond ((= 0 remain) (/ res trails))
- ((experiment)
- (iter (- remain 1) (+ 1 res)))
- (else (iter (- remain 1) res))))
- (iter trails 0))
- (define (fractional trails x1 x2 y1 y2 p)
- (define (test-func)
- (p x1 x2 y1 y2))
- (* (* (- x2 x1) (- y2 y1)) (monte-carlo trails test-func)))
- (define (test-func x1 x2 y1 y2)
- (< (+ (square (random-in-range x1 x2))
- (square (random-in-range y1 y2)))
- 1))
- (define (p x1 x2 y1 y2)
- (< (+ (square (random-in-range x1 x2))
- (square (random-in-range y1 y2)))
- 1))
- (define the-pi
- (lambda (trails x1 x2 y1 y2 p)
- (fractional trails x1 x2 y1 y2 p)
- ))
- (define (square x) (* x x))