import numpy as np
import matplotlib.pyplot as plt


# Section en m^2
S = 2e-4
# Puissance en W
P = 10
# Distance entre deux sondes en m
dx = 2.2e-2

# Courbe T(x) avec les barres d’erreur en régime stationnaire et précision sur T en °C

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.plot(x,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

pente,ordao=np.polyfit(x,T,1)
print("pente en K.m-1 :", pente)
print("ordonnée à l'origine en °C :", ordao)
Tmod=[pente*xi+ordao for xi in x]
plt.plot(x,Tmod)
plt.legend()
plt.show()

# Détermination expérimentale de la conductivité thermique
conductivite=P/(-pente*S)
print("conductivité en W/(K.m) =",conductivite)

# Nombre de simulations à effectuer 
N = 1000

# Calculs avec une distribution de probabilité uniforme
liste_pente = []
for i in range(N):
    l = len(x)
    X = np.random.uniform(x,x,l)
    TT = np.random.uniform(T-delta_T,T+delta_T,l)
    p=np.polyfit(X,TT,1)
    liste_pente.append(p[0])
u_pente = np.std(liste_pente,ddof=1)


u_conductivite=P*u_pente/(S*pente**2) # calcul d'incertitude composée
print("incertitude-type sur la conductivité en W/(K.m) =",u_conductivite) 