ニュートンの運動の3法則をわかりやすく解説

ニュートンの運動の3法則は、古典力学の根幹を成す原理であり、惑星の運動からロケットの打ち上げまで、マクロな物体の運動を記述する基礎です。1687年に『プリンキピア』で発表されたこれらの法則は、300年以上経った今でも工学の基盤として使われています。

本記事の内容

  • 第1法則(慣性の法則)
  • 第2法則(運動の法則 $\bm{F} = m\bm{a}$)
  • 第3法則(作用反作用の法則)
  • 各法則の数学的表現と具体例
  • Pythonでのシミュレーション

第1法則(慣性の法則)

外力が作用しない限り、静止している物体は静止し続け、等速直線運動をしている物体は等速直線運動を続ける。

数学的には:

$$ \bm{F} = \bm{0} \implies \bm{v} = \text{const} $$

この法則は慣性系(ニュートンの法則が成り立つ座標系)の存在を宣言するものでもあります。

第2法則(運動の法則)

物体の加速度は、作用する合力に比例し、質量に反比例する。

$$ \boxed{\bm{F} = m\bm{a} = m\frac{d\bm{v}}{dt} = m\frac{d^2\bm{r}}{dt^2}} $$

より一般的には運動量 $\bm{p} = m\bm{v}$ を用いて:

$$ \bm{F} = \frac{d\bm{p}}{dt} $$

成分表示:

$$ F_x = m\ddot{x}, \quad F_y = m\ddot{y}, \quad F_z = m\ddot{z} $$

第3法則(作用反作用の法則)

物体Aが物体Bに力を及ぼすとき、物体Bは物体Aに大きさが等しく向きが逆の力を及ぼす。

$$ \bm{F}_{AB} = -\bm{F}_{BA} $$

この法則から運動量保存則が導かれます。

具体例

自由落下

地表付近で質量 $m$ の物体に作用する重力は $\bm{F} = -mg\hat{\bm{e}}_z$。

$$ m\ddot{z} = -mg \implies \ddot{z} = -g $$

初期条件 $z(0) = h$, $\dot{z}(0) = 0$ のとき:

$$ z(t) = h – \frac{1}{2}gt^2 $$

斜面上の物体

角度 $\theta$ の滑らかな斜面上の物体(摩擦なし):

$$ ma = mg\sin\theta \implies a = g\sin\theta $$

Pythonでの実装

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

g = 9.8  # 重力加速度 [m/s^2]

fig, axes = plt.subplots(1, 3, figsize=(15, 5))

# 自由落下
t = np.linspace(0, 3, 100)
h = 50  # 初期高さ [m]
z = h - 0.5*g*t**2
v = -g*t
mask = z >= 0
axes[0].plot(t[mask], z[mask], 'b-', linewidth=2, label='位置 $z(t)$')
axes[0].plot(t[mask], -v[mask], 'r--', linewidth=1.5, label='速度 $|v(t)|$')
axes[0].set_title('自由落下')
axes[0].set_xlabel('時間 [s]')
axes[0].set_ylabel('高さ [m] / 速度 [m/s]')
axes[0].legend()
axes[0].grid(True, alpha=0.3)

# 斜面上の運動
theta_vals = [15, 30, 45, 60]
for theta_deg in theta_vals:
    theta = np.radians(theta_deg)
    a = g * np.sin(theta)
    x_slope = 0.5 * a * t**2
    axes[1].plot(t, x_slope, label=f'$\\theta={theta_deg}°$')
axes[1].set_title('斜面上の運動(摩擦なし)')
axes[1].set_xlabel('時間 [s]')
axes[1].set_ylabel('移動距離 [m]')
axes[1].legend()
axes[1].grid(True, alpha=0.3)

# 空気抵抗付き落下: m*dv/dt = mg - b*v^2
m = 70  # kg
b = 0.25  # 抗力係数 [kg/m]
v_terminal = np.sqrt(m*g/b)

def falling_with_drag(t, y):
    v = y[0]
    return [g - (b/m)*v**2]

sol = solve_ivp(falling_with_drag, [0, 30], [0], t_eval=np.linspace(0, 30, 300))
axes[2].plot(sol.t, sol.y[0], 'b-', linewidth=2, label='空気抵抗あり')
axes[2].axhline(y=v_terminal, color='r', linestyle='--',
               label=f'終端速度 {v_terminal:.1f} m/s')
axes[2].plot(t, g*t, 'g--', alpha=0.5, label='空気抵抗なし')
axes[2].set_title('空気抵抗付き落下')
axes[2].set_xlabel('時間 [s]')
axes[2].set_ylabel('速度 [m/s]')
axes[2].set_ylim(0, 80)
axes[2].legend()
axes[2].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('newton_laws.png', dpi=150, bbox_inches='tight')
plt.show()

まとめ

  • 第1法則: 慣性系の定義。力なし→等速直線運動
  • 第2法則: $\bm{F} = m\bm{a}$。力学の中心方程式
  • 第3法則: 作用反作用。運動量保存則の基礎
  • 微分方程式として定式化し、解析的・数値的に解く

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