##### Incertitude compos�e #####
import numpy as np #fonctions math�matiques
import matplotlib.pyplot as plt #graphes
plt.close('all')# ferme les éventuelles fenêtres précédentes


# Entrez la valeur mesurée 

X = 1

# Entrez le demi-intervalle de pr�cision sur la valeur
# Dans le cas d'une mesure de l'incertitude-type, utiliser la relation u(T) = Delta T/sqrt(3)

DeltaX=0.1

# Ecrire la fonction donnant le résultat dont on cherche l'incertitude type
# (souvent à plusieurs variables)
def f(x):
    return 1/x

## Pour définir une fonction de plusieurs variables, par exemple x^2-y^2
## def f(x,y):
##    return x**2-y**2

# Entrez le nombre de simulation que vous voulez effectuer 
N = 100

# Simulation
res=[] # tableau stockant les résultats 

for i in range(0,N):
    # Tirage d'un nombre aléatoire entre les valeurs extrémales
    x=np.random.uniform(X-DeltaX,X+DeltaX) 
    # Calcul de la fonction avec ce nombre aléatoire
    res.append(f(x))

plt.figure(1)
plt.hist(res,label='f(x)', bins='rice', histtype = 'step') # histogramme des résultats
plt.legend()

plt.show()

# Calcul et affichage moyenne et écart type

moy = np.mean(res)
std = np.std(res,ddof=1) 

print('Moyenne =', moy)
print('Ecart type =', std)