クラス定義によるテンソルの理解
理工系の大学で学習する電磁気学や材料力学の最初に登場する「テンソル」。
これまでに出てこない概念なので、どのようなものかイメージするのが難しい。
検索すれば、いくらでも説明が出てくるが、それでも漠然とした感じが残るかもしれない。
テンソルとは何ものか? というものをイメージできないと最初でつまづくことになる。
ここでは、「プログラミングはわかる。」という人向けに、新しい方法で説明をしてみる:-)
テンソルとは変数の型である。
空間を格子状に細かく分割したモデルがあった場合、各格子要素(Cell)に、
質量、電荷、温度、位置、加速度、速度、力、応力、ひずみという、物理的な性質を表す値を設定する必要がある。
ここで教科書に書いてあるものを、そのまま受け入れるとして、質量、電荷、温度はスカラーであり、位置、加速度、速度、力はベクトル、応力、ひずみはテンソルであるから、次のようなクラスが定義できる。
class Cell {
Scalar 質量;
Scalar 電荷;
Scalar 温度;
Vector 位置;
Vector 加速度;
Vector 速度;
Vector 力;
Tensor 応力;
Tensor ひずみ;
}
さて3次元空間におけるScalar、Vector、Tensorの実態は、それぞれスカラーは1つの数値、ベクトルは3つの数値(配列)、テンソルは3x3の数値(行列=2次元配列)で表現できるので次のように定義できる。
class Cell { double 質量; double 電荷; double 温度; double 位置[3]; double 加速度[3]; double 速度[3]; double 力[3]; double 応力[3][3]; double ひずみ[3][3]; }
何のことはない、配列で表現できるものがベクトル、2次元配列で表現できるものがテンソルである。
配列の次数を見れば、スカラーが0階のテンソル、ベクトルが1階のテンソルと呼ばれる理由もわかるし、3階のテンソルと言われれば、double[3][3][3]の型で表現される変数である、ということもイメージできるだろう。