熱力学における基本的な準静的過程には、定容変化、定圧変化、等温変化、断熱変化の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$ 曲線の下の面積(仕事)は過程によって異なる
次のステップとして、以下の記事も参考にしてください。