重力場中の異なる地点,例えば東京スカイツリー展望台と地上の時計の進み方の違いを調べるために,地球の外部重力場は球対称真空なシュバルツシルト時空で記述されてるとして話を進める。(厳密には球対称ではないし,また自転しているが… )
この実験は,2020年に多くのネットニュースで取り上げられたので検索するといろいろ見つかる。たとえば,(有料記事が多いので無料で全部読める記事を探すと… )
光の振動数から定義される時間の進み
4元速度 \(\boldsymbol{u}\) の静止観測者が測定する時間間隔 \(\varDelta \tau\) は,4元ベクトル \(\boldsymbol{k}\) で表される特定の光(電磁波)の振動数 \(\omega\) に反比例するのであった。
$$ \varDelta \tau \propto \frac{1}{\omega}, \quad \omega \equiv – \boldsymbol{k}\cdot\boldsymbol{u}$$
シュバルツシルト時空中の静止観測者が観測する光の振動数は,
$$\omega = -k_0\, u^0 = \frac{\omega_c}{\sqrt{1 – \frac{r_g}{r}}}, \quad \omega_c = \mbox{const.}, \ \ r_g \equiv \frac{2GM}{c^2}$$
となり,同じ光源から放たれた同じ光,つまり同じ \(\boldsymbol{k}\) を観測していても,振動数 \(\omega\) は観測者の位置を表す動径座標 \(r\) に依存することになる。
異なる地点における時間の進み方の違い
したがって,地球中心から \(r = r_1\) (地上を想定)に静止している時計の進み \(\varDelta \tau_1\) と, \(r = r_2 > r_1\) (スカイツリー展望台を想定)に静止している時計の進み \(\varDelta \tau_2\) の比は
$$\frac{\varDelta \tau_2}{\varDelta \tau_1} = \frac{\omega_1}{\omega_2} = \frac{\sqrt{1 – \frac{r_g}{r_2}}}{\sqrt{1 – \frac{r_g}{r_1}}} > 1$$
となり,スカイツリー展望台においた時計の進みのほうがはやいということがわかる。
\(r_2 > r_1\) であるから,重力ポテンシャルの浅いところ・重力ポテンシャルの高い環境であるスカイツリー展望台 \(r = r_2\) のほうが,重力ポテンシャルの深いところ・重力ポテンシャルの低い環境である地上 \(r = r_1\) よりも時間がはやく進むということになる。
どのくらい進むのか,定量的な計算をしてみよう。
以下では,$r_1 = R$, $r_2 = R + h$ (ここで,$R$ は地球半径,$h$ はスカイツリー展望台の高さ)として
$$\frac{\varDelta \tau_2}{\varDelta \tau_1} = \frac{\sqrt{1 – \frac{r_g}{R+h}}}{\sqrt{1 – \frac{r_g}{R}}} $$
を$ r_g \ll h \ll R$ であるから,$r_g$ および $h$ について1次までのテイラー展開した式を評価してみる。
Maxima-Jupyter による計算例
スカイツリー展望台での時間の進み
$r_1$ を地上とすると,地球半径 $R$ を使って $r_1 = R$
$r_2$ をスカイツリー展望台とすると,展望台までの高さ $h$ を使って $r_2 = R + h$
$\displaystyle \frac{\varDelta \tau_2}{\varDelta \tau_1} = $ Dtratio
という変数に入れる。
Dtratio: sqrt(1-rg/(R + h))/sqrt(1-rg/R);
後述するように具体的な数値を入れると $r_g \ll h \ll R$ であるから
taylor()
関数で,テイラー展開,やってんかい!
まず,$r_g$ について1次までのテイラー展開,taylor(Dtratio, rg, 0, 1)
。
そしてそれをさらに $h$ について1次までのテイラー展開 taylor(%, h, 0, 1)
して,結果を変数 tay1
に代入する。
taylor(Dtratio, rg, 0, 1);
tay1: taylor(%, h, 0, 1);
tay1
の $r_g$ に比例する一般相対論的補正項を,係数をとりだす coeff()
関数を使ってとりだし,変数 ans
に代入する。
ans: rg * coeff(tay1, rg, 1);
または,てっとり早く,tay1
から $1$ を引いてもよい。
tay1 - 1;
あとは,$r_g, h, R$ にそれぞれ数値を入れて ans
の値を求め,これは1秒あたりの進みの違いであることに注意して,1日あたりの時計の進みを求める。
G: 6.674E-11;
/* 地球質量 */
M: 5.972E24;
/* 光速 */
c: 299792458;
rg: 2*G*M/c**2;
/* 地球半径 */
/* 赤道半径を使うべきかは,悩むところ。*/
/* ちょっと大きめな値を入れていることになるかも。*/
R: 6378E3;
/* スカイツリー展望台の高さ。思わず 634m と言ってしまいそうだが... */
h: 450;
変数 ans
を構成する変数の数値を入れても,ans
そのものは最初の定義と変わらない。
ans;
そんなときは,ev(ans);
とすると,evaluate つまり数値を入れて値を出してくれる。
/* ev() 関数は Evaluate つまり(数値を入れて)値を出してくれる。*/
ev(ans);
これに,1日の秒数をかけて,1日あたりの時間の進みにすると…
fpprintprec: 3$ /* 16 桁も表示する必要はないので,表示桁を 3桁にする */
print("スカイツリー展望台では,1日あたり", ev(ans) * 24 * 60 * 60, "秒進む。")$
結論:
スカイツリー展望台では,時間は1日あたり10億分の 4.2 秒 すすむ。