万有引力
の大きさの引力がはたらきます (万有引力の法則)。
となっており、SciPy 1.10.1 はこの値を採用しています:
# In[1]
import numpy as np
import scipy.constants as const
from scipy.constants import physical_constants as p_const
# 配列要素は小数点以下5桁まで表示
np.set_printoptions(precision=5)
# 万有引力定数の値
print(const.G)
print(const.gravitational_constant)
# 6.6743e-11
# 6.6743e-11
物理定数を収めた辞書 scipy.constants.physical_constants を使うと、値の他に単位や測定の不確かさを取得できます。
# In[2]
# 万有引力定数の値,単位,不確かさ
print(p_const["Newtonian constant of gravitation"])
# (6.6743e-11, 'm^3 kg^-1 s^-2', 1.5e-15)
現代においても万有引力定数の正確な測定は技術的に困難なので、CODATA 推奨値も変遷を続けています(ただし、最新推奨値が真値に近いという保証はありません)。SciPy のバージョンが更新されると、scipy.constants.G の値も変更される可能性があります。
(1) をベクトル表式で書き直してみましょう。質量
と表せます (下図)。
力の方向を単位ベクトルで表すと
となるので、(3) と (4) を掛ければ、ベクトルで表された万有引力の法則が得られます:
地球と太陽の間にはたらく万有引力
ベクトル表式の万有引力の法則を Python で実装してみます。
# In[3]
# 万有引力関数
# m0,r0:物体Aの質量(スカラー),位置(ベクトル)
# m,r:物体Bの質量(スカラー),位置(ベクトル)
def gravitation_vector(m0, r0, m, r):
vec = np.array(r0) - np.array(r)
return const.G * m0 * m * vec / np.linalg.norm(vec)**3
地球と太陽の質量をそれぞれ
のように設定します。
このとき、地球にはたらく引力の大きさは以下のように計算できます。
# In[4]
# 地球の質量
me = 5.972e24
# 太陽の質量
ms = 1.989e30
# 太陽の位置を原点とする
rs = [0, 0, 0]
# 地球の近日点
r = [1.471e11, 0, 0]
# 地球が近日点にあるときにはたらく引力
fe = gravitation_vector(ms, rs, me, r)
print(fe)
# [-3.66371e+22 0.00000e+00 0.00000e+00]
重力加速度
天体の質量を
となります。この式の両辺から
が得られます。この式の
重力加速度の計算
Python で天体の地表面付近の重力加速度を求める関数を定義して、地球の赤道上における重力加速度を計算してみましょう。
# In[5]
# 天体の重力加速度を求める関数
def g_acceleration(m, r):
return const.G * m / r**2
# 地球の赤道半径
re = 6.378e6
# 地球の赤道上における重力加速度
g = g_acceleration(me, re)
print("{:.5f} [m/s^2]".format(g))
# 9.79811 [m/s^2]
地表から
遠心力による補正
地球は自転しているので、地表にあるすべての物体には自転軸から離れる方向に遠心力がはたらきます。
地球の自転角速度を
となります。緯度
で与えられます。緯度が大きいほど遠心力の効果は小さくなり、極地で
によって計算できます。
遠心力の効果を含めた重力加速度を求める関数を Python で実装してみます。
# In[6]
# 天体表面の重力加速度を計算する関数
# m:天体の質量(mass)
# r:天体の半径(radius)
# rp:天体の自転速度(rotation period)
# phi:重力加速度を計算する緯度
# degrees:phiを度数単位で指定するか否か
# 戻り値:
# (遠心力を考慮しない重力加速度,
# 遠心力による加速度,
# 遠心力効果によって補正された重力加速度)
def surface_acceleration(m, r, rp, phi, degrees=True):
if degrees == True:
phi = np.deg2rad(phi)
# 自転角速度
w = 2 * np.pi / rp
# 万有引力による重力加速度
g = const.G * m / r**2
# 遠心力による加速度
f = r * w**2 * np.cos(phi)
# 遠心力効果によって補正された重力加速度
gf = np.sqrt(g**2 + f**2 - 2 * g * f * np.cos(phi))
return np.array([g, f, gf])
surface_acceleration() は
・遠心力効果を含めない重力加速度
・遠心力による加速度
・遠心力効果によって補正された重力加速度
をまとめて返すので、遠心力がどの程度の影響を及ぼしているのかを知ることができます。地球の赤道上での重力加速度を計算してみましょう。rp には地球の恒星に対する自転周期
# In[7]
# 地球の対恒星自転周期
rp = 86164
# 赤道上の重力加速度
g_eq = surface_acceleration(me, re, rp, 0)
print(g_eq)
# [9.79811 0.03392 9.76419]
次に北緯
# In[8]
# 北緯60°における重力加速度
g_60 = surface_acceleration(me, re, rp, 60)
print(g_60)
# [9.79811 0.01696 9.78964]
赤道よりも遠心力の効果が小さくなっていることがわかりますね。実際には、遠心力以外にも、地球が完全な球ではなく楕円体であること、表面地形や密度の違いなどによっても重力加速度は影響を受けます。このように、重力加速度は場所によって異なる値が測定されるので、標準重力加速度 を
コメント
In[1] プログラムを実行すると、SciPy(1.10.1) の const.G は 6.6743e-11 になっていました。下記は誤植と思われますので、ご確認ください。
In[3] ブログラムで、norm(vec) → np.linalg.norm(vec)
(7)、(8) 式で、d^2x/dt → /d^2x/dt^2
ありがとうございます。
最新の推奨値に更新されていたんですね。
記事を SciPy 1.10.1 に合わせて修正しておきました。