goosegoose.DRAM
article thumbnail

수치미분

: 임의의 두 점에서 함숫값들의 차이를 차분이라고 한다. 이 차분을 통해 미분하는 것을 수치 미분이라고 한다.  해석미분(수식을 풀어 미분하는 것: 오차가 없음)을 사용할 수 없을 때, 정답은 아니지만 근삿값을 구하는 방법이다. 

 

 

수치미분은 3가지 방법으로 나눌 수 있다.

  • 전향차분 

  • 후향 차분

  • 중앙 차분 (Centered Difference) <- 가장 많이 사용한다. 

델타 x를 무한히 0으로 근사 시킬 수 없기에 우리가 근사로 구한 접선과 진짜 접선 사이의 오차가 발생한다.

출처 :&nbsp;https://amber-chaeeunk.tistory.com/11

이 오차를 극복하기 위해 (x+델타 x)와 (x-델타엑스) 사이의 함수, f의 차분을 계산한다. x를 중심으로 전후를 계산하기에 이 방법을 중앙 차분이라고 부르며 가장 오차가 적다.

 

아래 파이썬 공식을 통해 이해해 보자.

 

def numerical_differentiation(f, x, method='central'):
  # 미분하려는 함수 f
  # x값
  # 수치미분 버전

  delta_x = 1e-4  # 0에 가까운 근사값. 반올림 오차를 개선한 값이기에 가장 많이 사용.
  
  if method == 'central':
    result = (f(x + delta_x) - f(x - delta_x)) / (2 * delta_x)
  elif method == 'forward':
    result = (f(x + delta_x) - f(x)) / delta_x
  elif method == 'backward':
    result = (f(x) - f(x - delta_x)) / delta_x
  return result

  # f(x) = x^3
def function_1(x):
  return x ** 3

print("중앙차분의 값은 {} 입니다.".format(numerical_differentiation(function_1, 2))) # 기본이 중앙차분.
print("전향차분의 값은 {} 입니다.".format(numerical_differentiation(function_1, 2, 'forward')))
print("후향차분의 값은 {} 입니다.".format(numerical_differentiation(function_1, 2, 'backward')))

해석미분으로 풀어 계산한 값.

미분한 값은 3*(2**2) = 12로 중앙 차분의 값이 가장 적은 오차를 가진 근삿값임을 보여준다.

 

참고 블로그

https://rphabet.github.io/posts/numerical_differentiation/

 

python으로 하는 수치미분 (Numerical Differentiation)

BigBen’s Log, BBlog

rphabet.github.io

https://amber-chaeeunk.tistory.com/11

 

딥러닝) 수치 미분 , 해석적 미분 , 편미분

1. 수치 미분미분이란 한 점에서의 기울기를 의미한다. 기울기는 두 점 사이에서 발생하는 경사인데, 미분을 '한 점에서의 기울기'라고 하는 이유는 그 두 점 사이의 거리를 매우 좁혀서 한 점으

amber-chaeeunk.tistory.com

 

'ML > 기타' 카테고리의 다른 글

Simple Linear Regression 실습  (0) 2023.02.01
profile

goosegoose.DRAM

@goosesong

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!