Monte Carlo
몬테카를로는 무작위로 점을 던져 답을 추정하는 방법입니다. 여기서는
정사각형 안에 점을 뿌려 원주율 π 를 추정해 봅니다.
What you'll make
N 개의 점을 단위 정사각형 [0,1]×[0,1] 에 뿌린 다음, 그중 원
x²+y²<1 안에 떨어진 점의 비율을 4배 하면 π 의 추정값이 됩니다.
Steps
- 새 파일을 만들고 시행 수
n = 100000을 변수로 두세요. - 명중 횟수
hits = 0. i가0부터n-1까지 도는 반복문 안에:x = random(),y = random()- 만약
x*x + y*y < 1이면hits = hits + 1
- 반복 뒤에
pi_estimate = 4 * hits / n을 계산하고 로그로 보내기 블록으로 출력하세요.
Pitfalls
- 시행 수가 적으면 추정값이 들쭉날쭉합니다.
n을1000,10000,100000으로 바꿔 보세요. 오차는1/√n으로 줄어드는데, 그리 빠른 편은 아닙니다. - 실행할 때마다 추정값이 달라집니다. 매번 똑같은 값이 나온다면 난수가 제대로 동작하지 않는 것입니다.
Variations
- 주사위 시뮬 —
1~6의 정수 난수를 뽑아 각 눈이 나온 횟수를 세고, 그 분포를 히스토그램으로 그리세요. - 적분 추정 — 무작위로 뽑은 점
n개에서 함수값f(x_i)를 구해 평균을 내면[0,1]구간의 적분값을 추정할 수 있습니다. - 점들을 산점도(scatter)에 그리고 명중과 오답을 색으로 구분하면 결과를 더 직관적으로 확인할 수 있습니다.
Accuracy
몬테카를로의 오차는 1/√n 으로 줄어듭니다. π 를 소수점 4자리까지
맞추려면 보통 수억 번의 시행이 필요합니다. 정밀한 값이 필요한 작업에는
적합하지 않은 방법입니다.