高校化学で学ぶPython


https://colab.research.google.com/?hl=ja#scrollTo=kPWUXNPs-Wya

---

### 電子の存在確率と軌道

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

$$
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

```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%硫酸のモル濃度）：

```python
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コード例：

```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コード：

```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₂：極性なし（直線型で打ち消し）

---

```python

# 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$

### ◆ 気液平衡と蒸気圧：

* 気化と凝縮が等しい → **動的平衡状態**
* 蒸気圧が大気圧に等しくなる温度：**沸点**

---

## 🔷 状態変化（融解・凝固・沸騰・昇華）

### ◆ 各状態変化：

| 変化名    | 状態の変化   | 吸熱/発熱 |
| ------ | ------- | ----- |
| 融解     | 固体 → 液体 | 吸熱    |
| 凝固     | 液体 → 固体 | 発熱    |
| 蒸発（沸騰） | 液体 → 気体 | 吸熱    |
| 凝縮     | 気体 → 液体 | 発熱    |
| 昇華     | 固体 ↔ 気体 | 双方向あり |

### ◆ 図解のポイント：

* 氷→水→水蒸気の過程で、\*\*潜熱（加熱しても温度が上がらない）\*\*部分がある
* 状態変化の境界では分子間の結合が切れる（エネルギー消費）

---

```python

# 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一定） |

---

```Python
# 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{水}}}$ |

---

```Python
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 を算出。

---


```Python
# 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合体コード

```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）

```python
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$ と温度のグラフ

```python
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$                                            | 実験から反応の活性化エネルギーを定量評価可能 |

---




```Python
# 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$                        | 平衡定数とエネルギーの関係  |

---

```Python
# 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の関係グラフ

```python
# 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 の可視化

```python
# 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合体：ネルンスト式の電位変化の可視化

```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合体：イオン化傾向の可視化

```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)$    | 反応進行度（自発性・平衡傾向）   |

---


```Python
# 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. 反応速度を高める条件

| 要因        | 説明                             |
| --------- | ------------------------------ |
| **① 濃度**  | 濃度↑ → 衝突頻度↑ → 速度↑              |
| **② 温度**  | 温度↑ → 運動エネルギー↑ → 活性化エネルギー超え粒子↑ |
| **③ 触媒**  | 活性化エネルギーを**低下**させる             |
| **④ 表面積** | 粉末化などにより接触面増加 → 衝突頻度↑          |

---

## 🔚 まとめ：反応速度の重要ポイント

* 反応速度は **濃度の時間変化**で定義される。
* 反応速度式は **実験的に求める**。
* 反応速度を変える主な因子は **濃度・温度・触媒・表面積**。
* グラフの**接線の傾き**は**瞬間の反応速度**を示す。




```Python
# 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()

```


```Python
# 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()

```
**熱化学方程式の計算**
---

```python
# 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）\*\*として使われる。

---


```Python
# 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()

```