テンソル積を略そう
いちばん伝えたいことtakker.icon
$ \pmb a\otimes\pmb bではなく$ \pmb a\pmb bという記法を広めたい
注
数学は同期コミュニケーションに向いてなさそう
そもそも興味のある人がどれだけいるか不明
資料だけ書いといて、非同期にコメント入れる感じにしようと思います
よく$ \otimesをつかって書かれる
m階テンソルとn階テンソルから、m+n階テンソルを作る演算子
任意の1階テンソル$ \pmb a,\pmb b,\pmb cに対して$ (\pmb a\otimes\pmb b)\pmb c=\pmb a(\pmb b\cdot\pmb c)を満たす演算子と定義される
この定義はだいぶ理解しにくい
既存の記法からの変更点
$ \pmb a\otimes\pmb bを$ \pmb a\pmb bと略す
行列積$ \pmb A\pmb Bや$ \pmb A\pmb xを$ \pmb A\cdot\pmb Bや$ \pmb A\cdot\pmb xと書く なお、ここでは縮約を「ある添字の成分同士を足し合わせること」としてます 利点
スカラー積
$ k\pmb{a}=\pmb{b}
0階+1階=1階
$ k\pmb{A}=\pmb{B}
0階+2階=2階
テンソル積
$ \pmb{a}\pmb{b}=\pmb A
1階のテンソル同士をかけると、2階のテンソルが作られる
階数の減少に注目すると、スカラー積とテンソル積の性質が酷似している事がわかる
ただし、可換性は成立しない
dot積と行列積は実質同じ演算
隣り合う要素同士を縮約してるだけ
$ \pmb{a}\cdot\pmb{b}=c
1-1+1-1=0
$ (\pmb{a}\pmb{b})\cdot\pmb{c}=\pmb{a}(\pmb{b}\cdot\pmb{c})
2-1+1-1=1
$ (\pmb{a}\pmb{b})\cdot(\pmb{c}\pmb{d})=(\pmb{b}\cdot\pmb{c})(\pmb{a}\pmb{d})
2-1+2-1=2
$ (\pmb{a}\pmb{b}\pmb{c})\cdot\pmb{d}=(\pmb{a}\pmb{b})(\pmb{c}\cdot\pmb{d})
3-1+1-1=2
$ (\pmb{a}\pmb{b}\pmb{c})\cdot(\pmb{d}\pmb{e})=(\pmb{c}\cdot\pmb{d})(\pmb{a}\pmb{b}\pmb{e})
3-1+2-1=3
$ \left(\prod_{0\le i\le m}\pmb{a}_i\right)\cdot\left(\prod_{0\le j\le n}\pmb{b}_j\right)=(\pmb{a}_m\cdot\pmb{b}_0)\left(\prod_{0\le i\le m-1}\pmb{a}_i\right)\left(\prod_{1\le j\le n}\pmb{b}_j\right)
m-1+n-1=m+n-2
ここで$ \prod_{0\le i\le m}\pmb{a}_iは、$ 0\le i\le mの範囲で$ \pmb a_iを順にテンソル積するという意味で使っています
$ \prod_{0\le i\le m}\pmb{a}_i=\underbrace{\pmb a_0\pmb a_1\cdots\pmb a_m}_{m+1\text{vectors}}
2重縮合:4階減少
$ (\pmb{a}\pmb{b}):(\pmb{c}\pmb{d})=(\pmb{a}\cdot\pmb{c})(\pmb{b}\cdot\pmb{d})
2-2+2-2=0
$ (\pmb{a}\pmb{b}\pmb{c}):(\pmb{d}\pmb{e})=\pmb{a}(\pmb{b}\cdot\pmb{d})(\pmb{c}\cdot\pmb{e})
3-2+2-2=1
$ (\pmb{a}\pmb{b}\pmb{c}\pmb{d}):(\pmb{e}\pmb{f})=(\pmb{a}\pmb{b})(\pmb{c}\cdot\pmb{e})(\pmb{d}\cdot\pmb{f})
4-2+2-2=2
$ (\pmb{a}\pmb{b}\pmb{c}\pmb{d}):(\pmb{e}\pmb{f}\pmb{g})=(\pmb{a}\pmb{b}\pmb{g})(\pmb{c}\cdot\pmb{e})(\pmb{d}\cdot\pmb{f})
4-2+3-2=3
$ \left(\prod_{0\le i\le m}\pmb{a}_i\right):\left(\prod_{0\le j\le n}\pmb{b}_j\right)=(\pmb{a}_{m-1}\cdot\pmb{b}_0)(\pmb{a}_{m}\cdot\pmb{b}_1)\left(\prod_{0\le i\le m-2}\pmb{a}_i\right)\left(\prod_{2\le j\le n}\pmb{b}_j\right)
m-1+n-1=m+n-2
dotが一つ増えるごとに、2階減少する
3重縮合:6階減少
...
n重縮合:2n階減少
いくつかの演算法則が直感的になる
結合法則が成立すると見なせる
既存の記法:$ (\pmb a\otimes\pmb b)\pmb c=\pmb a(\pmb b\cdot\pmb c)
提案記法:$ (\pmb a\pmb b)\cdot\pmb c=\pmb a(\pmb b\cdot\pmb c)
tensor積の定義の見た目がわかりやすくなる
これより
$ \pmb a\pmb b\cdot\pmb c
と括弧を外して書いても問題ないことがわかる
$ \pmb\nablaを含んだ演算の法則性がわかりやすくなる
デメリット
1階のtensorから1階のtensorへの線型写像のときは、たしかに$ \pmb A\cdot\pmb xより$ \pmb A\pmb xのほうがしっくりくるかもしれない
しかしこれは高階のtensorに拡張できない
$ \pmb\sigma={\cal\pmb C}:\pmb\varepsilon
2階tensorの線型変換では、どうしても2重縮合$ :を使わざるを得ない ちなみにこれが行列ではなくテンソルが必要になるわかりやすい例だと思うtakker.icon
2階tensorの線型変換は$ B_{ij}=C_{ijkl}A_{kl}になるが、これを行列だけで表すことは困難
$ B_{ij}=C_{ik}A_{kj}で表せる線型変換は一部のみ
どうしても4階tensorが必要になる
結局間に明示的に演算子を入れる必要があるのなら、1重縮合のときも$ \cdotを使ったほうが一貫性がある
課題
$ \Complex上の線型空間では未確認
疑問
通常の内積はどう表すのかSummer498.icon
$ \bm x^\top\cdot\bm yかな、なれないと変に思う
$ \pmb x\cdot\pmb yとしますtakker.icon
行列積と内積は、どちらも隣り合う添字を縮約するという演算
区別する必要がない
tensor代数では、縦置き・横置きの概念が存在しませんtakker.icon
(存在する記法も構築はできると思う)
任意の$ \pmb a,\pmb bで$ \pmb a\cdot\pmb A^\top\cdot\pmb b=\pmb b\cdot\pmb A\cdot\pmb aとなる$ \pmb A^\topを$ \pmb Aの転置と定義する
ここ意外と罠が仕組まれてあって、この定義を採用すると、添字の交換が共変成分と反変成分でしか成立しなくなる $ A^\top_{ij}=A_{ji}
$ {A^\top}^{ij}=A^{ji}
$ {{A^\top}_i}^j\neq{A_j}^i
$ {{A^\top}_i}^j={A^j}_i
これならOK
$ \pmb a\cdot\pmb A\cdot \pmb bは行列表記を使うと
$ \begin{pmatrix}a_0&a_1&\cdots& a_n\end{pmatrix}\begin{pmatrix}A_{00}&A_{01}&\cdots& A_{0n}\\A_{10}&A_{11}&\cdots& A_{1n}\\\vdots&\vdots&\ddots&\vdots\\A_{n0}&A_{n1}&\cdots& A_{nn}\end{pmatrix}\begin{pmatrix}b_0\\b_1\\\vdots\\b_n\end{pmatrix}
(正規直交基底で成分表示した場合)
と転置しなければ計算できません
しかし、添字記法では
$ a_iA_{ij}b_j
と表され、vectorを転置させる必要がありません
なるほど.iconSummer498.icon
行列計算に変換するときは転置が必要だが、それ以外では必要ない
クロス積はどうだろう。そもそも使わない可能性もある?
こいつに関しては試行錯誤中takker.icon
他のテンソル解析の文献でもそうしてる
$ \bm \lbrack\bm x\rbrack_{\times}\cdot\bm yかな
じつは既往の文献欄にある書籍はこの演算子を用いてるtakker.icon
任意の1階テンソル$ \pmb a,\pmb b,\pmb cに対して$ (\pmb a\otimes\pmb b)\pmb c=\pmb a(\pmb b\cdot\pmb c)を満たす演算子と定義される
$ \pmb a(\pmb b\otimes\pmb c)=(\pmb a\cdot\pmb b)\otimes\pmb cは定義に入れなくていいのだろうかSummer498.icon
$ \otimesと無記号積は非可換なので気になった 加えて、$ \otimesが$ +の上に分配的であれば内積の線形性から定義するバージョンの定義と同値になるはず
なおこのページの主目的からはズレるので「定義」ではなく「性質」と言い換えると編集労力は少なそう
この記法を使っている既往の文献
かなり古いテキスト
ゼロ年代以降の書籍
なんだか説明がわかりにくいような気がするけど、どこがどうわかりにくいかがわからない……takker.icon
だれか指摘してくれ~
✅$ \left(\bigotimes_{0\le i\le m}\pmb{a}_i\right)\left(\bigotimes_{0\le j\le n}\pmb{b}_j\right)=(\pmb{a}_m\cdot\pmb{b}_0)\left(\bigotimes_{0\le i\le m-1}\pmb{a}_i\right)\otimes\left(\bigotimes_{1\le j\le n}\pmb{b}_j\right)
ここ多分テンソル積の意味で$ \otimes, \bigotimesを使ってそう。前の文脈では違うから記法が混在してるSummer498.icon
代案: $ \left(\prod_{0\le i\le m}\pmb{a}_i\right)\left(\prod_{0\le j\le n}\pmb{b}_j\right)=(\pmb{a}_m\pmb{b}_0)\left(\prod_{0\le i\le m-1}\pmb{a}_i\right)\left(\prod_{1\le j\le n}\pmb{b}_j\right)
ここは$ \bigotimes使っちゃってもいいと思いますtakker.icon
$ \otimesには別の定義を与えていないので、使っても混乱はなさそう
$ \otimesを使うと旧記法の文脈が想起されるので、$ \cdotの方がどっちの意味だ?ってなりますSummer498.icon
ので$ \prodを提案してた
「$ \otimesの省略と$ \cdotの利用」がセットだから、$ \otimesを使うと$ \cdotがvector同士のdot積に意味が狭まってしまうということですねtakker.icon
そうですわSummer498.icon
全然考えてなかったですtakker.icon
$ \prod使ってないし、これでもいいかも
ただ今回に限って言うなら、この式中だと$ \cdotをvector同士の内積でしか使ってないので、混乱する点はあまりなさそうですtakker.icon
いやまて、$ \left(\bigotimes_{0\le i\le m}\pmb{a}_i\right)\underbrace{\ }_\text{ここに入る演算子}\left(\bigotimes_{0\le j\le n}\pmb{b}_j\right)がテンソル積なのか行列積なのか混乱する心配があるか
$ \prodにします
やっぱ説明しないとまずいですよねtakker.icon
✅いくつかの演算法則が自明なものになる
自明と言うか、直感的?Summer498.icon
自明と言うと証明を読者に委ねても問題ないくらい簡単、のニュアンスがある
修正しましたtakker.icon
テンソル積とは??(無知)cFQ2f7LRuLYP.icon
計算のイメージだけ書くとtakker.icon
ドット積 (別名 内積、スカラー積など)
$ \begin{pmatrix}a_0\\a_1\\a_2\end{pmatrix}\cdot\begin{pmatrix}b_0\\b_1\\b_2\end{pmatrix}=\underbrace{\begin{pmatrix}a_0&a_1&a_2\end{pmatrix}\begin{pmatrix}b_0\\b_1\\b_2\end{pmatrix}}_\text{行列積を使用}=a_0b_0+a_1b_1+a_2b_2
階数が2階減ってスカラーになる
テンソル積
(説明のため$ \otimesを明記)
$ \begin{pmatrix}a_0\\a_1\\a_2\end{pmatrix}\otimes\begin{pmatrix}b_0\\b_1\\b_2\end{pmatrix}=\underbrace{\begin{pmatrix}a_0\\a_1\\a_2\end{pmatrix}\begin{pmatrix}b_0&b_1&b_2\end{pmatrix}}_\text{行列積を使用}=\begin{pmatrix}a_0b_0&a_0b_1&a_0b_2\\a_1b_0&a_1b_1&a_1b_2\\a_2b_0&a_2b_1&a_2b_2\end{pmatrix}
ベクトル(=1階テンソル)とベクトルから行列(=2階テンソルに対応)ができた
テンソル積を使えば、低階のテンソルから高階のテンソルを作り出せる
あ、cFQ2f7LRuLYP.iconさん行列積はやったことありますか?takker.icon もしなければその説明もします
ないっす!cFQ2f7LRuLYP.icon
リンク先にちょこっと書いたのでどうぞ~takker.icon