エネルギー保存則は、物理学で最も重要な原理の一つです。力学的エネルギーの保存は、運動方程式を直接解かなくても物体の速度や到達高さを求められる強力なツールとなります。
エネルギーの考え方は力学にとどまらず、熱力学、電磁気学、量子力学へと広がっていきます。本記事では、仕事と運動エネルギーの定理からエネルギー保存則を厳密に導出します。
本記事の内容
- 仕事の定義と運動エネルギーの定理
- 保存力とポテンシャルエネルギー
- 力学的エネルギー保存則の導出
- Pythonでの力学問題の解法と可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
仕事の定義
力 $\bm{F}$ が物体に作用しながら微小変位 $d\bm{r}$ だけ移動させるとき、力が物体にする仕事 $dW$ は、
$$ dW = \bm{F} \cdot d\bm{r} $$
経路 $C$ に沿った仕事の合計は線積分で表されます。
$$ W = \int_C \bm{F} \cdot d\bm{r} $$
1次元の場合は、
$$ W = \int_{x_1}^{x_2} F(x)\, dx $$
運動エネルギーの定理
ニュートンの第2法則 $\bm{F} = m\bm{a}$ から出発します。
$$ \begin{align} W &= \int_C \bm{F} \cdot d\bm{r} = \int_C m\bm{a} \cdot d\bm{r} \\ &= \int_{t_1}^{t_2} m\frac{d\bm{v}}{dt} \cdot \bm{v}\, dt \\ &= \int_{t_1}^{t_2} m\bm{v} \cdot d\bm{v} \\ &= \frac{1}{2}m|\bm{v}_2|^2 – \frac{1}{2}m|\bm{v}_1|^2 \end{align} $$
運動エネルギーを $K = \frac{1}{2}mv^2$ と定義すると、
$$ \boxed{W = K_2 – K_1 = \Delta K} $$
これが 仕事-運動エネルギーの定理 です。合力がする仕事は運動エネルギーの変化に等しくなります。
保存力とポテンシャルエネルギー
保存力の定義
仕事が経路によらず始点と終点のみで決まる力を 保存力 といいます。数学的には、
$$ \oint \bm{F} \cdot d\bm{r} = 0 $$
つまり任意の閉路に沿った仕事がゼロです。これは、力がスカラー関数の勾配で書けることと等価です。
$$ \bm{F} = -\nabla U $$
ここで $U$ は ポテンシャルエネルギー(位置エネルギー)です。
代表的な保存力
| 力 | ポテンシャルエネルギー $U$ |
|---|---|
| 重力(一様) | $U = mgy$ |
| 万有引力 | $U = -\frac{GMm}{r}$ |
| バネの弾性力 | $U = \frac{1}{2}kx^2$ |
重力ポテンシャルの導出
一様重力場 $\bm{F} = -mg\bm{e}_y$ の場合、
$$ U(y) = -\int_0^y F_y\, dy’ = -\int_0^y (-mg)\, dy’ = mgy $$
力学的エネルギー保存則
保存力のみが作用する場合、仕事は、
$$ W = -\Delta U = -(U_2 – U_1) $$
仕事-運動エネルギーの定理と組み合わせると、
$$ K_2 – K_1 = -(U_2 – U_1) $$
$$ K_1 + U_1 = K_2 + U_2 $$
力学的エネルギー $E = K + U$ を定義すると、
$$ \boxed{E = K + U = \frac{1}{2}mv^2 + U(\bm{r}) = \text{const.}} $$
これが 力学的エネルギー保存則 です。
具体例:振り子のエネルギー保存
長さ $l$ の振り子を角度 $\theta_0$ から静かに離した場合を考えます。最下点($\theta = 0$)での速度 $v$ を求めます。
最下点を基準として、エネルギー保存則より、
$$ mgl(1 – \cos\theta_0) + 0 = 0 + \frac{1}{2}mv^2 $$
$$ v = \sqrt{2gl(1-\cos\theta_0)} $$
運動方程式を解くことなく、速度が求まりました。
Pythonでの実装
振り子のエネルギー保存を数値シミュレーションで確認します。
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
# パラメータ
g = 9.81 # 重力加速度 [m/s^2]
l = 1.0 # 振り子の長さ [m]
theta0 = np.radians(30) # 初期角度
# 振り子の運動方程式: d^2(theta)/dt^2 = -(g/l)*sin(theta)
def pendulum(t, state):
theta, omega = state
return [omega, -g / l * np.sin(theta)]
# 数値積分
T = 2 * np.pi * np.sqrt(l / g) # 近似周期
sol = solve_ivp(pendulum, [0, 4 * T], [theta0, 0], max_step=0.01)
t = sol.t
theta = sol.y[0]
omega = sol.y[1]
# エネルギー計算
v = l * omega # 接線速度
m = 1.0
K = 0.5 * m * v**2 # 運動エネルギー
U = m * g * l * (1 - np.cos(theta)) # ポテンシャルエネルギー
E = K + U # 全エネルギー
# 可視化
fig, axes = plt.subplots(2, 1, figsize=(10, 8))
# 角度の時間変化
axes[0].plot(t, np.degrees(theta), 'b-', linewidth=2)
axes[0].set_xlabel('Time [s]')
axes[0].set_ylabel('Angle [deg]')
axes[0].set_title('Pendulum Motion')
axes[0].grid(True)
# エネルギーの時間変化
axes[1].plot(t, K, 'r-', linewidth=2, label='Kinetic Energy $K$')
axes[1].plot(t, U, 'b-', linewidth=2, label='Potential Energy $U$')
axes[1].plot(t, E, 'k--', linewidth=2, label='Total Energy $E$')
axes[1].set_xlabel('Time [s]')
axes[1].set_ylabel('Energy [J]')
axes[1].set_title('Energy Conservation of Pendulum')
axes[1].legend()
axes[1].grid(True)
plt.tight_layout()
plt.show()
全エネルギー $E$ が時間に対して一定であることが確認できます。運動エネルギーとポテンシャルエネルギーが交互に入れ替わりながら、その和は保存されています。
まとめ
本記事では、エネルギー保存則について解説しました。
- 仕事-運動エネルギーの定理: $W = \Delta K$
- 保存力は $\bm{F} = -\nabla U$ で記述でき、ポテンシャルエネルギー $U$ が定義できる
- 保存力のみが作用するとき、力学的エネルギー $E = K + U$ は保存される
- エネルギー保存則を使えば、運動方程式を解かずに速度や高さが求まる
次のステップとして、以下の記事も参考にしてください。