반응형
⭐ 정의

도함수를 구하기 어려운 상황에서, 함수의 값들을 이용해,
미분 계수의 근사치를 계산하는 방법
여기서, 컴퓨터는 h가 0이될 수 없으므로, 0에 근사한 값으로 h를 보내는 미분
🎯 중앙 차분

컴퓨터서 0에 근사한 값은 결국 0.xxxxx 이런식으로 부동소수 타입일텐데,
결국 그건 0이 아니고, 그건 오차가 있다는 뜻이다.
오차가 있을 수 밖에 없다면, 오차를 줄여가는 방법을 찾아봐야하는데,
그 대표적인 방법이 바로 중앙 차분이다.
왜 오차가 주냐면, 앞뒤 값을 같이 보기때문에 오차가 많이 개선된다.
실제 코드와 그래프를 살펴보면 조금 더, 이해가 될 것 같다.
import numpy as np
import matplotlib.pyplot as plt
# 1. 대상 함수 정의: f(x) = x^2
def f(x):
return x**2
# 2. 수치미분 함수들
def forward_diff(f, x, h):
return (f(x + h) - f(x)) / h
def backward_diff(f, x, h):
return (f(x) - f(x - h)) / h
def central_diff(f, x, h):
return (f(x + h) - f(x - h)) / (2 * h)
# 설정
x_target = 2.0 # 미분값을 구할 지점
h = 0.5 # 오차를 보여주기 위해 h를 크게 설정
x_range = np.linspace(1, 3, 100) # 그래프 범위
# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.plot(x_range, f(x_range), 'k-', label="f(x) = x^2", linewidth=2) # 원본 함수
# 각 방식의 기울기(m) 계산
m_forward = forward_diff(f, x_target, h)
m_backward = backward_diff(f, x_target, h)
m_central = central_diff(f, x_target, h)
m_exact = 4.0 # 실제 미분값 (2x 이므로 2*2=4)
# 접선 그리기용 함수
def tangent_line(x, x_t, m, f_t):
return m * (x - x_t) + f_t
f_t = f(x_target)
plt.plot(x_range, tangent_line(x_range, x_target, m_forward, f_t), '--', label=f'Forward (m={m_forward})')
plt.plot(x_range, tangent_line(x_range, x_target, m_backward, f_t), '--', label=f'Backward (m={m_backward})')
plt.plot(x_range, tangent_line(x_range, x_target, m_central, f_t), 'r-', label=f'Central (m={m_central})', linewidth=2)
plt.plot(x_target, f_t, 'ko') # 타겟 지점 점 찍기
plt.title(f"Numerical Differentiation Comparison (h={h})")
plt.legend()
plt.grid(True)
plt.show()

x = 2.0 근처 오차가 중앙 차분이 가장 적은걸 눈으로 확인할 수 있다.
출처
반응형
'AI > 이론' 카테고리의 다른 글
| [미분 - 편미분] 편미분(Partial Derivative) (0) | 2026.02.02 |
|---|---|
| [신경망-손실함수] 손실함수란? (0) | 2026.01.25 |
| [신경망-학습] 학습이란? (0) | 2026.01.24 |
| [신경망-MNIST] MNIST 데이터셋 (1) | 2026.01.22 |
| [신경망-활성화 함수] 소프트맥스 함수 (1) | 2026.01.14 |