電子の存在確率と軌道
◆ 量子力学に基づく電子の存在確率密度:
$$
P(r) = 4\pi r^2 |\psi(r)|^2
$$
- $\psi(r)$:波動関数(1s軌道など)
- $P(r)$:電子が距離 $r$ の位置に存在する確率密度
- グラフはこの関数の面積(積分)で95%以内に存在することを示している
◆ 例:水素原子の1s軌道波動関数
$$
\psi_{1s}(r) = \frac{1}{\sqrt{\pi a_0^3}} e^{-r/a_0}
$$
- $a_0 = 0.053 , \text{nm}$:ボーア半径
混合気体の平均分子量
◆ 平均分子量の公式(モル比を使って加重平均):
$$
M = x_1 M_1 + x_2 M_2 + \cdots + x_n M_n
$$
- $M$:混合気体の平均分子量
- $x_i$:成分気体 $i$ のモル比(mol分率)
- $M_i$:成分気体 $i$ のモル質量
◆ 例題中の応用:
酸素と窒素を 1:1 の体積比で混合:
$$
M = \frac{1}{2} \cdot 32.0 + \frac{1}{2} \cdot 28.0 = 30.0 , \text{g/mol}
$$
アボガドロ定数と物質量
◆ 物質量の定義式:
$$
n = \frac{N}{N_A}
$$
- $n$:物質量(mol)
- $N$:粒子数
- $N_A = 6.02 \times 10^{23} , \text{mol}^{-1}$:アボガドロ定数
◆ 水分子500 mL中の粒子数(例):
$$
n = \frac{500}{18} \approx 27.8 , \text{mol}
\quad \Rightarrow \quad
N = 27.8 \times 6.02 \times 10^{23} \approx 1.67 \times 10^{25}
$$
原子量・分子量の定義と相対質量
◆ 相対質量の定義:
$$
\text{相対質量} = \frac{\text{実際の質量}}{\text{(^{12}C) 1原子の質量} / 12}
$$
◆ 例:水素原子の相対質量
$$
\text{水素原子の質量} = 1.6735 \times 10^{-24} , \text{g}
\quad \Rightarrow \quad
\frac{1.6735 \times 10^{-24}}{1.9926 \times 10^{-23} / 12} = 1.0078
$$
Python
# Program Name: quantum_chemistry_summary.py
# Creation Date: 20250604
# Overview: Visualize and calculate key chemical quantities: electron probability, molecular weight, mole-particle relation, relative mass
# Usage: Run in Python environment with numpy and matplotlib installed
# -------------------- Install Required Libraries --------------------
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Constants / 定数定義 --------------------
pi = np.pi
a0 = 0.053 # ボーア半径 [nm] / Bohr radius in nm
NA = 6.02e23 # アボガドロ定数 / Avogadro's constant
m_H = 1.6735e-24 # 水素原子の質量 [g]
m_C12 = 1.9926e-23 # 炭素12の質量 [g]
# -------------------- 1. Electron Probability Density Plot / 電子存在確率密度 --------------------
r = np.linspace(0, 0.3, 300) # 半径 [nm]
psi = (1 / np.sqrt(pi * a0**3)) * np.exp(-r / a0) # 波動関数 / wave function
P_r = 4 * pi * r**2 * psi**2 # 確率密度 / probability density
plt.figure()
plt.plot(r, P_r)
plt.title("Electron Probability Density for 1s Hydrogen Orbital")
plt.xlabel("Distance from nucleus [nm]")
plt.ylabel("Probability density")
plt.grid(True)
plt.show()
# -------------------- 2. Weighted Average Molar Mass / 平均分子量計算 --------------------
x_O2, M_O2 = 0.5, 32.0
x_N2, M_N2 = 0.5, 28.0
M_avg = x_O2 * M_O2 + x_N2 * M_N2
print(f"Average molar mass of 1:1 O2 and N2 mixture = {M_avg:.1f} g/mol")
# -------------------- 3. Mole and Avogadro Relation / モルと粒子数の関係 --------------------
volume_mL = 500
MW_H2O = 18.0
mol_H2O = volume_mL / MW_H2O
N_H2O = mol_H2O * NA
print(f"Number of water molecules in 500 mL = {N_H2O:.2e} molecules")
# -------------------- 4. Relative Atomic Mass / 相対質量の計算 --------------------
relative_mass_H = m_H / (m_C12 / 12)
print(f"Relative atomic mass of hydrogen ≈ {relative_mass_H:.4f}")
🔹化学反応式と係数決定(未定係数法)
◆ 化学反応式の例
ブタンの燃焼反応:
$$
2\mathrm{C_4H_{10}} + 13\mathrm{O_2} \rightarrow 8\mathrm{CO_2} + 10\mathrm{H_2O}
$$
◆ 未定係数法の利用(連立方程式による係数決定)
例:アンモニアと酸素の反応
$$
a\mathrm{NH_3} + b\mathrm{O_2} \rightarrow c\mathrm{NO} + d\mathrm{H_2O}
$$
連立式:
$$
\begin{cases}
N: a = c \
O: 2b = c + d \
H: 3a = 2d
\end{cases}
\Rightarrow 4\mathrm{NH_3} + 5\mathrm{O_2} \rightarrow 4\mathrm{NO} + 6\mathrm{H_2O}
$$
🔹イオン半径比と結晶構造の安定性
◆ イオン半径比 $\frac{r_+}{r_-}$ による安定構造
- NaCl型:$\frac{r_+}{r_-} > 0.41$
- CsCl型:$\frac{r_+}{r_-} > 0.73$
- ZnS型:$\frac{r_+}{r_-} > 0.22$
◆ 幾何的根拠式の例
NaCl型構造:
$$
\frac{r_+}{r_-} > \sqrt{2} - 1 \approx 0.41
$$
🔹濃度計算(質量パーセント・モル濃度)
◆ 質量パーセント濃度:
$$
\text{質量%} = \frac{\text{溶質の質量}}{\text{溶液の質量}} \times 100
$$
◆ モル濃度:
$$
C = \frac{n}{V} = \frac{\text{mol数}}{\text{体積(L)}}
$$
◆ Python 計算例(49%硫酸のモル濃度):
mass_percent = 0.49
density = 1.60 # g/cm^3
M_H2SO4 = 98.0
mass_per_L = 1000 * density * mass_percent
mol_H2SO4 = mass_per_L / M_H2SO4
print(f"モル濃度 ≈ {mol_H2SO4:.2f} mol/L") # ≈ 8.00 mol/L
🔹ステアリン酸でのアボガドロ数測定
◆ 使用式:
$$
N_A = \frac{M S}{m s}
$$
- $M$:モル質量 [g/mol]
- $S$:ステアリン酸の膜面積 [cm²]
- $m$:使用した質量 [g]
- $s$:1分子が占める面積 [cm²]
◆ 教科書例での代入:
$$
N_A = \frac{284 \times 314}{7.2 \times 10^{-5} \times 2.2 \times 10^{-15}} = 5.6 \times 10^{23} , \text{mol}^{-1}
$$
◆ Pythonコード例:
M = 284
S = 314
m = 7.2e-5
s = 2.2e-15
NA_est = M * S / (m * s)
print(f"アボガドロ数の測定値 ≈ {NA_est:.2e} /mol") # ≈ 5.6e23
◆ 合体Pythonコード:
# Program Name: chemistry_integration.py
# Creation Date: 20250604
# Overview: Solve chemical problems across multiple areas: reaction balancing, molarity, Avogadro number estimation
# Usage: Run in Python environment with standard math and numpy libraries
# -------------------- Import Libraries --------------------
import math
# -------------------- 1. Reaction Coefficient Balancing / 化学反応式の係数決定 --------------------
# アンモニアと酸素の反応:4NH3 + 5O2 → 4NO + 6H2O
a = 4
b = 5
c = a
d = (3 * a) // 2
print(f"反応式:{a} NH3 + {b} O2 → {c} NO + {d} H2O")
# -------------------- 2. Ion Radius Ratio & Stability / イオン半径比と安定構造 --------------------
r_plus = 0.1 # 任意の陽イオン半径
r_minus = 0.25 # 任意の陰イオン半径
radius_ratio = r_plus / r_minus
print(f"イオン半径比 r+/r- = {radius_ratio:.2f}")
if radius_ratio > 0.73:
print("→ CsCl型構造が安定")
elif radius_ratio > 0.41:
print("→ NaCl型構造が安定")
elif radius_ratio > 0.22:
print("→ ZnS型構造が安定")
else:
print("→ 結晶構造として不安定")
# -------------------- 3. Molarity Calculation / モル濃度 --------------------
mass_percent = 0.49
density = 1.60 # g/cm^3
M_H2SO4 = 98.0 # モル質量 [g/mol]
mass_per_L = 1000 * density * mass_percent # g/L
mol_H2SO4 = mass_per_L / M_H2SO4
print(f"硫酸水溶液のモル濃度 ≈ {mol_H2SO4:.2f} mol/L") # ≈ 8.00 mol/L
# -------------------- 4. Avogadro Number Estimation / ステアリン酸によるアボガドロ数測定 --------------------
M = 284 # モル質量 [g/mol]
S = 314 # 総膜面積 [cm^2]
m = 7.2e-5 # 質量 [g]
s = 2.2e-15 # 1分子の面積 [cm^2]
NA_est = M * S / (m * s)
print(f"ステアリン酸によるアボガドロ定数の測定値 ≈ {NA_est:.2e} /mol") # ≈ 5.6e23
🔷① 分子間距離とポテンシャルエネルギー
🧪【主題】水素分子 H₂ のポテンシャルエネルギー曲線
◆ エネルギーと距離の関係式(Lennard-Jones型に類似):
$$
V(r) = -\frac{A}{r^m} + \frac{B}{r^n}
$$
- $r$:原子間距離
- $A,B$:定数(引力・斥力の強さ)
- $m < n$:通常、引力項は長距離(6)、斥力項は短距離(12)
◆ 図から読み取れる物理的意味:
- 最安定距離:$r = 0.074,\mathrm{nm}$
- 安定結合エネルギー:約 $432,\mathrm{kJ/mol}$
- 遠く離れた時との差分 → $458,\mathrm{kJ/mol}$:H-H 結合の解離エネルギー
🔷② 電気双極子モーメントとファンデルワールス力(画像2)
分子の極性と双極子モーメント
◆ 双極子モーメントの定義:
$$
\mu = q \cdot d
$$
- $q$:部分電荷の大きさ(C)
- $d$:正負電荷間の距離(m)
◆ 単位:
$$
1,\mathrm{D} = 3.34 \times 10^{-30},\mathrm{C \cdot m}
$$
◆ HCl の例:
$$
\mu = 1.60 \times 10^{-19} \times 1.28 \times 10^{-10} = 2.05 \times 10^{-29} \Rightarrow 6.13,\mathrm{D}
$$
◆ 水分子の全体モーメント:
$$
\mu_{\text{H}2\text{O}} = 2 \mu{\text{OH}} \cos\left(\frac{\theta}{2}\right)
= 2 \cdot 1.51 \cdot \cos(52^\circ) \approx 1.86,\mathrm{D}
$$
- 水分子は折れ線型(104°) → モーメントが打ち消されない → 強い極性
🔷③ 結晶構造と充填率
🔻金属結晶における空間効率=充填率
◆ 体心立方構造(BCC):
$$
\text{充填率} = \frac{2 \cdot \frac{4}{3} \pi r^3}{a^3}, \quad a = \frac{4r}{\sqrt{3}} \Rightarrow 68%
$$
◆ 面心立方構造(FCC):
$$
\text{充填率} = \frac{4 \cdot \frac{4}{3} \pi r^3}{a^3}, \quad a = 2\sqrt{2}r \Rightarrow 74%
$$
◆ 六方最密構造(HCP):
$$
\text{充填率} = \frac{6 \cdot \frac{4}{3} \pi r^3}{\text{単位胞の体積}} \Rightarrow 74%
$$
🔷④ 電気陰性度の理論とポーリング式
◆ ポーリングの式:
$$
\Delta = \sqrt{D_{AB} - \frac{D_{AA} + D_{BB}}{2}}
\Rightarrow |\chi_A - \chi_B| \propto \sqrt{D_{AB} - D_{\text{平均}}}
$$
- $D_{AB}$:混成結合の結合エネルギー
- $\chi$:電気陰性度
◆ マリケンの定義:
$$
\chi = \frac{I + E}{2}
$$
- $I$:イオン化エネルギー(eV)
- $E$:電子親和力(eV)
◆ 極性の可視化(下部イラスト):
- 水:極性強(非対称、打ち消しなし)
- CO₂:極性なし(直線型で打ち消し)
# Program Name: molecular_properties_analysis.py
# Creation Date: 20250604
# Overview: Analyze bond energy curve, dipole moments, packing efficiency, and electronegativity using Python
# Usage: Run in Python environment with numpy and matplotlib installed
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
import math
# -------------------- ① Lennard-Jones-type Potential / ポテンシャルエネルギー曲線 --------------------
def potential_energy(r, A=1e-77, B=1e-134, m=6, n=12):
return -A / r**m + B / r**n
r_vals = np.linspace(0.05e-9, 0.3e-9, 300)
V_vals = potential_energy(r_vals)
plt.figure()
plt.plot(r_vals * 1e9, V_vals * 1e21) # 単位変換で視覚的に見やすく(J→zJ, m→nm)
plt.axvline(x=0.074, linestyle='--', color='gray', label='Equilibrium distance (0.074 nm)')
plt.title("Lennard-Jones-like Potential for H₂")
plt.xlabel("Interatomic distance [nm]")
plt.ylabel("Potential Energy [zJ]")
plt.grid(True)
plt.legend()
plt.show()
# -------------------- ② Dipole Moment Calculations / 双極子モーメント --------------------
q = 1.60e-19 # C
d_hcl = 1.28e-10 # m
mu_hcl = q * d_hcl # C·m
mu_hcl_D = mu_hcl / 3.34e-30 # デバイに変換
mu_oh = 1.51 # D
theta_deg = 104
theta_rad = math.radians(theta_deg)
mu_h2o = 2 * mu_oh * math.cos(theta_rad / 2)
print(f"HCl の双極子モーメント ≈ {mu_hcl_D:.2f} D")
print(f"H₂O の双極子モーメント ≈ {mu_h2o:.2f} D")
# -------------------- ③ Packing Efficiency / 結晶の充填率 --------------------
def packing_efficiency(structure):
if structure == "BCC":
a = 4 / math.sqrt(3)
efficiency = (2 * (4/3) * math.pi * 1**3) / a**3 * 100
elif structure == "FCC":
a = 2 * math.sqrt(2)
efficiency = (4 * (4/3) * math.pi * 1**3) / a**3 * 100
elif structure == "HCP":
# HCPは単位胞体積の導出が必要だが、比率は同じ74%
efficiency = 74
else:
efficiency = None
return efficiency
print(f"BCC packing efficiency ≈ {packing_efficiency('BCC'):.1f}%")
print(f"FCC packing efficiency ≈ {packing_efficiency('FCC'):.1f}%")
print(f"HCP packing efficiency = {packing_efficiency('HCP')}%")
# -------------------- ④ Electronegativity via Pauling and Mulliken --------------------
# Pauling式: 相対値(Δχ ∝ √ΔD)
D_AB = 458 # kJ/mol
D_AA = 436
D_BB = 362
delta_D = D_AB - (D_AA + D_BB) / 2
delta_chi = math.sqrt(delta_D)
# Mulliken式: 絶対値
I = 13.6 # eV
E = 3.8 # eV
chi_mulliken = (I + E) / 2
print(f"ポーリング式による相対電気陰性度差 ≈ {delta_chi:.2f}")
print(f"マリケン式による電気陰性度 ≈ {chi_mulliken:.2f} eV")
🔷 気体分子の熱運動と絶対温度
◆ 分子の速度分布(マクスウェル分布):
- 高温ほど分布は右にシフト(速い分子が多くなる)
- 速さの平均・最頻値・平方平均速度は異なる
◆ 平均運動エネルギー:
$$
E = \frac{1}{2}mv^2 = \frac{3}{2}kT
$$
- T:絶対温度(K)
- $k$:ボルツマン定数
◆ 絶対温度:
$$
T[\mathrm{K}] = t[^\circ\mathrm{C}] + 273
$$
🔷気体の圧力と気液平衡
◆ 圧力の定義:
$$
P = \frac{F}{S} = \rho g h
$$
-
水銀柱の高さ h を使って大気圧の測定(トリチェリの実験)
- $P = 0.760,\mathrm{m} \times 1.36 \times 10^4,\mathrm{kg/m^3} \times 9.81$
◆ 気液平衡と蒸気圧:
- 気化と凝縮が等しい → 動的平衡状態
- 蒸気圧が大気圧に等しくなる温度:沸点
🔷 状態変化(融解・凝固・沸騰・昇華)
◆ 各状態変化:
変化名 | 状態の変化 | 吸熱/発熱 |
---|---|---|
融解 | 固体 → 液体 | 吸熱 |
凝固 | 液体 → 固体 | 発熱 |
蒸発(沸騰) | 液体 → 気体 | 吸熱 |
凝縮 | 気体 → 液体 | 発熱 |
昇華 | 固体 ↔ 気体 | 双方向あり |
◆ 図解のポイント:
- 氷→水→水蒸気の過程で、**潜熱(加熱しても温度が上がらない)**部分がある
- 状態変化の境界では分子間の結合が切れる(エネルギー消費)
# Program Name: thermal_motion_and_phase_transition.py
# Creation Date: 20250604
# Overview: Simulate Maxwell distribution, pressure via mercury column, and phase change latent heat
# Usage: Run in Python environment with numpy and matplotlib
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Constants / 定数 --------------------
k = 1.38e-23 # ボルツマン定数 [J/K]
m_H2 = 3.32e-27 # 水素分子の質量 [kg]
T_list = [300, 1000, 2000] # 絶対温度 [K]
# -------------------- 1. Maxwell Distribution / マクスウェル分布 --------------------
v = np.linspace(0, 3000, 500) # 速度範囲 [m/s]
plt.figure()
for T in T_list:
f = 4 * np.pi * (m_H2 / (2 * np.pi * k * T))**1.5 * v**2 * np.exp(-m_H2 * v**2 / (2 * k * T))
plt.plot(v, f, label=f'T = {T} K')
plt.title("Maxwell Speed Distribution (H₂)")
plt.xlabel("Speed [m/s]")
plt.ylabel("Probability Density")
plt.legend()
plt.grid(True)
plt.show()
# -------------------- 2. Average Kinetic Energy / 平均運動エネルギー --------------------
T_range = np.linspace(100, 1000, 100)
E_avg = 1.5 * k * T_range # J(1分子あたり)
plt.figure()
plt.plot(T_range, E_avg * 1e21) # zJ単位
plt.title("Average Kinetic Energy vs Temperature")
plt.xlabel("Temperature [K]")
plt.ylabel("Energy [zJ] (1e-21 J)")
plt.grid(True)
plt.show()
# -------------------- 3. Pressure via Mercury Column / 水銀柱での大気圧 --------------------
rho_Hg = 1.36e4 # [kg/m³]
g = 9.81 # [m/s²]
h = 0.760 # [m]
P = rho_Hg * g * h # Pa
print(f"水銀柱による圧力 P = {P:.2e} Pa ≈ 1.01 × 10^5 Pa")
# -------------------- 4. Phase Transition Energy Profile / 状態変化エネルギー曲線 --------------------
# 概念モデル:温度 vs 熱量(潜熱を平坦な領域でモデル化)
heat = [0, 100, 200, 300, 400, 500, 600]
temp = [0, 0, 50, 100, 100, 150, 200] # 融解・蒸発に平坦区間あり
plt.figure()
plt.plot(heat, temp, marker='o')
plt.title("Phase Change: Temperature vs Heat")
plt.xlabel("Heat Supplied [arbitrary unit]")
plt.ylabel("Temperature [°C]")
plt.grid(True)
plt.show()
🔷 1. 飽和蒸気圧と気液平衡の基本
◆ 飽和蒸気圧(saturated vapor pressure)とは?
液体とその蒸気が平衡状態にあるときの蒸気の圧力のこと。
- 密閉容器内で液体と気体が共存 → 時間が経つと蒸発と凝縮が等速になる「動的平衡」状態になる。
- このとき、蒸気が壁に及ぼす圧力を 飽和蒸気圧(単に蒸気圧) という。
- 蒸気圧はその物質の種類と温度で決まり、体積や他の気体の存在には依存しない。
🔷 2. 蒸気圧と温度の関係
◆ 温度上昇により蒸気圧が増加する理由
$$
\text{高温} \Rightarrow \text{液体分子の熱運動増加} \Rightarrow \text{蒸発しやすい} \Rightarrow \text{蒸気圧上昇}
$$
- ジエチルエーテル < エタノール < 水の順で、同じ温度でも蒸気圧は異なる。
- 蒸気圧が**1 atm(1.013 × 10⁵ Pa)**と等しくなる温度が「沸点」。
🔷 3. 体積と蒸気圧の関係(図11)
◆ 飽和蒸気圧は体積に依存しない
- 一定温度で体積を減らしても、余剰分の蒸気が凝縮 → 再び平衡に。
- 逆に体積を増やしても、液体があれば再び蒸発が進み平衡に。
🔸 よって、蒸気圧は体積の変化に依存せず一定。
🔷 4. 沸騰と蒸気圧(図12)
◆ 沸騰の定義
- 蒸気圧が外圧と等しくなったとき、液面だけでなく内部からも蒸発が起こる → これが沸騰。
- 沸騰温度 = 沸点(boiling point)
◆ 外圧の影響
外圧 | 沸点 | 現象 |
---|---|---|
高い | 上がる | 圧力鍋 |
低い | 下がる | 山岳地帯で沸騰が早い(例:90℃) |
🔷 5. 水とCO₂の状態図(図13)
◆ 状態図(Phase Diagram)の構成
線 | 意味 |
---|---|
蒸気圧曲線 | 気体-液体の境界 |
融解曲線 | 固体-液体の境界 |
昇華圧曲線 | 固体-気体の境界 |
◆ 三重点(Triple Point)
- 固体・液体・気体が共存する唯一の点(例:水:0.01℃)
◆ 臨界点(Critical Point)
- 液体と気体の区別ができなくなる点 → 超臨界状態(supercritical fluid)
🔷 6. ボイル・シャルルの法則(復習)
◆ ボイルの法則(T一定)
$$
pV = \text{一定} \quad \Rightarrow \quad p_1V_1 = p_2V_2
$$
◆ シャルルの法則(p一定)
$$
\frac{V_1}{T_1} = \frac{V_2}{T_2}
\quad \text{(TはKで表す)}
$$
まとめ:キーワード整理
用語 | 意味・定義 |
---|---|
飽和蒸気圧 | 気液平衡時の蒸気の圧力 |
沸騰 | 蒸気圧=外圧で内部からも蒸発開始 |
沸点 | 蒸気圧=外圧になる温度 |
三重点 | 固・液・気が共存 |
臨界点 | 液体と気体の区別が消失する点 |
ボイルの法則 | $pV = \text{一定}$(T一定) |
シャルルの法則 | $V/T = \text{一定}$(p一定) |
# Program Name: vapor_pressure_and_gas_laws.py
# Creation Date: 20250604
# Overview: Simulate vapor pressure curves, boiling condition, phase diagram concepts, and gas laws (Boyle, Charles)
# Usage: Run in Python environment with numpy and matplotlib installed
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Constants --------------------
P_ATM = 101325 # 1 atm [Pa]
# -------------------- 1. Vapor Pressure Curve (Clausius-Clapeyron approx) --------------------
def vapor_pressure(T, A, B):
return np.exp(A - B / T)
T = np.linspace(250, 400, 200) # Temperature range in K
params = {
'Diethyl Ether': (20.18, 3623),
'Ethanol': (19.32, 3882),
'Water': (20.79, 5162)
}
plt.figure()
for substance, (A, B) in params.items():
P = vapor_pressure(T, A, B) / P_ATM # Convert to atm
plt.plot(T - 273.15, P, label=substance)
plt.axhline(1, linestyle='--', color='gray', label="1 atm (boiling line)")
plt.xlabel("Temperature [°C]")
plt.ylabel("Vapor Pressure [atm]")
plt.title("Vapor Pressure Curves")
plt.grid(True)
plt.legend()
plt.show()
# -------------------- 2. Boiling Point at Lower Pressure --------------------
def boiling_point(A, B, P_target=0.8 * P_ATM):
return B / (A - np.log(P_target))
T_ethanol = boiling_point(19.32, 3882)
print(f"Boiling point of ethanol at 0.8 atm ≈ {T_ethanol - 273.15:.2f} °C")
# -------------------- 3. Boyle’s Law (pV = const) --------------------
V_boyle = np.linspace(0.1, 2.0, 100) # Volume [L]
P_boyle = 1.0 / V_boyle # Pressure [atm]
# -------------------- 4. Charles’s Law (V ∝ T) --------------------
T_charles = np.linspace(200, 500, 100) # Temperature [K]
V_charles = 1.0 * T_charles / 273.15 # Volume [L]
# -------------------- 5. Conceptual Phase Diagram --------------------
P_phase = np.linspace(1e3, 1e7, 300)
T_phase = 273 + np.log(P_phase / P_ATM) * 100 # Simplified example
# -------------------- Plot Boyle and Charles Laws --------------------
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(V_boyle, P_boyle, label="Boyle's Law: p ∝ 1/V")
plt.xlabel("Volume [L]")
plt.ylabel("Pressure [atm]")
plt.title("Boyle's Law")
plt.grid(True)
plt.legend()
plt.subplot(1, 2, 2)
plt.plot(T_charles, V_charles, color='orange', label="Charles's Law: V ∝ T")
plt.xlabel("Temperature [K]")
plt.ylabel("Volume [L]")
plt.title("Charles's Law")
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
# -------------------- 6. Phase Diagram with Log Scale --------------------
plt.figure()
plt.plot(T_phase, P_phase, label='Vapor Pressure Curve')
plt.axvline(373, color='gray', linestyle='--', label='Water Boiling Point')
plt.axhline(P_ATM, color='black', linestyle='--', label='1 atm')
plt.yscale('log')
plt.xlabel("Temperature [K]")
plt.ylabel("Pressure [Pa] (log scale)")
plt.title("Conceptual Phase Diagram (log scale)")
plt.grid(True, which='both')
plt.legend()
plt.show()
🔹 1. 理想気体の法則と実在気体の補正
◼ 理想気体の状態方程式(高校標準)
$$
pV = nRT
$$
- $p$:圧力 [Pa]
- $V$:体積 [m³]
- $n$:モル数 [mol]
- $R = 8.31 \times 10^3 , \mathrm{Pa \cdot L/(mol \cdot K)}$:気体定数
- $T$:絶対温度 [K]
◼ ファンデルワールスの状態方程式(実在気体用補正)
$$
\left(p + \frac{a}{V_m^2}\right)(V_m - b) = RT
$$
- $a$:分子間引力の補正定数(Pa·L²/mol²)
- $b$:分子自身の体積補正定数(L/mol)
気体 | $a$ [Pa·L²/mol²] | $b$ [L/mol] |
---|---|---|
水素 H₂ | 0.248 × 10² | 0.0266 |
メタン CH₄ | 2.29 × 10² | 0.0428 |
アンモニア NH₃ | 4.25 × 10² | 0.0374 |
🔹 2. ボイル・シャルルの法則の図解と適用
◼ ボイルの法則(温度一定):
$$
pV = \text{一定}
$$
圧力を2倍にすると体積は1/2に。
◼ シャルルの法則(圧力一定):
$$
\frac{V}{T} = \text{一定}
$$
温度(K)を2倍にすると体積も2倍に。
🔹 3. 蒸気圧と状態方程式の応用
◼ 蒸気圧の定義:
- 密閉容器内で、液体と蒸気が平衡になったときの蒸気の圧力
- 飽和蒸気圧は 温度にのみ依存 し、体積や他の気体とは無関係
◼ 実験例:水の蒸気圧から存在量を推定
- 容器体積 $V = 8.3 , \mathrm{L}$、温度 $T = 300 , \mathrm{K}$
- 蒸気圧 $p = 3.6 \times 10^3 , \mathrm{Pa}$
- 理想気体の式 $pV = \frac{w}{M}RT$ を使って質量を算出:
$$
w = \frac{pVM}{RT} \Rightarrow \text{水蒸気として存在するのは約 1.6 g}
$$
🔹 4. 溶解平衡と分配係数の定量化
◼ ヨウ素 I₂ の分配平衡:
ヨウ素は水よりも有機溶媒(例:ヘキサン)に溶けやすい。
→ 濃度比 $K_D = \frac{[I₂]{\text{有機相}}}{[I₂]{\text{水相}}}$
◼ 応用式:
$$
K_D = \frac{[I_2]{\text{hexane}}}{[I_2]{\text{water}}} = \text{一定}
$$
- 値が大きいほど水相への溶解は小さく、ほぼ有機層に分布。
🔹 5. 固体の溶解度と温度依存性
- 固体の溶解度は多くの場合、温度を上げると上昇する。
- 飽和溶液では、溶解と析出が動的平衡にある。
◼ 代表例:
温度 | KNO₃の溶解度 (g/100g水) |
---|---|
20℃ | 約32 |
60℃ | 約109 |
🔸 まとめ
用語 | 意味・数式例 |
---|---|
理想気体の式 | $pV = nRT$ |
実在気体補正式 | ファンデルワールス状態式 |
蒸気圧 | 液体と蒸気が平衡なときの圧力 |
沸点 | 蒸気圧が外圧に等しくなる温度 |
ボイルの法則 | $pV = \text{一定}$ |
シャルルの法則 | $V/T = \text{一定}$ |
分配係数 | $K_D = \frac{[A]{\text{有機}}}{[A]{\text{水}}}$ |
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Constants --------------------
R = 8.31e3 # [Pa·L/(mol·K)]
T = 300 # Temperature [K]
n = 1.0 # mol数
Vm = np.linspace(0.1, 10, 300) # molar volume [L/mol]
# -------------------- Van der Waals constants --------------------
gases = {
'Ideal Gas': {'a': 0, 'b': 0},
'Hydrogen (H2)': {'a': 0.248e2, 'b': 0.0266},
'Methane (CH4)': {'a': 2.29e2, 'b': 0.0428},
'Ammonia (NH3)': {'a': 4.25e2, 'b': 0.0374}
}
# -------------------- Pressure calculations --------------------
pressures = {}
for gas, constants in gases.items():
a = constants['a']
b = constants['b']
with np.errstate(divide='ignore', invalid='ignore'):
P = (R * T) / (Vm - b) - a / Vm**2
pressures[gas] = P
# -------------------- Boyle's Law (T constant) --------------------
V_boyle = np.linspace(1, 10, 100)
P_boyle = 10 / V_boyle # pV = constant
# -------------------- Charles's Law (P constant) --------------------
T_charles = np.linspace(200, 400, 100)
V_charles = T_charles * (1 / 273) # V/T = constant
# -------------------- Plotting --------------------
fig, axs = plt.subplots(1, 3, figsize=(18, 5))
# Plot 1: Van der Waals vs Ideal Gas
for gas, P in pressures.items():
axs[0].plot(Vm, P, label=gas)
axs[0].set_xlabel("Molar Volume $V_m$ [L/mol]")
axs[0].set_ylabel("Pressure $P$ [Pa]")
axs[0].set_title("Van der Waals vs Ideal Gas")
axs[0].legend()
axs[0].grid(True)
# Plot 2: Boyle's Law
axs[1].plot(V_boyle, P_boyle, color='blue')
axs[1].set_xlabel("Volume $V$ [L]")
axs[1].set_ylabel("Pressure $P$ [a.u.]")
axs[1].set_title("Boyle's Law: $pV = \mathrm{const.}$")
axs[1].grid(True)
# Plot 3: Charles's Law
axs[2].plot(T_charles, V_charles, color='red')
axs[2].set_xlabel("Temperature $T$ [K]")
axs[2].set_ylabel("Volume $V$ [a.u.]")
axs[2].set_title("Charles's Law: $V/T = \mathrm{const.}$")
axs[2].grid(True)
plt.tight_layout()
plt.show()
🔹 1. 反応熱とは?
- 化学反応によって出入りする熱量。
- 通常、1molあたりの単位(kJ/mol)で表記。
- 発熱反応:熱を放出(Q > 0)
- 吸熱反応:熱を吸収(Q < 0)
🔹 2. エンタルピー(H)と反応エンタルピー(ΔH)
- エンタルピー(H):物質が持つ全熱エネルギー(一定圧下)
- 反応エンタルピー(ΔH):生成物と反応物のエンタルピー差
$\Delta H = \text{生成物のエンタルピーの和} - \text{反応物のエンタルピーの和}$
✅ 発熱反応:
- ΔH < 0
- 例:CH₄ + 2O₂ → CO₂ + 2H₂O Q = 891kJ/mol → ΔH = -891kJ/mol
✅ 吸熱反応:
- ΔH > 0
- 例:C + H₂O → CO + H₂ Q = -131kJ/mol → ΔH = 131kJ/mol
🔹 3. エンタルピー図の描き方
- エンタルピーの大小は 図の上下位置 で表現。
- 発熱反応:反応物が上、生成物が下(矢印は下向き)
- 吸熱反応:反応物が下、生成物が上(矢印は上向き)
🔹 4. 反応熱と反応エンタルピーの違い
種類 | 反応熱 Q | 反応エンタルピー ΔH |
---|---|---|
発熱反応 | Q > 0 | ΔH < 0 |
吸熱反応 | Q < 0 | ΔH > 0 |
- Q は外界のエネルギー変化、ΔH は反応系のエネルギー変化を表す。
🔹 5. 熱化学反応式の書き方
- 着目する物質の係数を1とする。
- 各物質の**状態(固/液/気/水溶液)**を明記。
- ΔH を式末尾に記載(符号に注意)
例:
$\mathrm{H_2(g) + \frac{1}{2}O_2(g) \rightarrow H_2O(l)} \quad \Delta H = -286 \text{ kJ}$
🔹 6. 反応エンタルピーの種類
種類 | 定義 | 例 |
---|---|---|
燃焼エンタルピー | 1mol の物質が完全燃焼したときの発熱量 | C(黒鉛)+O₂ → CO₂ |
生成エンタルピー | 単体から1mol の化合物が生成するときの熱量 | H₂ + ½O₂ → H₂O(液) |
溶解エンタルピー | 1mol の物質が大量の水に溶けるときの熱量 | NaOH(固) → NaOH(aq) |
中和エンタルピー | 酸塩基中和で 1mol の水が生成する際の熱量 | NaOH + HCl → NaCl + H₂O |
蒸発エンタルピー | 液体 → 気体 で吸収される熱 | H₂O(液) → H₂O(気) |
融解エンタルピー | 固体 → 液体 | H₂O(固) → H₂O(液) |
昇華エンタルピー | 固体 → 気体 | H₂O(固) → H₂O(気) |
🔹 7. 熱量の計算(比熱を用いる)
$Q = m \cdot c \cdot \Delta T$
- Q:熱量(J)
- m:質量(g)
- c:比熱(J/g·K)
- ΔT:温度変化(K)
🔹 1. 溶解エンタルピーと反応熱の実験(p.160)
✅ 実験概要:
-
NaOH(固体)2.0g を 水48g に溶解したときの温度変化を観測。
-
熱量計による測定で 比熱c = 4.2 J/g·K を用い、熱量を計算。
-
実験式:
$$
Q = mc\Delta T = (48+2) \cdot 4.2 \cdot (35 - 25) = 2100 , \text{J}
$$
✅ 溶解エンタルピーの求め方:
-
反応に使った NaOH の量:2.0g、モル質量:40 g/mol
-
したがって反応物質は 0.05 mol
-
溶解エンタルピー:
$$
\Delta H = -\frac{Q}{n} = -\frac{2.1, \text{kJ}}{0.05, \text{mol}} = -42, \text{kJ/mol}
$$
🔹 2. 光エネルギーと光化学反応(p.168–170)
✅ 光のエネルギー:
-
アインシュタインの光量子仮説に基づく。
-
光のエネルギーは振動数νに比例し、式:
$$
E = h\nu
$$ -
プランク定数: $h = 6.626 \times 10^{-34} , \text{J·s}$
✅ 波長とエネルギー:
- 光速 $c = \lambda \nu$ より、波長が短いほどエネルギーが大きくなる。
- 紫外線・X線などは波長が短く、エネルギーが高い(化学反応を引き起こしやすい)
🔹 3. 光化学反応:
-
光が原因で化学変化が起こる反応
-
例:
- 光電効果:光が当たると電子が飛び出す
- 光合成
- 蛍光・生物発光
🔹 4. 格子エンタルピーとボルン・ハーバーサイクル(p.167)
✅ 格子エンタルピー:
-
イオン結晶が気体のイオンに分かれるときの吸収エネルギー。
-
例:NaCl の場合、
$$
\mathrm{NaCl (s)} \rightarrow \mathrm{Na^+ (g)} + \mathrm{Cl^- (g)} \quad \Delta H_L
$$
✅ ボルン・ハーバーサイクル:
- 格子エンタルピーは直接測定困難のため、以下のような段階で間接計算:
変化 | ΔH(kJ/mol) |
---|---|
Na → Na⁺(気)+ e⁻(気) | +502 |
Cl₂ → 2Cl(気) | +244 |
Cl(気)+ e⁻ → Cl⁻(気) | −349 |
Na⁺(気)+ Cl⁻(気) → NaCl(固) | −788 |
- 合計から格子エンタルピー ΔH_L を算出。
# Program Name: chemistry_energy_module.py
# Creation Date: 20250604
# Overview: Calculate dissolution enthalpy, photon energy, and simulate Born-Haber Cycle
# Usage: Run in Python environment with matplotlib and numpy installed
# -------------------- Install Required Libraries --------------------
!pip install matplotlib numpy
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Parameters (一元管理) --------------------
# 1. 溶解エンタルピー / Dissolution enthalpy
mass_water = 48.0 # 水の質量 [g]
mass_NaOH = 2.0 # NaOHの質量 [g]
specific_heat = 4.2 # 比熱 [J/g·K]
delta_T = 10.0 # 温度変化 [K]
molar_mass_NaOH = 40.0 # NaOHのモル質量 [g/mol]
# 2. 光エネルギー / Photon energy
planck_constant = 6.626e-34 # プランク定数 [J·s]
speed_of_light = 3.00e8 # 光速 [m/s]
wavelength_nm = 589 # 波長 [nm]
wavelength_m = wavelength_nm * 1e-9 # 波長 [m]
# 3. ボルン・ハーバーサイクル / Born-Haber Cycle
deltaH_ionization = 502 # Na のイオン化エネルギー [kJ/mol]
deltaH_dissociation = 244 # Cl2 の解離エネルギー [kJ/mol]
deltaH_ea = -349 # Cl の電子親和力 [kJ/mol]
deltaH_formation = -788 # NaCl の生成エンタルピー [kJ/mol]
# -------------------- 1. 溶解エンタルピーの計算 --------------------
total_mass = mass_water + mass_NaOH
Q_joule = total_mass * specific_heat * delta_T # 発生熱量 [J]
Q_kJ = Q_joule / 1000 # 発生熱量 [kJ]
mol_NaOH = mass_NaOH / molar_mass_NaOH
deltaH_dissolution = -Q_kJ / mol_NaOH # 溶解エンタルピー [kJ/mol]
print(f"[Dissolution Enthalpy] ΔH = {deltaH_dissolution:.2f} kJ/mol")
# -------------------- 2. 光エネルギーの計算 --------------------
frequency = speed_of_light / wavelength_m
energy_photon = planck_constant * frequency # [J]
energy_eV = energy_photon / 1.602e-19 # 電子ボルトへ換算
print(f"[Photon Energy] E = {energy_photon:.2e} J ≈ {energy_eV:.2f} eV")
# -------------------- 3. 格子エンタルピーの計算 --------------------
# ΔH_L = ΔH_f - (ΔH_ion + ΔH_dissociation/2 + ΔH_ea)
deltaH_lattice = deltaH_formation - (deltaH_ionization + deltaH_dissociation/2 + deltaH_ea)
print(f"[Lattice Enthalpy] ΔH_L = {deltaH_lattice:.1f} kJ/mol")
# -------------------- 3. 格子エンタルピーの図解 --------------------
# 棒グラフで各エネルギー変化を可視化 / Visualize Born-Haber cycle
labels = ["Ionization", "Dissociation/2", "Electron Affinity", "Formation", "Lattice"]
values = [deltaH_ionization, deltaH_dissociation/2, deltaH_ea, deltaH_formation, deltaH_lattice]
plt.figure(figsize=(8, 4))
bars = plt.bar(labels, values, color=["orange", "skyblue", "green", "gray", "red"])
plt.title("Born-Haber Cycle Energy Contributions")
plt.ylabel("ΔH [kJ/mol]")
plt.axhline(0, color='black', linewidth=1)
for bar in bars:
yval = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2.0, yval, f'{yval:.0f}', ha='center', va='bottom')
plt.tight_layout()
plt.show()
🔹 1. 反応速度と濃度変化
✅ 反応速度の定義:
-
単位時間あたりの濃度変化で定義
-
反応物の減少量または生成物の増加量に基づく
-
一般式:
$$
v = -\frac{\Delta [A]}{\Delta t}
$$
🔹 2. 活性化エネルギーと反応進行
✅ 活性化エネルギー $E_a$:
-
反応物が反応するために必要な最小のエネルギー
-
反応は以下のようなエネルギー障壁を越えて進行:
$$
\text{H}_2 + \text{I}_2 \rightarrow 2\text{HI}
$$ -
図の通り、活性化状態(遷移状態)を経由
🔹 3. 温度と反応速度
✅ アレニウスの式:
-
反応速度定数 $k$ と温度 $T$ の関係:
$$
k = A e^{-E_a / RT}
$$ -
温度が10K上がると、$k$ は2〜4倍に増加する傾向
🔹 4. 濃度変化と反応速度式
✅ 一次反応:
-
反応速度は $[A]$ に比例:
$$
-\frac{d[A]}{dt} = k[A]
$$ -
解いた式(濃度と時間の関係):
$$
[A] = [A]_0 e^{-kt}
$$ -
半減期($\tau$):
$$
\tau = \frac{0.693}{k}
$$
🔹 Python合体コード
# Program Name: reaction_kinetics_simulator.py
# Creation Date: 20250604
# Overview: Simulate reaction rate, activation energy effect, and first-order kinetics
# Usage: Run in Python environment with matplotlib and numpy installed
# -------------------- Install Required Libraries --------------------
!pip install numpy matplotlib
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Parameters (一元管理) --------------------
# 一次反応モデルパラメータ / Parameters for first-order reaction
A0 = 1.0 # 初期濃度 [mol/L] / Initial concentration
k = 0.231 # 反応速度定数 [1/min] / Rate constant
time = np.linspace(0, 30, 100) # 時間 [min] / Time range
# アレニウス式用パラメータ / Parameters for Arrhenius equation
Ea = 50e3 # 活性化エネルギー [J/mol] / Activation energy
R = 8.314 # 気体定数 [J/mol·K] / Gas constant
A_factor = 1e12 # 周期因子 A / Frequency factor
T_range = np.linspace(270, 350, 100) # 温度範囲 [K] / Temperature range
# -------------------- 1. 濃度と時間の関係 / First-order kinetics --------------------
A_conc = A0 * np.exp(-k * time) # [A] = [A]_0 * e^(-kt)
half_life = 0.693 / k # 半減期 [min] / Half-life
# -------------------- 2. アレニウス式による速度定数の計算 / Arrhenius Equation --------------------
k_T = A_factor * np.exp(-Ea / (R * T_range)) # k(T) = A * exp(-Ea / RT)
# -------------------- 3. グラフ描画 / Plotting --------------------
# (1) 一次反応の濃度変化 / First-order concentration vs time
plt.figure(figsize=(6, 4))
plt.plot(time, A_conc, label='[A] over time')
plt.axhline(y=A0/2, color='r', linestyle='--', label=f'Half-life ≈ {half_life:.2f} min')
plt.title("First-order Reaction: Concentration vs Time")
plt.xlabel("Time [min]")
plt.ylabel("Concentration [mol/L]")
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
# (2) アレニウスプロット / Arrhenius Plot
plt.figure(figsize=(6, 4))
plt.plot(1/T_range, np.log(k_T))
plt.title("Arrhenius Plot: ln(k) vs 1/T")
plt.xlabel("1 / Temperature [1/K]")
plt.ylabel("ln(k)")
plt.grid(True)
plt.tight_layout()
plt.show()
🔹 1. 温度と化学平衡の移動(ルシャトリエの原理)
▶ 解説:
可逆反応:
$$
\mathrm{N_2O_4(g)} \rightleftharpoons 2\mathrm{NO_2(g)} \quad \Delta H = +57, \text{kJ/mol}
$$
この反応は吸熱反応です。
したがって、温度を上げると正反応(NO₂生成)が進む、温度を下げると逆反応(N₂O₄生成)が進むと予測されます。
これは「ルシャトリエの原理」に従っており、平衡状態が変化に対抗するように移動します。
🔹 2. 平衡定数と温度の関係(ファン・ホッフの式)
平衡定数 $K$ の温度依存性は、次の式で表されます:
$$
\ln K = -\frac{\Delta H^\circ}{R} \cdot \frac{1}{T} + \frac{\Delta S^\circ}{R}
$$
これは直線の形:
- 横軸: $\frac{1}{T}$
- 縦軸: $\ln K$
- 傾き: $-\frac{\Delta H^\circ}{R}$
よって、吸熱反応では温度上昇とともに K が増加します。
🔹 3. アレニウス式と活性化エネルギー
反応速度定数 $k$ は以下で表されます:
$$
k = A \cdot e^{-E_a / RT}
\quad \Rightarrow \quad \ln k = -\frac{E_a}{R} \cdot \frac{1}{T} + \ln A
$$
この式を使うと、$\ln k$ と $1/T$ の直線の傾きから $E_a$(活性化エネルギー)を求められます。
🔹 Pythonコードの詳細解説
✅ ① アレニウスプロット(Arrhenius Plot)
inv_T = 1 / T_data
ln_k = np.log(k_data)
slope, intercept = np.polyfit(inv_T, ln_k, 1)
Ea = -slope * R
- $\ln k$ と $1/T$ の線形回帰を実施
- 傾きから $E_a = -R \cdot \text{slope}$ を求める
例:
傾きが −13200 のとき
$$
E_a = -(-13200) \cdot 8.314 = 109,737, \text{J/mol} ≒ 110, \text{kJ/mol}
$$
✅ ② 平衡定数 $K$ と温度のグラフ
K_values = np.exp(-delta_H / (R * T_range))
- ここでは $\Delta S^\circ$ を省略し、単純な吸熱反応として傾向を見ている
- 温度が高くなると $K$ は増加
グラフ形状は滑らかに上昇し、吸熱反応であることが視覚的に分かります。
✅ 出力グラフの意味
(1) アレニウスプロット
- 傾きから活性化エネルギーを求める
- 化学実験で得られた $k$ のデータが正しいか評価できる
(2) 平衡定数と温度の関係
- 発熱反応なら K は温度低下で増加、吸熱反応なら温度上昇で増加
- 工業反応の最適温度制御(例:アンモニア合成)に応用される
🔚 総まとめ
項目 | 数式・法則 | 物理的意味 |
---|---|---|
反応速度定数 $k$ | $k = Ae^{-E_a/RT}$ | 活性化エネルギーが低いほど反応しやすい |
平衡定数 $K$ | $\ln K = -\frac{\Delta H}{R} \cdot \frac{1}{T} + \cdots$ | 吸熱なら温度上昇で $K$ 増加 |
ルシャトリエの原理 | (直感的ルール) | 外的変化に逆らって平衡が動く |
アレニウスプロット | 傾き $= -E_a/R$ | 実験から反応の活性化エネルギーを定量評価可能 |
# Program Name: equilibrium_arrhenius_analysis.py
# Creation Date: 20250604
# Overview: Analyze temperature dependence of equilibrium and reaction rate via Arrhenius and van't Hoff equations
# Usage: Run in Python environment with numpy and matplotlib installed
# -------------------- Install Required Libraries --------------------
!pip install numpy matplotlib
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Parameters (一元管理) --------------------
R = 8.314 # 気体定数 / Gas constant [J/mol·K]
# --- ① アレニウスデータ / Arrhenius data ---
T_data = np.array([308, 318, 328, 338]) # 温度 [K]
k_data = np.array([1.35e-4, 4.98e-4, 1.32e-3, 3.25e-3]) # 速度定数 [1/s]
# --- ② 平衡定数と温度依存(ΔS省略)/ Equilibrium (only ΔH dependent) ---
delta_H = 57e3 # 吸熱反応 ΔH [J/mol]
T_range = np.linspace(270, 400, 100) # 温度 [K]
K_values = np.exp(-delta_H / (R * T_range)) # lnK ~ -ΔH/RT の傾向のみ
# -------------------- 1. アレニウスプロット --------------------
inv_T = 1 / T_data # 逆温度 [1/K]
ln_k = np.log(k_data) # ln(k) の計算
slope, intercept = np.polyfit(inv_T, ln_k, 1) # 線形回帰 / linear regression
Ea = -slope * R # 活性化エネルギー Eₐ [J/mol]
# -------------------- 2. グラフ描画 --------------------
# (1) アレニウスプロット:反応速度定数と温度
plt.figure(figsize=(6, 4))
plt.plot(inv_T, ln_k, 'o', label='Data: ln(k)')
plt.plot(inv_T, slope * inv_T + intercept, '-', label=f'Fit: Ea = {Ea/1000:.2f} kJ/mol')
plt.title("Arrhenius Plot: ln(k) vs 1/T")
plt.xlabel("1 / Temperature [1/K]")
plt.ylabel("ln(k)")
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
# (2) 平衡定数と温度の関係(吸熱反応)
plt.figure(figsize=(6, 4))
plt.plot(T_range, K_values)
plt.title("Equilibrium Constant vs Temperature (ΔH > 0)")
plt.xlabel("Temperature [K]")
plt.ylabel("Equilibrium Constant K (relative)")
plt.grid(True)
plt.tight_layout()
plt.show()
# -------------------- 結果表示 / Summary --------------------
print(f"Activation Energy (Eₐ) from Arrhenius fit: {Ea/1000:.2f} kJ/mol")
print("K increases with temperature (endothermic reaction) as expected from van't Hoff equation.")
🔹 1. 温度と平衡の移動
✅ 反応:
$$
2\mathrm{NO_2}(g) \rightleftharpoons \mathrm{N_2O_4}(g) \quad \Delta H = -57, \mathrm{kJ/mol}
$$
- 発熱反応:生成側(右)に熱があると考える。
- 温度上昇:逆反応(NO₂増加)進行、色が濃くなる。
- 温度低下:正反応(N₂O₄生成)進行、色が薄くなる。
- 図解(冷却・加熱のフラスコ):ルシャトリエの原理の視覚例。
✅ 平衡定数 $K$ と温度の関係(グラフ図6):
- 発熱反応では温度上昇 → $K$ 減少。
- 吸熱反応では温度上昇 → $K$ 増加。
🔹 2. 触媒と化学平衡
✅ 要点:
-
触媒は「平衡の位置には影響しない」。
-
ただし、到達までの時間を短縮する
$$
\mathrm{N_2} + 3\mathrm{H_2} \rightleftharpoons 2\mathrm{NH_3} \quad \Delta H = -92, \mathrm{kJ/mol}
$$ -
発熱反応・体積減少の例。
-
よって、低温・高圧で収率が向上(ただし温度が低すぎると反応速度が遅くなる)。
-
グラフ(図8・図9)で:
- 圧力↑ → 平衡濃度↑(体積の減る方向)
- 温度↑ → 平衡濃度↓(発熱反応)
🔹 4. pHと水素イオン濃度
✅ 定義:
$$
\mathrm{pH} = -\log_{10}[\mathrm{H^+}]
\quad \text{または} \quad
\mathrm{pOH} = -\log_{10}[\mathrm{OH^-}]
$$
- $\mathrm{pH + pOH = 14}$(25℃時)
- 弱酸・強酸のpH計算には電離度を考慮(例題参照)
🔹 5. ギブズエネルギーと平衡
✅ ギブズ自由エネルギーの変化:
$$
\Delta G = \Delta H - T\Delta S
$$
- $\Delta G < 0$ → 自発的反応
- $\Delta G = 0$ → 平衡状態
- $\Delta G > 0$ → 非自発的反応
✅ 標準ギブズエネルギーと平衡定数の関係:
$$
\Delta G^\circ = -RT \ln K
\quad \Rightarrow \quad
K = e^{-\Delta G^\circ / RT}
$$
✅ 実際の例:NO₂とN₂O₄の混合系(グラフ参照)
- $\Delta G$ と反応進行度 $\xi$ の関係式とグラフ。
- 極小値がギブズエネルギー最小=平衡点
🔚 総まとめ:化学平衡に関わる熱力学関係
概念 | 数式 | 意味・ポイント |
---|---|---|
ルシャトリエ原理 | – | 外的変化に反応して平衡が移動 |
ファン・ホッフの式 | $\ln K = -\frac{\Delta H}{RT} + \frac{\Delta S}{R}$ | $K$ と温度の関係を記述 |
アレニウス式 | $k = Ae^{-E_a / RT}$ | 反応速度と温度の関係 |
ギブズ自由エネルギー | $\Delta G = \Delta H - T\Delta S$ | 自発性の判定、熱力学の基本式 |
平衡とギブズエネルギー | $\Delta G^\circ = -RT \ln K$ | 平衡定数とエネルギーの関係 |
# Program Name: chemical_equilibrium_thermodynamics.py
# Creation Date: 20250604
# Overview: Simulate temperature effects on equilibrium (K), Gibbs free energy (ΔG), and pH
# Usage: Run in Python environment with matplotlib and numpy installed
# -------------------- Install Required Libraries --------------------
!pip install numpy matplotlib
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Parameters (一元管理) --------------------
R = 8.314 # 気体定数 [J/mol·K]
# --- 1. 平衡定数 K と温度の関係 (van't Hoff) ---
delta_H_exo = -57e3 # 発熱反応 ΔH [J/mol]
delta_S = -175 # 仮定値: ΔS [J/mol·K](エントロピー減少)
T_range = np.linspace(250, 500, 200) # 温度範囲 [K]
ln_K = -(delta_H_exo / R) * (1 / T_range) + (delta_S / R)
K = np.exp(ln_K)
# --- 2. ギブズ自由エネルギーと K の関係 ---
delta_G0 = -R * T_range * ln_K # ΔG° = -RT lnK
# --- 3. pHと[H⁺]の対応(25℃、強酸の例) ---
H_conc = np.logspace(-1, -14, 100) # [H⁺] from 0.1 to 1e-14 mol/L
pH = -np.log10(H_conc)
# -------------------- グラフ描画 --------------------
# (1) 平衡定数 vs 温度
plt.figure(figsize=(6, 4))
plt.plot(T_range, K)
plt.title("Equilibrium Constant K vs Temperature (Exothermic)")
plt.xlabel("Temperature [K]")
plt.ylabel("Equilibrium Constant K")
plt.grid(True)
plt.tight_layout()
plt.show()
# (2) 標準ギブズエネルギー vs 温度
plt.figure(figsize=(6, 4))
plt.plot(T_range, delta_G0 / 1000) # 単位:kJ/mol に変換
plt.title("Standard Gibbs Free Energy ΔG° vs Temperature")
plt.xlabel("Temperature [K]")
plt.ylabel("ΔG° [kJ/mol]")
plt.axhline(0, color='red', linestyle='--', label='ΔG° = 0 (Equilibrium)')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
# (3) pH vs [H⁺](対数目盛で)
plt.figure(figsize=(6, 4))
plt.semilogx(H_conc, pH)
plt.title("pH vs [H⁺] Concentration")
plt.xlabel("[H⁺] [mol/L]")
plt.ylabel("pH")
plt.grid(True, which='both')
plt.tight_layout()
plt.show()
# -------------------- 結果表示 --------------------
print(f"🔹 ΔH = {delta_H_exo/1000:.1f} kJ/mol (Exothermic reaction)")
print("🔹 As temperature increases:")
print("- K decreases (expected for exothermic)")
print("- ΔG° becomes less negative → equilibrium shifts")
print("🔹 pH graph shows logarithmic inverse relationship with [H⁺]")
🔹 1. 弱酸の電離度と電離平衡
✅ 電離平衡式:
例:酢酸
$$
\mathrm{CH_3COOH} \rightleftharpoons \mathrm{CH_3COO^-} + \mathrm{H^+}
$$
電離定数(酸解離定数):
$$
K_a = \frac{[\mathrm{CH_3COO^-}][\mathrm{H^+}]}{[\mathrm{CH_3COOH}]}
$$
✅ 電離度 $\alpha$ の定義と関係式:
$$
\alpha = \frac{\text{電離した物質量}}{\text{初濃度}} \quad \text{より:}
\quad K_a = c\alpha^2 \Rightarrow \alpha = \sqrt{\frac{K_a}{c}}
$$
✅ 解釈:
- 濃度 $c \uparrow$ → 電離度 $\alpha \downarrow$
- 弱酸の濃度を増やすと電離が抑制される(図13:酢酸の濃度と電離度)
🔹 2. 電離度とpHの関係
$$
[\mathrm{H^+}] = c \cdot \alpha \Rightarrow
\mathrm{pH} = -\log_{10}(c \alpha)
$$
または:
$$
\mathrm{pH} = -\log_{10} \sqrt{K_a \cdot c}
= -\frac{1}{2} \log_{10}(K_a \cdot c)
$$
🔹 3. 標準ギブズエネルギーと平衡定数
✅ 関係式:
$$
\Delta G^\circ = -RT \ln K
\Rightarrow K = \exp\left(-\frac{\Delta G^\circ}{RT}\right)
$$
→ 熱力学的に「反応がどれだけ進むか」を支配
→ $\Delta G^\circ < 0$ なら平衡は生成物側に偏る。
🔹 4. 加水分解と塩のpH
✅ 酢酸ナトリウム水溶液(塩基性):
$$
\mathrm{CH_3COO^- + H_2O \rightleftharpoons CH_3COOH + OH^-}
$$
塩の加水分解による pH 式:
$$
[\mathrm{OH^-}] = \sqrt{ \frac{K_w K_b}{c} }
= \sqrt{ \frac{K_w^2}{K_a c} }
\quad \Rightarrow \quad
\mathrm{pH} = 14 + \log_{10} [\mathrm{OH^-}]
$$
🔹 Python合体例:電離度とpHの関係グラフ
# Program Name: weak_acid_equilibrium_analysis.py
# Creation Date: 20250604
# Overview: Analyze the dissociation degree (α), pH, and hydrolysis effect of a weak acid like acetic acid
# Usage: Run in Python environment with matplotlib and numpy installed
# -------------------- Install Required Libraries --------------------
!pip install numpy matplotlib
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Parameters (一元管理) --------------------
Ka = 1.8e-5 # 酢酸の電離定数 Ka [mol/L]
Kw = 1.0e-14 # 水のイオン積 Kw [mol²/L²]
R = 8.314 # 気体定数 [J/mol·K]
T = 298.15 # 温度 [K]
delta_G0 = -28e3 # 仮定: 標準ギブズエネルギー [J/mol](例)
c_vals = np.linspace(0.001, 0.1, 100) # 酢酸の濃度範囲 [mol/L]
# -------------------- 計算 / Calculations --------------------
# (1) 電離度 α
alpha_vals = np.sqrt(Ka / c_vals)
# (2) 水素イオン濃度 [H+]
H_conc = c_vals * alpha_vals
# (3) pH
pH_vals = -np.log10(H_conc)
# (4) ギブズエネルギーとKの関係
K_thermo = np.exp(-delta_G0 / (R * T))
# (5) 酢酸ナトリウムの加水分解による [OH-] と pH
cb_vals = np.linspace(0.01, 0.2, 100) # 酢酸ナトリウム濃度範囲
OH_conc = np.sqrt(Kw**2 / (Ka * cb_vals))
pH_base = 14 + np.log10(OH_conc)
# -------------------- グラフ描画 --------------------
# (1) 電離度 vs 酢酸濃度
plt.figure(figsize=(6, 4))
plt.plot(c_vals, alpha_vals)
plt.title("Dissociation Degree α vs Concentration")
plt.xlabel("Acetic Acid Concentration [mol/L]")
plt.ylabel("Dissociation Degree α")
plt.grid(True)
plt.tight_layout()
plt.show()
# (2) pH vs 酢酸濃度
plt.figure(figsize=(6, 4))
plt.plot(c_vals, pH_vals)
plt.title("pH vs Acetic Acid Concentration")
plt.xlabel("Acetic Acid Concentration [mol/L]")
plt.ylabel("pH")
plt.grid(True)
plt.tight_layout()
plt.show()
# (3) 加水分解による塩基性のpH
plt.figure(figsize=(6, 4))
plt.plot(cb_vals, pH_base)
plt.title("pH of Acetate Solution via Hydrolysis")
plt.xlabel("CH3COONa Concentration [mol/L]")
plt.ylabel("pH (Basic)")
plt.grid(True)
plt.tight_layout()
plt.show()
# -------------------- 結果表示 / Summary --------------------
print(f"Standard Gibbs Free Energy ΔG° = {delta_G0 / 1000:.1f} kJ/mol")
print(f"→ Corresponding Equilibrium Constant K = {K_thermo:.2e}")
🔚 要点まとめ
項目 | 数式・関係 | 意味 |
---|---|---|
酸の電離度 | $\alpha = \sqrt{K_a/c}$ | 弱酸の濃度が上がると電離度は下がる |
電離度と pH | $\mathrm{pH} = -\log_{10}(c \alpha)$ | 濃度と $\alpha$ の積が [H⁺] を決定 |
標準自由エネルギー | $\Delta G^\circ = -RT \ln K$ | 平衡定数とエネルギーの関係 |
加水分解と塩基性 | $[\mathrm{OH^-}] = \sqrt{K_w K_b / c}$ | 弱酸由来の塩は塩基性に傾く |
🔹 1. 自由エネルギー(熱力学)
✅ ヘルムホルツ自由エネルギー(F):
$$
F = U - TS
$$
等温・等積での最大仕事能力。微分形は:
$$
dF = -S dT - p dV + \sum_i \mu_i dN_i
$$
✅ ギブズ自由エネルギー(G):
$$
G = U - TS + pV
$$
等温・等圧過程においての有効な指標。
$$
dG = -S dT + V dp + \sum_i \mu_i dN_i
$$
また、
$$
G = \sum_i \mu_i N_i
$$
✅ 自発変化の判定:
- $\Delta G < 0$:反応は自発的
- $\Delta G = 0$:平衡状態
- $\Delta G > 0$:反応は非自発的
🔹 2. 自由エネルギーと平衡定数の関係
✅ 標準ギブズエネルギーと K の関係:
$$
\Delta G^\circ = -RT \ln K \quad \Rightarrow \quad K = \exp\left(-\frac{\Delta G^\circ}{RT}\right)
$$
🔹 3. Python合体:自由エネルギーと K の可視化
# Program Name: gibbs_energy_equilibrium.py
# Creation Date: 20250604
# Overview: Analyze relationship between Gibbs free energy and equilibrium constant
# Usage: Run in Python environment with numpy and matplotlib
!pip install numpy matplotlib
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Parameters --------------------
R = 8.314 # [J/mol·K] 気体定数
T_vals = np.linspace(250, 600, 200) # 温度範囲 [K]
deltaG0_vals = [-20000, -10000, 0, 10000, 20000] # ΔG°の例(J/mol)
# -------------------- Plot ln(K) vs 1/T --------------------
plt.figure(figsize=(6, 4))
for deltaG0 in deltaG0_vals:
K = np.exp(-deltaG0 / (R * T_vals))
plt.plot(T_vals, K, label=f'ΔG°={deltaG0/1000:.0f} kJ/mol')
plt.yscale('log')
plt.xlabel("Temperature [K]")
plt.ylabel("Equilibrium Constant K")
plt.title("Equilibrium Constant vs Temperature")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
🔹 4. ネルンスト式(酸化還元反応)
✅ 基本式:
$$
E = E^\circ + \frac{RT}{zF} \ln \frac{a_\mathrm{Ox}}{a_\mathrm{Red}}
$$
- $E^\circ$:標準電極電位
- $z$:電子の数
- $F$:ファラデー定数(96,485 C/mol)
✅ 常温換算(25℃):
$$
E = E^\circ + \frac{0.0592}{z} \log_{10} \frac{[Ox]}{[Red]}
$$
🔹 5. Python合体:ネルンスト式の電位変化の可視化
# Program Name: nernst_equation_plot.py
# Overview: Visualize redox potential vs concentration using Nernst equation
F = 96485 # C/mol
z = 1 # 電子数
T = 298.15 # K
R = 8.314
E0 = 0.34 # 例: 銅の標準電極電位 [V]
# 濃度範囲
ox_conc = np.logspace(-6, 0, 100)
red_conc = 1 # 還元体濃度固定
E_vals = E0 + (R*T)/(z*F) * np.log(ox_conc / red_conc)
plt.figure(figsize=(6, 4))
plt.plot(ox_conc, E_vals)
plt.xscale('log')
plt.xlabel('[Ox] (mol/L)')
plt.ylabel('Electrode Potential E (V)')
plt.title("Nernst Equation: Electrode Potential vs [Ox]")
plt.grid(True)
plt.tight_layout()
plt.show()
🔹 6. イオン化傾向と自由エネルギーの関係
✅ 自由エネルギーとの関係式:
$$
\Delta_f G^\circ = -zFE^\circ
$$
- $E^\circ$:標準酸化還元電位(V)
- $F$:ファラデー定数(C/mol)
- $z$:電子数
🔹 7. Python合体:イオン化傾向の可視化
# Program Name: ionization_tendency_plot.py
# Overview: Visualize ionization tendency from standard potential data
import matplotlib.pyplot as plt
# 簡略データ(電位小さいほどイオン化傾向大)
metals = ['Li', 'K', 'Ca', 'Na', 'Mg', 'Zn', 'Fe', 'Cu', 'Ag', 'Au']
E0_vals = [-3.05, -2.93, -2.84, -2.71, -2.36, -0.76, -0.44, 0.34, 0.80, 1.52]
plt.figure(figsize=(8, 4))
plt.bar(metals, E0_vals)
plt.axhline(0, color='gray', linestyle='--')
plt.ylabel("Standard Electrode Potential (V)")
plt.title("Ionization Tendency (Lower E° = More Reactive)")
plt.grid(True, axis='y')
plt.tight_layout()
plt.show()
🔚 総まとめ:数理関係・指標一覧
指標・式 | 意味 |
---|---|
$G = U - TS + pV$ | ギブズ自由エネルギー(等温等圧) |
$\Delta G^\circ = -RT \ln K$ | 平衡定数と自由エネルギーの関係 |
$E = E^\circ + \frac{RT}{zF} \ln \frac{[Ox]}{[Red]}$ | ネルンスト式 |
$\Delta_f G^\circ = -zFE^\circ$ | 標準生成ギブズエネルギーと電極電位 |
$K = \exp\left(-\frac{\Delta G^\circ}{RT}\right)$ | 反応進行度(自発性・平衡傾向) |
# Program Name: thermo_energy_equilibrium_visualizer.py
# Creation Date: 20250604
# Overview: Integrate Gibbs Free Energy, Equilibrium Constant, Nernst Equation, and Ionization Tendency visualization
# Usage: Run in Python environment with required libraries installed
# -------------------- Install Required Libraries --------------------
!pip install numpy matplotlib
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Parameter Settings / パラメータの一元管理 --------------------
R = 8.314 # [J/mol·K] 気体定数 / Gas constant
F = 96485 # [C/mol] ファラデー定数 / Faraday constant
z = 1 # 電子数 / Number of electrons
T_min, T_max = 250, 600 # 温度範囲 / Temperature range [K]
T_vals = np.linspace(T_min, T_max, 200)
deltaG0_vals = [-20000, -10000, 0, 10000, 20000] # ΔG°の例 / Sample standard Gibbs energies [J/mol]
T_Nernst = 298.15 # ネルンスト式用温度 / Temperature for Nernst equation [K]
E0_sample = 0.34 # 銅の標準電極電位 / Sample standard potential [V]
ox_conc = np.logspace(-6, 0, 100) # 酸化体濃度 / Oxidant concentration
red_conc = 1 # 還元体濃度 / Reductant concentration
# 電極電位データ(イオン化傾向)/ Ionization tendency data
metals = ['Li', 'K', 'Ca', 'Na', 'Mg', 'Zn', 'Fe', 'Cu', 'Ag', 'Au']
E0_metals = [-3.05, -2.93, -2.84, -2.71, -2.36, -0.76, -0.44, 0.34, 0.80, 1.52]
# -------------------- Plot 1: Equilibrium Constant vs Temperature --------------------
# 自由エネルギーと平衡定数の関係を描画 / Plot ΔG° vs K(T)
plt.figure(figsize=(6, 4))
for deltaG0 in deltaG0_vals:
K = np.exp(-deltaG0 / (R * T_vals)) # 平衡定数 K の計算
plt.plot(T_vals, K, label=f'ΔG°={deltaG0/1000:.0f} kJ/mol')
plt.yscale('log')
plt.xlabel("Temperature [K]")
plt.ylabel("Equilibrium Constant K")
plt.title("Equilibrium Constant vs Temperature")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
# -------------------- Plot 2: Nernst Equation: Electrode Potential vs [Ox] --------------------
# ネルンスト式により電位変化を描画 / Nernst equation potential vs oxidant concentration
E_vals = E0_sample + (R * T_Nernst) / (z * F) * np.log(ox_conc / red_conc)
plt.figure(figsize=(6, 4))
plt.plot(ox_conc, E_vals)
plt.xscale('log')
plt.xlabel('[Ox] (mol/L)')
plt.ylabel('Electrode Potential E (V)')
plt.title("Nernst Equation: Electrode Potential vs [Ox]")
plt.grid(True)
plt.tight_layout()
plt.show()
# -------------------- Plot 3: Ionization Tendency --------------------
# 標準電極電位に基づくイオン化傾向を棒グラフで可視化 / Ionization tendency by standard potential
plt.figure(figsize=(8, 4))
plt.bar(metals, E0_metals)
plt.axhline(0, color='gray', linestyle='--')
plt.ylabel("Standard Electrode Potential (V)")
plt.title("Ionization Tendency (Lower E° = More Reactive)")
plt.grid(True, axis='y')
plt.tight_layout()
plt.show()
🔷 反応速度の基礎と応用の徹底解説
🔹 1. 反応速度とは何か?
✅ 基本定義:
化学反応において、ある物質の濃度変化を単位時間あたりで測定したものが「反応速度」である。
-
生成物の反応速度:
$$
v = \frac{[\text{生成物}]_2 - [\text{生成物}]_1}{t_2 - t_1}
$$ -
反応物の反応速度(負符号を付ける):
$$
v = -\frac{[\text{反応物}]_2 - [\text{反応物}]_1}{t_2 - t_1}
$$
✅ 平均反応速度と瞬間反応速度:
- 平均反応速度は区間ごとの濃度変化で定義される。
- 瞬間反応速度は濃度-時間グラフの接線の傾きとして定義される。
🔹 2. 反応速度の係数比と速度比
✅ 例:$2A \rightarrow B + C$
反応式の係数に基づいて、反応速度の関係は次のようになる:
$$
v = \frac{1}{2} v_A = v_B = v_C
$$
反応速度の絶対値の比は反応式の係数と一致する。
🔹 3. 反応速度計算の具体例(H₂O₂の分解)
✅ 反応式:
$$
2H_2O_2 \rightarrow 2H_2O + O_2
$$
与えられた時間と濃度データを用いて反応速度を算出:
時間間隔 [s] | 平均分解速度 $v$ [mol/(L·s)] |
---|---|
0–20 | $9.0 \times 10^{-3}$ |
20–40 | $5.4 \times 10^{-3}$ |
40–60 | $3.24 \times 10^{-3}$ |
60–80 | $1.95 \times 10^{-3}$ |
✅ O₂の生成量(0–60秒):
$$
\Delta[H_2O_2] = 0.450 - 0.0972 = 0.3528 , \text{mol/L}
$$
反応液体積10 mL = 0.010 Lより:
$$
\Delta n_{H_2O_2} = 0.3528 \times 0.010 = 3.528 \times 10^{-3} , \text{mol}
$$
反応比 2:1 より:
$$
n_{O_2} = \frac{1}{2} \times 3.528 \times 10^{-3} = \boxed{1.76 \times 10^{-3} , \text{mol}}
$$
🔹 4. 反応速度式と実験による決定
✅ 一般式:
$$
v = k[A]^x[B]^y[C]^z
$$
反応速度は化学反応式の係数からは決まらず、実験によって求められる。
✅ 実験結果からの次数判定:
実験 | [A] | [B] | [C] | v [mol/(L·s)] |
---|---|---|---|---|
1 | 0.15 | 0.20 | 0.50 | $2.0 \times 10^{-3}$ |
2 | 0.30 | 0.20 | 0.50 | $8.0 \times 10^{-3}$ |
3 | 0.15 | 0.40 | 0.50 | $4.0 \times 10^{-3}$ |
4 | 0.30 | 0.20 | 1.50 | $2.4 \times 10^{-2}$ |
- $x = 2$:[A]の濃度2倍で速度4倍(実験1→2)
- $y = 1$:[B]の濃度2倍で速度2倍(実験1→3)
- $z = 1$:[C]の濃度3倍で速度3倍(実験2→4)
ゆえに:
$$
v = k[A]^2[B][C]
$$
✅ 速度定数の計算:
実験1より:
$$
k = \frac{2.0 \times 10^{-3}}{(0.15)^2 \cdot 0.20 \cdot 0.50} \approx \boxed{0.89 , \text{L}^3/(\text{mol}^3 \cdot \text{s})}
$$
🔹 5. 反応速度を高める条件
要因 | 説明 |
---|---|
① 濃度 | 濃度↑ → 衝突頻度↑ → 速度↑ |
② 温度 | 温度↑ → 運動エネルギー↑ → 活性化エネルギー超え粒子↑ |
③ 触媒 | 活性化エネルギーを低下させる |
④ 表面積 | 粉末化などにより接触面増加 → 衝突頻度↑ |
🔚 まとめ:反応速度の重要ポイント
- 反応速度は 濃度の時間変化で定義される。
- 反応速度式は 実験的に求める。
- 反応速度を変える主な因子は 濃度・温度・触媒・表面積。
- グラフの接線の傾きは瞬間の反応速度を示す。
# Program Name: reaction_rate_analysis.py
# Creation Date: 20250604
# Overview: Analyze average reaction rates, calculate O2 production, and visualize concentration-time and rate-time relationships
# Usage: Run in Python environment with numpy and matplotlib installed
# -------------------- Install Required Libraries --------------------
!pip install numpy matplotlib
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Parameters --------------------
time_sec = np.array([0, 20, 40, 60, 80]) # 時間 [s] / Time points [s]
H2O2_conc = np.array([0.450, 0.270, 0.162, 0.0972, 0.0583]) # H2O2濃度 [mol/L] / H2O2 concentration
# -------------------- 反応速度の計算 / Calculate average reaction rate --------------------
# 各時間区間における平均分解速度 [mol/(L·s)]
delta_conc = H2O2_conc[:-1] - H2O2_conc[1:]
delta_time = time_sec[1:] - time_sec[:-1]
rate_avg = delta_conc / delta_time # 平均反応速度 / Average reaction rate
# -------------------- O2生成量の計算 / Calculate O2 amount produced --------------------
vol_L = 0.010 # 溶液体積 [L] / Solution volume
delta_H2O2_total = H2O2_conc[0] - H2O2_conc[3]
mol_H2O2 = delta_H2O2_total * vol_L # 反応したH2O2の物質量 / Reacted amount
mol_O2 = mol_H2O2 * 0.5 # O2生成は2:1の比 / O2 production from stoichiometry
# -------------------- 出力 / Output --------------------
print("平均反応速度 [mol/(L·s)] (Average Reaction Rates):")
for i in range(len(rate_avg)):
print(f" t={time_sec[i]}–{time_sec[i+1]} s: {rate_avg[i]:.3e}")
print(f"\n生成したO₂の物質量 (Produced O₂ amount): {mol_O2:.3e} mol")
# -------------------- グラフ描画 / Plotting --------------------
# (1) 濃度 vs 時間 / Concentration vs Time
plt.figure(figsize=(6, 4))
plt.plot(time_sec, H2O2_conc, marker='o')
plt.xlabel("Time [s]")
plt.ylabel("[H2O2] (mol/L)")
plt.title("H2O2 Concentration vs Time")
plt.grid(True)
plt.tight_layout()
plt.show()
# (2) 平均反応速度 vs 時間中心値 / Rate vs Midpoint of time intervals
time_mid = (time_sec[:-1] + time_sec[1:]) / 2
plt.figure(figsize=(6, 4))
plt.plot(time_mid, rate_avg, marker='s')
plt.xlabel("Time [s]")
plt.ylabel("Average Reaction Rate (mol/(L·s))")
plt.title("Average Reaction Rate over Time Intervals")
plt.grid(True)
plt.tight_layout()
plt.show()
# Program Name: unimolecular_reaction_rate_plot.py
# Creation Date: 20250604
# Overview: Visualize concentration and instantaneous rate for a simple unimolecular reaction A → B
# Usage: Run in Python environment with numpy and matplotlib installed
# -------------------- Install Required Libraries --------------------
!pip install numpy matplotlib
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Parameters / パラメータ設定 --------------------
k = 0.1 # 反応速度定数 [1/min] / Rate constant
A0 = 100 # 初期濃度 [mol/L] / Initial concentration
t = np.linspace(0, 60, 200) # 時間 [min] / Time range
# -------------------- Concentration Over Time / 濃度の時間変化 --------------------
A_t = A0 * np.exp(-k * t) # [A](t) = [A]₀ * exp(-kt)
B_t = A0 - A_t # [B](t) = [B]₀ + [A]₀ - [A](t)
# -------------------- Instantaneous Rate / 瞬間の反応速度(傾き) --------------------
v_inst = -np.gradient(A_t, t) # d[A]/dtの負値(正の値として表示)
# -------------------- Plot 1: [A], [B] vs Time --------------------
plt.figure(figsize=(6, 4))
plt.plot(t, A_t, label='[A] (Reactant)', color='blue')
plt.plot(t, B_t, label='[B] (Product)', color='green')
plt.xlabel("Time [min]")
plt.ylabel("Concentration (mol/L)")
plt.title("Concentration vs Time (A → B)")
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
# -------------------- Plot 2: Instantaneous Rate vs Time --------------------
plt.figure(figsize=(6, 4))
plt.plot(t, v_inst, label='Instantaneous Reaction Rate', color='red')
plt.xlabel("Time [min]")
plt.ylabel("Rate (mol/(L·min))")
plt.title("Instantaneous Reaction Rate (−d[A]/dt)")
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
熱化学方程式の計算
# Program Name: thermochemical_matrix_solver.py
# Creation Date: 20250604
# Overview: Solve enthalpy changes using matrix operations from Hess's Law
# Usage: Run in Python environment with numpy installed
# -------------------- Install Required Libraries --------------------
!pip install numpy
# -------------------- Import Libraries --------------------
import numpy as np
# -------------------- Step 1: 係数行列と反応熱ベクトルを定義 / Define coefficient matrix and enthalpy vector --------------------
# 例:アセチレンの燃焼熱を求める
# 反応 (1): C2H2 + 5/2 O2 → 2CO2 + H2O
# 使用する反応:(2)×a +(3)×b +(4)×c = (1)
# 熱化学式:
# (2) C + O2 → CO2 : ΔH = +394 kJ/mol
# (3) H2 + 1/2O2 → H2O: ΔH = +286 kJ/mol
# (4) 2C + H2 → C2H2 : ΔH = -227 kJ/mol ← 逆反応にするので符号反転
# 対象反応に含まれる生成物:2CO2, 1H2O, -1C2H2 → 対象ベクトル y
# 各反応の生成物数:CO2, H2O, C2H2 への寄与を行列で表現
A = np.array([
[1, 0, -1], # CO2 への寄与:(2)→+1, (3)→0, (4)→−1
[0, 1, -1], # H2O への寄与:(2)→0, (3)→+1, (4)→−1
[0, 0, 1] # C2H2への寄与: (4)→+1(原反応なので正)
]).T # 転置して列ベクトルとする
b = np.array([2, 1, -1]) # 目的の化学反応の係数ベクトル(右辺を構成する)
# -------------------- Step 2: Solve for reaction multipliers --------------------
# Ax = b となる係数 x(a, b, c)を求める
x = np.linalg.solve(A, b) # x = [a, b, -c]
# -------------------- Step 3: 熱量計算 / Calculate total enthalpy change --------------------
delta_H = np.array([394, 286, -227]) # 各反応の反応熱(kJ/mol)
Q = np.dot(x, delta_H) # 線形結合による全体反応熱
# -------------------- Output / 出力 --------------------
print("【アセチレン燃焼熱(行列計算によるHessの法則)】")
print(f"係数(反応2, 3, 4): {x}")
print(f"合成反応熱 Q = {Q:.0f} kJ/mol")
① $\sqrt{1 + x} \approx 1 + \frac{x}{2} \quad (|x| \ll 1)$
🔹 化学での例:
比熱容量の温度依存性の簡略化
比熱 $C_p = C_{p0} \sqrt{1 + \frac{\Delta T}{T_0}}$ というモデルがあった場合:
$$
\sqrt{1 + \frac{\Delta T}{T_0}} \approx 1 + \frac{1}{2} \cdot \frac{\Delta T}{T_0} \quad (\Delta T \ll T_0)
$$
→ 小さな温度変化における線形近似
② $(1 + x)^n \approx 1 + nx \quad (|x| \ll 1)$
🔹 化学での例:
理想気体の体積変化に伴う圧力変化(ポリトロープ)
理想気体において体積変化が小さいとき、次のような式の近似に使える:
$$
P = P_0 \left(1 + \frac{\Delta V}{V_0}\right)^{-n} \approx P_0 \left(1 - n \frac{\Delta V}{V_0}\right)
$$
③ $(L + a)^{1/2} \approx L^{1/2} \left( 1 + \frac{a}{2L} \right) \quad (|a| \ll L)$
🔹 化学での例:
分子運動エネルギー(運動量)や光吸収の変位効果
例:波長 $\lambda$ の小さな変化に伴うエネルギー変化(分光学)
$$
E = hc/\sqrt{L + a} \Rightarrow \sqrt{L + a} \approx \sqrt{L}\left(1 + \frac{a}{2L}\right)
$$
→ スペクトル線の微小シフトの解析などに使える
④ $\sin \theta \approx \tan \theta \approx \theta \quad (|\theta| \ll 1)$
🔹 化学での例:
分子の小さな振動角(分子振動論)
三原子分子の屈曲振動で、角度変位が小さいとき:
$$
x \approx l \cdot \theta
$$
→ 単振動として近似可能。物理化学や赤外分光で使う。
⑤ $\cos \theta \approx 1 \quad (|\theta| \ll 1)$
🔹 化学での例:
ボンド角変化が小さいときのポテンシャルエネルギー近似
たとえば、あるボンド角 $\theta$ の変化に関して:
$$
E(\theta) = E_0 + k(1 - \cos \theta) \approx E_0 + \frac{k}{2} \theta^2
$$
→ **分子内の角振動(Harmonic oscillator)**として使われる。
# Program Name: chemical_approximations_plot.py
# Creation Date: 20250604
# Overview: Visualize chemical applications of mathematical approximations (first-order expansions)
# Usage: Run in Python environment with matplotlib and numpy installed
# -------------------- Install Required Libraries --------------------
!pip install numpy matplotlib
# -------------------- Import Libraries --------------------
import numpy as np
import matplotlib.pyplot as plt
# -------------------- Parameters (一元管理) --------------------
x = np.linspace(-0.2, 0.2, 200) # For x-approximations
theta = np.linspace(-0.2, 0.2, 200) # For angle approximations
T0 = 300 # Reference temperature [K]
delta_T = np.linspace(-30, 30, 200) # ΔT for specific heat
V0 = 1.0 # Reference volume
delta_V = np.linspace(-0.2, 0.2, 200) # ΔV for pressure approximation
n = 1.4 # Polytropic index
L = 500 # Length unit for energy/wavelength
a = np.linspace(-50, 50, 200) # Small perturbation
k = 1 # Force constant
# -------------------- Plot ① 比熱容量の平方根近似 --------------------
plt.figure()
exact_cp = np.sqrt(1 + delta_T / T0)
approx_cp = 1 + 0.5 * (delta_T / T0)
plt.plot(delta_T, exact_cp, label='Exact')
plt.plot(delta_T, approx_cp, '--', label='Approx: $1 + \\frac{\\Delta T}{2T_0}$')
plt.title('Specific Heat Approximation (√ Expansion)')
plt.xlabel('ΔT [K]')
plt.ylabel('C_p / C_{p0}')
plt.legend()
plt.grid(True)
# -------------------- Plot ② ポリトロープ近似 --------------------
plt.figure()
exact_p = (1 + delta_V / V0) ** (-n)
approx_p = 1 - n * (delta_V / V0)
plt.plot(delta_V, exact_p, label='Exact')
plt.plot(delta_V, approx_p, '--', label='Approx: $1 - n\\frac{\\Delta V}{V_0}$')
plt.title('Pressure Approximation (Polytropic Process)')
plt.xlabel('ΔV / V0')
plt.ylabel('P / P0')
plt.legend()
plt.grid(True)
# -------------------- Plot ③ 光吸収エネルギー近似 --------------------
plt.figure()
exact_E = 1 / np.sqrt(L + a)
approx_E = 1 / np.sqrt(L) * (1 - 0.5 * a / L)
plt.plot(a, exact_E, label='Exact')
plt.plot(a, approx_E, '--', label='Approx: $1/\\sqrt{L}(1 - \\frac{a}{2L})$')
plt.title('Energy Shift by Wavelength Perturbation')
plt.xlabel('a (small perturbation)')
plt.ylabel('E (relative)')
plt.legend()
plt.grid(True)
# -------------------- Plot ④ 小角近似(sin, tan) --------------------
plt.figure()
plt.plot(theta, np.sin(theta), label='sin θ')
plt.plot(theta, np.tan(theta), label='tan θ')
plt.plot(theta, theta, '--', label='θ')
plt.title('Small Angle Approximation (sin θ ≈ tan θ ≈ θ)')
plt.xlabel('θ [rad]')
plt.ylabel('Value')
plt.legend()
plt.grid(True)
# -------------------- Plot ⑤ cos θ ≈ 1 --------------------
plt.figure()
plt.plot(theta, np.cos(theta), label='cos θ')
plt.plot(theta, 1 - 0.5 * theta**2, '--', label='Approx: $1 - \\frac{1}{2}\\theta^2$')
plt.title('Small Angle Approximation (cos θ ≈ 1 - θ²/2)')
plt.xlabel('θ [rad]')
plt.ylabel('Value')
plt.legend()
plt.grid(True)
# -------------------- Show All Plots --------------------
plt.show()