import numpy as np


# --- Saisi des mesures ---
i1 = np.array([10,15,20,25,30,35,40,45,50])   # angles d'incidence en degrés
i2 = np.array([6.7,10,13,17,20,23,26,29,31])    # angles de réfraction en degrés

# --- Conversion en radians ---
i1_rad = i1 * np.pi / 180
i2_rad = np.radians(i2)

# --- Calcul des indices optiques ---
n = np.sin(i1_rad) / np.sin(i2_rad)

# --- Affichage du tableau de valeur ---
print(np.round(n,3))

# --- Détermination de la moyenne et l'écart type de la série de mesure ---
n_moy = np.mean(n)
n_std = np.std(n, ddof=1)  # ddof=1 pour l’écart-type expérimental

# --- Calcul de l'incertitude sur la valeur de l'indice optique ---
N = len(i1) # Calcul du nombre de mesures. 
u_n = n_std / np.sqrt(N) # Calcul de l'incertitude u_n

# --- Affichage des résultats ---
print(f"Indice moyen = {n_moy:.3f}")
print(f"Ecart-type   = {n_std:.3f}")
print()
print(f"Indice optique du plexiglass : n = {n_moy:.3f} ± {u_n:.3f}")

