LoginSignup
1
1

More than 5 years have passed since last update.

NumPyで共変テンソル・反変テンソルの変換

Posted at

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

NumPyでテンソル代数(共変・反変)の続き。

問題は、テンソル解析(田代嘉宏・著) p163 問題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'

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

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

Aの逆行列は

A^{-1} =
\begin{pmatrix}
0.2 && 0.4 && 0 \\
3.2 && 1.4 && -2 \\
1.4 && 0.8 && -1
\end{pmatrix}

NumPyで書くと以下の通り。

import numpy as np

A = np.array([[1,2,-4],[2,-1,2],[3,2,-5]])
print(A)

#出力
#[[ 1  2 -4]
#[ 2 -1  2]
#[ 3  2 -5]]

A_1 = np.linalg.inv(A).round(decimals=1)
print(A_1)

#出力
#[[ 0.2  0.4  0. ]
#[ 3.2  1.4 -2. ]
#[ 1.4  0.8 -1. ]]

共変テンソルの変換

以下の共変テンソル

T =
\begin{pmatrix}
2 && 1 && -4 \\
1 && 0 && 2 \\
1 && -3 && 1
\end{pmatrix}

を変換します。

共変テンソルの変換式は以下の通り。

T_{ab} = \bar{{}^t\!A^a\,_i} \; T_{ij} \; \bar{A^j\,_b}

$\bar{A^i\,_a}$は$A^a\,_i$の逆行列を表します。

前回と同様、.dot()を使います。

T = np.array([[2,1,-4],[1,0,2],[1,-3,1]]) #共変テンソル
T_ab = A_1.T.dot(T.dot(A_1)).round()
print(T_ab)

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

反変テンソルの変換

以下の反変テンソル

H =
\begin{pmatrix}
3 && 2 && 1 \\
2 && -1 && 3 \\
1 && 3 && 1
\end{pmatrix}

を変換します。

反変テンソルの変換式は以下の通り。

H^{ab} = A^a\,_i \; H^{ij} \; {}^t\!A^j\,_b
H = np.array([[3,2,1],[2,-1,3],[1,3,1]]) #反変テンソル
H_ab = A.dot(H.dot(A.T))
print(H_ab)

#出力
#[[-33  24 -30]
#[ 24   3  35]
#[-30  35 -18]]

混合テンソルの変換

以下の混合テンソル

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

を変換します。

反変テンソルの変換式は以下の通り。

P^a\,_b = A^a\,_i \; P^i\,_j \; \bar{A^j\,_b}
P = np.array([[3,1,3],[-5,3,1],[-4,2,1]]) #混合テンソル
P_ab = A.dot(P.dot(A_1)).round()
print(P_ab)

#出力
#[[  0.   3.   1.]
#[ 20.  11. -13.]
#[  9.  11.  -4.]]
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1