\usepackagecancel

Return to 重力場中の時間の進み方

重力場中の異なる地点での時間の進み方

重力場中の異なる地点,例えば東京スカイツリー展望台と地上の時計の進み方の違いを調べるために,地球の外部重力場は球対称真空なシュバルツシルト時空で記述されてるとして話を進める。(厳密には球対称ではないし,また自転しているが… )

この実験は,2020年に多くのネットニュースで取り上げられたので検索するといろいろ見つかる。たとえば,(有料記事が多いので無料で全部読める記事を探すと… )

光の振動数から定義される時間の進み

4元速度 u静止観測者が測定する時間間隔 Δτ は,4元ベクトル k で表される特定の光(電磁波)の振動数 ω に反比例するのであった。

Δτ1ω,ωku

シュバルツシルト時空中の静止観測者が観測する光の振動数は,

ω=k0u0=ωc1rgr,ωc=const.,  rg2GMc2
となり,同じ光源から放たれた同じ光,つまり同じ k を観測していても,振動数 ω は観測者の位置を表す動径座標 r に依存することになる。

異なる地点における時間の進み方の違い

したがって,地球中心から r=r1 (地上を想定)に静止している時計の進み Δτ1 と, r=r2>r1 (スカイツリー展望台を想定)に静止している時計の進み Δτ2 の比は

Δτ2Δτ1=ω1ω2=1rgr21rgr1>1
となり,スカイツリー展望台においた時計の進みのほうがはやいということがわかる。

r2>r1 であるから,重力ポテンシャルの浅いところ・重力ポテンシャルの高い環境であるスカイツリー展望台 r=r2 のほうが,重力ポテンシャルの深いところ・重力ポテンシャルの低い環境である地上 r=r1 よりも時間がはやく進むということになる。

どのくらい進むのか,定量的な計算をしてみよう。

以下では,r1=R, r2=R+h (ここで,R は地球半径,h はスカイツリー展望台の高さ)として

Δτ2Δτ1=1rgR+h1rgR

rghR であるから,rg および h について1次までのテイラー展開した式を評価してみる。

Maxima-Jupyter による計算例


 

スカイツリー展望台での時間の進み

r1 を地上とすると,地球半径 R を使って r1=R
r2 をスカイツリー展望台とすると,展望台までの高さ h を使って r2=R+h
Δτ2Δτ1= Dtratio という変数に入れる。

In [1]:
Dtratio: sqrt(1-rg/(R + h))/sqrt(1-rg/R);
Out[1]:
(%o1)1rgh+R1rgR

後述するように具体的な数値を入れると rghR であるから
taylor() 関数で,テイラー展開,やってんかい!

まず,rg について1次までのテイラー展開,taylor(Dtratio, rg, 0, 1)

そしてそれをさらに h について1次までのテイラー展開 taylor(%, h, 0, 1) して,結果を変数 tay1 に代入する。

In [2]:
taylor(Dtratio, rg, 0, 1);
tay1: taylor(%, h, 0, 1);
Out[2]:
(%o2)hrg2Rh+2R2+1
Out[2]:
(%o3)hrg2R2+1

tay1rg に比例する一般相対論的補正項を,係数をとりだす coeff() 関数を使ってとりだし,変数 ans に代入する。

In [3]:
ans: rg * coeff(tay1, rg, 1);
Out[3]:
(%o4)hrg2R2

または,てっとり早く,tay1 から 1 を引いてもよい。

In [4]:
tay1 - 1;
Out[4]:
(%o5)hrg2R2

あとは,rg,h,R にそれぞれ数値を入れて ans の値を求め,これは1秒あたりの進みの違いであることに注意して,1日あたりの時計の進みを求める。

In [5]:
G: 6.674E-11;
/* 地球質量 */
M: 5.972E24;
/* 光速 */
c: 299792458;

rg: 2*G*M/c**2;
Out[5]:
(%o6)6.674×1011
Out[5]:
(%o7)5.972000000000001×10+24
Out[5]:
(%o8)299792458
Out[5]:
(%o9)0.00886940714066725
In [6]:
/* 地球半径 */
/* 赤道半径を使うべきかは,悩むところ。*/
/* ちょっと大きめな値を入れていることになるかも。*/
R: 6378E3; 
/* スカイツリー展望台の高さ。思わず 634m と言ってしまいそうだが... */
h: 450;
Out[6]:
(%o10)6378000.0
Out[6]:
(%o11)450

変数 ans を構成する変数の数値を入れても,ans そのものは最初の定義と変わらない。

In [7]:
ans;
Out[7]:
(%o12)hrg2R2

そんなときは,ev(ans); とすると,evaluate つまり数値を入れて値を出してくれる。

In [8]:
/* ev() 関数は Evaluate つまり(数値を入れて)値を出してくれる。*/
ev(ans);
Out[8]:
(%o13)4.905780125753035×1014

これに,1日の秒数をかけて,1日あたりの時間の進みにすると…

In [9]:
fpprintprec: 3$ /* 16 桁も表示する必要はないので,表示桁を 3桁にする */
print("スカイツリー展望台では,1日あたり", ev(ans) * 24 * 60 * 60, "秒進む。")$
スカイツリー展望台では,1日あたり 4.24×109 秒進む。

結論:

スカイツリー展望台では,時間は1日あたり10億分の 4.2 秒 すすむ。