import numpy as np
import matplotlib.pyplot as plt


# Section en m^2, A COMPLETER
S = 2e-4
# Distance entre deux sondes en m, A COMPLETER
dx = 2.2e-2

# Courbe T(x) avec les barres d’erreur en régime stationnaire
x=np.array([i*dx for i in range(8)])
T=np.array([61.5,55.8,49.6,43.7,38,32.3,26.8,21.4])
delta_T = np.array([0.6]*len(T))
plt.errorbar(x,T,xerr=0 ,yerr=2*delta_T/np.sqrt(3),fmt='b.',label='Mesures')
plt.xlabel("x (m)")
plt.ylabel("T (°C)")

# Modélisation affine de la courbe T(x) en régime stationnaire et tracé de la droite modèle 
modele=np.polyfit(x,T,1) # A COMPLETER
print("pente en K.m-1 :", modele[0])
print("ordonnée à l'origine en °C :", modele[1])
Tmodele=[modele[0]*xi+modele[1] for xi in x] # liste des ordonnées de la droite modèle, A COMPLETER
plt.plot(x,Tmodele,label='régression linéaire')
plt.legend()
plt.show()


# Simulations Monte Carlo pour obtenir l'incertitude sur la pente de la droite modèle 
N = 1000 # nombre des simulations
liste_pente = []
for i in range(N):
# A COMPLETER -> cf § D.3.b du poly complément "mesures et incertitudes"
    l=len(x)
    tirage_T=np.random.uniform(T-delta_T,T+delta_T,l)
    modele=np.polyfit(x,tirage_T,1)
    liste_pente.append(modele[0])     
pente_moy =  np.average(liste_pente) # pour vérification, A COMPLETER
u_pente =  np.std(liste_pente,ddof=1)# A COMPLETER

print("moyenne sur la pente de la droite T(x) en K/m =",pente_moy) 
print("incertitude-type sur la pente de la droite T(x) en K/m =",u_pente) 