LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-01-29

テンソル代数の共変・反変の変換を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.]
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