関数としてのテンソル



  • テンソルのことを書いている。
  • Mathematicaの記事は良い。Metric tensorこちら、Permutation tensorこちらクロネッカーのデルタはこちら
  • 自分用のメモとして、ここにも自分なりのてすさびとして、書く。
  • テンソルはベクトル空間の関数である。
  • ベクトル空間に定義された関数であるテンソルは、引数としてベクトルをとり、その関数で定められた階数・次元のテンソルを返す。
  • 今、n次元の2つのベクトルを引数として、スカラー(階数0のテンソル)を返す関数を考える。返される値は、階数が0だから、添字数は0。一方、引数として渡されたベクトルはそれぞれ添字数が1で、その次元はn。したがって、このような関数として定義されるテンソルは、2種類の引数側の添字を用いて、返り値として引数なしの値を返す。テンソルにおいては、引数の値のすべてのペア(nxn)について、どういう処遇にするかを決めておくことが必要である。言い換えれば、nxn要素のテンソルがこのような処遇決定をすることができる。たとえば、第1引数のベクトル(a_i)¥;i=1,2,¥cdots,nと第2引数のベクトル(a_i)¥;i=1,2,¥cdots,nの要素の積を求め、2ベクトルの添字が等しいときにそれに1をかけ、2ベクトルの添字が等しくないときには0をかけた上で、nxnの要素を全部足し合わせる処理を考える。今、
    • t_{jk}=1¥times¥;a_j¥;b^k¥;¥; when¥; j=k
    • t_{jk}=0¥times¥;a_j¥;b^k¥;¥; when¥; j¥not=k
  • なる(t_{jk})を定義すれば、この処理の解は¥sum_{j=0}^{n}¥sum_{k=0}^{n}t_{jk}¥times a_j ¥times b_jで表される。Einsteinの省略(異なる添字を持つ値は全部足し合わせるから¥sum記号は全部省略)で書き直せば、t_{jk}¥times a_j ¥times b_k
  • このようなt_{jk}を要素に持つ、2階、(n,n)次元のテンソル(ベクトル)、(t_{jk})が、上記処理(引数として2ベクトルをとって、ある規則でスカラーを返す)関数のテンソル表現である
    • 引数側に合わせて2つの添字があって、返り値側に添字がなかなったので、このような関数テンソルは添字数は2つだった(関数の階数(添字数)=引数側階数(添字数)+返り値側階数(添字数))。
  • 次にn次元のベクトル2つを引数として取って、m次元のベクトルを返すことを考える。計算に用いることができる要素の数は2つの引数から与えられる値の組み合わせnxnで変わらない。nxnの値から、m個の値を計算するとすると、mx(nxn)個の値を決める必要がある。このmx(nxn)の値は階数3、次元数(m,n,n)のテンソルで与えることができる。
    • 引数側の階数の和は2。返り値側の引数の和は1。これを結びつける関数テンソルの階数は3=2+1。
    • 人工的なテンソルではあるが、次のような関数も定義できる
    • t_{ijk}=i ¥times ¥; a_j b^k¥;¥; when¥; 0 ¥le i ¥le 3¥; and ¥; j,k¥le m
    • t_{ijk}=0 ¥times ¥; a_j b^k¥;¥; otherwise
  • 簡易な説明サイト等では、これ以上のことが書かれておらず、それしか参照していない身としては、若干自信がないところであるが、今、n1階のテンソルとn2階のテンソルを引数として、n3階テンソルを返すためには、n1+n2+n3階の関数テンソルを定義すればよいだろう。