import numpy as np         #bibliothèque numpy renommée np
import numpy.random as rd  #module numpy.random renommé rd

#mesures expérimentales
U=44.1
I=0.09
L=5.0e-2
l=2.8e-2
Tp=36.3
Te=22

#calcul de la demi-étendue
delta_U=(0.5/100*U+0.02)
delta_I=(1/100*I+0.003)
delta_L=0.5/1000
delta_l=0.5/1000
delta_Te=0.5

#incertitude-type
u_Tp=0.1

S=l*L  #surface d'échange avec l'air
h=U*I/((Tp-Te)*S)

N=10000  #nombre de tirages

############################################
# QUESTION 3. UTILISATION DE BOUCLES FOR
############################################
tab_h=np.zeros(N)  #tableau contenant N valeurs nulles

for i in range(N): #i varie de 0 inclus à N exclu
    val_U=U+delta_U*(2*rd.random()-1)
    #2*rd.random()-1 est un nombre aléatoire compris entre -1 et 1
    val_I=I+delta_I*(2*rd.random()-1)
    val_L=L+delta_L*(2*rd.random()-1)
    val_l=l+delta_l*(2*rd.random()-1)
    val_Te=Te+delta_Te*(2*rd.random()-1)
    val_Tp=rd.normal(Tp, u_Tp)

    tab_h[i]=val_U*val_I/((val_Tp-val_Te)*val_L*val_l)

############################################
#Moyenne et écart-type de hmes
############################################
hmes=np.mean(tab_h)              #moyenne du tableau tab_h
u_hmes=np.std(tab_h, ddof=1)     #écart-type du tableau tab_h
                                 #avec N-1 au dénominateur

print('hmes = {:.3e}'.format(hmes))
print('u(hmes) = {:.1e}'.format(u_hmes)) #incertitude-type de hmes



############################################
#QUESTION 4. UTILISATION DES TABLEAUX NUMPY
############################################
#chaque tableau contient N valeurs aléatoires suivant une loi uniforme
tab_U=rd.uniform(U-delta_U, U+delta_U, N)
tab_I=rd.uniform(I-delta_I, I+delta_I, N)
tab_L=rd.uniform(L-delta_L, L+delta_L, N)
tab_l=rd.uniform(l-delta_l, l+delta_l, N)
tab_Te=rd.uniform(Te-delta_Te, Te+delta_Te, N)


#Le tableau tab_Tp contient N valeurs aléatoires suivant une loi normale
tab_Tp=rd.normal(Tp, u_Tp, N)

############################################
#tableau tab_h calculé à partir des autres tableaux
############################################
tab_h=tab_U*tab_I/((tab_Tp-tab_Te)*tab_l*tab_L)

############################################
#Moyenne et écart-type de hmes
############################################
hmes=np.mean(tab_h)              #moyenne du tableau tab_h
u_hmes=np.std(tab_h, ddof=1)     #écart-type du tableau tab_h
                                 #avec N-1 au dénominateur

print('hmes = {:.3e}'.format(hmes))
print('u(hmes) = {:.1e}'.format(u_hmes))
# incertitude-type de hmes

