Simulizer

Monte Carlo

몬테카를로는 무작위로 점을 던져 답을 추정하는 방법입니다. 여기서는 정사각형 안에 점을 뿌려 원주율 π 를 추정해 봅니다.

What you'll make

N 개의 점을 단위 정사각형 [0,1]×[0,1] 에 뿌린 다음, 그중 원 x²+y²<1 안에 떨어진 점의 비율을 4배 하면 π 의 추정값이 됩니다.

Steps

  1. 새 파일을 만들고 시행 수 n = 100000 을 변수로 두세요.
  2. 명중 횟수 hits = 0.
  3. i0 부터 n-1 까지 도는 반복문 안에:
    • x = random(), y = random()
    • 만약 x*x + y*y < 1 이면 hits = hits + 1
  4. 반복 뒤에 pi_estimate = 4 * hits / n 을 계산하고 로그로 보내기 블록으로 출력하세요.

Pitfalls

  • 시행 수가 적으면 추정값이 들쭉날쭉합니다. n1000, 10000, 100000 으로 바꿔 보세요. 오차는 1/√n 으로 줄어드는데, 그리 빠른 편은 아닙니다.
  • 실행할 때마다 추정값이 달라집니다. 매번 똑같은 값이 나온다면 난수가 제대로 동작하지 않는 것입니다.

Variations

  • 주사위 시뮬1~6 의 정수 난수를 뽑아 각 눈이 나온 횟수를 세고, 그 분포를 히스토그램으로 그리세요.
  • 적분 추정 — 무작위로 뽑은 점 n 개에서 함수값 f(x_i) 를 구해 평균을 내면 [0,1] 구간의 적분값을 추정할 수 있습니다.
  • 점들을 산점도(scatter)에 그리고 명중오답을 색으로 구분하면 결과를 더 직관적으로 확인할 수 있습니다.

Accuracy

몬테카를로의 오차는 1/√n 으로 줄어듭니다. π 를 소수점 4자리까지 맞추려면 보통 수억 번의 시행이 필요합니다. 정밀한 값이 필요한 작업에는 적합하지 않은 방법입니다.

simulizer · monte-carlo