Python
numpy
テンソル

NumPyでテンソル代数(共変・反変)

テンソル代数の共変・反変の変換をNumPyでやる方法のメモ。

問題は、テンソル解析(田代嘉宏・著) p154 例1.1 参照。

基底$Σ${$e_1,e_2,e_3$},$Σ'${$e'_1,e'_2,e'_3$}の双対基底の変換式は以下の通り。

e_1 = e_1' + 2e_2' + 3e_3' \\

e_2 = 2e_1' - e_2' +2e_3' \\
e_3 = -4e_1' + 2e_2' - 5e_3'


反変ベクトルの変換

反変ベクトル$v$の基底$Σ$に対する成分が

\vec{v} =

\begin{pmatrix}
v^1 \\
v^2 \\
v^3
\end{pmatrix}
=
\begin{pmatrix}
3 \\
2 \\
1
\end{pmatrix}

の時の基底$Σ'$に関する成分を求める。

基底の変換行列Aは双対基底の変換式より

A =

\begin{pmatrix}
1 & 2 & -4\\
2 & -1 & 2\\
3 & 2 & -5
\end{pmatrix}

反変ベクトル$v$の変換式は

\vec{v} =

\begin{pmatrix}
v'^1 \\
v'^2 \\
v'^3
\end{pmatrix}
= A
\begin{pmatrix}
v^1 \\
v^2 \\
v^3
\end{pmatrix}

NumPyでは.dot()で計算します。

import numpy as np

A = np.array([[1,2,3],[2,-1,2],[-4,2,-5]]).T #変換行列A

v = np.array([3,2,1])
v_dash = A.dot(v)
print(v_dash)

# 出力
# [3, 6, 8]


共変ベクトルの変換

共変ベクトル$a$の基底$Σ$に対する成分が

\vec{a} =

\begin{pmatrix}
a_1 & a_2 & a_3
\end{pmatrix}
=
\begin{pmatrix}
2 & 1 & -4
\end{pmatrix}

の時の基底$Σ'$に関する成分を求める。

\vec{a} =

\begin{pmatrix}
a'_1 & a'_2 & a'_3
\end{pmatrix}
=
\begin{pmatrix}
a_1 & a_2 & a_3
\end{pmatrix}
A^{-1}

NumPyでは

1. Aの逆行列を計算

2. .dot()で計算

の順で行います。

A_inv = np.linalg.inv(A) #逆行列の計算

a = np.array([2,1,-4])
a_dash = a.dot(A_inv)
print(a_dash)

# 出力
# [-2. -1. 2.]