[머신러닝] 수치미분
수치미분
함수 f가 n차원에서 scalar-valued function으로 주어졌을때 f의 gradient 계산 하는 코드에 대해서 작성한다.
코드
import numpy as np
def numerical_derivative(f,x): # n차원에서 정의된 scalar 함수 : f
h = 1e-4 # difference
grad = np.empty_like(x)
it = np.nditer(x, flags=['multi_index'])
while it.finished:
idx = it.multi_index
tmp = x[idx]
x[idx] += h
f_plus_h = f(x)
x[idx] -= h
f_minus_h = f(x)
grad[j] = (f_plus_h - f_minus_h)/(2*h)
x[idx] = tmp
it.iternext()
return grad
예제
f = lambda x : (1 - x[0]^2 - x[1]^2 )**(1/2) # 구의 윗부분
x = np.array([1/2**(1/2), 1/2**(1/2)]) # (1/sqrt(2), 1/sqrt(2))
print('결과 : {}'.format(centered_diff(f,x)))
## 결과 : [0.70710678 0.70710678]