比熱と比熱比(マイヤーの関係式)

比熱は物質の温度を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$
  • 二原子分子の比熱は温度とともに段階的に増加する(量子効果)

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