テンソルと添え字の関係をつかもう

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

Information: テンソルと添え字の関係をつかもう