Pythonでわかる高校化学の式





https://kimika.net/r3taishinkoushi.html

```py
import math

def body_centered_cubic_fill_rate(l):
    volume_sphere = (4/3) * math.pi * ((math.sqrt(3) * l) / 4)**3
    total_volume = l**3
    fill_rate = (volume_sphere * 2) / total_volume
    return fill_rate

def face_centered_cubic_fill_rate(l):
    volume_sphere = (4/3) * math.pi * ((math.sqrt(2) * l) / 4)**3
    total_volume = l**3
    fill_rate = (volume_sphere * 4) / total_volume
    return fill_rate

# 既知の辺の長さ
l_bcc = 5  # 体心立方格子の場合の辺の長さ
l_fcc = 5  # 面心立方格子の場合の辺の長さ

# 体心立方格子の充填率を計算
bcc_fill_rate = body_centered_cubic_fill_rate(l_bcc)
print("体心立方格子の充填率:", bcc_fill_rate)

# 面心立方格子の充填率を計算
fcc_fill_rate = face_centered_cubic_fill_rate(l_fcc)
print("面心立方格子の充填率:", fcc_fill_rate)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760770/85f33599-6f0f-b1e1-09b1-08c8055e6cb7.png)

https://business-trigger.tokyo/kk-4-4/

```py
import numpy as np
import matplotlib.pyplot as plt

# 水素イオン濃度の範囲を定義（例：10^-14から10^0）
h_concentration = np.logspace(-14, 0, 1000)

# pHを計算
pH = -np.log10(h_concentration)

# プロット
plt.figure(figsize=(8, 6))
plt.plot(h_concentration, pH, color='blue')
plt.xscale('log')  # x軸を対数スケールに設定
plt.xlabel('Hydrogen Ion Concentration [H+] (mol/L)')
plt.ylabel('pH')
plt.title('pH vs Hydrogen Ion Concentration')
plt.grid(True)
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760770/b9eaeb7b-bbd9-49c1-9ff5-1dfe1e3dc9e2.png)


https://chemical-engineering-review.com/boyle-charles-law/

```py
import numpy as np
import matplotlib.pyplot as plt

# ボイルの法則の関数
def boyles_law(P, V_const):
    return V_const / P

# シャルルの法則の関数
def charles_law(T, V_const):
    return V_const / (273 + T)

# ボイルの法則のパラメータ
V_const_boyle = 1.0  # 一定の体積

# シャルルの法則のパラメータ
V_const_charles = 1.0  # 一定の体積

# プロットの範囲設定
pressure_range = np.linspace(0.1, 10, 100)  # 圧力の範囲
temperature_range = np.linspace(0, 100, 100)  # 温度の範囲

# プロット
plt.figure(figsize=(12, 6))

# ボイルの法則のプロット
plt.subplot(1, 2, 1)
plt.plot(pressure_range, boyles_law(pressure_range, V_const_boyle), label='Boyle\'s Law')
plt.xlabel('Pressure (P)')
plt.ylabel('Volume (V)')
plt.title('Boyle\'s Law')
plt.legend()

# シャルルの法則のプロット
plt.subplot(1, 2, 2)
plt.plot(temperature_range, charles_law(temperature_range, V_const_charles), label='Charles\' Law')
plt.xlabel('Temperature (T)')
plt.ylabel('Volume (V)')
plt.title('Charles\' Law')
plt.legend()

plt.tight_layout()
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760770/eca9b554-bee0-634d-dbe9-0ce0fc7bb621.png)




```py



import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 与えられた値
n = 1.0  # モル数
R = 0.0821  # 気体定数 (L atm / K mol)

# 圧力、体積の範囲を設定
P_min = 1.0  # 最小圧力 (atm)
P_max = 10.0  # 最大圧力 (atm)
V_min = 1.0  # 最小体積 (L)
V_max = 10.0  # 最大体積 (L)

# 各パラメータの値を生成
P_values = np.linspace(P_min, P_max, 10)  # 圧力の値
V_values = np.linspace(V_min, V_max, 10)  # 体積の値

# 二次元グリッドの作成
P, V = np.meshgrid(P_values, V_values, indexing='ij')

# Tを計算
T = P * V / (n * R)

# 三次元プロットの作成
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# プロット
ax.plot_surface(P, V, T, rstride=1, cstride=1, cmap='viridis', edgecolor='none')

# 軸ラベルの設定
ax.set_xlabel('Pressure (atm)')
ax.set_ylabel('Volume (L)')
ax.set_zlabel('Temperature (K)')

# グラフのタイトルの設定
plt.title('P × V / T = nR')

# 表示
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760770/27fcef8a-b5ad-e93d-22b0-da35479c8bef.png)


https://chemical-engineering-review.com/arrhenius-equation/

https://www.yamatoblog.tech/arrhenius



```py
import numpy as np
import matplotlib.pyplot as plt

# アレニウスの式の関数
def arrhenius_eq(A, E, R, T):
    return A * np.exp(-E / (R * T))

# 平衡定数と温度の関係の関数
def equilibrium_eq(a, b, T):
    return a - b / T

# 定数の設定
R = 8.314  # 気体定数
A = 1e13   # 頻度因子
E = 50000  # 活性化エネルギー
a = 10     # 平衡定数の定数
b = 5000   # 平衡定数の定数

# 温度の範囲設定
T_range = np.linspace(200, 1000, 100)

# アレニウスプロットの作成
plt.figure(figsize=(10, 5))

# アレニウスプロット
plt.subplot(1, 2, 1)
k_values = arrhenius_eq(A, E, R, T_range)
plt.plot(1 / T_range, np.log(k_values), marker='o')
plt.xlabel('1/T (K^-1)')
plt.ylabel('ln(k)')
plt.title('Arrhenius Plot')
plt.grid(True)

# 平衡定数と温度の関係のプロット
plt.subplot(1, 2, 2)
K_values = equilibrium_eq(a, b, T_range)
plt.plot(T_range, K_values, marker='o')
plt.xlabel('Temperature (K)')
plt.ylabel('log(K)')
plt.title('Equilibrium Constant vs Temperature')
plt.grid(True)

plt.tight_layout()
plt.show()

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760770/6e906172-fb11-8cbe-78c4-c9757d0f4c1d.png)

1次反応速度式

https://science-log.com/%e3%83%9b%e3%83%bc%e3%83%a0%e3%83%9a%e3%83%bc%e3%82%b8/%e5%8c%96%e5%ad%a6top%e3%83%9a%e3%83%bc%e3%82%b8/%e7%89%a9%e7%90%86%e5%8c%96%e5%ad%a6top/%e5%8f%8d%e5%bf%9c%e9%80%9f%e5%ba%a6%e8%ab%96%ef%bc%9a1%e6%ac%a1%e5%8f%8d%e5%bf%9c%e3%81%a82%e6%ac%a1%e5%8f%8d%e5%bf%9c/

https://studyinuniv.blogspot.com/2019/02/blog-post.html


```py
import numpy as np
import matplotlib.pyplot as plt

# 反応速度定数 k
k = 0.1

# 初期濃度 [A]_0
A_0 = 1.0

# 時間の範囲を設定
t = np.linspace(0, 10, 100)

# 濃度 [A](t) を計算
A_t = A_0 * np.exp(-k * t)

# グラフをプロット
plt.plot(t, A_t, label='[A](t)')
plt.xlabel('Time')
plt.ylabel('Concentration of A')
plt.title('Concentration of A vs Time')
plt.legend()
plt.grid(True)
plt.show()

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760770/307931da-67fe-b62e-0129-fd0de132f6d5.png)




```py
import numpy as np
import matplotlib.pyplot as plt

# 2次反応の速度定数
k = 0.1  # 任意の値を設定

# 初期濃度
A0 = 1.0  # 任意の値を設定

# 時間の配列を生成
t = np.linspace(0, 10, 100)  # 0から10までの時間を100等分した配列

# 濃度の計算
A = A0 / (1 + k * A0 * t)

# プロット
plt.plot(t, A)
plt.xlabel('Time')
plt.ylabel('Concentration [A]')
plt.title('Second Order Reaction')
plt.show()

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760770/fe690c27-13a3-1c7f-7874-7bc817007f97.png)

https://qiita.com/getBack1969/items/af84984756445018243a

https://rikeilabo.com/approximate-expression


```py
import numpy as np
import matplotlib.pyplot as plt

# グラフ描画の範囲を設定
x = np.linspace(-10, 10, 400)

# 各関数の定義
y1 = 1 / (1 + x)
y2 = 1 / (1 - x)
y3 = 1 / np.sqrt(1 + x)
y4 = np.sin(x)
y5 = np.cos(x)
y6 = np.log(1 + x)

# グラフの描画
plt.figure(figsize=(12, 8))

plt.subplot(3, 2, 1)
plt.plot(x, y1, label='1/(1+x)')
plt.plot(x, y2, label='1/(1-x)')
plt.legend()

plt.subplot(3, 2, 2)
plt.plot(x, y3, label='1/√(1+x)')
plt.plot(x, 1 - x/2, label='1-x/2')
plt.legend()

plt.subplot(3, 2, 3)
plt.plot(x, y4, label='sin(x)')
plt.plot(x, x, label='x')
plt.legend()

plt.subplot(3, 2, 4)
plt.plot(x, y5, label='cos(x)')
plt.plot(x, np.ones_like(x), label='1')
plt.legend()

plt.subplot(3, 2, 5)
plt.plot(x, y6, label='log(1+x)')
plt.plot(x, x, label='x')
plt.legend()

plt.show()

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760770/5e2082a8-b04c-bb7a-1fea-340d322a7e91.png)


https://hatsudy.com/jp/ionization-equilibrium.html


```py

import numpy as np
import matplotlib.pyplot as plt

# 電離度の範囲を生成
alpha = np.linspace(0.001, 0.999, 100)

# 濃度を設定
c = 0.00001

# 式 c(α^2)/(1-α) と cα^2 の計算
y1 = c * (alpha**2) / (1 - alpha)
y2 = c * alpha**2

# プロット
plt.plot(alpha, y1, label='c(α^2)/(1-α)')
plt.plot(alpha, y2, label='cα^2')
plt.xlabel('Ionization degree (α)')
plt.ylabel('Value')
plt.title('Relationship between Ionization Degree and Concentration')
plt.legend()
plt.grid(True)
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760770/92dadee2-aa33-7172-3f3f-153c757fde80.png)