テンソルと添え字の関係をつかもう
このワークシートはMath by Codeの一部です。
前回はテンソルに親しむことをテーマにして、コードを使ったテンソル計算を学んだ。
テンソルはデータの入れ物であり、2つのテンソルの軸をつぶしたりすることを知った。
座標のメッシュ行列もテンソルと言えることもわかったね。
今回は、テンソルと座標の関係をさらに深めてみよう。
そのために、座標系と基底とテンソルの関係から始める。
1.計量テンソルを作ろう
<距離のテンソルが計量テンソル>
距離の定義がされた空間を距離空間といいますが、計量空間というときもあります。
その距離を表すデータという意味の計量テンソルがあります。
たとえば、座標がN個(x1,x2,...,xn)ある座標系があるとき、座標軸がまっすぐでもなく、直交もしている保証もないとします。
xの上の添え字は、x1,x2,x3ならば、x,y,zという意味で、指数ではなくて軸を名前ではなく番号で表す。
すると、3次元以上でも、上つき添え字によって軸を表せるね。
座標軸にリンクした基底eN(e1,e2,...,en)という自然な基底(自然基底)を使って、
微小な2点を結ぶベクトルを
ds=dx1e1+dx2e2+.....+dxnen=Σdxmem
としましょう。
(dは微小という意味のd、添え字は指数ではなく上下ともにただの番号です。)
見かけは複雑に見えますが、ベクトルの終点の次のベクトルの始点をつなぐと、経路はともかくベクトルの線形和でdsの始点から終点に行ける。基底ベクトルの定数倍の矢印をつなげば、1つのベクトルになることは、線形代数でよく出る線形和から意味がわかりますね。
ただし、微小な距離ならばということだね。
さらに、アインシュタイン記法にならってΣをはぶき添え字を上下を意識して
ds=dxmem
とかきましょう。
添え字は、基底が下つき、成分が上つきの番号です。
同じ番号は基底と成分が対応していることを表してますね。
そして、この微小ベクトルのサイズ、微小距離ds(線素)を2乗してみよう。
ds2=(dxmem)(dxnen)=(dxmdxn) em・en
=(dxmdxn) gmn
内積 em・en=gmnとおくと、内積の配列{gmn}はm行n列の成分がgmnとなる行列になりますね。これを計量テンソルといいます。
<計量テンソルの添え字の上下>
この添え字が下つきのgmnの逆行列を、添え字を上にかいてgmnとしましょう。
gmn・gmn=δmn(対角成分が1で、他が0の単位行列)=diag(1,1,....,1)
が分数の約分のように上下に消える感じがしませんか。
上つきのAmに対して、Amgmn=An
のように、2つ下のテンソルをかけると、約分のように1つ消えて1つは下のままつきます。
同様に、Amgmn=An
計量テンソルをかけると、かけられた量の添え字が上下するように書くことにします。
<計量テンソルからわかること>
そして、各基底のサイズは、正規化されてないので1ではない。
それぞれのサイズhm=|em|をスケール因子と名前をつけることがある。
・このままでは意味が分かりにくいですが、
基底が正規直交系の場合、{gmn}はm=nなら1、それ以外は0、
つまりクロネッカーのデルタを使うと、
gmn=δmn。
つまり、対角成分だけ残るから{gmn}=diag(1,1)。
ds2=Σdx2なので、
線素の2乗はユークリッド距離の2乗にあたることがわかるね。
逆にgmn=δmnならば空間はデカルト的、ユークリッド的とわかる。
だから、計量テンソルは、微小距離の成分の積をどんな塩梅で関与させるのかを、
基底の内積の配列で表したもの、
座標系の自然基底の相互関係データ
ともいえるものだね。
つまり、基底の詳細が計量テンソルにこみこみで入っているともいえるのです。
たとえば、どの相互関係もどの座標で偏微分した傾きも∂gmn/∂xi=0、つまり、直線座標軸なら、
この空間はある意味、平板であるとわかります。
もちろん、ユークリッド空間は平板となるね。
(例)
正規でない直交座標系|e1|=h1,|e2|=h2のとき、異なる基底は直交するから内積=0なので、
テンソルはgmn=diag(h12,h22)=、線素の2乗はds2=(dx1h1)2+(dx2h2)2
(例)
2次元極座標は、中心が原点の同心円群と原点を通る直線群が直交するグリッドから基底を作る。
任意の点X(r cos θ,r sinθ)の微小ベクトルをds=dr er + dφeφとしよう。
正規でない直交座標系|er|=1,|eφ|=rとすると、異なる基底は直交するから内積=0なので、
計量テンソルはgmn=diag(12,r2)=、線素の2乗はds2=(dr)2+(r dφ)2
(例)
3次元球座標は、2次元極座標とz軸からθ回転を整合させる。
任意の点X(r sinθ cos φ, r sinθ sinφ, r cosθ )の微小ベクトルをds=dr er + dφeφ+dθeθとしよう。
正規でない直交座標系|er|=1, |eφ|=r,|eθ|=r sinθとすると、
計量テンソルはgmn=diag(1,r2,(r sinθ)2)=、線素の2乗はds2=(dr)2+(r dφ)2+(r sinθ dθ)2
2.座標変換のテンソルから計量テンソルを求めよう
1つのベクトルが座標系を決めると成分系が決まる。
同じベクトルに別の座標系を決めると別の成分系が決まる。
このとき、2つの座標系をつなぐのも、2つの成分系をつなぐのもテンソルだ。
たとえば、1つのベクトルを2種の直交基底で成分がどうなるかを調べてみよう。
正規直交基底e1=(1,0), e2=(0,1)と拡大直交基底e'1=2e1, e'2=1.5e2
を比較しよう。
ベクトルOXの終点Xのもと成分系を(x1,x2),新成分系を(x'1,x'2) とすると、
記法∂xa/b=∂xa/∂xb,∂xa/b=∂xa/∂xbを使い、アインシュタイン記法により、
全微分は
dx'1=∂x'1/1 dx1+∂x'1/2 dx2=∂x'1/m dxm,
dx'2=∂x'2/1 dx1+∂x'2/2 dx2=∂x'2/m dxm
まとめると、dx'n=∂x'n/m dxm
まるで、微分の連鎖率(チェーンルール)のときに分数の約分がOKだったように、
添え字の上つきと下付きの約分がOKになるというイメージの式ができる。
座標変換では、上つき成分は上つき成分に変換されます。
同様に、dx'n=∂x'm/n dxm
座標変換では、上つき成分は上つき成分に変換されます。
この座標変換する偏微分∂xa/b=∂xa/∂xbが並んだ行列、
見たことがありませんか。
そうです。これは、ヤコビ行列ですよね。ヤコビ行列は添え字を上下しません。
ヤコビ行列によって、成分変換だけでなく、基底自体の変換式もかけます。
e'n=∂x'n/mem,e'n=∂x'n\mem
このように、テンソルは逆行列で添え字が上下し、変換では添え字は上下しません。
クロネッカーのデルタも、テンソルです。座標の基底も、基底に付随する成分もテンソルです。
テンソルにテンソルをかけるとテンソルの軸がつぶれたり、増えたりしますが、それはテンソルです。
裏返していうと、テンソルの積がテンソルだから、テンソルの商もテンソルということになります。
ただし、軸が1つ、添え字が1つのテンソルを特にベクトルといいます。
ベクトルもテンソルも、
上つきなら反変、下付きなら共変と名付けます。
このように、テンソルは逆行列で添え字が上下し、変換では添え字は上下しません。
クロネッカーのデルタも、テンソルです。座標の基底も、基底に付随する成分もテンソルです。
ベクトルは添え字が1つなので、反変か共変かのどちらかですが、
このように、テンソルは逆行列で添え字が上下し、変換では添え字は上下しません。
テンソルは添え字が複数持てるで、Amnのように、反変と共変が混合するテンソルもある。
<ヤコビ行列から計量テンソルへ>
em・en=gmnは言い換えると、計量テンソルは基底の内積だった。
ところが、それぞれの基底は、ヤコビアンで変換した基底ともいえる。
だから、
計量テンソル=基底・基底=ヤコビ別基底・ヤコビ別基底=ヤコビヤコビ別基底・別基底
=ヤコビの積・別計量テンソル
となる。gµ′ν′ = ∂m/µ′∂n/ν′gmn、gmn= ∂m\µ′∂n\ν′gµ′ν′
gmn 、gµ′ν′ は添え字が2つあり、添え字ごとに下付き保存の共変的な変換を受けるということだね。
これらから、ds'2=ds2
であることが証明できる。つまり、線素の2乗は変換によって保存される不変量だとわかる。
たとえば、gµ′ν′ = ∂m/µ′∂n/ν′gmn
という、テンソル形式はアインシュタイン記法であり、Σを省略しているということを思いだそう。
また、添え字の上下もいったんおいといて、添え字の行と列の区別を順にかこう。大文字が行列だ。
Jmµ′={∂m/µ′}
Gmn={gmn}
Jnν′={∂n/ν′}
Gµ′ν′={gµ′ν′}とする。
テンソルの式gµ′ν′ = ∂m/µ′∂n/ν′gmnで1つめの積∂n/ν′gmn
は2軸のテンソルどうしで、共通の軸はnだから、nがつぶれる行列の積にする。
Gmnはm行n列だから、これに右からJnν′をかけるとnがつぶれてm行ν′列でGJmν′ができる。
2つめの積m行µ′列の∂m/µ′とm行ν′列のGJmν′の積は、両方ともm行だから、先頭のヤコビを転置しないと行列計算ができない。だから、(∂m/µ′)Tでm列がつぶれてµ′行ν′列のGGµ′ν′
が計算できる。
まとめると、Gµ′ν′=(Jmµ′)T ・Gmn・Jnν′となるね。
だから、
正規直交基底の計量テンソルはδmn=diag(1,..,1)=Iなので、
正規直交基底を座標変換する変換計量テンソルは座標変換のヤコビアンをJとするとき、
G=(Jmµ′)T ・Gmn・Jnν′=JT・Jだけで求められるね。
課題:座標変換の情報から、計量テンソルを作るコードを作ってみよう。
ヤコビ行列Jを使うと、計量テンソルは
g = JT ・I ・ J =JT・ J
だけで求められることが上でわかった。
基底ベクトルをいちいち書かなくても、この計量テンソルに込み込みで入っているのです。
これを関数にしてしまえば、座標変換の式を入れると、それに応じた計量テンソルが求められるはずです。数値計算ではNumpyを使いますが、記号計算ではSympyを使いましょう。
Python
[IN]
座標変換式から、基底ベクトル込みの計量テンソルを作る
#=================================
from sympy import symbols, sin, cos, Matrix, simplify, diag
# 変数と変換式の定義
a, b, c, d, X, Y = symbols('a b c d X Y')
r, t, p = symbols('r theta phi')
def metricTensor(coords,vars,title):
J = coords.jacobian(vars) # ヤコビ行列 J
g = simplify(J.T * J) # 計量テンソルg
print(title)
display(g)
return g
# 極座標系の計量テンソル
x = r * cos(t)
y = r * sin(t)
coords = Matrix([x, y])
vars = [r, t]
metricTensor(coords,vars,"極座標系の計量テンソル g:")
# 球面座標系の計量テンソル
phi = p
x_3d = r * sin(t) * cos(phi)
y_3d = r * sin(t) * sin(phi)
z_3d = r * cos(t)
coords_3d = Matrix([x_3d, y_3d, z_3d])
vars_3d = [r, t, phi]
metricTensor(coords_3d,vars_3d,"\n球面座標系の計量テンソル g_3d:")
# 斜交座標系の計量テンソル
xx = a * X + b * Y
yy = c * X + d * Y
coords_ob = Matrix([xx, yy])
vars_ob = [X, Y]
metricTensor(coords_ob,vars_ob,"\n斜交座標系の計量テンソル g_obli:")
#===========================================
[OUT]
