エネルギー保存則(運動エネルギーと位置エネルギー)

エネルギー保存則は物理学で最も基本的な法則の一つです。ニュートンの運動方程式から導出される力学的エネルギー保存は、複雑な運動を力の詳細を追わずに解析する強力なツールを提供します。

本記事の内容

  • 仕事の定義
  • 仕事-エネルギー定理(運動エネルギーの導出)
  • 保存力とポテンシャルエネルギー
  • 力学的エネルギー保存則
  • 具体例とPythonでの可視化

前提知識

仕事の定義

力 $\bm{F}$ による仕事:

$$ W = \int_A^B \bm{F} \cdot d\bm{r} $$

一定力の場合: $W = \bm{F} \cdot \Delta\bm{r} = F\Delta r\cos\theta$

仕事-エネルギー定理

ニュートンの第2法則から:

$$ \begin{align} W &= \int_A^B \bm{F} \cdot d\bm{r} = \int_A^B m\bm{a} \cdot \bm{v} \, dt \\ &= \int_A^B m\frac{d\bm{v}}{dt} \cdot \bm{v} \, dt = \int_A^B \frac{d}{dt}\left(\frac{1}{2}mv^2\right) dt \\ &= \frac{1}{2}mv_B^2 – \frac{1}{2}mv_A^2 \end{align} $$

$$ \boxed{W = \Delta K = K_B – K_A, \quad K = \frac{1}{2}mv^2} $$

保存力とポテンシャルエネルギー

仕事が経路によらず始点と終点のみで決まる力を保存力と呼びます。

$$ W = -\Delta U = -(U_B – U_A) $$

ポテンシャルエネルギー $U$ との関係:

$$ \bm{F} = -\nabla U $$

ポテンシャル
重力(地表付近) $U = mgh$
万有引力 $U = -GMm/r$
ばねの弾性力 $U = kx^2/2$

力学的エネルギー保存則

保存力のみが作用する系では:

$$ \boxed{E = K + U = \frac{1}{2}mv^2 + U(\bm{r}) = \text{const}} $$

具体例

振り子

最高点(高さ $h$、速度0)と最下点(高さ0、速度 $v$):

$$ mgh = \frac{1}{2}mv^2 \implies v = \sqrt{2gh} $$

脱出速度

地球表面から無限遠($K=0, U=0$)へ:

$$ \frac{1}{2}mv_e^2 – \frac{GMm}{R} = 0 \implies v_e = \sqrt{\frac{2GM}{R}} \approx 11.2 \text{ km/s} $$

Pythonでの実装

import numpy as np
import matplotlib.pyplot as plt

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

# ばね-質点系のエネルギー
k, m = 10, 1
omega = np.sqrt(k/m)
A = 1.0
t = np.linspace(0, 3, 500)
x = A*np.cos(omega*t)
v = -A*omega*np.sin(omega*t)
K = 0.5*m*v**2
U = 0.5*k*x**2
E = K + U

axes[0].plot(t, K, 'r-', label='$K$')
axes[0].plot(t, U, 'b-', label='$U$')
axes[0].plot(t, E, 'k--', linewidth=2, label='$E=K+U$')
axes[0].set_title('ばね-質点系のエネルギー')
axes[0].set_xlabel('時間 [s]')
axes[0].set_ylabel('エネルギー [J]')
axes[0].legend()
axes[0].grid(True, alpha=0.3)

# ポテンシャルエネルギー曲線
x_range = np.linspace(-2, 2, 200)
U_spring = 0.5*k*x_range**2
E_total = 0.5*k*A**2

axes[1].plot(x_range, U_spring, 'b-', linewidth=2, label='$U(x) = kx^2/2$')
axes[1].axhline(y=E_total, color='k', linestyle='--', label=f'$E = {E_total:.1f}$ J')
axes[1].fill_between(x_range, U_spring, E_total,
                    where=(U_spring <= E_total), alpha=0.2, color='green', label='運動可能領域')
axes[1].set_title('ポテンシャルとエネルギー図')
axes[1].set_xlabel('位置 $x$ [m]')
axes[1].set_ylabel('エネルギー [J]')
axes[1].legend()
axes[1].grid(True, alpha=0.3)
axes[1].set_ylim(-0.5, 8)

# 万有引力ポテンシャルと脱出速度
G = 6.674e-11
M = 5.972e24
R = 6.371e6
r = np.linspace(R, 10*R, 500)
U_grav = -G*M/r
v_esc = np.sqrt(2*G*M/R)
E_esc = 0  # 脱出エネルギー

axes[2].plot(r/R, U_grav/(G*M/R), 'b-', linewidth=2, label='$U(r)=-GM/r$')
axes[2].axhline(y=0, color='r', linestyle='--', label='$E=0$(脱出)')
axes[2].axhline(y=-0.5, color='g', linestyle='--', label='$E<0$(束縛)')
axes[2].set_title('万有引力ポテンシャル')
axes[2].set_xlabel('$r/R_E$')
axes[2].set_ylabel('$U / (GM/R_E)$')
axes[2].legend()
axes[2].grid(True, alpha=0.3)
axes[2].set_ylim(-1.2, 0.3)

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

v_esc_km = np.sqrt(2*G*M/R) / 1000
print(f"地球の脱出速度: {v_esc_km:.1f} km/s")

まとめ

  • 仕事-エネルギー定理: $W = \Delta K$
  • 保存力: $\bm{F} = -\nabla U$(経路によらない仕事)
  • 力学的エネルギー保存: $E = K + U = \text{const}$(保存力のみ)
  • エネルギー図で運動の可能領域を判定できる
  • 脱出速度 $v_e = \sqrt{2GM/R}$

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