温度と熱平衡(熱力学第0法則)

温度は私たちが日常的に使う物理量ですが、熱力学における温度の定義は「熱力学第0法則」という基本法則に基づいています。温度とは何かを厳密に理解することは、熱力学の全体像を把握するうえで不可欠です。

本記事では、熱力学第0法則から温度の概念がどのように導かれるかを解説し、各温度スケールの関係や温度測定の原理を整理します。

本記事の内容

  • 熱力学第0法則の定義と意味
  • 温度の熱力学的な定義
  • セルシウス・ケルビン・ファーレンハイトの関係
  • 温度測定の原理
  • Pythonでの温度変換と可視化

前提知識

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

熱力学第0法則とは

熱力学第0法則は、温度という概念の存在を保証する法則です。

第0法則の定義: 物体Aと物体Bが熱平衡にあり、物体Aと物体Cも熱平衡にあるならば、物体Bと物体Cも熱平衡にある。

$$ \text{AとBが熱平衡} \land \text{AとCが熱平衡} \implies \text{BとCが熱平衡} $$

この法則は一見自明に見えますが、非常に重要な帰結を持ちます。熱平衡が推移律を満たすことから、熱平衡にある物体群に共通する状態量が存在することが導かれます。この状態量こそが温度です。

なぜ「第0」法則なのか

歴史的には、熱力学第1法則と第2法則が先に定式化されました。しかし、これらの法則は温度の概念を暗黙に前提としていたため、温度の存在を保証する法則が後から追加され、第1法則よりも根本的であることから「第0法則」と名付けられました。

温度の定義

経験温度

第0法則により、熱平衡にある系に共通する状態量として温度 $\theta$ が存在します。温度 $\theta$ は以下の性質を持ちます。

$$ \text{系Aと系Bが熱平衡} \iff \theta_A = \theta_B $$

特定の物質の物理的性質(体積、電気抵抗、圧力など)が温度とともに変化することを利用して、温度スケールを定義できます。これを経験温度と呼びます。

絶対温度

後に学ぶカルノーサイクルの解析から、物質によらない絶対温度 $T$ が定義されます。2つの熱源間で動作するカルノー機関の効率は:

$$ \eta = 1 – \frac{Q_L}{Q_H} = 1 – \frac{T_L}{T_H} $$

この関係から、温度の比 $T_L / T_H$ が物質によらず定義され、一点(水の三重点 = 273.16 K)を固定することで絶対温度スケールが確定します。

温度スケール

ケルビン(K)— 熱力学温度

SI単位系における温度の基本単位です。絶対零度を0 K、水の三重点を273.16 Kとして定義されます(2019年のSI再定義以降は、ボルツマン定数 $k_B = 1.380649 \times 10^{-23}$ J/K を固定値として温度を定義します)。

$$ T \geq 0 \text{ K} $$

セルシウス(°C)— 摂氏温度

水の凝固点を0 °C、沸点を100 °Cとして定義された温度スケールです。ケルビンとの関係は:

$$ T_C = T – 273.15 $$

ここで $T$ はケルビン温度、$T_C$ はセルシウス温度です。温度差については $\Delta T_C = \Delta T$ であり、1 °Cの温度差は1 Kの温度差と同じです。

ファーレンハイト(°F)— 華氏温度

アメリカなどで使われる温度スケールです。水の凝固点を32 °F、沸点を212 °Fとします。セルシウスとの関係は:

$$ T_F = \frac{9}{5}T_C + 32 $$

逆変換は:

$$ T_C = \frac{5}{9}(T_F – 32) $$

3つのスケールの統一的な関係

ケルビンを基準として:

$$ \begin{align} T_C &= T – 273.15 \\ T_F &= \frac{9}{5}(T – 273.15) + 32 = \frac{9}{5}T – 459.67 \end{align} $$

温度測定の原理

温度計は、温度に依存して変化する物理量(測温体の性質)を利用して温度を測定します。

温度計の種類 利用する性質 温度範囲の目安
液体温度計(水銀) 熱膨張 -39 ~ 357 °C
熱電対 ゼーベック効果 -270 ~ 2300 °C
抵抗温度計(白金) 電気抵抗 -200 ~ 850 °C
放射温度計 熱放射(プランクの法則) -50 ~ 3000 °C
気体温度計 理想気体の法則 -270 ~ 1000 °C

気体温度計の原理

一定体積の気体の圧力は温度に比例するという性質を利用します。理想気体では:

$$ p = \frac{nRT}{V} = (\text{const}) \times T $$

複数の気体で圧力を外挿すると、すべて $T = 0$ K($-273.15$ °C)で圧力が0になります。これが絶対零度の実験的な根拠の一つです。

Pythonでの実装

import numpy as np
import matplotlib.pyplot as plt

# --- 温度変換関数 ---
def kelvin_to_celsius(T_K):
    return T_K - 273.15

def kelvin_to_fahrenheit(T_K):
    return 9/5 * T_K - 459.67

def celsius_to_kelvin(T_C):
    return T_C + 273.15

def celsius_to_fahrenheit(T_C):
    return 9/5 * T_C + 32

def fahrenheit_to_celsius(T_F):
    return 5/9 * (T_F - 32)

def fahrenheit_to_kelvin(T_F):
    return 5/9 * (T_F - 32) + 273.15

# --- 変換表の表示 ---
print("=== 温度変換表 ===")
print(f"{'ケルビン [K]':>14} {'セルシウス [°C]':>16} {'ファーレンハイト [°F]':>20}")
print("-" * 54)
for T_K in [0, 77, 100, 273.15, 293.15, 310.15, 373.15, 5778]:
    T_C = kelvin_to_celsius(T_K)
    T_F = kelvin_to_fahrenheit(T_K)
    print(f"{T_K:14.2f} {T_C:16.2f} {T_F:20.2f}")

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

# --- (1) 温度スケールの比較 ---
T_K = np.linspace(0, 500, 300)
T_C = kelvin_to_celsius(T_K)
T_F = kelvin_to_fahrenheit(T_K)

axes[0].plot(T_K, T_K, 'r-', linewidth=2, label='Kelvin [K]')
axes[0].plot(T_K, T_C, 'b-', linewidth=2, label='Celsius [°C]')
axes[0].plot(T_K, T_F, 'g-', linewidth=2, label='Fahrenheit [°F]')
axes[0].axhline(y=0, color='k', linewidth=0.5, linestyle='--')
axes[0].axvline(x=273.15, color='gray', linewidth=0.5, linestyle='--', alpha=0.5)
axes[0].set_xlabel('Kelvin [K]')
axes[0].set_ylabel('Temperature')
axes[0].set_title('Temperature Scale Comparison')
axes[0].legend()
axes[0].grid(True, alpha=0.3)

# --- (2) 気体温度計の原理 ---
# 一定体積でのp vs Tの関係(外挿して絶対零度を見つける)
T_C_range = np.linspace(-300, 200, 300)
T_K_range = T_C_range + 273.15
n_gases = 3
labels = ['He', '$N_2$', '$CO_2$']
colors = ['blue', 'red', 'green']

for i in range(n_gases):
    # 圧力は温度に比例(理想気体近似)
    # 気体ごとに定数が異なる(物質量・体積の違い)
    p0 = 1.0 + 0.3 * i  # 基準圧力を変える
    p = p0 * T_K_range / 273.15
    # 正の温度範囲のみプロット
    mask = T_K_range > 0
    axes[1].plot(T_C_range[mask], p[mask], color=colors[i], linewidth=2, label=labels[i])
    # 外挿(点線)
    axes[1].plot(T_C_range[~mask], p[~mask], color=colors[i], linewidth=1, linestyle='--', alpha=0.5)

axes[1].axvline(x=-273.15, color='k', linewidth=2, linestyle='-', label='絶対零度')
axes[1].axhline(y=0, color='k', linewidth=0.5)
axes[1].set_xlabel('Temperature [°C]')
axes[1].set_ylabel('Pressure $p$ [atm]')
axes[1].set_title('Gas Thermometer (Constant Volume)')
axes[1].legend()
axes[1].grid(True, alpha=0.3)
axes[1].set_xlim(-350, 250)

# --- (3) セルシウスとファーレンハイトの交点 ---
T_C_plot = np.linspace(-100, 200, 300)
T_F_plot = celsius_to_fahrenheit(T_C_plot)

axes[2].plot(T_C_plot, T_F_plot, 'b-', linewidth=2, label='$T_F = \\frac{9}{5}T_C + 32$')
axes[2].plot(T_C_plot, T_C_plot, 'r--', linewidth=1, label='$T_F = T_C$')
# 交点: T_C = 9/5 * T_C + 32 → -4/5 * T_C = 32 → T_C = -40
axes[2].plot(-40, -40, 'ko', markersize=8, zorder=5)
axes[2].annotate('$T_C = T_F = -40$', (-40, -40),
                textcoords="offset points", xytext=(15, 15), fontsize=11,
                arrowprops=dict(arrowstyle='->', color='black'))
axes[2].set_xlabel('Celsius [°C]')
axes[2].set_ylabel('Fahrenheit [°F]')
axes[2].set_title('Celsius vs Fahrenheit')
axes[2].legend()
axes[2].grid(True, alpha=0.3)

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

セルシウスとファーレンハイトの交点は $T_C = T_F = -40$ です。これは次のように求められます。

$$ T_C = \frac{9}{5}T_C + 32 \implies -\frac{4}{5}T_C = 32 \implies T_C = -40 $$

まとめ

本記事では、温度と熱平衡について解説しました。

  • 熱力学第0法則: 熱平衡の推移律から温度という状態量の存在が保証される
  • 絶対温度: カルノーサイクルの効率から物質によらない温度スケールが定義される
  • 温度スケール: $T_C = T – 273.15$、$T_F = \frac{9}{5}T_C + 32$
  • 温度測定: 物質の温度依存性(熱膨張、電気抵抗、圧力など)を利用
  • 絶対零度: 0 K($-273.15$ °C)は到達不可能な温度の下限

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