import numpy as np
import matplotlib.pyplot as plt

a2 = np.array([1.319,1.320,1.338,1.405,1.424])   # minimum de déviation ordre positif (rad)
u_a2 = np.array([1.7e-4])
a1 = np.array([2.387,2.385,2.342,2.209,2.168])   # minimum de déviation ordre négatif (rad)
u_a1 = np.array([1.7e-4])

lam = np.array([579e-9,577e-9,546e-9,434e-9,407e-9])  # longueur d'onde (m)

Dm = (a1-a2)/2           # minimum de déviation
u_Dm = 2.4e-4            # incertitude sur Dm

a_reseau = np.abs(lam/(2*np.sin(Dm/2)))                 # pas du réseau (ordre 1)
u_a_reseau = a_reseau*(u_Dm/2)/np.abs(np.tan(Dm/2))     # incertitude (λ supposée exacte)

a_moy = np.mean(a_reseau)
u_a_moy = np.std(a_reseau, ddof=1)/np.sqrt(len(a_reseau))   # incertitude de type A



print("a =", a_reseau)
print("u(a) =", u_a_reseau)
print("a_moy =", a_moy, "m ; u(a_moy) =", u_a_moy, "m")
print("n =", 1e-3/a_moy, "traits/mm")