Forelesning 9: Reaksjonskinetikk II#

\[A \rightarrow B\]
\[\frac{d[B]}{dt} = k[A]\]
import numpy as np
import matplotlib.pyplot as plt
# Initialbetingelser
k = 0.1 # Fartskonstanten
A0 = 1  # Startkonsentrasjon (mol/L)
B0 = 0  # Startkonsentrasjon (mol/L)

t0 = 0  # Starttid (s)
t_slutt = 100 # Sluttid (s)
dt = 1E-3 # Tidssteg (s)
N = int((t_slutt - t0)/dt) + 1

# Arrayer
A = np.zeros(N)
B = np.zeros(N)
t = np.zeros(N)
A[0] = A0
B[0] = B0

# Integrasjonsløkke
for i in range(N - 1):
    dBdt = k*A[i]**2 # Fartsloven
    dAdt = - dBdt
    # Eulers metode
    B[i+1] = B[i] + dBdt*dt
    A[i+1] = A[i] + dAdt*dt
    # Oppdatere tida
    t[i+1] = t[i] + dt

plt.plot(t, A)
plt.plot(t, B)
plt.show()
../../_images/ce4ce6e19730fc3860f5a8699945e620b461179f9016c353ac444765adcc073e.png

Løse ODE-er med biblioteker#

from scipy.integrate import solve_ivp

def fartslover(t,y):
    # t = tidsparameteren
    # y = [HI, H2, I2], altså startbetingelser
    HI = y[0]
    H2 = y[1]
    I2 = y[2]
    k = 0.1

    dHIdt = k*H2*I2
    dH2dt = -0.5*dHIdt
    dI2dt = dH2dt

    return [dHIdt, dH2dt, dI2dt]

y_int = solve_ivp(fartslover, t_span = [0,500], y0 = [0, 1, 0.5], method = "BDF")
t = y_int.t
HI, H2, I2 = y_int.y

plt.plot(t,HI, t,H2, t,I2)
plt.show()
../../_images/d39c077355b92a58320731001bf5a90c7d3ca579d568faf8ad9aaa484c238bb4.png