運動量保存則と衝突問題をわかりやすく解説

運動量保存則は、エネルギー保存則と並ぶ力学の基本原理です。特に衝突問題においてその威力を発揮し、物体間の複雑な相互作用を、衝突前後の運動量の関係だけで記述できます。

運動量保存則は、ニュートンの第3法則から直接導かれます。本記事では、導出から弾性衝突・非弾性衝突の解法、反発係数の概念まで解説し、Pythonで衝突シミュレーションを行います。

本記事の内容

  • 力積と運動量の関係
  • 運動量保存則の導出
  • 弾性衝突と非弾性衝突の解法
  • 反発係数の定義と物理的意味
  • Pythonによる衝突シミュレーション

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

力積と運動量

運動量の定義

物体の運動量 $\bm{p}$ は、質量 $m$ と速度 $\bm{v}$ の積で定義されます。

$$ \bm{p} = m\bm{v} $$

力積

ニュートンの第2法則 $\bm{F} = d\bm{p}/dt$ を時間積分すると、

$$ \int_{t_1}^{t_2} \bm{F}\, dt = \bm{p}_2 – \bm{p}_1 = \Delta\bm{p} $$

左辺を 力積 $\bm{J}$ と呼びます。

$$ \bm{J} = \int_{t_1}^{t_2} \bm{F}\, dt = \Delta\bm{p} $$

力積は運動量の変化量に等しいという関係です。

運動量保存則の導出

2つの物体A, Bからなる系を考えます。AがBに及ぼす力を $\bm{F}_{AB}$、BがAに及ぼす力を $\bm{F}_{BA}$ とします。

それぞれの運動方程式は、

$$ \begin{align} \frac{d\bm{p}_A}{dt} &= \bm{F}_{BA} + \bm{F}_A^{\text{ext}} \\ \frac{d\bm{p}_B}{dt} &= \bm{F}_{AB} + \bm{F}_B^{\text{ext}} \end{align} $$

ここで $\bm{F}^{\text{ext}}$ は外力です。両式を足すと、

$$ \frac{d}{dt}(\bm{p}_A + \bm{p}_B) = (\bm{F}_{BA} + \bm{F}_{AB}) + (\bm{F}_A^{\text{ext}} + \bm{F}_B^{\text{ext}}) $$

ニュートンの第3法則より $\bm{F}_{AB} = -\bm{F}_{BA}$ なので内力は打ち消し合い、外力がゼロならば、

$$ \boxed{\frac{d}{dt}(\bm{p}_A + \bm{p}_B) = \bm{0} \quad \Rightarrow \quad \bm{p}_A + \bm{p}_B = \text{const.}} $$

これが 運動量保存則 です。外力が作用しない系では、全運動量は時間によらず一定です。

1次元衝突問題

問題設定

質量 $m_1$, $m_2$ の2物体が速度 $v_1$, $v_2$ で1次元上で衝突するとします。衝突後の速度を $v_1’$, $v_2’$ とします。

運動量保存則より、

$$ m_1 v_1 + m_2 v_2 = m_1 v_1′ + m_2 v_2′ $$

未知数が2つ($v_1’$, $v_2’$)に対して方程式が1つなので、もう1つの条件が必要です。

反発係数

反発係数(はねかえり係数)$e$ を次のように定義します。

$$ e = -\frac{v_1′ – v_2′}{v_1 – v_2} = \frac{\text{衝突後の相対速度}}{\text{衝突前の相対速度}} $$

$e$ の値に応じて衝突の種類が分類されます。

$e$ の値 衝突の種類 特徴
$e = 1$ 完全弾性衝突 運動エネルギーが保存
$0 < e < 1$ 非弾性衝突 運動エネルギーの一部が失われる
$e = 0$ 完全非弾性衝突 衝突後に一体となって運動

完全弾性衝突 ($e = 1$)

運動量保存 + $e = 1$ の条件から、

$$ \begin{cases} m_1 v_1 + m_2 v_2 = m_1 v_1′ + m_2 v_2′ \\ v_1 – v_2 = -(v_1′ – v_2′) \end{cases} $$

これを $v_1’$, $v_2’$ について解くと、

$$ \begin{align} v_1′ &= \frac{(m_1 – m_2)v_1 + 2m_2 v_2}{m_1 + m_2} \\ v_2′ &= \frac{(m_2 – m_1)v_2 + 2m_1 v_1}{m_1 + m_2} \end{align} $$

完全非弾性衝突 ($e = 0$)

$v_1′ = v_2′ = v’$ となるので、

$$ v’ = \frac{m_1 v_1 + m_2 v_2}{m_1 + m_2} $$

この場合、失われる運動エネルギーは、

$$ \Delta K = \frac{1}{2}\frac{m_1 m_2}{m_1 + m_2}(v_1 – v_2)^2 $$

Pythonでの実装

反発係数を変化させた衝突シミュレーションを実装し、衝突前後の速度とエネルギーの変化を可視化します。

import numpy as np
import matplotlib.pyplot as plt

def collision_1d(m1, m2, v1, v2, e):
    """1次元衝突の衝突後速度を計算"""
    v1_after = ((m1 - e * m2) * v1 + (1 + e) * m2 * v2) / (m1 + m2)
    v2_after = ((m2 - e * m1) * v2 + (1 + e) * m1 * v1) / (m1 + m2)
    return v1_after, v2_after

# パラメータ
m1, m2 = 2.0, 1.0   # 質量 [kg]
v1, v2 = 3.0, -1.0   # 初速 [m/s]

# 反発係数を変化させる
e_values = np.linspace(0, 1, 100)
v1_after_list = []
v2_after_list = []
ke_ratio_list = []

KE_before = 0.5 * m1 * v1**2 + 0.5 * m2 * v2**2

for e in e_values:
    v1a, v2a = collision_1d(m1, m2, v1, v2, e)
    v1_after_list.append(v1a)
    v2_after_list.append(v2a)
    KE_after = 0.5 * m1 * v1a**2 + 0.5 * m2 * v2a**2
    ke_ratio_list.append(KE_after / KE_before)

# 可視化
fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# 衝突後の速度
axes[0].plot(e_values, v1_after_list, 'b-', linewidth=2, label=f'$v_1\'$ ($m_1$={m1} kg)')
axes[0].plot(e_values, v2_after_list, 'r-', linewidth=2, label=f'$v_2\'$ ($m_2$={m2} kg)')
axes[0].axhline(y=0, color='gray', linestyle='--', alpha=0.5)
axes[0].set_xlabel('Coefficient of Restitution $e$')
axes[0].set_ylabel('Velocity after collision [m/s]')
axes[0].set_title('Post-Collision Velocities vs. $e$')
axes[0].legend()
axes[0].grid(True)

# 運動エネルギーの比
axes[1].plot(e_values, ke_ratio_list, 'g-', linewidth=2)
axes[1].set_xlabel('Coefficient of Restitution $e$')
axes[1].set_ylabel('$K_{after} / K_{before}$')
axes[1].set_title('Kinetic Energy Ratio vs. $e$')
axes[1].grid(True)

plt.tight_layout()
plt.show()

左図では反発係数 $e$ の増加に伴い衝突後速度がどう変化するかがわかります。右図では $e = 1$ のときのみ運動エネルギーが完全に保存され、$e < 1$ ではエネルギーが失われることが確認できます。

まとめ

本記事では、運動量保存則と衝突問題について解説しました。

  • 力積は運動量の変化量に等しい: $\bm{J} = \Delta\bm{p}$
  • 外力がなければ系の全運動量は保存される
  • 反発係数 $e$ により衝突が分類され、$e = 1$ が完全弾性衝突、$e = 0$ が完全非弾性衝突
  • 完全弾性衝突では運動エネルギーも保存されるが、非弾性衝突ではエネルギーの一部が失われる

次のステップとして、以下の記事も参考にしてください。