# Simulation d'une réaction chimique d'ordre q
# Méthode d'Euler explicite

import numpy as np
import matplotlib.pyplot as plt

# --- Paramètres cinétiques ---
k =         # constante de vitesse (s⁻¹ pour q=1, Pa⁻¹·s⁻¹ pour q=2, etc.)
q =              # ordre de la réaction
P_A0 =       # pression partielle initiale (Pa)

# --- Paramètres numériques ---
dt = 50           # pas de temps (s)
t_max = 5000       # durée totale (s)

# --- Initialisation ---
n_points = int(t_max / dt) + 1
t = np.linspace(0, t_max, n_points)
P_A = np.zeros(n_points)
P_A[0] = P_A0

# --- Méthode d'Euler explicite ---
for i in range(n_points - 1):
    P_A[i + 1] = 
    # Empêche les valeurs négatives (pression ne peut pas être < 0)
    if P_A[i + 1] < 0:
        P_A[i + 1] = 0
        break

# --- Affichage ---
plt.figure(figsize=(8, 5))
plt.plot(t, P_A, 'rx-', label="Méthode d'Euler")
plt.title(f"Évolution de la pression partielle $P_A(t)$ pour une réaction d'ordre {q}")
plt.xlabel("Temps (s)")
plt.ylabel("Pression partielle $P_A$ (Pa)")

# Limites de l'axe des ordonnées entre 0 et P_A0
plt.ylim(0, P_A0 * 1.05)  # on ajoute 5 % pour ne pas couper le sommet

plt.grid(True)
plt.legend()
plt.show()