今回は Python(SymPy)を活用する具体例として、4次元時空のde Sitter(ド・ジッター)解が宇宙定数がある場合のアインシュタイン方程式の解になっていることをPython(SymPy)を使って確認してみたいと思います。宇宙定数がゼロの場合には、前の記事
でみたように、Schwarzschild(シュワルツシルト)解が静的で球対称な場合のアインシュタイン方程式の真空解として求められました。今回はそれを少し拡張したものになります。
前の記事と同様、おまけとして、5次元・6次元の場合についても同様に計算してみます。
4次元ド・ジッター解
計算の詳細については、上でリンクを貼った過去の記事を参照してください。
宇宙定数 を含む場合のEinstein方程式は
で与えられます。ここでSchwarzschildの場合と同様に静的で球対称な仮定を置いて、未知関数を として
を考えてみます。ただし、これらの成分は座標系
に関するものとします。
%reset import sympy as sp sp.var('t, r, theta, phi, psi') xi = sp.Matrix([ [t],[r],[theta],[phi] ]) D = len(xi) f = sp.Function('f')(r) g = sp.Matrix([ [-f, 0, 0, 0], [0, 1/f, 0, 0], [0, 0, r**2, 0], [0, 0, 0, r**2*sp.sin(theta)**2] ]) ginv = g.inv() def Gamma(k,i,j): gm = 0 for n in range(D): gm = gm + sp.Rational(1,2)*ginv[k,n]*(g[n,i].diff(xi[j])\ +g[n,j].diff(xi[i])-g[i,j].diff(xi[n])) return gm def R(i,j,k,l): rm = Gamma(i,l,j).diff(xi[k]) - Gamma(i,k,j).diff(xi[l]) for n in range(D): rm = rm + Gamma(n,l,j)*Gamma(i,k,n) - Gamma(n,k,j)*Gamma(i,l,n) return rm def Ricc(j,k): ric = 0 for n in range(D): ric = ric + R(n,j,n,k) return ric RiccMat = sp.Matrix([ [Ricc(0,0), Ricc(0,1), Ricc(0,2), Ricc(0,3)], [Ricc(1,0), Ricc(1,1), Ricc(1,2), Ricc(1,3)], [Ricc(2,0), Ricc(2,1), Ricc(2,2), Ricc(2,3)], [Ricc(3,0), Ricc(3,1), Ricc(3,2), Ricc(3,3)] ]) R = sp.simplify((ginv*RiccMat).trace()) GMat = sp.simplify(RiccMat - sp.Rational(1,2)*g*R) GMat
より、Einsteinテンソルが
と求まります。さて、いまEinstein方程式の左辺を
とすると、このテンソル の全ての成分がゼロというのが解の条件です。よって
sp.var('Lambda')
EMat = sp.simplify(GMat + Lambda*g)
EMat
から、未知関数 について
が要請されます。ここで第2式は第1式から従うので、第1式だけ考えれば良いことがわかります。すなわち
です。これは宇宙定数に比例する項を非斉次項に持つ線形1階常微分方程式なので、その一般解は斉次方程式の一般解(Schwarzschild解)と、特解の和によって与えられます。特解は
であることがわかります。よって一般解は を定数として
で与えられます。この解によって定まるEinstein方程式の真空解をde Sitter–Schwarzschild解といいます。
5次元ド・ジッター解
5次元の場合に、時間 と4次元空間の極座標 からなる座標系で
として4次元の場合と同様の計算をします:
%reset import sympy as sp sp.var('t, r, theta, phi, psi') xi = sp.Matrix([ [t],[r],[theta],[phi],[psi] ]) D = len(xi) f = sp.Function('f')(r) g = sp.Matrix([ [-f, 0, 0, 0, 0], [0, 1/f, 0, 0, 0], [0, 0, r**2, 0, 0], [0, 0, 0, r**2*sp.sin(theta)**2, 0], [0, 0, 0, 0, r**2*sp.sin(theta)**2*sp.sin(phi)**2] ]) ginv = g.inv() def Gamma(k,i,j): gm = 0 for n in range(D): gm = gm + sp.Rational(1,2)*ginv[k,n]*(g[n,i].diff(xi[j])\ +g[n,j].diff(xi[i])-g[i,j].diff(xi[n])) return gm def R(i,j,k,l): rm = Gamma(i,l,j).diff(xi[k]) - Gamma(i,k,j).diff(xi[l]) for n in range(D): rm = rm + Gamma(n,l,j)*Gamma(i,k,n) - Gamma(n,k,j)*Gamma(i,l,n) return rm def Ricc(j,k): ric = 0 for n in range(D): ric = ric + R(n,j,n,k) return ric RiccMat = sp.Matrix([ [Ricc(0,0), Ricc(0,1), Ricc(0,2), Ricc(0,3), Ricc(0,4)], [Ricc(1,0), Ricc(1,1), Ricc(1,2), Ricc(1,3), Ricc(1,4)], [Ricc(2,0), Ricc(2,1), Ricc(2,2), Ricc(2,3), Ricc(2,4)], [Ricc(3,0), Ricc(3,1), Ricc(3,2), Ricc(3,3), Ricc(3,4)], [Ricc(4,0), Ricc(4,1), Ricc(4,2), Ricc(4,3), Ricc(4,4)] ]) R = sp.simplify((ginv*RiccMat).trace()) GMat = sp.simplify(RiccMat - sp.Rational(1,2)*g*R) sp.var('Lambda') EMat = sp.simplify(GMat + Lambda*g) EMat
より、Einstein方程式 から
が関数 に課されます。この場合についても、第2式は第1式から自動的に満たされて
という、宇宙定数に比例する項を非斉次項に持つ線形1階常微分方程式を得ます。その特解は
であることがわかります。よって一般解は を定数として
で与えられます。この解によって定まる計量が5次元の場合のde Sitter–Schwarzschild解です。
6次元ド・ジッター解
6次元の場合のSchwarzschild解とこれまでの考察から、6次元の場合の未知関数 は次のような形
だろうと予想がつきます。ただし は定数で、Einstein方程式から決定されるものです。実際
%reset import sympy as sp sp.var('t, r, theta, phi, psi, chi, Lambda, a, C6') xi = sp.Matrix([ [t],[r],[theta],[phi],[psi],[chi] ]) D = len(xi) # いま関数 f の具体形を用いています f = 1 - a/(r**3) - Lambda/C6*r**2 g = sp.Matrix([ [-f, 0, 0, 0, 0, 0], [0, 1/f, 0, 0, 0, 0], [0, 0, r**2, 0, 0, 0], [0, 0, 0, r**2*sp.sin(theta)**2, 0, 0], [0, 0, 0, 0, r**2*sp.sin(theta)**2*sp.sin(phi)**2, 0], [0, 0, 0, 0, 0, r**2*sp.sin(theta)**2*sp.sin(phi)**2*sp.sin(psi)**2] ]) ginv = g.inv() def Gamma(k,i,j): gm = 0 for n in range(D): gm = gm + sp.Rational(1,2)*ginv[k,n]*(g[n,i].diff(xi[j])\ +g[n,j].diff(xi[i])-g[i,j].diff(xi[n])) return gm def R(i,j,k,l): rm = Gamma(i,l,j).diff(xi[k]) - Gamma(i,k,j).diff(xi[l]) for n in range(D): rm = rm + Gamma(n,l,j)*Gamma(i,k,n) - Gamma(n,k,j)*Gamma(i,l,n) return rm def Ricc(j,k): ric = 0 for n in range(D): ric = ric + R(n,j,n,k) return ric RiccMat = sp.Matrix([ [Ricc(0,0), Ricc(0,1), Ricc(0,2), Ricc(0,3), Ricc(0,4), Ricc(0,5)], [Ricc(1,0), Ricc(1,1), Ricc(1,2), Ricc(1,3), Ricc(1,4), Ricc(1,5)], [Ricc(2,0), Ricc(2,1), Ricc(2,2), Ricc(2,3), Ricc(2,4), Ricc(2,5)], [Ricc(3,0), Ricc(3,1), Ricc(3,2), Ricc(3,3), Ricc(3,4), Ricc(3,5)], [Ricc(4,0), Ricc(4,1), Ricc(4,2), Ricc(4,3), Ricc(4,4), Ricc(4,5)], [Ricc(5,0), Ricc(5,1), Ricc(5,2), Ricc(5,3), Ricc(5,4), Ricc(5,5)] ]) R = sp.simplify((ginv*RiccMat).trace()) GMat = sp.simplify(RiccMat - sp.Rational(1,2)*g*R) EMat = sp.simplify(GMat + Lambda*g) EMat
より、Einstein方程式 から
と求まります。
以上見てきたように、宇宙定数がある場合のEinstein方程式の解は、次の形の関数
で特徴づけられる計量によって与えられました。ここで
だったわけですが、同様のことは他の次元でも成り立つでしょうか?またそのとき係数はいくつでしょうか?そんなことを考察してみるのも面白いかもしれませんね。ちなみに、 です。
キーワード:Python、SymPy、Riemann幾何、一般相対論、ド・ジッター解