Hyeon Lee 2023. 1. 7. 17:44
728x90

※ 수치 미분

 

일반적으로 우리는 미분 자체를 순간의 변화량으로 판단한다.

 

 

위와 같이 흔히 표현하며 이를 전방 차분이라고 부른다.

 

하지만, 코드로 위의 식을 구현할 때 몇 가지 고려할 점이 생긴다.

1. lim 표현을 위해 h를 아주 작은 값을 대입하는 방식을 사용하는데, 반올림 오차를 고려하여 이를 e^(-4) 정도로 하는 것이 적당하다.

2. x+h와 x 사이의 함수 f의 차분을 계산하는데, 이 계산에 오차가 존재한다. -> 진정한 미분은 x 위치의 함수의 기울기에 해당하지만 x+h와 x 사이의 차분을 계산하므로 오차가 발생함.

 

이 두가지 고려사항들을 통해 일반적으로 중심 차분 or 중앙 차분이라고 부르는 방식으로 코드를 구현한다.

 

 

이렇게 표현하는 미분 방식도 눈에 꽤 익숙할 것이다. 중앙 차분으로 코드를 구현해야 오차가 최대한 없는 진정한 미분과 동일한 값이 나오게 된다는 것을 알고 넘어가자.

 

def numerical_diff(f,x):
    h = 1e-4
    return (f(x+h) - f(x-h)) / (2*h)

 

중앙 차분과 반올림 오차를 고려하여 미분을 구현해 주었다.

 

※ 편미분

- 변수가 여럿인 함수에 대한 미분

 

위 함수를 예로 들어보자.

def function(x):
    return x[0]**2 + x[1]**2

 

이 함수를 x0 = 3, x1 = 4 일 때, x0에 대한 편미분을 구하게 되면, 2x0 + x1^2이 된다.

def function_tmp1(x0):
    return x0*x0 + 4.0**2.0

 

이 함수를 x0 = 3, x1 = 4 일 때, x1에 대한 편미분을 구하게 되면, x0^2 + 2x1이 된다.

def function_tmp2(x1):
    return 3.0**2.0 + x1*x1

 

이 함수들을 출력시켜 보자.

print(numerical_diff(function_tmp1, 3.0))

print(numerical_diff(function_tmp2, 4.0))
6.00000000000378
8.000000000016882

 

이렇게 편미분은 변수가 하나인 미분과 마찬가지로 특정 장소의 기울기를 구한다. 여러 변수 중 목표 변수를 지정하고 다른 변수는 값을 고정시켜 계산하면 된다.

728x90