ラプラシアン・ヘッセ行列・ヤコビ行列

これら3つの演算は、いずれも同じ偏微分の配列から組み立てられます。 スカラー関数$f$とベクトル値写像$F$に対して、

$$ (\operatorname{Hess}f)_{ij}=\partial_i\partial_j f, \qquad \Delta f=\operatorname{tr}(\operatorname{Hess}f), \qquad J_F=(\partial_jF_i)_{ij}. $$

座標と検算用の場

$f=x^2+y^2+z^2$と$F=(x^2,y^2,z^2)$を用います。どちらも 微分行列が対角行列になるため、期待する結果を容易に確認できます。

declare symbol x, y, z : MathValue

def parameters : Vector MathValue := [| x, y, z |]
def scalarField : MathValue := x^2 + y^2 + z^2
def vectorField : Vector MathValue := [| x^2, y^2, z^2 |]
∂/∂ scalarField parameters
$\begin{pmatrix} 2 x \\ 2 y \\ 2 z\\ \end{pmatrix}$

ヘッセ行列とラプラシアン

generateTensorで行列の2つの自由添字を与えます。得られた ヘッセ行列のトレースを取ることで、ユークリッド空間の ラプラシアンを実装します。

def hessian (f : MathValue) : Matrix MathValue :=
  generateTensor
    (\[a, b] -> ∂/∂ (∂/∂ f parameters_a) parameters_b)
    [3, 3]

def laplacian (f : MathValue) : MathValue := trace (hessian f)
hessian scalarField
$\begin{pmatrix} 2 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 2 \\ \end{pmatrix}$
laplacian scalarField
$6$

ヤコビ行列と行列式

同じ添字付きの構成を使って、$F$の各成分を微分します。 その行列式は、局所的な体積の拡大率を表します。

def jacobian (v : Vector MathValue) : Matrix MathValue :=
  generateTensor
    (\[a, b] -> ∂/∂ v_a parameters_b)
    [3, 3]
jacobian vectorField
$\begin{pmatrix} 2 x & 0 & 0 \\ 0 & 2 y & 0 \\ 0 & 0 & 2 z \\ \end{pmatrix}$
M.det (jacobian vectorField)
$8 x y z$

出力はそれぞれ$2I_3$、$6$、$8xyz$です。テンソルの生成、縮約、 行列式の計算を組み合わせることで、多変数解析でおなじみの3つの演算を 統一的に表現できることが分かります。

リンク

Egison 数学ノート目次に戻る