【Python入門】万有引力と重力加速度|物理の基本を学ぶ

万有引力と重力加速度|物理の基本を学ぶ_アイキャッチ プログラミング

※ 当サイトはアフィリエイト広告を利用しています。

levtech-ad
スポンサーリンク

物理法則の基本とされる「万有引力」や「重力加速度」は、Pythonで容易に計算することができます。

本記事では、Pythonを使用した万有引力と重力加速度の計算方法について、詳しくご説明します。

こんな人に読んでほしい
  • Python初心者の人
  • Pythonを使用した万有引力と重力加速度の計算方法について学びたい人
levtech-ad

万有引力

万有引力(universal gravitation)とは、2つの物体の質量を\(M\),\(m\)、物体間の距離を\(r\)として、下式で表される引力のことです。

\(F=G\dfrac{Mm}{r^{2}}\)

\(G\)は万有引力定数と呼ばれる比例定数です。

\(G=6.67430\times 10^{-11}m^{3}\cdot s^{2}\cdot kg^{-1}\)

scipy.constants.G

SciPyのscipy.constants.Gを使用すると、万有引力定数を呼び出すことができます。

#input
import scipy.constants as const
print(const.G)
#output
6.6743e-11

SciPyのscipy.constants.physical_constantsを使用すると、単位や測定精度も呼び出すことができます。

#input
from scipy.constants import physical_constants as pconst
print(pconst["Newtonian constant of gravitation"])
#output
(6.6743e-11, 'm^3 kg^-1 s^-2', 1.5e-15)

地球と太陽の万有引力

任意の点を原点に持ち、2つの物体までの距離をそれぞれ\(r0\)、\(r\)とすると、ベクトルを使用して万有引力は下式で表されます。

\(F=GMm\dfrac{r_{0}-r}{\left| r_{0}-r\right| ^{3}}\)

上式を関数として実装した例を以下に載せます。

#input
def gravitation(M, r0, m, r):
    vec = np.array(r0) - np.array(r)
    return const.G * M * m * vec / norm(vec)**3

この関数を使用して、太陽と地球の万有引力を計算してみます。

太陽の質量を\(1.989\times 10^{30}kg\)、地球の質量を\(5.972\times 10^{24}kg、地球と太陽の距離を\(1.5\times 10^{11}m\)とします。

#input
import numpy as np
import scipy.constants as const
from scipy.linalg import norm

def gravitation_vector(m0, r0, m, r):
    vec = np.array(r0) - np.array(r)
    return const.G * m0 * m * vec / norm(vec)**3

ms = 1.989e30
me = 5.972e24

r0 = [0, 0, 0]
r  = [1.5e11, 0, 0]

F = gravitation_vector(ms, r0, me, r)

print(F)
#output
[-3.52352849e+22  0.00000000e+00  0.00000000e+00]

重力加速度

重力加速度(gravitational acceleration)とは、万有引力定数\(G\)、天体質量\(M\)、半径を\(R\)として、下式で表されます。

\(g=\dfrac{GM}{R^{2}}\)

scipy.constants.g

SciPyのscipy.constants.gを使用すると、重力加速度を呼び出すことができます。

#input
import scipy.constants as const
print(const.g)
#output
9.80665

SciPyのscipy.constants.physical_constantsを使用して、単位と測定精度を確認してみます。

#input
from scipy.constants import physical_constants as pconst
print(pconst["standard acceleration of gravity"])
#output
(9.80665, 'm s^-2', 0.0)

任意の緯度での重力加速度

標準重力加速度は上値で定義されていますが、実際には緯度、地形等の影響を受けて、場所によって値が異なります。

本節では、任意の緯度における重力加速度を計算する関数を実装してみます。

#input
import numpy as np
import scipy.constants as const

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 gf

me = 5.972e24
re = 6.378e6
rp = 86164

g_0 = surface_acceleration(me, re, rp, 0)
g_30 = surface_acceleration(me, re, rp, 30)
g_60 = surface_acceleration(me, re, rp, 60)
g_90 = surface_acceleration(me, re, rp, 90)

print("赤道の重力加速度   :{:.3f}".format(g_0))
print("北緯30°の重力加速度:{:.3f}".format(g_30))
print("北緯60°の重力加速度:{:.3f}".format(g_60))
print("北緯90°の重力加速度:{:.3f}".format(g_90))
#output
赤道の重力加速度    :9.765
北緯30°の重力加速度:9.773
北緯60°の重力加速度:9.790
北緯90°の重力加速度:9.798

まとめ

この記事では、Pythonを使用した万有引力と重力加速度の計算方法について、ご説明しました。

本記事を参考に、ぜひ試してみて下さい。

参考

Python学習用おすすめ教材

Pythonの基本を学びたい方向け

統計学基礎を学びたい方向け

Pythonの統計解析を学びたい方向け

おすすめプログラミングスクール

Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。

私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。

現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。

無料体験ができますので、まずは試してみてください!

\まずは無料体験!/
スポンサーリンク
タイトルとURLをコピーしました