ニュートンの運動の3法則は、古典力学の根幹を成す基本法則です。1687年にアイザック・ニュートンが『プリンキピア』で発表して以来、ロケットの軌道計算から橋の設計まで、工学のあらゆる分野でこの法則が使われ続けています。
3つの法則はそれぞれ異なる側面を記述しますが、特に第2法則 $\bm{F} = m\bm{a}$ は最も強力で、これだけで質点の運動を完全に記述できます。本記事では、各法則の数学的定式化、物理的な意味、そして具体的な応用を解説します。
本記事の内容
- 第1法則(慣性の法則)の定式化と意味
- 第2法則(運動方程式)の導出と応用
- 第3法則(作用反作用の法則)
- 運動方程式の解法(自由落下、斜面、空気抵抗)
- Pythonでの運動シミュレーション
前提知識
この記事を読む前に、以下の概念を理解しておくと良いでしょう。
- ベクトルの基本演算(和、スカラー倍、内積)
- 微分の基本(速度、加速度が位置の時間微分であること)
第1法則(慣性の法則)
定式化
物体に外力が作用しない、またはすべての外力の合力がゼロであるとき、静止している物体は静止し続け、運動している物体は等速直線運動を続ける。
数式で書くと:
$$ \begin{equation} \sum \bm{F} = \bm{0} \implies \bm{v} = \text{const} \end{equation} $$
物理的な意味
この法則は2つのことを述べています:
- 慣性の存在: 物体は現在の運動状態を維持しようとする性質(慣性)を持つ
- 慣性系の定義: 第1法則が成り立つ座標系を 慣性系 と呼ぶ
日常の直感では「物体は放っておけば止まる」と思いがちですが、それは摩擦力や空気抵抗という外力が存在するからです。宇宙空間で投げた物体は、永遠に等速直線運動を続けます。
第2法則(運動方程式)
定式化
$$ \begin{equation} \bm{F} = m\bm{a} = m\frac{d^2\bm{r}}{dt^2} \end{equation} $$
ここで $\bm{F}$ は物体に作用する合力、$m$ は質量、$\bm{a}$ は加速度、$\bm{r}$ は位置ベクトルです。
より一般的な形式(運動量)
$$ \begin{equation} \bm{F} = \frac{d\bm{p}}{dt} = \frac{d(m\bm{v})}{dt} \end{equation} $$
$m$ が一定のとき $\bm{F} = m\bm{a}$ に帰着します。質量が変化する場合(ロケットの推進など)は、この運動量形式を使う必要があります。
成分表示
3次元空間では、各成分ごとに方程式を立てます:
$$ \begin{align} F_x &= m\ddot{x} \\ F_y &= m\ddot{y} \\ F_z &= m\ddot{z} \end{align} $$
ここで $\ddot{x} = \frac{d^2x}{dt^2}$ です。
単位
SI単位系では:力 $[\text{N}]$ = 質量 $[\text{kg}]$ × 加速度 $[\text{m/s}^2]$
1ニュートンは、1 kgの物体に 1 m/s² の加速度を与える力です。
第3法則(作用反作用の法則)
定式化
物体Aが物体Bに力 $\bm{F}_{AB}$ を及ぼすとき、物体Bは物体Aに力 $\bm{F}_{BA} = -\bm{F}_{AB}$ を及ぼす。
$$ \begin{equation} \bm{F}_{AB} = -\bm{F}_{BA} \end{equation} $$
注意点
- 作用と反作用は 同時 に発生する
- 2つの力は 異なる物体 に作用する(同一物体ではない!)
- 大きさが等しく、向きが反対、同一作用線上
応用例
ロケットの推進: ロケットは噴射ガスを後方に押し出す(作用)。その反作用として、ロケット本体は前方に力を受けて加速します。
具体例と運動方程式の解法
例1: 自由落下
質量 $m$ の物体が重力のみを受ける場合:
$$ m\ddot{y} = -mg $$
$$ \ddot{y} = -g $$
初期条件 $y(0) = h_0$, $\dot{y}(0) = 0$(静止状態から落下)で積分すると:
$$ \begin{align} \dot{y}(t) &= -gt \\ y(t) &= h_0 – \frac{1}{2}gt^2 \end{align} $$
例2: 斜面上の運動
傾斜角 $\theta$ の摩擦のない斜面上の物体の運動:
斜面方向を $s$ 軸とすると:
$$ m\ddot{s} = mg\sin\theta $$
$$ s(t) = \frac{1}{2}g\sin\theta \cdot t^2 $$
例3: 空気抵抗がある場合の落下
空気抵抗が速度に比例する場合 $F_{\text{drag}} = -bv$:
$$ m\dot{v} = mg – bv $$
変数分離して解くと:
$$ \begin{align} v(t) &= \frac{mg}{b}\left(1 – e^{-bt/m}\right) \end{align} $$
$t \to \infty$ で 終端速度 $v_\infty = mg/b$ に漸近します。
例4: 単振動(バネ)
フックの法則 $F = -kx$ のとき:
$$ m\ddot{x} = -kx \implies \ddot{x} + \omega^2 x = 0 $$
ここで $\omega = \sqrt{k/m}$。一般解は:
$$ x(t) = A\cos(\omega t + \phi) $$
Pythonでの実装
自由落下と空気抵抗ありの比較
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
g = 9.81 # 重力加速度 [m/s^2]
m = 1.0 # 質量 [kg]
# 空気抵抗なし
t = np.linspace(0, 5, 500)
y_free = 100 - 0.5 * g * t**2
v_free = -g * t
# 空気抵抗あり(F_drag = -b*v)
b = 0.5 # 抵抗係数
def equations(state, t):
y, v = state
dydt = v
dvdt = -g + (b/m) * (-v) if v < 0 else -g - (b/m) * v
# 落下方向が負なので修正
dvdt = -g - (b/m) * v
return [dydt, dvdt]
# 正しい定式化: 下向き正で
v_drag = (m * g / b) * (1 - np.exp(-b * t / m))
y_drag = 100 - (m * g / b) * t + (m**2 * g / b**2) * (1 - np.exp(-b * t / m))
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 左: 位置
axes[0].plot(t, y_free, 'b-', linewidth=2, label='空気抵抗なし')
axes[0].plot(t, 100 - y_drag + 100, 'r-', linewidth=2, label=f'空気抵抗あり (b={b})')
y_free_clip = np.maximum(y_free, 0)
axes[0].plot(t, y_free_clip, 'b-', linewidth=2, label='自由落下')
axes[0].set_xlabel('時間 [s]', fontsize=12)
axes[0].set_ylabel('高さ [m]', fontsize=12)
axes[0].set_title('落下運動', fontsize=14)
axes[0].legend(fontsize=11)
axes[0].grid(True, alpha=0.3)
axes[0].set_ylim(0, 110)
# 右: 速度
axes[1].plot(t, np.abs(v_free), 'b-', linewidth=2, label='自由落下')
axes[1].plot(t, v_drag, 'r-', linewidth=2, label='空気抵抗あり')
axes[1].axhline(y=m*g/b, color='r', linestyle='--', alpha=0.5,
label=f'終端速度 = {m*g/b:.1f} m/s')
axes[1].set_xlabel('時間 [s]', fontsize=12)
axes[1].set_ylabel('速度 [m/s]', fontsize=12)
axes[1].set_title('速度の時間変化', fontsize=14)
axes[1].legend(fontsize=11)
axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
斜面上の運動
import numpy as np
import matplotlib.pyplot as plt
g = 9.81
theta_degrees = [15, 30, 45, 60]
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
t = np.linspace(0, 3, 200)
for theta_d in theta_degrees:
theta = np.radians(theta_d)
a = g * np.sin(theta)
s = 0.5 * a * t**2
v = a * t
axes[0].plot(t, s, linewidth=2, label=rf'$\theta = {theta_d}°$')
axes[1].plot(t, v, linewidth=2, label=rf'$\theta = {theta_d}°$')
axes[0].set_xlabel('時間 [s]', fontsize=12)
axes[0].set_ylabel('変位 [m]', fontsize=12)
axes[0].set_title('斜面上の変位', fontsize=14)
axes[0].legend(fontsize=10)
axes[0].grid(True, alpha=0.3)
axes[1].set_xlabel('時間 [s]', fontsize=12)
axes[1].set_ylabel('速度 [m/s]', fontsize=12)
axes[1].set_title('斜面上の速度', fontsize=14)
axes[1].legend(fontsize=10)
axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
放物運動
import numpy as np
import matplotlib.pyplot as plt
g = 9.81
v0 = 20 # 初速 [m/s]
fig, ax = plt.subplots(figsize=(10, 6))
for theta_d in [15, 30, 45, 60, 75]:
theta = np.radians(theta_d)
# 飛行時間
T = 2 * v0 * np.sin(theta) / g
t = np.linspace(0, T, 200)
x = v0 * np.cos(theta) * t
y = v0 * np.sin(theta) * t - 0.5 * g * t**2
ax.plot(x, y, linewidth=2, label=rf'$\theta = {theta_d}°$')
ax.set_xlabel('水平距離 [m]', fontsize=12)
ax.set_ylabel('高さ [m]', fontsize=12)
ax.set_title(f'放物運動(初速 {v0} m/s)', fontsize=14)
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3)
ax.set_ylim(0, None)
ax.set_aspect('equal')
plt.tight_layout()
plt.show()
# 最適角度の確認
print(f"45°での飛距離: {v0**2 * np.sin(2*np.radians(45)) / g:.2f} m(最大)")
まとめ
本記事では、ニュートンの運動の3法則を数式で解説しました。
- 第1法則(慣性の法則): 外力ゼロなら等速直線運動。慣性系を定義する
- 第2法則(運動方程式): $\bm{F} = m\bm{a}$。力学のすべての計算の出発点
- 第3法則(作用反作用): $\bm{F}_{AB} = -\bm{F}_{BA}$。2物体間の力は対称
- 運動方程式は微分方程式 → 初期条件を与えて積分して解く
- 空気抵抗がある場合は終端速度に漸近する
次のステップとして、以下の記事も参考にしてください。
- 単振動の理論と運動方程式 — 第2法則の重要な応用
- 万有引力とケプラーの法則 — 天体力学への応用
- 角運動量と力のモーメント — 回転運動への拡張