テンソル代数の共変・反変の変換を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では
- Aの逆行列を計算
-
.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.]