Python/SciPy

SciPy 적분 결과 시각화

임베디드 친구 2025. 12. 10. 20:11
반응형

SciPy 적분 결과 시각화

1. 서론

적분은 수학과 과학의 여러 분야에서 중요한 역할을 하는 연산입니다. 특정 구간에서의 면적을 구하거나, 변화하는 양을 누적하는 데 사용됩니다. SciPyintegrate 모듈은 다양한 수치 적분 방법을 제공하며, 이를 통해 복잡한 함수의 적분을 효율적으로 수행할 수 있습니다.

하지만 적분 결과를 수치로만 확인하는 것보다 그래프를 통해 시각적으로 분석하면 이해가 훨씬 쉬워집니다. 이번 포스팅에서는 SciPyMatplotlib를 활용해 적분 결과를 시각화하는 방법에 대해 살펴보겠습니다.


2. 적분 대상 함수 정의

먼저 적분할 함수를 정의하고, 이를 시각화해 보겠습니다. 예제에서는 다음과 같은 함수 $ f(x) = x^2 \times e^{-x} $를 사용하겠습니다.

import numpy as np
import matplotlib.pyplot as plt

# 함수 정의
def func(x):
    return x**2 * np.exp(-x)

# x 범위 설정
x = np.linspace(0, 10, 1000)
y = func(x)

# 그래프 시각화
plt.figure(figsize=(10, 6))
plt.plot(x, y, label='$x^2 e^{-x}$', color='b')
plt.title('적분 대상 함수: $x^2 e^{-x}$')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.grid(True)
plt.show()

위 코드를 실행하면 적분할 함수의 형태를 시각적으로 확인할 수 있습니다.


3. SciPy를 이용한 수치 적분

scipy.integrate.quad 함수를 이용해 특정 구간에서 적분을 수행할 수 있습니다. 다음은 $ x = 0 $에서 $ x = 10 $까지의 적분을 수행하는 예제입니다.

from scipy.integrate import quad

# 적분 수행
definite_integral, error = quad(func, 0, 10)

print(f"적분 결과: {definite_integral:.4f}")
print(f"오차 추정값: {error:.4e}")

이 결과를 통해 적분값과 오차를 확인할 수 있습니다.


4. 적분 결과 시각화

적분된 면적을 시각적으로 표현하면 이해가 훨씬 쉬워집니다. 다음은 적분 영역을 음영 처리하는 방법입니다.

# 적분 영역 시각화
x_fill = np.linspace(0, 10, 1000)
y_fill = func(x_fill)

plt.figure(figsize=(10, 6))
plt.plot(x, y, label='$x^2 e^{-x}$', color='b')
plt.fill_between(x_fill, y_fill, color='skyblue', alpha=0.5, label='적분 영역')
plt.title('적분 결과 시각화')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.grid(True)
plt.show()

이제 적분 영역이 시각적으로 강조되어, 어떤 구간에서 면적이 계산되었는지 쉽게 이해할 수 있습니다.


5. 여러 구간에서 적분 수행 및 시각화

적분 구간을 여러 부분으로 나누고, 각 구간의 적분 결과를 시각화할 수도 있습니다. 다음은 구간을 $ [0, 3] $, $ [3, 7] $, $ [7, 10] $으로 나누어 적분하는 예제입니다.

# 구간 설정
intervals = [(0, 3), (3, 7), (7, 10)]
colors = ['lightcoral', 'lightgreen', 'lightblue']

plt.figure(figsize=(10, 6))
plt.plot(x, y, label='$x^2 e^{-x}$', color='b')

# 각 구간에 대해 적분 수행 및 시각화
for (a, b), color in zip(intervals, colors):
    x_fill = np.linspace(a, b, 500)
    y_fill = func(x_fill)
    plt.fill_between(x_fill, y_fill, color=color, alpha=0.5, label=f'적분 구간: [{a}, {b}]')
    result, _ = quad(func, a, b)
    print(f"구간 [{a}, {b}]의 적분값: {result:.4f}")

plt.title('여러 구간에서의 적분 시각화')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.grid(True)
plt.show()

위와 같이 구간별 적분을 수행하고, 색상으로 구분해 시각화하면 구간별 기여도를 직관적으로 이해할 수 있습니다.


6. 누적 적분 시각화

누적 적분을 시각화하면 특정 구간까지의 적분값이 어떻게 변화하는지 확인할 수 있습니다. scipy.integrate.cumtrapz를 활용해 누적 적분을 수행하고 시각화해 보겠습니다.

from scipy.integrate import cumtrapz

# 누적 적분 수행
cumulative_integral = cumtrapz(y, x, initial=0)

# 시각화
plt.figure(figsize=(10, 6))
plt.plot(x, cumulative_integral, label='누적 적분값', color='g')
plt.title('누적 적분 시각화')
plt.xlabel('x')
plt.ylabel('누적 적분값')
plt.legend()
plt.grid(True)
plt.show()

이 그래프를 통해 $ x $ 값이 증가함에 따라 누적 적분값이 어떻게 변화하는지 확인할 수 있습니다.


7. 결론

이번 포스팅에서는 SciPyintegrate 모듈을 활용해 적분을 수행하고, Matplotlib을 이용해 적분 결과를 시각화하는 방법을 살펴보았습니다. 시각화는 적분 결과를 직관적으로 이해하는 데 큰 도움을 주며, 특히 여러 구간에서의 적분이나 누적 적분을 분석할 때 유용합니다.


참고 자료

반응형