간단한 함수 적분하기
이번 연습 문제는 Monte Carlo Integration 개념을 소개하는 간단한 예제예요.
여기서는 간단한 적분 \( \int_0^1 x e^{x} dx\) 값을 구해 보겠습니다. 정확한 해는 $1$이지만, 시뮬레이션은 근사해를 주므로 $1$에 가까운 값을 기대할 수 있어요. 영상에서 보셨듯 절차는 간단합니다. 단일 변수 함수 $f(x)$에 대해:
- x축의 경계 $(x_{min}, x_{max})\(와 y축의 경계 \)(\max(f(x)), \min(\min(f(x)), 0))$를 정합니다.
- 이 직사각형 상자 안에서 균등분포로 점들을 여러 개 생성합니다.
- 상자의 넓이 (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\))에, 곡선 \(f(x)\) 아래에 놓인 점의 비율을 곱합니다.
이 과정을 마치면 Monte Carlo Integration을 사용해 정적분을 계산하는 기본 틀을 갖추게 됩니다.
이 연습은 강의의 일부입니다
Python으로 하는 통계 시뮬레이션
연습 안내
sim_integrate()함수에서xmin과xmax사이의 균등 난수를 생성해x에 할당하세요.- $\min(\min(f(x)), 0)\(과 \)\max(f(x))$ 사이의 균등 난수를 생성해
y에 할당하세요. - 곡선 \(f(x)\) 아래에 있는 점의 비율에 상자 넓이 (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\))를 곱한 값을 반환하세요.
- 마지막으로 람다 함수를 사용해
func를 $x e^{x}$로 정의하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Define the sim_integrate function
def sim_integrate(func, xmin, xmax, sims):
x = np.random.uniform(____, ____, sims)
y = np.random.uniform(____, ____, sims)
area = (max(y) - min(y))*(xmax-xmin)
result = area * sum(____(____) < abs(func(x)))/sims
return result
# Call the sim_integrate function and print results
result = sim_integrate(func = lambda x: ____, xmin = 0, xmax = 1, sims = 50)
print("Simulated answer = {}, Actual Answer = 1".format(result))