定容・定圧・等温・断熱変化

熱力学における基本的な準静的過程には、定容変化、定圧変化、等温変化、断熱変化の4種類があります。これらは熱機関のサイクル(カルノーサイクル、オットーサイクルなど)を構成する基本要素です。

本記事では、理想気体における4つの過程について、$p$-$V$ 関係、仕事、熱の計算を体系的に導出し、$p$-$V$ 図上で比較します。

本記事の内容

  • 定容変化(等積変化)
  • 定圧変化(等圧変化)
  • 等温変化
  • 断熱変化と $pV^\gamma = \text{const}$
  • 4つの過程の比較と $p$-$V$ 図での可視化

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

定容変化(Isochoric Process)

体積一定($V = \text{const}$, $dV = 0$)の過程です。

$p$-$V$ 関係

$p$-$V$ 図上で垂直線となります。

$$ \frac{p}{T} = \frac{nR}{V} = \text{const} $$

仕事

$$ W = \int p \, dV = 0 $$

体積変化がないため、仕事はゼロです。

第1法則 $\Delta U = Q – W$ より:

$$ Q_V = \Delta U = n c_v \Delta T = n c_v (T_2 – T_1) $$

定圧変化(Isobaric Process)

圧力一定($p = \text{const}$)の過程です。

$p$-$V$ 関係

$p$-$V$ 図上で水平線となります。

$$ \frac{V}{T} = \frac{nR}{p} = \text{const} $$

仕事

$$ W = \int_{V_1}^{V_2} p \, dV = p(V_2 – V_1) = p \Delta V = nR \Delta T $$

$$ Q_p = \Delta H = n c_p \Delta T = n c_p (T_2 – T_1) $$

内部エネルギー変化

$$ \Delta U = Q_p – W = n c_p \Delta T – nR \Delta T = n(c_p – R)\Delta T = n c_v \Delta T $$

温度変化が同じなら $\Delta U$ はどの過程でも同じです($U$ は状態量)。

等温変化(Isothermal Process)

温度一定($T = \text{const}$)の過程です。

$p$-$V$ 関係

$$ pV = nRT = \text{const} $$

$p$-$V$ 図上で双曲線(等温線)になります。

仕事

$$ \begin{align} W &= \int_{V_1}^{V_2} p \, dV = \int_{V_1}^{V_2} \frac{nRT}{V} dV \\ &= nRT \ln\frac{V_2}{V_1} \\ &= nRT \ln\frac{p_1}{p_2} \end{align} $$

内部エネルギー変化

理想気体では $U = U(T)$ なので、等温過程では:

$$ \Delta U = 0 $$

$$ Q = \Delta U + W = W = nRT \ln\frac{V_2}{V_1} $$

等温過程では、加えた熱がすべて仕事に変換されます。

断熱変化(Adiabatic Process)

熱の出入りがない($\delta Q = 0$)過程です。

$p$-$V$ 関係の導出

第1法則より:

$$ dU = -\delta W = -p \, dV $$

理想気体では $dU = nc_v \, dT$ なので:

$$ nc_v \, dT = -p \, dV $$

状態方程式 $pV = nRT$ を微分すると:

$$ p \, dV + V \, dp = nR \, dT $$

$$ dT = \frac{p \, dV + V \, dp}{nR} $$

$dT$ を代入すると:

$$ \begin{align} nc_v \cdot \frac{p \, dV + V \, dp}{nR} &= -p \, dV \\ c_v (p \, dV + V \, dp) &= -Rp \, dV \\ c_v p \, dV + c_v V \, dp &= -Rp \, dV \\ (c_v + R) p \, dV + c_v V \, dp &= 0 \\ c_p p \, dV + c_v V \, dp &= 0 \end{align} $$

両辺を $c_v pV$ で割ると:

$$ \frac{c_p}{c_v} \frac{dV}{V} + \frac{dp}{p} = 0 $$

$\gamma = c_p / c_v$ とおくと:

$$ \gamma \frac{dV}{V} + \frac{dp}{p} = 0 $$

積分すると:

$$ \gamma \ln V + \ln p = \text{const} $$

$$ \boxed{pV^\gamma = \text{const}} $$

状態方程式を用いて他の形に書き換えると:

$$ TV^{\gamma – 1} = \text{const}, \quad T^\gamma p^{1-\gamma} = \text{const} $$

仕事

$$ \begin{align} W &= \int_{V_1}^{V_2} p \, dV = \int_{V_1}^{V_2} \frac{p_1 V_1^\gamma}{V^\gamma} dV \\ &= p_1 V_1^\gamma \int_{V_1}^{V_2} V^{-\gamma} dV \\ &= p_1 V_1^\gamma \left[\frac{V^{1-\gamma}}{1-\gamma}\right]_{V_1}^{V_2} \\ &= \frac{p_1 V_1^\gamma}{1-\gamma}(V_2^{1-\gamma} – V_1^{1-\gamma}) \\ &= \frac{p_2 V_2 – p_1 V_1}{1-\gamma} \\ &= \frac{nR(T_2 – T_1)}{1-\gamma} \end{align} $$

$$ \boxed{W = \frac{p_1 V_1 – p_2 V_2}{\gamma – 1} = \frac{nR(T_1 – T_2)}{\gamma – 1}} $$

内部エネルギー変化

$$ \Delta U = -W = nc_v(T_2 – T_1) $$

断熱変化では、仕事をした分だけ内部エネルギー(温度)が変化します。

4つの過程の比較

過程 条件 $p$-$V$ 関係 $W$ $Q$ $\Delta U$
定容 $V = \text{const}$ 垂直線 $0$ $nc_v\Delta T$ $nc_v\Delta T$
定圧 $p = \text{const}$ 水平線 $p\Delta V$ $nc_p\Delta T$ $nc_v\Delta T$
等温 $T = \text{const}$ $pV = \text{const}$ $nRT\ln(V_2/V_1)$ $W$ $0$
断熱 $Q = 0$ $pV^\gamma = \text{const}$ $\frac{nR(T_1-T_2)}{\gamma-1}$ $0$ $-W$

Pythonでの実装

import numpy as np
import matplotlib.pyplot as plt

R = 8.314       # 気体定数 [J/(mol·K)]
n = 1.0         # 物質量 [mol]
gamma = 7/5     # 二原子分子の比熱比
cv = R / (gamma - 1)
cp = gamma * cv

# 初期状態
p1 = 3.0   # 初期圧力 [atm](便宜的な単位)
V1 = 1.0   # 初期体積 [L](便宜的な単位)
T1 = p1 * V1 / (n * R)  # 温度(便宜的)

# 最終体積
V2 = 3.0

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

# --- (1) 4つの過程のpV図 ---
V = np.linspace(0.5, 4.0, 500)

# 等温変化: pV = p1*V1
p_isothermal = p1 * V1 / V

# 断熱変化: pV^gamma = p1*V1^gamma
p_adiabatic = p1 * (V1 / V)**gamma

# 定圧変化: p = p1
p_isobaric = np.full_like(V, p1)

# 定容変化: V = V1 (垂直線)
p_isochoric = np.linspace(0.5, 5, 100)

axes[0].plot(V, p_isothermal, 'b-', linewidth=2.5, label=f'等温 ($pV = \\mathrm{{const}}$)')
axes[0].plot(V, p_adiabatic, 'r-', linewidth=2.5, label=f'断熱 ($pV^\\gamma = \\mathrm{{const}}$)')
axes[0].plot(V, p_isobaric, 'g-', linewidth=2.5, label='定圧 ($p = \\mathrm{const}$)')
axes[0].plot(np.full_like(p_isochoric, V1), p_isochoric, 'm-', linewidth=2.5,
            label='定容 ($V = \\mathrm{const}$)')
axes[0].plot(V1, p1, 'ko', markersize=8, zorder=5)
axes[0].annotate('初期状態\n$(V_1, p_1)$', (V1, p1),
                textcoords="offset points", xytext=(15, 10), fontsize=10)
axes[0].set_xlabel('Volume $V$')
axes[0].set_ylabel('Pressure $p$')
axes[0].set_title('Four Thermodynamic Processes')
axes[0].legend(fontsize=9)
axes[0].grid(True, alpha=0.3)
axes[0].set_xlim(0.3, 4.5)
axes[0].set_ylim(0, 5.5)

# --- (2) 各過程での仕事(pV図の面積) ---
V_fill = np.linspace(V1, V2, 300)

# 等温変化の仕事
p_iso_fill = p1 * V1 / V_fill
W_isothermal = n * R * T1 * np.log(V2 / V1)

# 断熱変化の仕事
p_adi_fill = p1 * (V1 / V_fill)**gamma
T2_adi = T1 * (V1 / V2)**(gamma - 1)
W_adiabatic = n * R * (T1 - T2_adi) / (gamma - 1)

# 定圧変化の仕事
W_isobaric = p1 * (V2 - V1)

# 等温
axes[1].fill_between(V_fill, 0, p_iso_fill, alpha=0.3, color='blue')
axes[1].plot(V_fill, p_iso_fill, 'b-', linewidth=2, label=f'等温: $W = {W_isothermal:.3f}$')

# 断熱
axes[1].fill_between(V_fill, 0, p_adi_fill, alpha=0.2, color='red')
axes[1].plot(V_fill, p_adi_fill, 'r-', linewidth=2, label=f'断熱: $W = {W_adiabatic:.3f}$')

# 定圧
axes[1].fill_between(V_fill, 0, np.full_like(V_fill, p1), alpha=0.15, color='green')
axes[1].plot(V_fill, np.full_like(V_fill, p1), 'g-', linewidth=2,
            label=f'定圧: $W = {W_isobaric:.3f}$')

axes[1].set_xlabel('Volume $V$')
axes[1].set_ylabel('Pressure $p$')
axes[1].set_title('Work = Area under $p$-$V$ curve')
axes[1].legend(fontsize=9)
axes[1].grid(True, alpha=0.3)
axes[1].set_xlim(0.5, 3.5)
axes[1].set_ylim(0, 4)

# --- (3) エネルギー収支の比較 ---
# 各過程での Q, W, ΔU の計算
T2_iso = T1  # 等温
T2_adi = T1 * (V1 / V2)**(gamma - 1)  # 断熱
T2_isobar = p1 * V2 / (n * R)  # 定圧

processes_data = {
    '等温': {
        'Q': W_isothermal,
        'W': W_isothermal,
        'dU': 0,
    },
    '断熱': {
        'Q': 0,
        'W': W_adiabatic,
        'dU': -W_adiabatic,
    },
    '定圧': {
        'Q': n * cp * (T2_isobar - T1),
        'W': W_isobaric,
        'dU': n * cv * (T2_isobar - T1),
    },
}

labels = list(processes_data.keys())
Q_vals = [processes_data[l]['Q'] for l in labels]
W_vals = [processes_data[l]['W'] for l in labels]
dU_vals = [processes_data[l]['dU'] for l in labels]

x = np.arange(len(labels))
width = 0.25

axes[2].bar(x - width, Q_vals, width, label='$Q$', color='red', alpha=0.7)
axes[2].bar(x, W_vals, width, label='$W$', color='green', alpha=0.7)
axes[2].bar(x + width, dU_vals, width, label='$\\Delta U$', color='blue', alpha=0.7)

axes[2].set_xticks(x)
axes[2].set_xticklabels(labels)
axes[2].set_ylabel('Energy')
axes[2].set_title('Energy Balance: $\\Delta U = Q - W$')
axes[2].legend()
axes[2].grid(True, alpha=0.3, axis='y')
axes[2].axhline(y=0, color='k', linewidth=0.5)

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

# 数値結果
print("=== 各過程のエネルギー収支 ===")
for name, data in processes_data.items():
    print(f"\n{name}変化 (V1={V1} → V2={V2}):")
    print(f"  Q  = {data['Q']:.4f}")
    print(f"  W  = {data['W']:.4f}")
    print(f"  ΔU = {data['dU']:.4f}")
    print(f"  検証: Q - W = {data['Q'] - data['W']:.4f} ≈ ΔU ✓")

まとめ

本記事では、理想気体の4つの準静的過程について解説しました。

  • 定容変化: $V = \text{const}$, $W = 0$, $Q = nc_v\Delta T$
  • 定圧変化: $p = \text{const}$, $W = p\Delta V$, $Q = nc_p\Delta T$
  • 等温変化: $T = \text{const}$, $pV = \text{const}$, $W = nRT\ln(V_2/V_1)$, $\Delta U = 0$
  • 断熱変化: $Q = 0$, $pV^\gamma = \text{const}$, $W = nR(T_1-T_2)/(\gamma-1)$
  • 同じ膨張でも、$p$-$V$ 曲線の下の面積(仕事)は過程によって異なる

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