Rで理論化学:飽和蒸気圧

問題

液体の飽和蒸気圧 \(p^{\text{sat}}\) は温度 \(T\) の関数として増加し、その温度依存性はクラウジウス・クラペイロンの式

\[\frac{d\ln p^{\text{sat}}}{dT} = \frac{\Delta H_{\text{vap}}}{RT^2}\]

で近似されます。ここで \(\Delta H_{\text{vap}}\) は蒸発エンタルピー(モル蒸発熱)、\(R\) は気体定数です。

水の飽和蒸気圧の実測値(一部)を以下に示します。

\(T\) (℃)20406080100
\(p^{\text{sat}}\) (kPa)2.3397.38519.94647.393101.325

(1) \(\Delta H_{\text{vap}}\) を温度によらない定数とみなす近似のもとで、クラウジウス・クラペイロンの式を積分した

\[\ln p^{\text{sat}} = -\frac{\Delta H_{\text{vap}}}{R}\cdot\frac{1}{T} + C\]

\(C\)は積分定数)に基づき、上表のデータから \(\Delta H_{\text{vap}}\) をRの線形回帰(lm())で推定しなさい(ここで\(T\)は絶対温度Kに変換すること)。

(2) 一方、水の飽和蒸気圧は実務上、次のアントワン式(Antoine equation)で、より高精度に表されることが知られています。

\[\log_{10} p^{\text{sat}}(\text{kPa}) = A - \frac{B}{T(\text{K}) + C}\]

水に対するアントワン定数を \(A=7.196, B=1730.63, C=-39.72\)(温度 K、圧力 kPaの単位系)として、同じ5つの温度における \(p^{\text{sat}}\) をアントワン式で計算し、(1)のクラウジウス・クラペイロン近似および実測値と比較しなさい。

(3) \(T=10\sim110\)度の範囲で2類の曲線(クラウジウス・クラペイロン近似、アントワン式)を重ねて可視化し、どちらの式がより広い温度範囲で実測値をよく再現するか考察しなさい。


解答方針

クラウジウス・クラペイロンの式は \(\Delta H_{\text{vap}}\) を定数とみなす近似式であるのに対し、アントワン式は経験的にフィッティングされた実用式です。

両者を同じデータに対して適用し、ズレの大きさとその原因(蒸発エンタルピーの温度依存性が無視されているかどうか)を比較することが、この問題の意義です。

# ------------------------------------------------------------
# 飽和蒸気圧:クラウジウス・クラペイロンの式とアントワン式の比較
# ------------------------------------------------------------

R_gas <- 8.314 # 気体定数 J/(mol・K)

# 水の飽和蒸気圧の実測データ
T_celsius <- c(20, 40, 60, 80, 100)
T_kelvin <- T_celsius + 273.15
p_sat_kPa <- c(2.339, 7.385, 19.946, 47.393, 101.325)

df_vp <- data.frame(T_C = T_celsius, T_K = T_kelvin, p_sat = p_sat_kPa)
print(df_vp)

# --- (1) クラウジウス・クラペイロンの式による ΔHvap の推定 ---

invT <- 1 / T_kelvin
lnP <- log(p_sat_kPa)

fit_cc <- lm(lnP ~ invT)
print(summary(fit_cc))

slope_cc <- coef(fit_cc)["invT"] # 傾き = -ΔHvap/R
dHvap <- -slope_cc * R_gas # J/mol

cat(sprintf("\nクラウジウス・クラペイロンの式による ΔHvap = %.2f kJ/mol\n", dHvap / 1000))
cat(sprintf("決定係数 R^2 = %.5f\n\n", summary(fit_cc)$r.squared))
  T_C    T_K   p_sat
1  20 293.15   2.339
2  40 313.15   7.385
3  60 333.15  19.946
4  80 353.15  47.393
5 100 373.15 101.325

Call:
lm(formula = lnP ~ invT)

Residuals:
        1         2         3         4         5 
-0.015959  0.010846  0.016326  0.005592 -0.016806 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.845e+01  9.349e-02   197.3 2.87e-07 ***
invT        -5.154e+03  3.081e+01  -167.3 4.71e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.01782 on 3 degrees of freedom
Multiple R-squared:  0.9999,    Adjusted R-squared:  0.9999 
F-statistic: 2.799e+04 on 1 and 3 DF,  p-value: 4.709e-07


クラウジウス・クラペイロンの式による ΔHvap = 42.85 kJ/mol
決定係数 R^2 = 0.99989

文献に見られる水の蒸発エンタルピー(常温付近でおよそ44 kJ/mol程度)に近い値が得られており、この近似が定性的には妥当であることが確認できます。


(2) アントワン式による計算と3者比較

# --- (2) アントワン式による p_sat の計算 ---

antoine_A <- 7.196
antoine_B <- 1730.63
antoine_C <- -39.72

p_sat_antoine <- function(T_K, A = antoine_A, B = antoine_B, C = antoine_C) {
  10^(A - B / (T_K + C))
}

# クラウジウス・クラペイロン近似による p_sat の再構成(回帰直線から)
p_sat_cc <- function(T_K) {
  exp(predict(fit_cc, newdata = data.frame(invT = 1 / T_K)))
}

p_antoine_vals <- sapply(T_kelvin, p_sat_antoine)
p_cc_vals <- sapply(T_kelvin, p_sat_cc)

df_compare <- data.frame(
  T_C = T_celsius,
  p_observed = p_sat_kPa,
  p_CC = round(p_cc_vals, 3),
  p_Antoine = round(p_antoine_vals, 3),
  error_CC_pct = round(100 * (p_cc_vals - p_sat_kPa) / p_sat_kPa, 2),
  error_Antoine_pct = round(100 * (p_antoine_vals - p_sat_kPa) / p_sat_kPa, 2)
)

print(df_compare)
  T_C p_observed    p_CC p_Antoine error_CC_pct error_Antoine_pct
1  20      2.339   2.377     2.329         1.61             -0.43
2  40      7.385   7.305     7.356        -1.08             -0.39
3  60     19.946  19.623    19.864        -1.62             -0.41
4  80     47.393  47.129    47.252        -0.56             -0.30
5 100    101.325 103.042   101.301         1.69             -0.02

アントワン式の誤差は全点で0.5%未満に収まっており、クラウジウス・クラペイロン近似の誤差と比較すると精度が高いことを確認できます。

これは、\(\Delta H_{\text{vap}}\)を定数とみなす近似の限界が現れた結果であり、アントワン式が実測データへのフィッティングに、より広い範囲で再現性を持つことを裏付けています。


(3) 広い温度範囲での可視化

library(ggplot2)

T_fine_C <- seq(10, 110, length.out = 300)
T_fine_K <- T_fine_C + 273.15

df_fine <- data.frame(
  T_C = T_fine_C,
  p_CC = sapply(T_fine_K, p_sat_cc),
  p_Antoine = sapply(T_fine_K, p_sat_antoine)
)

df_fine_long <- data.frame(
  T_C = rep(df_fine$T_C, 2),
  p_sat = c(df_fine$p_CC, df_fine$p_Antoine),
  type = rep(c("クラウジウス・クラペイロン近似", "アントワン式"), each = nrow(df_fine))
)

p_vp <- ggplot() +
  geom_line(
    data = df_fine_long, aes(x = T_C, y = p_sat, color = type, linetype = type),
    linewidth = 1
  ) +
  geom_point(data = df_vp, aes(x = T_C, y = p_sat), color = "black", size = 2.5) +
  labs(
    title = "水の飽和蒸気圧の温度依存性",
    x = "温度 (℃)",
    y = expression(p^sat ~ "(kPa)"),
    color = NULL, linetype = NULL
  ) +
  theme_minimal(base_size = 13)

print(p_vp)
Figure 1

考察

クラウジウス・クラペイロンの式は、\(\Delta H_{\text{vap}}\) を温度によらない定数とみなす近似の上に成り立っています。

しかし実際には、蒸発エンタルピーは温度が上昇するにつれて(特に臨界点に近づくほど)減少していくことが知られており、この近似は狭い温度範囲でしか精度を保てません。

一方でアントワン式は、実測データに合わせて経験的に係数を決定した式であるため、対象とする温度範囲内では高い精度を保っています。

ただし、アントワン式はあくまでその温度範囲内でのフィッティング式であり、適用範囲外(極端な高温・低温)に外挿すると精度が保証されない点には注意が必要です。


まとめ

項目内容
クラウジウス・クラペイロンの式 \(\ln p^{\text{sat}} = -\Delta H_{\text{vap}}/(RT) + C\)(ΔHvap一定近似)
アントワン式 \(\log_{10}p^{\text{sat}} = A - B/(T+C)\)(経験的フィッティング式)
本問での結果アントワン式はクラウジウス・クラペイロン近似と比較して高精度

補足

飽和蒸気圧とは

飽和蒸気圧とは、密閉容器内で液体とその蒸気が共存し、蒸発と凝縮の速さが釣り合って平衡状態にあるときの、蒸気が示す圧力のことです。記号 \(p^{\text{sat}}\) で表され、単位は Pa や kPa が用いられます。

温度 \(T\) が一定であれば \(p^{\text{sat}}\) も一定の値をとりますが、温度が上昇すると分子の熱運動が激しくなり液体から飛び出す分子が増えるため、\(p^{\text{sat}}\) は温度とともに増大します。この温度依存性はクラウジウス・クラペイロンの式

\[\frac{d\ln p^{\text{sat}}}{dT} = \frac{\Delta H_{\text{vap}}}{RT^2}\]

で近似的に記述されます。ここで \(\Delta H_{\text{vap}}\) は蒸発エンタルピー(液体1molを同じ温度の気体に変えるのに必要な熱量、単位 J/mol)、\(R\) は気体定数(単位 J/(mol·K))です。

外圧(例えば大気圧)と飽和蒸気圧が等しくなる温度が、その圧力における沸点にあたります。したがって飽和蒸気圧は、物質の揮発性の指標であると同時に、沸点や蒸留といった分離操作を理解する上での基礎的な物理量です。

水の蒸発エンタルピー

25 ℃(298.15 K)における生成エンタルピー

蒸発エンタルピーは「気体の生成熱 − 液体の生成熱」で求められるため、

\[\Delta_{vap}H^\circ = (-241.83) - (-285.83) = +44.00\text{ kJ/mol}\]

以上です。