import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

"""
Décomposition du bromure de nitrosyle ; réaction d'ordre 2
NOBr(g) = NO(g) + 1/2 Br2(g)
"""
temps = np.array([0,6.2,10.8,14.7,20,24.6])
concentration = np.array([0.0250,0.0191,0.0162,0.0144,0.0125,0.0112])

Y = 1/(concentration)

slope, intercept, rvalue, pvalue, stderr = stats.linregress(temps,Y)
print("pente = {}".format(slope))
print("ordonnée à l'origine = {}".format(intercept))
print("R2 = {}".format(rvalue**2))

def predict(x):
    return slope * x + intercept

fitLine = predict(temps)

fig, axes = plt.subplots(2)
fig.suptitle("Décomposition du bromure de nitrosyle")
axes[0].grid()
axes[0].set(ylim=[0.010,0.03])
axes[0].set(ylabel="Concentration (mol/L)")
axes[1].set(ylabel="Inverse de la concentration")
axes[1].grid()
axes[1].set(xlabel="Temps (min)")
axes[0].scatter(temps,concentration,label="Points expérimentaux")
axes[1].scatter(temps,Y,label="Points expérimentaux")
axes[1].plot(temps,fitLine,color='r',label="Droite de régression linéaire\n y = {}x + {}".format(round(slope,4),round(intercept,4)))
axes[0].legend()
axes[1].legend()
plt.show()

