クロネッカーのデルタ
Kronecker Delta
初級
概要
クロネッカーのデルタ(Kronecker Delta)は、2つの添字が等しいときに1、異なるときに0となる関数であり、線形代数、テンソル解析、物理学で広く用いられる基本的な記号である。Leopold Kronecker (1823–1891) にちなんで名付けられた。
クロネッカーのデルタは、単位行列の成分を表し、アインシュタインの縮約記法と組み合わせてテンソル計算を簡潔に記述する上で不可欠な道具である。
定義
定義:クロネッカーのデルタ
クロネッカーのデルタ $\delta_{ij}$ は、添字 $i, j \in \{1, 2, \ldots, n\}$($n$ は考えている空間の次元)に対して以下で定義される:
具体例
$i, j = 1, 2, 3$ の場合: $$\delta_{11} = 1, \quad \delta_{12} = 0, \quad \delta_{13} = 0$$ $$\delta_{21} = 0, \quad \delta_{22} = 1, \quad \delta_{23} = 0$$ $$\delta_{31} = 0, \quad \delta_{32} = 0, \quad \delta_{33} = 1$$
単位行列との関係
クロネッカーのデルタは、$n \times n$ 単位行列 $I$ の $(i, j)$ 成分である: $$I = (\delta_{ij})_{i,j=1}^{n} = \begin{pmatrix} 1 & 0 & \cdots & 0 \\ 0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 1 \end{pmatrix}$$
性質
基本性質
- 対称性: $\delta_{ij} = \delta_{ji}$
- 冪等性: $\delta_{ij} \delta_{jk} = \delta_{ik}$ (繰り返し添字について和をとる)
- トレース: $\displaystyle\sum_{i=1}^{n} \delta_{ii} = n$ (対角成分の和)
縮約規則
縮約公式
アインシュタインの縮約記法では、1 つの項に 2 回現れる添字(繰り返し添字)について、$\Sigma$ を書かずに和をとる。$\delta_{ij} v_j$ を $j$ について和をとると $j = i$ の項だけが残るので $$\delta_{ij} v_j = v_i$$ すなわち、クロネッカーのデルタで縮約すると添字が置き換わる(添字の置換規則)。
例:ベクトルの成分表示
3次元ベクトル $\mathbf{v} = (v_1, v_2, v_3)$ に対して $$\delta_{ij} v_j = \delta_{i1}v_1 + \delta_{i2}v_2 + \delta_{i3}v_3 = v_i$$
行列積との関係
行列 $A$ と単位行列 $I = (\delta_{ij})$ の積は $$(AI)_{ik} = \displaystyle\sum_{j} A_{ij} \delta_{jk} = A_{ik}$$ これは $AI = A$ を成分表示したものである。
一般化されたクロネッカーのデルタ
一般化されたクロネッカーのデルタ
複数の添字に対する一般化クロネッカーのデルタ $\delta^{i_1 \cdots i_p}_{j_1 \cdots j_p}$ は
$p = 2$ の場合、 $$\delta^{ij}_{kl} = \delta^i_k \delta^j_l - \delta^i_l \delta^j_k$$ これは外積や行列式の計算で現れる。
応用
アインシュタイン記法
テンソル計算では、アインシュタイン記法で行列積とトレースを次のように書ける($C = AB$ とおく): $$A^i_j B^j_k = C^i_k \quad \text{(行列積)}$$ $$A_{ij} B^{ij} = \mathrm{Tr}(AB^T) \quad \text{(トレース)}$$ 上下の添字を使い分ける流儀では、和をとる添字を上付きと下付きに 1 つずつ置く。2 本目は、正規直交基底のもとで上付きの $B^{ij}$ を下付きの $B_{ij}$ と同じ成分とみなしたときの式である(転置が要り、$\mathrm{Tr}(AB)$ ではない)。この記法でクロネッカーのデルタは $A^i_j \delta^j_k = A^i_k$ のように単位行列の役を担う。
ベクトル解析
ベクトル $\mathbf{a} = (a_1, a_2, a_3)$ の成分は基底ベクトル $\mathbf{e}_i$ を用いて $$\mathbf{a} = \displaystyle\sum_{i=1}^{3} a_i \mathbf{e}_i = a_i \mathbf{e}_i$$ と書ける(最後はEinstein記法)。このとき $$\mathbf{e}_i \cdot \mathbf{e}_j = \delta_{ij}$$ (正規直交基底の条件。基底ベクトルが互いに直交する単位ベクトルであること)
量子力学
離散的な固有状態 $\{|i\rangle\}$ が完全な正規直交基底をなすとき、正規直交条件 $\langle i | j \rangle = \delta_{ij}$ と完全性関係 $$\displaystyle\sum_i |i\rangle\langle i| = I$$ がともに成り立つ。完全性関係だけからは正規直交性は従わない(互いに直交しないベクトルの組でも完全性関係を満たすことがある)。
偏微分方程式
差分法では、Diracのデルタ関数 $\delta(x - y)$ の離散版としてクロネッカーのデルタが用いられる。ただし $\delta(x - y)$ は長さの逆数の次元を持つので、格子幅 $h$ の格子では無次元の $\delta_{ij}$ を $h$ で割った $\delta_{ij}/h$ が $\delta(x - y)$ に対応する。
グラフ理論
隣接行列 $A_{ij}$ と各頂点の次数 $d_i = \displaystyle\sum_j A_{ij}$ から、次数行列 $D_{ij} = d_i \delta_{ij}$ と Laplacian行列 $$L_{ij} = D_{ij} - A_{ij} = d_i\delta_{ij} - A_{ij}$$ が定義される。ここで $d_i\delta_{ij}$ の $i$ は左辺にも残る自由な添字であり、和はとらない(縮約記法の「繰り返し添字」の例外として断っておく)。
関連する記号
Diracのデルタ関数
連続変数に対する類似物として、Diracのデルタ関数 $\delta(x)$ がある: $$\displaystyle\int_{-\infty}^{\infty} f(x) \delta(x - a) \, dx = f(a)$$ ただし $\delta(x)$ は通常の関数ではなく超関数(分布)であり、この式は連続な $f$ に対して成り立つものとして $\delta$ を定める。クロネッカーのデルタは和 $\sum_j f_j \delta_{ij} = f_i$ で同じ役割を果たす離散版と見なせる(格子幅 $h$ で近似するときは $\delta_{ij}/h$ と正規化する)。
Levi-Civita記号
3 次元(添字が $1, 2, 3$ を動く)のLevi-Civita記号 $\varepsilon_{ijk}$ (完全反対称テンソル)は、ベクトルの外積や行列式を記述する: $$(\mathbf{a} \times \mathbf{b})_i = \varepsilon_{ijk} a_j b_k$$ クロネッカーのデルタとLevi-Civita記号の間には $$\varepsilon_{ijk}\varepsilon_{ilm} = \delta_{jl}\delta_{km} - \delta_{jm}\delta_{kl}$$ という関係式($\varepsilon$-$\delta$ 恒等式)がある。左辺は $i$ について $1$ から $3$ まで和をとる。この恒等式は添字が $1, 2, 3$ を動く 3 次元に限って成り立つ。
Iverson括弧
命題 $P$ に対して $$[P] = \begin{cases} 1 & (P \text{ が真}) \\ 0 & (P \text{ が偽}) \end{cases}$$ とすると、$\delta_{ij} = [i = j]$ と書ける。
プログラミングでの実装
Python (NumPy)
import numpy as np
# 3x3単位行列(クロネッカーのデルタ)
delta = np.eye(3)
print(delta)
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
# 特定の成分
delta_12 = delta[0, 1] # 0.0
delta_22 = delta[1, 1] # 1.0
数式処理システム (SymPy)
from sympy import KroneckerDelta, symbols
i, j = symbols('i j')
delta_ij = KroneckerDelta(i, j)
# 評価
print(delta_ij.subs({i: 1, j: 1})) # 1
print(delta_ij.subs({i: 1, j: 2})) # 0
参考文献
- Strang, G. (2016). Introduction to Linear Algebra (5th ed.). Wellesley-Cambridge Press.
- Arfken, G. B., Weber, H. J., & Harris, F. E. (2012). Mathematical Methods for Physicists (7th ed.). Academic Press.
- Weisstein, E. W. "Kronecker Delta." From MathWorld--A Wolfram Web Resource.