﻿import matplotlib.pyplot as plt
import numpy as np
import numpy.random as rd
from math import *


m0=0.100    # à saisir valeur de m_0 mesuré
T1=  90   # à saisir valeur de T_1 mesurée
m1 =0.200      # # à saisir valeur de m1 mesuré
T0=  25     # à saisir valeur de T0 mesurée
Tf=500     # à saisir valeur de Tf mesurée
# estimation d'une "précision" sur la mesure (valeur  qui garantit à 100% que la grandeur mesurée est dans l'intervalle [x-delta_x ; x+delta_x])
delta_m=0.1  # à modifier dans la même unité que m0
delta_T0= 1 # à modifier dans la même unité que T0
delta_Tf=1
delta_T1= 1

# simulation de Monte-Carlo

# pour générer une liste de 1000 points tirés aléatoirement dans les boites d'incertitudes
liste_C= []
for i in range (1000):
    m0_MC=m0+rd.uniform(-delta_m,delta_m,1) # une valeur de m0 possible compte tenu de l'incertitude
    m1_MC=m1+rd.uniform(-delta_m,delta_m,1)
    T0_MC= T0+rd.uniform(-delta_T0,delta_T0,1)
    T1_MC= T1+rd.uniform(-delta_T1,delta_T1,1)
    Tf_MC= Tf+rd.uniform(-delta_Tf,delta_Tf,1)


    C_MC= 4180*(m0_MC*(Tf_MC-T0_MC)+m1_MC*(Tf_MC-T1_MC))/(T0_MC-Tf_MC) # exprimer à partir de m0_Mc T0_MC, m1_Mc , T1mC, Tf_mC pour donner la valeur de C à partir de m et T
    liste_C.append(C_MC)
C=np.mean(liste_C)
u_C=np.std(liste_C) #écart-type, c'est l'incertitude type


print("Cexp = (",format(C,'.4g'), ",u(C)=",format(u_C,'.2g'),") unité de C")


### calcul de la capacité thermique massique cmat  d un materiau ###
meau=0.1    # masse d'eau initialement introduite
Ti=  25  # température initiale de l'eau et du calorimètre
m=0.5      # masse du materiaux
Ti_mat=  90     # teméprature initiale du materiaux
Tf2=   40  # température finale de l'ensemble

delta_Tf2=0.1
delta_Ti=0.21
delta_Timat=0.1

liste_cmat= []
for i in range (1000):
    meau_MC=meau+rd.uniform(-delta_m,delta_m,1) # une valeur de m possible compte tenu de l'incertitude
    m_MC=m+rd.uniform(-delta_m,delta_m,1)
    Ti_MC= Ti+rd.uniform(-delta_Ti,delta_Ti,1)
    Ti_matMC= Ti_mat+rd.uniform(-delta_Timat,delta_Timat,1)
    Tf2_MC= Tf2+rd.uniform(-delta_Tf2,delta_Tf2,1)
    cmat_MC= 0 #à modifier à partir de C_Mc Ti_MC, meau_Mc , TimC, Tf2_mC ,m_MC ,Ti_matMC pour donner la valeur de c à partir de m et T
    liste_cmat.append(cmat_MC)
cmat=np.mean(liste_cmat)  #capacité thermique massique du materiaux
u_cmat=np.std(liste_cmat) #écart-type ( c'est l'incertitude-typr sur cmat