본문 바로가기
머신러닝 딥러닝

0825 수치미분

by 대금부는개발자 2021. 8. 25.
SMALL

미분 : 어떤 함수의 정의역에 속한 각 점에서 독립변수(x값) 값의 변화량(Δx)과 함숫값의 변화량(f(x+Δx)-f(x) 

비율 (f(x+Δx)-f(x) 의 극한(무한히 작아짐 0은 아니지만, 0과 가깝게)  혹은 극한의 집합을 치역으로 새로운 함수.

            Δx                                                                                 

→ 이런 새로운 함수를 미분 or 미분 함수(derivative), 도함수라고 쓰여요.

derivative(도함수,미분함수,미분해서 결과로나오는함수)

 

하나의 함수에서 미분 함수(도함수)를 구하는 작업을 지칭하는 용어 → 미분 → differentiation(미분하는 과정)

 

 

쉽게 설명하면 미분은 함수에 있어서 특정 순간의 변화량을 지칭해요.

 

함수값의 변화량    →   변화량이 극한(lim)    → 미분

독립변수 값의 변화량

 

  lim       (f(x + delta_x) - f(x-delta_x))/delta_x→0          delta_x    ←  변화량

 

 

 y =(x)          x에서의 작은 변화가  y =(x)를 어떻게 변화시키냐? → 미분

 

그림에서 기본적으로  Δx가 줄어들어 미분된 접하는 직선의기울기를 구하는 거예요.

 

<기본공식>

f(x) = constant  ←constant 는 f(x) = 2와 같은 상수를 뜻해요  → derivative f'(x)= 0  derivative 는 미분한다는 뜻

f(x) = ax^n  →    derivate f'(x)= n * an^n-1    f(x)=2^x3 →f'(x)=6x^2

f(x) = e^x     →     derivate f'(x) = e^x

f(x) = e^-x    →     derivate f'(x)  = -e^2x

f(x) = lnx      →   derivate f'(x)  = 1/x

                                           

 

f(x) = 상수  ->  f`(x) = 0

f(x) = e^x  ->  f`(x) = e^x

f(x) = e^-x  ->  f`(x) = -e^-x

f(x) = ax^n  ->  f`(x) = nax^n-1

f(x) = lnx  ->  f`(x) = 1/x

 

 

 

대표사진 삭제

사진 설명을 입력하세요.

 

 

 

미분 종류

해석 미분(analytical differentiation) : 종이와 펜을 가지고 논리적으로 미분

수치 미분(numerical differentiation) :해석 미분을 수행할 수 없을 때 수치적 접근방법으로(숫자를 넣어서) 근삿값을 찾는 방법.

 

 

수치미분의 방법

전향 차분

후향 차분

중앙 차분 - 바로 이전과 이후를 구해 2로 나눠주는 방법, 결괏값이 가장 정확해서 중앙차분만 이용해요.

 

중앙차분 - f(x)가 중앙에 있고, Δx가 앞과 뒤에 있어요→  x의 변화량이 늘었어요 → 2Δx

  lim       (f(x + delta_x) - f(x-delta_x))

delta_x→0          2delta_x    ←  앞과 뒤 니까 2delta_x 

 

함수 f(x)를 미분해라 입력변수 deltax 가 아주 미세하게 변할때 f(x)가 얼마나 변하는지?미분은 Machine learning , Deep learning 에서 빈번하게 사용돼요!

 

 

 

 

해석미분을 수치미분으로 구현해 보아요!

 

 

 

 

 

 f(x) = x^2 함수를 미분해서 f'(5)는 얼마인가요?


# 미분을 하고 미분계수를 구하는 함수
def numerical_differentiation(f, x): #첫번째 함수를 인자를 받고,어디에서 미분을 할 지 숫자가 나와요
    # 입력인자 f는 미분하려고 하는 함수
    # 입력인자 x는 미분값을 알고자하는 입력값
    #  Δx 를 프로그램적으로 변수로 잡아요
    delta_x = 1e-4  #0.0001(10의 -4승 의미) #python에서 1e-8(10-8승)이하의 값을 delta로 사용하면 floating point 문제가 나타나요.
    
    #중앙차분을 이용한 수치미분
    result = (f(x + delta_x) - f(x-delta_x))/(2 * delta_x)
    return result
    
def my_func(x): #f(x)
    return x*x  #f(x) = x^2

result = numerical_differentiation(my_func,5)
print(result) 
#9.999999999976694

 

 

 

 

위에 코드정리

 

 

def numerical_differentiation(f, x): 
    delta_x = 1e-4
    result = (f(x + delta_x) - f(x-delta_x))/(2 * delta_x)
    return result

def my_func(x): 
    return x*x  

result = numerical_differentiation(my_func,5)
print(result)

#9.999999999976694

LIST

댓글