0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

高校化学で学ぶPython

Last updated at Posted at 2025-06-04


電子の存在確率と軌道

◆ 量子力学に基づく電子の存在確率密度:

$$
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. 着目する物質の係数を1とする。
  2. 各物質の**状態(固/液/気/水溶液)**を明記。
  3. Δ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()

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?