大学物理を学ぶと、テンソルなる用語が登場します。
たいてい、説明も無しにいきなり出てくるため、初学者にとっては戸惑う概念でもあります。
今回は、多くの学習者にとって難関となるテンソルの定義と分類について解説していきます。
改めて、ベクトルとは?
テンソルについて解説する前に、改めてベクトルについて復習します。
ベクトルとは、『向きと大きさを持った量』のことでした。
普段あまり意識することはありませんが、ベクトルにはもう一つ重要な性質があります。
それは、ベクトルの”大きさ”と”向き”は座標系に関わらず不変であるということです。
例えば、下図のように二つの座標系があったとます。
この二つの座標系を比較して、ベクトルの向きや大きさは変化していないことが見て取れます。
このように、ベクトルの大きさや向きは座標系を超越して普遍であると言えます。
ややこしいですが、ベクトルの成分は座標系の取り方によって確かに変わります。
例えば、メートル法とヤードポンド法など単位長さが変化すれば数字上の長さは変化しますし、座標を回転させれば座標軸からの角度は変化します。
つまり、数字(成分)としての大きさや向きは変化します。
重要なことは、ここで言う”大きさ”や”向き”が抽象概念としての大きさや向きのことであるということです。
このように一段階抽象度を上げてベクトルという概念を見直すと、新たな性質を発見することができます。
ベクトルと関数
ベクトルから一旦離れ、関数についても考えていきます。
抽象的な関数の概念について考える前に、具体例から考えていきます。
例えば、$f(x)=x^2$という関数があるとき、グラフは次のような放物線となります。
グラフから分かるように、入力$x_1$が与えられたとき、$x_1^2$という出力が出てくると言えます。
関数の重要な性質は、一つの入力に対して一つの出力が一対一対応するという性質です。
ところで、普通の関数では、スカラーの入力に対して一つのスカラーが出力されます。(→スカラーとは?)
ここでは、関数の入力と出力の種類を増やし、入力や出力にベクトルが使える関数を考えます。
このとき、関数の入力と出力の組み合わせとして三通りが考えられます。
すなわち、
- 入力がスカラーで出力もスカラー
- 入力がベクトルで出力がスカラー
- 入力がベクトルで出力もベクトル
です。
これだけでは抽象的なので具体例を挙げると、2番目は内積、3番目は外積のような計算があります。
冒頭でベクトルの”大きさ”と”向き”は座標系に依らず不変であると述べましたが、この性質は関数を通しても不変です。
入力のベクトルから、何らかの操作によって新たに出力されたベクトルも”大きさ”と”向き”は座標系に依らず不変であると言えます。
すなわち、関数の機能自体も座標系に依らない操作であることが言えます。
ただし、具体的な表現方法については座標系により変わります。
関数の制約:線形性
入力と出力が一対一対応であったとしても、出力に法則性が無いと扱いにくくなるため、線形性という制約を課すことにします。
次のような性質を満たすとき、その関数には線形性があると言われます。
特に断りが無ければ、関数は線形性を持つとして議論を進めていきます。
初めてのテンソル
0階のテンソル:スカラーからスカラーを生み出す関数
スカラーからスカラーを生み出す関数について考えましょう。
関数$f$があって、入力として$1$を入れると出力として$y=f(1)$ が出てくるとします。
今、出力はスカラーなので$f(1)$は何等かの定数となります。
したがって、$f(1)=a$とすることができます。
次に、入力として$x_1$を入れるとどうなるかを考えましょう。
この関数には線形性があるため、次のように分解することができます。
\begin{eqnarray}
f(x_1) = f(1\cdot x_1) = x_1f(1) = ax_1 \\
\end{eqnarray}
見方を変えると、$a$自体を関数の機能の具体的な表現と見なすことができます。
このようにスカラーからスカラーを作り出す機能のことを$0$階のテンソルと呼ぶことにします。
1階のテンソル:ベクトルからスカラーを生み出す関数
次に、ベクトルからスカラーを生み出す関数について考えます。
ベクトル $\B{x}$ を入力とし、これに関数$f$が作用することで、スカラー $y$ が出力として出てくるとします。
この関数に単位ベクトル $\B{e}$ を入力したとき、出力として$y_e$が出てきたとしてます。
さて、この単位ベクトルが$\B{e}=(e_1, e_2, e_3)^T$として表せるとき、出力$y_e$が、
\begin{eqnarray}
y_e &=& f(\B{e}_1) + f(\B{e}_2) + f(\B{e}_3) \EE
&=& a_1 + a_2 +a_3
\end{eqnarray}
となったとします。
なお、$f(\B{e}_1) = a_1, f(\B{e}_2) = a_2, f(\B{e}_3) = a_3$ なる定数であるとします。
次に、ベクトル $\B{x}=(x_1, x_2, x_3)$ をこの関数に入力するとどうなるでしょうか?
まず、$\B{x} = x_1\B{e}_1 + x_2\B{e}_2 + x_3\B{e}_3$ で表せるため、
\begin{eqnarray}
f(\B{x}) &=& f(x_1\B{e}_1 + x_2\B{e}_2 + x_3\B{e}_3) \EE
\end{eqnarray}
とできて、関数の線形性より、
$$
f(x_1\B{e}_1 + x_2\B{e}_2 + x_3\B{e}_3) = x_1f(\B{e}_1) + x_2f(\B{e}_2) + x_3f(\B{e}_3)
$$
と分解できます。
これより、以下のような計算結果が導けます。
\begin{eqnarray}
f(\B{x}) &=& f(x_1\B{e}_1 + x_2\B{e}_2 + x_3\B{e}_3) \EE
&=& x_1f(\B{e}_1) + x_2f(\B{e}_2) + x_3f(\B{e}_3) \EE
&=& a_1x_1 + a_2x_2 + a_3x_3
\end{eqnarray}
$\B{x}$を入れた時も出力はスカラーとなることが分かります。
この計算は内積であることも分かります。
この関数が線形性を保つためには、関数の中身は固定ベクトルでなければなりません。
すなわち、関数の中身はベクトルであり、具体的には$\B{a}=(a_1, a_2, a_3)$であると言えます。
つまり、ベクトルからスカラーを生み出す関数は次のように表せます。
\begin{eqnarray}
f(\B{x}) &=& \B{a}\cdot \B{x}
\end{eqnarray}
このように、ベクトルからスカラーを生み出す関数を$1$階のテンソルと呼びます。
今、ベクトル$\B{a}$が関数の機能を代表しているため、$\B{a}$を$1$階のテンソルと同一視できます。
さらに、$\B{a}$の成分 $(a_1, a_2, a_3)$ を$1$階のテンソルの成分と呼びます。
なお、$\B{a}\cdot\B{x}=|a||x|\cos\theta$となりますが、これら二つのベクトルの”大きさ”と”向き”は座標系を超越して普遍であるため、$1$階のテンソルの出力結果も座標系を超越して普遍であると言えます。
このように、座標系(基底)が変化しても同じ機能を果たすという事実をテンソル不変の原則と言います。
2階のテンソル:ベクトルからベクトルを生み出す関数
最後にベクトルからベクトルを生み出す関数について考えます。
この関数を$f$として、入力のベクトルを$\B{x}=(x_1, x_2, x_3)$として、その出力の結果が $\B{y}=(y_1, y_2, y_3)$であったとします。
ところで、三本の単位ベクトルを$\B{e}_1, \B{e}_2, \B{e}_3$とすると、$\B{x}$は次のように表せます。
\begin{eqnarray}
\B{x} = x_1\B{e}_1 + x_2\B{e}_2 + x_3\B{e}_3
\end{eqnarray}
この前提の下で、関数は次のように表現できます。
\begin{eqnarray}
f(\B{x}) &=& f(x_1\B{e}_1 + x_2\B{e}_2 + x_3\B{e}_3)
\end{eqnarray}
さらに、関数は線形性を持つため、
\begin{eqnarray}
f(\B{x}) &=& x_1f(\B{e}_1) + x_2f(\B{e}_2) + x_3f(\B{e}_3)
\end{eqnarray}
とできます。
さて、単位ベクトルを入力されたとき、この関数が
$$
\left\{
\begin{split}
f(\B{e}_1) &= \B{a}_1 \EE
f(\B{e}_2) &= \B{a}_2 \EE
f(\B{e}_3) &= \B{a}_3
\end{split}
\right.
$$
の出力を返したとすると、先程の結果は次のように変形できます。
\begin{eqnarray}
f(\B{x}) &=& x_1\B{a}_1 + x_2\B{a}_2 + x_3\B{a}_3
\end{eqnarray}
これらを書き下すと、次のようになります。
\begin{eqnarray}
\B{y} &=& f(\B{x})\EE
&=& x_1\B{a}_1 + x_2\B{a}_2 + x_3\B{a}_3 \EE
&=& x_1
\left(
\begin{array}\\
a_{11} \\
a_{21} \\
a_{31}
\end{array}
\right)+
x_2
\left(
\begin{array}\\
a_{12} \\
a_{22} \\
a_{32}
\end{array}
\right)+
x_3
\left(
\begin{array}\\
a_{13} \\
a_{23} \\
a_{33}
\end{array}
\right) \EE\\
&=&
\left(
\begin{array}\\
a_{11}x_1 + a_{12}x_2 + a_{13}x_3 \\
a_{21}x_1 + a_{22}x_2 + a_{23}x_3 \\
a_{31}x_1 + a_{32}x_2 + a_{33}x_3 \\
\end{array}
\right)
\EE\\
&=&
\left(
\begin{array}\\
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33} \\
\end{array}
\right)
\left(
\begin{array}\\
x_1 \\
x_2 \\
x_3 \\
\end{array}
\right)
\end{eqnarray}
このように、ベクトルからベクトルを生み出す関数のことを$2$階のテンソルと呼びます。
上式から分かるように、$2$階のテンソルの具体的な表現は正方行列で規定されます。
なお、$a_{ij}$のような$2$階のテンソルの成分を$2$階のテンソルの成分と呼びます。
テンソルとは何か?
これまでの例から分かるように、テンソルとは線形性を持つ関数のことであると言えます。
その関数としての具体的な表現がスカラーやベクトル、行列となるのです。
テンソルが受け取る入力や出力の違いにより、テンソルは分類されており、
$0$階のテンソルはスカラー、$1$階のテンソルはベクトル、$2$階のテンソルは行列により表現できます。
本来は別の概念であるスカラーやベクトル、行列を線形性の制約を置くことで同じものとして扱える利点もあります。
問題は線形性を保ちつつ、出力結果が不変になるようなベクトルや行列が存在するのか?ということですが、線形代数より一定の手順でこのようなベクトルや行列を計算できることが知られています。
※ 今回は説明の都合上、入力と出力をスカラーとベクトルに限って考え、$2$階のテンソルまでを考えましたが、一般の$n$階のテンソルにも拡張できます。
関連記事