# Importation des bibliothèques permettant de faire les calculs
import numpy as np
import numpy.random as rd
import matplotlib.pyplot as plt

#Réfraction limite (incidence rasante) et réflexion totale
# Entrée des données du problème
rmin =  #valeur minimale de r mesurée en ° en incidence rasante
rmax = #valeur maximale de r mesurée en °
imin = #valeur minimale de l'angle limite de réflexion totale
imax = 
# Simulation de N = 10000 Tirages aléatoires
N = 10000 # nombre de tirages à réaliser
r_lim = rd.uniform(rmin,rmax, N) # simulation de N valeurs de rlim selon loi uniforme
i_lim = rd.uniform(imin,imax,N)
# Expression de n
n1_sim = 1/np.sin(r_lim*np.pi/180)
n2_sim = 1/np.sin(i_lim*np.pi/180)
## Analyse statistique des résultats de la simulation MC
n1_moy = np.average(n1_sim) # Calcul de la valeur moyenne de n1
u_n1= np.std(n1_sim,ddof=1) # Ecart-type de n1
print (n1_moy,u_n1)  #affichage des résultats

plt.hist(n1_sim,bins="rice",alpha = 0.5)
plt.hist(n2_sim,bins="rice",alpha=0.5)
plt.show()

#Mesure à une incidence donnée
# Entrée des mesures
i =  #angle d'incidence en °
r = #angle de réfraction en °
ui = #valeur de l'incertitude-type sur i
ur = #valeur de l'incertitude-type sur r
# Simulation de N = 10000 Tirages aléatoires
N = 10000 # nombre de tirages à réaliser
i_sim = rd.normal(i,ui, N) # simulation de N valeurs de i selon loi gaussienne
r_sim = rd.normal(r,ur, N) # simulation de N valeurs de r selon loi gaussienne
# Calcul des N valeurs de n correspondants à chaque tirage de i et r
n_sim = np.sin(i_sim*np.pi/180)/np.sin(r_sim*np.pi/180)
## Analyse statistique des résultats de la simulation MC
n_moy = np.average(n_sim) # Calcul de la valeur moyenne de n1
u_n= np.std(n_sim,ddof=1) # Ecart-type de n1
print (n_moy,u_n)  #affichage des résultats