이 문제는 몬테 카를로 적분(Monte Carlo integration)을 이용하는 문제입니다.
몬테 카를로 시뮬레이션(Monte Carlo simulation)에 대한 얘기는
SICP 책이나 위키를 참조해주세요.^^
여기서는 원의 넓이를 적분하여 구하는 문제입니다.
원에 외접하는 사각형을 그린 후 그 사각형 넓이에서 원넓이의 비율이
사각형 안의 아무 곳에 점을 찍었을 때 원 안에 들어가는 확률과 같기에
이를 이용하여 원넓이를 구하는 문제입니다.

잘 되는...건가요?
일단 간단히 답을 구해보면 반지름이 3인 원의 넓이이므로 3²π입니다.
이를 구하면 28.274333882308139146163790449516입니다. (엄청 길군요.)
즉, 28보다 더 큰 숫자가 나와야하는데 횟수를 늘릴수록 점점 멀어지네요.;;;
만든 방법은 다음과 같습니다.
in-P-test라는 프로시저를 만들어 P에 사각형 안의 점의 위치를 전달합니다.
P는 각각의 점을 받아 그 점이 원 안에 있는 확인하여 참/거짓을 반환합니다.
그럼 monte-carlo 프로시저에서 해결합니다.^^
참조
해럴드 애빌슨, 김재우 역, <컴퓨터 프로그램의 구조와 해석>, 인사이트, 2007, pp. 297
(define (square x) (* x x))
; section 3.1.2
(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))))
; answer
(define (estimate-integral P x1 x2 y1 y2 trials)
(define (in-P-test)
(P (random-in-range x1 x2) (random-in-range y1 y2)))
(* (* (- x2 x1) (- y2 y1)) (monte-carlo trials in-P-test)))
(define (P x y)
(<= (+ (square (- x 5)) (square (- y 7))) (square 3)))
; execute
(estimate-integral P 2 8 4 10 10)
(estimate-integral P 2 8 4 10 100)
(estimate-integral P 2 8 4 10 1000)
(estimate-integral P 2 8 4 10 10000)
(estimate-integral P 2 8 4 10 100000)
(estimate-integral P 2 8 4 10 1000000)
- SICP Exercise 연습문제 3.8 (2)2008/03/08
- SICP Exercise 연습문제 3.7 (0)2008/03/08
- SICP Exercise 연습문제 3.6 (0)2008/03/08
- SICP Exercise 연습문제 3.5 (0)2008/03/08
- SICP Exercise 연습문제 3.4 (0)2008/03/08
- SICP Exercise 연습문제 3.3 (0)2008/03/08
- SICP Exercise 연습문제 3.2 (0)2008/03/08
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.







댓글을 달아 주세요