化学反応 SciPy

化学反応

化学反応の例として、以下の反応式を考えましょう:

$$
[A \xrightarrow{k_1} B \
$$
$$
B + C \xrightarrow{k_2} D + E]
$$

この反応を表す微分方程式は以下の通りです:

$$
(\frac{d[A]}{dt} = -k_1 [A])
$$
$$
(\frac{d[B]}{dt} = k_1 [A] - k_2 [B][C])
$$
$$
(\frac{d[C]}{dt} = -k_2 [B][C])
$$
$$
(\frac{d[D]}{dt} = k_2 [B][C])
$$
$$
(\frac{d[E]}{dt} = k_2 [B][C])
$$

これらの微分方程式を解いて、物質濃度の時間変化をプロットします。

以下は、この反応のシミュレーションを行うPythonコードの例です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

# 初期条件
A0 = 1.0
B0 = 0.0
C0 = 1.0
D0 = 0.0
E0 = 0.0

# 反応速度定数
k1 = 0.1
k2 = 0.05

# 微分方程式
def reactions(y, t):
A, B, C, D, E = y
dAdt = -k1 * A
dBdt = k1 * A - k2 * B * C
dCdt = -k2 * B * C
dDdt = k2 * B * C
dEdt = k2 * B * C
return [dAdt, dBdt, dCdt, dDdt, dEdt]

# 時間の設定
t = np.linspace(0, 10, 1000)

# 初期値
initial_values = [A0, B0, C0, D0, E0]

# 微分方程式を解く
solution = odeint(reactions, initial_values, t)

# 結果をプロット
plt.figure(figsize=(8, 6))
plt.plot(t, solution[:, 0], label='A')
plt.plot(t, solution[:, 1], label='B')
plt.plot(t, solution[:, 2], label='C')
plt.plot(t, solution[:, 3], label='D')
plt.plot(t, solution[:, 4], label='E')
plt.xlabel('Time')
plt.ylabel('Concentration')
plt.title('Reaction Simulation')
plt.legend()
plt.grid(True)
plt.show()

これにより、物質 $A$、$B$、$C$、$D$、$E$ の濃度の時間変化がプロットされます。

パラメータ初期条件を変更して、反応の振る舞いを調査することができます。

[実行結果]

ソースコード解説

このコードは、複数の化学成分間での反応を数値的に解くことで、その濃度の時間変化を可視化しています。

1. 初期条件と反応速度の設定:

  • $A$、$B$、$C$、$D$、$E$の初期濃度を設定します。
  • 反応速度定数 $ k1 $と$ k2 $を設定します。

2. 微分方程式:

  • reactions関数で、微分方程式を定義します。
    各成分の微分値を計算しています。
    たとえば、Aの微分値は -k1 * A となります。
    これは$A$が他の成分に変換される速度を表しています。

3. 時間の設定:

  • np.linspaceを使用して、$0$から$10$までの区間を$1000$分割して時間を作成します。

4. 初期値と微分方程式の解法:

  • initial_valuesに初期値を格納し、odeintを使用して微分方程式を解きます。
    odeintは微分方程式の数値解法を提供します。

5. 結果のプロット:

  • 各成分の濃度変化をグラフ化しています。
    時間に対する$A$、$B$、$C$、$D$、$E$の濃度をそれぞれ線グラフで表示し、濃度の変化が時間とともにどのように進行するかを視覚的に示しています。

グラフは、反応速度定数初期濃度に基づいて、各成分の濃度が時間とともにどのように変化するかを示しています。

結果解説

[実行結果]

このグラフは時間の経過に伴うそれぞれの成分の濃度を示しています。

各成分の濃度変化がどのように進行するかを説明しましょう。

  • $A$: 初期濃度は$1.0$で、時間の経過とともに指数的に減少します。
    反応速度定数 $k1$により、$A$が他の成分に変換されます。
  • $B$: 初期濃度は$0.0$で、$A$から生成されますが、$k2$により$C$と反応して減少します。
  • $C$: 初期濃度は$1.0$で、$k2$により$B$と反応して減少します。
  • $D$: 初期濃度は$0.0$で、$k2$により$B$と反応して生成されます。
  • $E$: 初期濃度は$0.0$で、$k2$により$B$と反応して生成されます。

グラフでは、時間の経過とともにそれぞれの成分の濃度がどのように変化しているかが視覚化されています。

$A$は減少し続け、他の成分が生成または消費されていることがわかります。