比熱は物質の温度を1 K上げるために必要なエネルギーを表す物理量です。気体の比熱には定容比熱 $c_v$ と定圧比熱 $c_p$ の2種類があり、両者の差はマイヤーの関係式 $c_p – c_v = R$ で結ばれます。
比熱比 $\gamma = c_p / c_v$ は断熱変化の指数として現れ、音速や衝撃波の計算にも関わる重要なパラメータです。
本記事の内容
- 定容比熱 $c_v$ と定圧比熱 $c_p$ の定義
- マイヤーの関係式 $c_p – c_v = R$ の導出
- 比熱比 $\gamma = c_p / c_v$
- 等分配の法則と自由度
- 単原子・二原子・多原子気体の比熱の比較
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
定容比熱 $c_v$
定容(体積一定)の条件で、1 mol の気体の温度を1 K上げるのに必要な熱量が定容モル比熱です。
定容過程では $Q_V = \Delta U$ なので:
$$ \boxed{c_v = \frac{1}{n}\left(\frac{\partial U}{\partial T}\right)_V} $$
理想気体では $U = U(T)$ であるため、偏微分は常微分になります。
$$ c_v = \frac{1}{n}\frac{dU}{dT} $$
定圧比熱 $c_p$
定圧(圧力一定)の条件で、1 mol の気体の温度を1 K上げるのに必要な熱量が定圧モル比熱です。
定圧過程では $Q_p = \Delta H$ なので:
$$ \boxed{c_p = \frac{1}{n}\left(\frac{\partial H}{\partial T}\right)_p} $$
なぜ $c_p > c_v$ なのか
定圧過程では温度を上げると気体が膨張し、外部に仕事をします。そのため、同じ温度変化を実現するのにより多くの熱が必要です。
$$ Q_p = \Delta U + p\Delta V = Q_V + p\Delta V > Q_V $$
よって $c_p > c_v$ です。
マイヤーの関係式の導出
理想気体のエンタルピーは:
$$ H = U + pV = U + nRT $$
両辺を $T$ で微分すると:
$$ \frac{dH}{dT} = \frac{dU}{dT} + nR $$
$c_p = \frac{1}{n}\frac{dH}{dT}$、$c_v = \frac{1}{n}\frac{dU}{dT}$ を代入すると:
$$ nc_p = nc_v + nR $$
$$ \boxed{c_p – c_v = R} $$
これがマイヤーの関係式です。$R = 8.314$ J/(mol·K) は気体定数です。
一般の気体への拡張
理想気体に限らず、一般の気体に対するマイヤーの関係式は:
$$ c_p – c_v = -T\frac{\left(\frac{\partial p}{\partial T}\right)_V^2}{\left(\frac{\partial p}{\partial V}\right)_T} $$
理想気体($pV = nRT$)では $\left(\frac{\partial p}{\partial T}\right)_V = \frac{nR}{V}$、$\left(\frac{\partial p}{\partial V}\right)_T = -\frac{nRT}{V^2}$ なので:
$$ c_p – c_v = -T \cdot \frac{(nR/V)^2}{-nRT/V^2} = -T \cdot \frac{n^2R^2/V^2}{-nRT/V^2} = \frac{nR^2T \cdot V^2}{V^2 \cdot nRT} = R $$
理想気体の場合に $c_p – c_v = R$ が復元されることが確認できます。
比熱比 $\gamma$
比熱比(断熱指数)は定圧比熱と定容比熱の比です。
$$ \boxed{\gamma = \frac{c_p}{c_v}} $$
マイヤーの関係式を用いると:
$$ c_v = \frac{R}{\gamma – 1}, \quad c_p = \frac{\gamma R}{\gamma – 1} $$
比熱比は以下の場面で重要です。
- 断熱変化: $pV^\gamma = \text{const}$
- 音速: $c_s = \sqrt{\gamma R T / M}$($M$ はモル質量)
- カルノーサイクルの解析
等分配の法則と自由度
等分配の法則
熱平衡にある系では、各二次形式のエネルギー項(自由度)に対して平均 $\frac{1}{2}k_BT$ のエネルギーが配分されます。
$$ \left\langle \frac{1}{2}m v_x^2 \right\rangle = \frac{1}{2}k_BT $$
自由度の数え方
| 分子タイプ | 並進 | 回転 | 振動 | 合計 $f$ |
|---|---|---|---|---|
| 単原子(He, Ne, Ar) | 3 | 0 | 0 | 3 |
| 二原子($N_2$, $O_2$, $H_2$) | 3 | 2 | 0(常温) | 5 |
| 直線型多原子($CO_2$) | 3 | 2 | — | 5+ |
| 非直線型多原子($H_2O$) | 3 | 3 | — | 6+ |
注意: 振動の自由度は1モードあたり運動エネルギーとポテンシャルエネルギーの2つの自由度を持ちます。常温では多くの分子で振動モードは凍結されています(量子効果)。
比熱と自由度
自由度 $f$ の理想気体では:
$$ U = n \cdot \frac{f}{2}RT $$
$$ \begin{align} c_v &= \frac{f}{2}R \\ c_p &= \frac{f + 2}{2}R \\ \gamma &= \frac{f + 2}{f} \end{align} $$
| 分子タイプ | $f$ | $c_v / R$ | $c_p / R$ | $\gamma$ | 実測 $\gamma$ |
|---|---|---|---|---|---|
| 単原子 | 3 | 3/2 | 5/2 | 5/3 = 1.667 | He: 1.66 |
| 二原子(常温) | 5 | 5/2 | 7/2 | 7/5 = 1.400 | $N_2$: 1.40 |
| 非直線多原子 | 6 | 3 | 4 | 4/3 = 1.333 | $H_2O$: 1.33 |
二原子分子の温度依存性
二原子分子では、温度によって活性化される自由度が変わります。
- 低温($T < 100$ K 程度): 並進のみ $\to$ $f = 3$, $\gamma = 5/3$
- 常温($T \sim 300$ K): 並進 + 回転 $\to$ $f = 5$, $\gamma = 7/5$
- 高温($T > 1000$ K 程度): 並進 + 回転 + 振動 $\to$ $f = 7$, $\gamma = 9/7$
この段階的な活性化は、量子力学的なエネルギー量子化の効果です。
Pythonでの実装
import numpy as np
import matplotlib.pyplot as plt
R = 8.314 # 気体定数 [J/(mol·K)]
fig, axes = plt.subplots(1, 3, figsize=(16, 5))
# --- (1) 自由度と比熱・比熱比の関係 ---
f_range = np.arange(3, 15)
cv = f_range / 2 * R
cp = (f_range + 2) / 2 * R
gamma = (f_range + 2) / f_range
ax1_twin = axes[0].twinx()
axes[0].plot(f_range, cv, 'bo-', linewidth=2, markersize=6, label='$c_v = fR/2$')
axes[0].plot(f_range, cp, 'rs-', linewidth=2, markersize=6, label='$c_p = (f+2)R/2$')
ax1_twin.plot(f_range, gamma, 'g^-', linewidth=2, markersize=6, label='$\\gamma = (f+2)/f$')
# 代表的な分子をマーク
molecules_info = {
'単原子\n(He)': {'f': 3, 'gamma': 5/3},
'二原子\n($N_2$)': {'f': 5, 'gamma': 7/5},
'多原子\n($H_2O$)': {'f': 6, 'gamma': 4/3},
}
for name, info in molecules_info.items():
ax1_twin.annotate(name, (info['f'], info['gamma']),
textcoords="offset points", xytext=(10, 5), fontsize=9,
bbox=dict(boxstyle='round,pad=0.3', facecolor='yellow', alpha=0.5))
axes[0].set_xlabel('Degrees of Freedom $f$')
axes[0].set_ylabel('Molar Heat Capacity [J/(mol·K)]')
ax1_twin.set_ylabel('$\\gamma = c_p/c_v$', color='green')
axes[0].set_title('Heat Capacity vs Degrees of Freedom')
axes[0].legend(loc='upper left', fontsize=9)
ax1_twin.legend(loc='center right', fontsize=9)
axes[0].grid(True, alpha=0.3)
# --- (2) 二原子分子の比熱の温度依存性(模式図) ---
T = np.logspace(1, 4, 500) # 10 K ~ 10000 K
# シグモイド関数で段階的な遷移をモデル化
def sigmoid(x, x0, k):
return 1 / (1 + np.exp(-k * (x - x0)))
# 並進(3) → +回転(2) → +振動(2)
f_eff = 3 + 2 * sigmoid(np.log10(T), np.log10(80), 5) + 2 * sigmoid(np.log10(T), np.log10(3000), 3)
cv_T = f_eff / 2 * R
axes[1].semilogx(T, cv_T / R, 'b-', linewidth=2.5)
axes[1].axhline(y=3/2, color='gray', linestyle='--', alpha=0.5, label='$f=3$ (並進のみ)')
axes[1].axhline(y=5/2, color='gray', linestyle='-.', alpha=0.5, label='$f=5$ (並進+回転)')
axes[1].axhline(y=7/2, color='gray', linestyle=':', alpha=0.5, label='$f=7$ (並進+回転+振動)')
axes[1].set_xlabel('Temperature $T$ [K]')
axes[1].set_ylabel('$c_v / R$')
axes[1].set_title('$c_v$ of Diatomic Gas vs Temperature')
axes[1].legend(fontsize=8)
axes[1].grid(True, alpha=0.3)
axes[1].set_ylim(1, 4.5)
axes[1].set_xlim(10, 10000)
# 温度範囲のアノテーション
axes[1].annotate('並進', xy=(30, 1.6), fontsize=10, color='blue')
axes[1].annotate('回転活性化', xy=(100, 2.2), fontsize=9, color='red')
axes[1].annotate('振動活性化', xy=(2000, 3.0), fontsize=9, color='red')
# --- (3) 断熱変化のpV曲線(γの違いによる比較) ---
V = np.linspace(0.5, 4, 300)
V0, p0 = 1.0, 3.0 # 初期状態
gamma_values = {
'単原子 ($\\gamma=5/3$)': 5/3,
'二原子 ($\\gamma=7/5$)': 7/5,
'多原子 ($\\gamma=4/3$)': 4/3,
'等温 ($\\gamma=1$)': 1.0,
}
colors_list = ['blue', 'red', 'green', 'gray']
for (name, g), color in zip(gamma_values.items(), colors_list):
if g == 1.0:
p = p0 * V0 / V
axes[2].plot(V, p, color=color, linewidth=2, linestyle='--', label=name)
else:
p = p0 * (V0 / V)**g
axes[2].plot(V, p, color=color, linewidth=2, label=name)
axes[2].plot(V0, p0, 'ko', markersize=8, zorder=5)
axes[2].set_xlabel('Volume $V$')
axes[2].set_ylabel('Pressure $p$')
axes[2].set_title('Adiabatic Process: $pV^\\gamma = \\mathrm{const}$')
axes[2].legend(fontsize=9)
axes[2].grid(True, alpha=0.3)
axes[2].set_xlim(0.3, 4.5)
axes[2].set_ylim(0, 5)
plt.tight_layout()
plt.savefig('specific_heat_ratio.png', dpi=150, bbox_inches='tight')
plt.show()
# 数値計算
print("=== 各気体の比熱と比熱比 ===")
print(f"{'分子タイプ':<15} {'f':>3} {'cv [J/(mol·K)]':>16} {'cp [J/(mol·K)]':>16} {'γ':>8}")
print("-" * 62)
for name, f in [('単原子', 3), ('二原子(常温)', 5), ('多原子', 6), ('二原子(高温)', 7)]:
cv_val = f / 2 * R
cp_val = (f + 2) / 2 * R
gamma_val = (f + 2) / f
print(f"{name:<15} {f:>3} {cv_val:>16.3f} {cp_val:>16.3f} {gamma_val:>8.4f}")
print(f"\nマイヤーの関係式の検証:")
print(f"cp - cv = R = {R:.3f} J/(mol·K)")
# 音速の計算
print("\n=== 空気中の音速 (T = 293 K, γ = 1.4, M = 0.029 kg/mol) ===")
T_air = 293 # K
gamma_air = 1.4
M_air = 0.029 # kg/mol
c_sound = np.sqrt(gamma_air * R * T_air / M_air)
print(f"音速 c = sqrt(γRT/M) = {c_sound:.1f} m/s")
まとめ
本記事では、比熱と比熱比について解説しました。
- 定容比熱: $c_v = \frac{1}{n}\left(\frac{\partial U}{\partial T}\right)_V = \frac{f}{2}R$
- 定圧比熱: $c_p = \frac{1}{n}\left(\frac{\partial H}{\partial T}\right)_p = \frac{f+2}{2}R$
- マイヤーの関係式: $c_p – c_v = R$(理想気体)
- 比熱比: $\gamma = c_p / c_v = (f+2)/f$。断熱指数として $pV^\gamma = \text{const}$ に現れる
- 単原子: $\gamma = 5/3$、二原子(常温): $\gamma = 7/5$、多原子: $\gamma = 4/3$
- 二原子分子の比熱は温度とともに段階的に増加する(量子効果)
次のステップとして、以下の記事も参考にしてください。