#!/usr/bin/python3
# -*- coding:Utf-8 -*

"""
Propagation des incertitudes sur une grandeur obtenue par calcul à l'aide la
méthode de Monte-Carlo

PSI* Lycée Pierre Corneille
"""
import numpy as np
import matplotlib.pyplot as plt  # on importe les modules utiles

# Nombre d'échantillons
N = 10000

# Grandeurs et écart-types (A MODIFIER)
X0 = 0.2    # USI
X1 = 0.02   # USI
X2 = 0.007  # USI

uX0 = 0.002    # USI
uX1 = 0.0002   # USI
uX2 = 0.00007  # USI

def f(X0, X1, X2):
    """Fonction permettant le calcul de la nouvelle grandeur (A MODIFIER)"""
    return X0*X1+X2

# Calcul de la grandeur, de sa moyenne et de son écart-type (A MODIFIER)
Xe=[]
for i in range(N):
   X0b=np.random.uniform(X0-uX0,X0+uX0)
   X1b=np.random.uniform(X1-uX1,X1+uX1)
   X2b=np.random.uniform(X2-uX2,X2+uX2)
   Xeb=f(X0b,X1b,X2b)
   Xe.append(Xeb)
moy = np.mean(Xe)
std = np.std(Xe)
print('Par la méthode de Monte-Carlo avec ',N,'points : ')
print('    moyenne : ',moy)
print('    écart-type : ',std)
