import numpy as np
import matplotlib.pyplot as plt

# On prend les valeurs pour une manip avec l'aluminium
meau = 250e-3 # kg
m0   = 59e-3  # kg
ceau = 4.2e3  # J/K/kg

def c0(T1,T0,T2,Ccalo):
    return (meau*ceau+Ccalo)*(T2-T1)/(m0*(T0-T2))

print(c0(19.5, 85, 22.5, 140))
#-> on obtient c0=968 J/K/kg

# tirage au sort qui simule un grand nombre de mesures
N = 10000
liste = []

for i in range(N):  
    T1 = np.random.uniform(19.5-0.1,19.5+0.1)
    T0 = np.random.uniform(85-5,85+5)
    T2 = np.random.uniform(22.5-0.2,22.5+0.2)
    Ccalo = np.random.uniform(140-17,140+17)
    c = c0(T1,T0,T2,Ccalo)
    liste.append(c)

# l'écart-type donne l'incertitude-type associée à une mesure individuelle de c0
moyenne = np.mean(liste)
inc_type = np.std(liste) 
print(moyenne,inc_type)

"""On obtient u(c0) = 62 J/K/kg 
C'est donc l'estimation de type B de l'incertitude sur une mesure de c0.

À comparer avec l'estimation de type A par mise en commun des résultats de la classe :
   u(c0) = écart-type des mesures de chaque binome = 108 J/K/kg en 2022, 75 J/K/kg en 2021, 108 J/K/kg en 2023.

Les estimations de type A et B semblent cohérentes (l'estimation de l'incertitude sur une telle 
manip est quelque chose d'assez approximatif !)."""

# tracé de l'histogramme des valeurs
plt.figure()
plt.hist(liste,bins='auto')
plt.xlabel("valeurs de la capacité thermique c0")
plt.ylabel("nombre d'occurences dans le tirage au sort")
plt.show()
