今日は主に二変数関数についてその微分法をまとめます。
状態遷移をベクトルにする
その前に、事前準備として、点の情報から方向を得たいということはままあります。たとえば時系列における店舗間の動線を得る、アクセスしたウェブページの履歴を得るといったときです。
個体情報を key に、アクセスポイントを area とすると
# 連想配列内のキーを探す
if key in dic:
# 個体情報が移動しているか調べる
if dic[key]["area"] == area:
pass
else:
# 移動していれば移動元と移動先を出力する
self._output(
key, dic[key]["area"],
area, timestamp,
int(timestamp) - dic[key]["timestamp"]
)
# 連想配列の情報を移動先とその時刻印に置換する
dic[key] == {
"area": area, "timestamp": int(timestamp)
}
else:
# 連想配列になければ移動元とその時刻印として記憶する
dic[key] = {
"area": area, "timestamp": int(timestamp)
}
これで
key, from, to, time
という二点間の移動情報を獲得できます。
多変数関数の微分法
方向微分係数
二変数関数 z = f(x, y) があったとき、 xy 平面上の点 x = (a, b) から、ベクトル u = (α, β) の方向に進んだ点は
x + hu = (a + hα, b + hβ)
となります。これを用いて
\frac {\partial f} {\partial \mathbf{u}} (a,b) = \lim_{h\rightarrow 0} \frac {f(a+h\alpha, b+h\beta) - f(a,b)} {h}
と定義される u が方向微分係数です。
偏微分係数
f(x, y) の y を固定して x のみ変化する微分係数を x に関する偏微分係数と言います。
点 (a, b) における上記の偏微分係数は
\frac {df} {dx} (a,b) = \lim_{h \to 0} \frac {f(a + h, b) - f(a, b)} {h}
と定義され、これは u = (1, 0) にしたがった方向微分係数と等価です。
高階偏導関数
f(x, y) を x で偏微分して偏導関数
\frac {\partial f} {\partial x} = f_x
を得た後、さらに y で偏微分可能であれば高階 (高次) の偏導関数
\frac {\partial} {\partial y} \left(\frac {\partial f} {\partial x} \right) = \frac {\partial^2 f} {\partial y\partial x} = f_{xy}
を得るといったことができます。
勾配
ベクトル解析におけるスカラー場の勾配を得ます。
空間のある領域で定義されたスカラー場に用いて、スカラー関数の 勾配 (gradient) を得ます。定義式は次の通りです。
\nabla \psi = \mathrm{grad} \psi = \frac {\partial \psi} {\partial x} i + \frac {\partial \psi} {\partial y} j + \frac {\partial \psi} {\partial z} k
下向きの三角はナブラと呼びます。
まとめ
計算機は単純な計算しかできないので n 次多項式についての一般解、すなわちテイラーの定理、多項式近似などを理解しておくと良いでしょう。