テンソル演算入門:テンソル積・縮約・外積

テンソル

本記事では,ベクトルや行列に関する種々の計算を,テンソル演算の枠組みに当てはめることで統一的に説明します.

テンソルは,物理学や微分幾何学において,座標変換に際して特定の変換則に従う量として導入されます.しかし本記事では,そのような幾何学的側面よりも,「添字を持つ量を統一的に扱うための記法」としてテンソルを導入します.

内積,行列積,外積といった演算が,実はすべてテンソル積と縮約によって統一的に記述できることを見ていきます.

本記事は,前の記事 に続けて執筆予定の『回転クォータニオンの平均』の記事に向けた準備も兼ねています.

目次

記法

列ベクトルは,小文字のボールド体を用いて \(\mathbf{a}\) のように表します.行ベクトルは,転置を表す \(T\) を右肩に付けて \(\mathbf{a}^T\) のように表します.行列は,大文字のボールド体を用いて \(\mathbf{A}\) のように表します.

成分を参照する場合は,細字にするか,大括弧で囲って添字を付けます.例えば,行列 \(\mathbf{A}\) の \((j,k)\) 成分は,\(A_{jk}\) または \([\mathbf{A}]_{jk}\)と表します.

テンソル

本記事では,\(0\) 個以上の添字を持ち,加え算およびスカラー倍について閉じている量をテンソルと呼びます.

テンソルという言葉は,物理学や微分幾何学では,座標変換に際して特定の変換則に従う量を指します.しかし本記事では,テンソルを計算の整理を目的として導入するため,そのような条件は特に課しません.

また,同様の理由から,共変・反変の区別も行わず,すべての添字を下付きで表します.

添字の個数をテンソルの階数と呼びます.特に,

  • \(0\) 階テンソルをスカラー
  • \(1\) 階テンソルをベクトル

と呼びます.

なお,\(2\) 階以下のテンソルは,すべて行列として表現できます.例えば,

  • スカラーは \(1\times 1\) 行列
  • ベクトルは行数または列数のいずれかが \(1\) の行列

と見做せます.

テンソル積

テンソル同士から新たなテンソルを構成する最も基本的な演算がテンソル積です.

テンソル積では,\(2\) つのテンソルのすべての成分同士の積を取ります.その結果として得られるテンソルの階数は,もとの \(2\) つのテンソルの階数の和になります.

ベクトルの場合,テンソル積は直積(outer product)とも呼ばれます.

ベクトルのテンソル積

\(2\) つのベクトル \(\mathbf{a},\mathbf{b}\) のテンソル積は,\[\mathbf{a}\otimes\mathbf{b}=\mathbf{a}\mathbf{b}^T\]で与えられます.

これは,ベクトル \(\mathbf{a}\) の各成分と,ベクトル \(\mathbf{b}\) の各成分との,すべての組み合わせの積を並べたものになっています.

実際,その \((j,k)\) 成分は,\[[\mathbf{a}\mathbf{b}^T]_{jk}=a_jb_k\]です.

ここでは,

  • 添字 \(j\) が \(\mathbf{a}\) 側の成分
  • 添字 \(k\) が \(\mathbf{b}\) 側の成分

を区別しています.

テンソル積では,このようにもとのテンソルの添字をすべて保持したまま,新しいテンソルを構成します.

射影

テンソル積の具体例として,射影演算子を考えます.

単位ベクトル \(\mathbf{n}\) と自身とのテンソル積\[\mathbf{n}\mathbf{n}^T\]は,\(\mathbf{n}\) 方向への射影演算子になります.

実際,任意のベクトル \(\mathbf{x}\) に対して,\[(\mathbf{n}\mathbf{n}^T)\mathbf{x}=(\mathbf{n}^T\mathbf{x})\mathbf{n}\]が成り立ちます.

ここで,スカラー\[\mathbf{n}^T\mathbf{x}\]は,後ほど導入する内積に対応しており,\(\mathbf{x}\) の \(\mathbf{n}\) 方向成分の大きさを表しています.

したがって,全体として \(\mathbf{x}\) を \(\mathbf{n}\) 方向へ取り出す演算になっていることが分かります.

このように,テンソル積は単に成分を並べるだけでなく,線形変換や幾何学的操作を記述する際にも自然に現れます.

縮約

\(2\) 階以上のテンソルにおいて,添字のうち \(2\) つを揃えて総和を取る演算を縮約と呼びます.

ベクトルの内積,行列のトレース,行列積,フロベニウス内積といった演算は,すべてテンソルの縮約として解釈できます.

縮約の記法として,テンソルの \(2\) つの添字が揃っている場合には,その添字について総和を取るもの約束し,総和記号を省略することがあります.これをアインシュタインの縮約記法と呼びます.

本ブログでは,特に断らない限りアインシュタインの縮約記法を用います.

クロネッカーのデルタ

\(2\) つの添字の縮約を明示するときのために,クロネッカーのデルタ \(\delta\) を導入します.\[\delta_{jk}=\begin{cases}1 & (j=k) \\ 0 & (j\ne k)\end{cases}\]

\(\delta\) は \(2\) 階テンソルであり,単位行列として表されます.

行列のトレース

正方行列の対角成分の総和を,行列のトレースと呼びます.

これは,\(2\) 階テンソルの \(2\) つの添字について縮約を行ったものと見做せます.\[\mathrm{Tr}(\mathbf{A})=\delta_{jk}A_{jk}=A_{jj}\]

ベクトルの内積

ベクトル \(\mathbf{a},\mathbf{b}\) の内積は,\[\mathbf{a}\cdot\mathbf{b}=a_jb_j=\mathbf{a}^T\mathbf{b}\]で与えられます.

これは,テンソル積のトレースとも見做せます.\[\begin{align}\mathbf{a}\cdot\mathbf{b}&=\delta_{jk}a_jb_k\\&=\delta_{jk}[\mathbf{a}\mathbf{b}^T]_{jk}\\&=[\mathbf{a}\mathbf{b}^T]_{jj}\\&=\mathrm{Tr}(\mathbf{a}\mathbf{b}^T)\end{align}\]

行列積

行列積は,左の行列の各行と右の行列の各列とを,それぞれ行ベクトルおよび列ベクトルと見做して内積を取る計算です.

左を \(J\times K\) 行列,右を \(K\times L\) 行列とすると,行列積は \(J\times L\) 行列となり,\[[\mathbf{A}\mathbf{B}]_{jl}=A_{jk}B_{kl}\]で与えられます.

特に,

  • \(J=L=1\) の場合はベクトルの内積
  • \(K=1\) の場合はベクトルのテンソル積

に対応します.

フロベニウス内積

\(2\) つの行列の対応する成分同士の積の総和を,フロベニウス内積と呼びます.\[\langle\mathbf{A},\mathbf{B}\rangle_F=A_{jk}B_{jk}\]これは,ベクトルの内積を行列へ自然に拡張したものと見做せます.

実際,トレースを用いてベクトルの内積と同じ形式で表されます.\[\begin{align}\langle\mathbf{A},\mathbf{B}\rangle_F&=A_{jk}[\mathbf{B}^T]_{kj}\\&=[\mathbf{A}\mathbf{B}^T]_{jj}\\&=\mathrm{Tr}(\mathbf{A}\mathbf{B}^T)\end{align}\]

外積

以下では,添字 \(j,k,l,\dots\) は \(1,2,3\) の値を取るものとし,\(3\) 次元ベクトル空間を考えます.

\(3\) 次元ベクトル \(\mathbf{a},\mathbf{b}\) の外積は,\[\mathbf{a}\times\mathbf{b}=\left(\begin{aligned}&a_2b_3-a_3b_2\\& a_3b_1-a_1b_3\\& a_1b_2-a_2b_1\end{aligned}\right)\]で定義されます.

各成分は,すべて \(\mathbf{a}\) の成分と \(\mathbf{b}\) の成分との積によって構成されています.

第 \(j\) 成分の各項について,順列 \((j,a\text{ の添字},b\text{ の添字})\) に注目すると,

  • 重複のある項は存在しない
  • \((1,2,3)\) の偶置換であれば正号を取る
  • \((1,2,3)\) の奇置換であれば負号を取る

という性質を持っています.

ここで,\((1,2,3)\) の偶置換・奇置換とは,\((1,2,3)\) の並べ替え方のうち,偶数回または奇数回の交換によって得られるものを指します.

レヴィ=チヴィタ記号

以上の性質を備えた \(3\) 階テンソル \(\varepsilon\) を導入します.これはレヴィ=チヴィタ記号と呼ばれます.\[\varepsilon_{jkl}=\begin{cases}0 & (\text{添字が重複}) \\ +1 & ((j,k,l) \text{ が偶置換}) \\ -1 & ((j,k,l) \text{ が奇置換})\end{cases}\]

定義より,\(\varepsilon\) は添字の交換に対して反対称です.

外積は,この \(\varepsilon\) を用いることで,\[[\mathbf{a}\times\mathbf{b}]_j=\varepsilon_{jkl}a_kb_l\]と簡潔に書けます.

\(\varepsilon\varepsilon\) の縮約

ベクトル \(3\) 重積など,繰り返し外積を扱う際には,\(\varepsilon\varepsilon\) の縮約を行います.

\(1\) 重縮約

\(\varepsilon_{jkl}\varepsilon_{jmn}\) は,ダミーでない添字 \(k,l,m,n\) を持つ \(4\) 階テンソルであり,\(3^4=81\) 個の成分を持ちます.

しかし,\(\varepsilon\) の反対称性により,そのほとんどは \(0\) になります.そこで,非零成分がどのように表されるかを調べます.

まず,\[\varepsilon_{jkl}\varepsilon_{jmn}\neq 0\]であるならば,

  • \((j,k,l)\)
  • \((j,m,n)\)

のそれぞれに添字の重複はありません.

さらに,\(j\) が共通していますから,残りの添字について,\[(k,l)=(m,n)\]または\[(k,l)=(n,m)\]が成立しなければなりません.

さもなくば,\(\varepsilon_{jkl}\) と \(\varepsilon_{jmn}\) の少なくとも一方が必ず \(0\) になります.

また,\[\varepsilon_{jkl}\neq 0\]である固定された添字の組 \((j,k,l)\) に対しては,\[(\varepsilon_{jkl})^2=1\]が成り立ちます.ただし,ここでは \(j,k,l\) について縮約を行っていません

\((k,l)=(m,n)\) の場合

\[\delta_{km}\delta_{ln}\]は,\[(k,l)=(m,n)\]のときのみ \(1\),それ以外では \(0\) となります.

このとき,縮約は行わずに\[\varepsilon_{jmn}=\varepsilon_{jkl}\delta_{km}\delta_{ln}\]と書けますから,\[\varepsilon_{jkl}\varepsilon_{jmn}=\delta_{km}\delta_{ln}\]となります.

\((k,l)=(n,m)\) の場合

同様に,\[\delta_{kn}\delta_{lm}\]は\[(k,l)=(n,m)\]の場合のみ非零になります.

このとき,縮約は行わずに\[\varepsilon_{jmn}=\varepsilon_{jlk}\delta_{kn}\delta_{lm}=-\varepsilon_{jkl}\delta_{kn}\delta_{lm}\]と書けますから,\[\varepsilon_{jkl}\varepsilon_{jmn}=-\delta_{kn}\delta_{lm}\]となります.

両者は同時には成立しませんから,直接加え合わせることができます.したがって,\[\varepsilon_{jkl}\varepsilon_{jmn}=\delta_{km}\delta_{ln}-\delta_{kn}\delta_{lm}\]を得ます.

\(2\) 重縮約

\(1\) 重縮約の結果をさらに縮約します.\[\begin{aligned}\varepsilon_{jkl}\varepsilon_{jkn}&=\delta_{km}\varepsilon_{jkl}\varepsilon_{jmn}\\&=\delta_{km}(\delta_{km}\delta_{ln}-\delta_{kn}\delta_{lm})\\&=\delta_{kk}\delta_{ln}-\delta_{mn}\delta_{lm}\\&=3\delta_{ln}-\delta_{ln}\\&=2\delta_{ln}\end{aligned}\]

ただし,\(3\) 次元空間を考えているため,\[\delta_{kk}=\mathrm{Tr}(\mathbf{1}_3)=3\]となることを用いました.

ベクトル \(3\) 重積

\(3\) つのベクトル \(\mathbf{a},\mathbf{b},\mathbf{c}\) に対して,ベクトル \(3\) 重積\[
\mathbf{a}\times(\mathbf{b}\times\mathbf{c})\]を計算します.

第 \(j\) 成分は,\[\begin{aligned}\left[\mathbf{a}\times(\mathbf{b}\times\mathbf{c})\right]_j &=\varepsilon_{jkl}a_k[\mathbf{b}\times\mathbf{c}]_l\\&=\varepsilon_{jkl}a_k\varepsilon_{lmn}b_mc_n \\&=\varepsilon_{ljk}\varepsilon_{lmn}a_kb_mc_n\\&=(\delta_{jm}\delta_{kn}-\delta_{jn}\delta_{km})a_kb_mc_n\\&=a_kb_jc_k-a_kb_kc_j\\&=(\mathbf{a}\cdot\mathbf{c})b_j-(\mathbf{a}\cdot\mathbf{b})c_j\end{aligned}\]となります.したがって,\[\mathbf{a}\times(\mathbf{b}\times\mathbf{c})=(\mathbf{a}\cdot\mathbf{c})\mathbf{b}-(\mathbf{a}\cdot\mathbf{b})\mathbf{c}\]を得ます.

特に,この結果に

\[\mathbf{a}=\mathbf{v},\quad\mathbf{b}=\mathbf{v},\quad\mathbf{c}=\mathbf{x}\]

を代入すれば,\[\mathbf{v}\times(\mathbf{v}\times\mathbf{x})=\mathbf{v}(\mathbf{v}\cdot\mathbf{x})-|\mathbf{v}|^2\mathbf{x}\]が成り立ちます.

外積行列

ベクトル \(\mathbf{a}\) との外積\[[\mathbf{a}\times\mathbf{b}]_j=\varepsilon_{jkl}a_kb_l\]を,\(\mathbf{b}\) に作用する線形変換と見做せば,\[[\mathbf{a}\times]_{jl}=\varepsilon_{jkl}a_k\]と書けます.

この外積を表す歪対称行列を,\(\mathbf{a}\) の外積行列と呼びます.

対角成分が \(0\) になること,および非対角成分が \(\varepsilon_{jkl}\) の符号を取ることに注意すれば,\[[\mathbf{a}\times]=\begin{pmatrix}0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0\end{pmatrix}\]となることを確認できます.

逆に,外積行列 \([\mathbf{a}\times]\) と \(\varepsilon\) との \(2\) 重縮約を取ると,\[\varepsilon_{jkl}[\mathbf{a}\times]_{jl}=\varepsilon_{jkl}\varepsilon_{jml}a_m=2a_k\]となり,もとのベクトル \(\mathbf{a}\) を取り出すことができます.

まとめ

本記事では,テンソル積と縮約を用いることで,内積,行列積,外積といった種々の演算を統一的に記述できることを見ました.

特に,レヴィ=チヴィタ記号を導入することで,外積やベクトル \(3\) 重積もテンソル演算として自然に表現できます.

次の記事では,これらの記法を用いて回転クォータニオンの平均について考えます.

参考リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (2件)

コメントする

目次