偏微分
偏微分は、変数が2つ以上あるときに1つ以外を固定にして、固定じゃない1つに対して微分をすることだそうです。Pythonでやると簡単にできます。
下記の式で、x0が3、x1が4のときの偏微分
[mathjax] $$f(x_0, x_1)=x_02+x_12$$
コード
import numpy as np def numerical_diff(f, x): h = 1e-4 return (f(x+h) - f(x-h)) / (2*h) def func_x0(x0): return x0**2 + 4**2 def func_x1(x1): return 3**2 + x1**2 d0 = numerical_diff(func_x0, 3) d1 = numerical_diff(func_x1, 4) print(d0) print(d1)
勾配
勾配は、すべての変数に対する偏微分をベクトルにしたものだそうです。
import numpy as np def func(x): return x[0]**2 + x[1]**2 def gradient(f, x): h = 1e-4 grad = np.zeros_like(x) for i in range(x.size): tmp = x[i] x[i] = tmp + h y1 = f(x) x[i] = tmp - h y2 = f(x) grad[i] = (y1 - y2) / (2 * h) x[i] = tmp return grad g = gradient(func, np.array([3.0, 4.0])) print(g)