SymPy の import
In [1]:
from sympy.abc import *
from sympy import *
$\displaystyle \frac{\varDelta \tau_2}{\varDelta \tau_1} = $ Dtratio
という変数に入れる。
In [2]:
# 1文字変数以外は定義しておく
var('rg')
Dtratio = sqrt(1-rg/(R + h))/sqrt(1-rg/R)
Dtratio
Out[2]:
series()
によるテイラー展開
series()
関数で,テイラー展開,やってんかい!
まず,$r_g$ について1次(2次未満だから Python 流に 2
を入れる)までのテイラー展開,series(Dtratio, rg, 0, 2)
。
In [3]:
tay = series(Dtratio, rg, 0, 2)
tay
Out[3]:
removeO()
してさらにテイラー展開
そしてそれをさらに $h$ について1次までのテイラー展開するために,いったん $O(r_g^2)$ の項を取り除いて普通の関数にしてから,もう一度 series()
する。
In [4]:
tay1 = tay.removeO()
tay1
Out[4]:
In [5]:
tay11 = series(tay1, h, 0, 2).removeO()
tay11
Out[5]:
tay1
の $r_g$ に比例する一般相対論的補正項をとりだし,変数 ans
に代入する。
In [6]:
ans = tay11 - 1
ans
Out[6]:
あとは,$r_g, h, R$ にそれぞれ数値を入れて ans
の値を求め,これは1秒あたりの進みの違いであることに注意して,1日あたりの時計の進みを求める。
In [7]:
G = 6.674E-11
# 地球質量
M = 5.972E24
# 光速
c = 299792458
# 重力半径
nrg = 2*G*M/c**2
In [8]:
# 地球半径
# 赤道半径を使うべきかは,悩むところ。
# ちょっと大きめな値を入れていることになるかも。
nR = 6378E3
# スカイツリー展望台の高さ
nh = 450
subs()
で数値を代入
変数 ans
を構成する変数に以下のように .subs()
で値を代入してみる。
In [9]:
ans.subs([(h, nh), (rg, nrg), (R, nR)])
Out[9]:
これに,1日の秒数をかけて,1日あたりの時間の進みにすると…
In [10]:
_ * 60 * 60 * 24
Out[10]:
結論
スカイツリー展望台では,時間は1日あたり10億分の4.2秒 すすむ。