이 문제는 몬테 카를로 적분(Monte Carlo integration)을 이용하는 문제입니다.

몬테 카를로 시뮬레이션(Monte Carlo simulation)에 대한 얘기는

SICP 책이나 위키를 참조해주세요.^^

 

여기서는 원의 넓이를 적분하여 구하는 문제입니다.

원에 외접하는 사각형을 그린 후 그 사각형 넓이에서 원넓이의 비율이

사각형 안의 아무 곳에 점을 찍었을 때 원 안에 들어가는 확률과 같기에

이를 이용하여 원넓이를 구하는 문제입니다.

 

c6

잘 되는...건가요?

 

일단 간단히 답을 구해보면 반지름이 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)

크리에이티브 커먼즈 라이선스
Creative Commons License
"in OCW" 카테고리의 다른 글

글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.

트랙백 주소 :: http://nosyu.pe.kr/trackback/1430

댓글을 달아 주세요

[로그인][오픈아이디란?]