pbj0812의 코딩 일기

[통계학] 몬테 카를로 방법을 통한 원의 넓이 계산(python) 본문

Science/통계학

[통계학] 몬테 카를로 방법을 통한 원의 넓이 계산(python)

pbj0812 2020. 8. 30. 02:43

0. 목표

 - 몬테 카를로 방법을 통한 원의 넓이 계산

1. 실습

 1) library 호출

import random
import matplotlib.pyplot as plt

 2) 인풋 데이터 제작 함수

  - x와 y가 -1 ~ 1 사이의 랜덤한 실수 생성

  - x**2 + y**2 가 1보다 작을 경우 원의 넓이에 포함되게 리스트에 넣어줌

def monte(inp):
    circle = 0
    non_circle = 0
    circle_x = []
    circle_y = []
    non_circle_x = []
    non_circle_y = []
    for i in range(inp):
        x = random.uniform(-1, 1)
        y = random.uniform(-1, 1)
        if (x**2) + (y**2) <= 1:
            circle += 1
            circle_x.append(x)
            circle_y.append(y)
        else:
            non_circle +=1
            non_circle_x.append(x)
            non_circle_y.append(y)
    return circle, non_circle, circle_x, circle_y, non_circle_x, non_circle_y

 3) 그림제작 함수

  - 제목에는 전체 횟수와 원에 해당하는 점의 갯수 정의

def graph(inp):
    circle, non_circle, circle_x, circle_y, non_circle_x, non_circle_y = monte(inp)
    fig = plt.figure()
    fig.set_size_inches(15, 15)
    plt.scatter(circle_x, circle_y, color = 'r')
    plt.scatter(non_circle_x, non_circle_y, color = 'b')
    plt.title(str(inp) + "," + str(circle))

2. 결과

 - 400, 4000 등으로 입력하여 결과가 앞에서부터 3141592~의 형식으로 나오면 잘 맞추었다고 볼 수 있음.

 - 대략 사십만번 이상은 되어야 3.14 까지 계산됨.

 1) 사백번

 2) 사천번

 3) 사만번

 4) 사십만번

 5) 사백만번

3. 참고

 - 몬테 카를로 방법

Comments