import matplotlib.pyplot as plt
import numpy as np
import numpy.random as rd


## On cherche ici à
	# vérifier la loi y=a*x+b
	# mesurer a et lui associer une incertitude

# Points expérimentaux
x=np.array([1  ,  2  ,  3  ,  4  ,  5  ,  6  ,  7  ,  8  ,  9  , 10])
y=np.array([3.6,  6.1,  8.6, 11.1, 13.6, 16.1, 18.6, 21.1, 23.6, 26.1])

# estimation d'une "précision" sur la mesure (valeur de delta_x qui garantit à 100% que la grandeur mesurée est dans l'intervalle [x-delta_x ; x+delta_x])
delta_x=0.2   # à saisir dans la même unité que x
delta_y=y*0.09  # cas d'une précision de 9% sur chaque mesure

# incertitude-type sur x et y
u_x=delta_x/np.sqrt(3)   # voir fiche incertitude
u_y=delta_y/np.sqrt(3)

# calcul de la régression linéaire
	# p est une liste de 2 paramètres
	# p[0] : pente
	# p[1] : ordonnée à l'origine
p=np.polyfit(x,y,1)
a=p[0] #on obtient la valeur de a

# représentations graphiques
plt.errorbar(x,y,xerr=u_x,yerr=u_y,fmt="b+") # points expérimentaux avec "boites d'incertitude"
plt.plot(x,np.polyval(p,x)) # résultat de la régression linéaire
plt.xlabel('x en unité de x')
plt.ylabel('y en unité de y')
plt.title('xxxxxxxxxxx')
plt.show()

# simulation de Monte-Carlo

# pour générer une liste de points tirés aléatoirement dans les boites d'incertitudes
xMC=x+rd.uniform(-delta_x,delta_x,len(x))
yMC=y+rd.uniform(-delta_y,delta_y,len(y))
print(x)
print(xMC)
print(y)
print(yMC)
aMC = np.polyfit(xMC,yMC,1)[0]
print(a)
print(aMC)

# Ensuite :
#répéter un grand nombre de fois le calcul de aMC en stockant les valeurs obtenues dans une liste list_a

??????
??????
??????
??????

# Puis :
#u_a=np.std(list_a)  #écart-type
#print("a = (",format(a,'.4g'), "+-",format(u_a,'.2g'),") unité de a")
