#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Oct  2 17:59:10 2018

@author: Moi

"""
#import des modules nécessaires (graphiques et génération aléatoire)
import matplotlib.pyplot as plt
import numpy as np
import numpy.random as npr

#Création d'un échantillon issu d'une population de densité de probabilité uniforme sur un intervalle (rectangulaire)
ars=3.12;brs=3.17;
# ...........................

#Calcul de l'incertitude-type de la distribution rectangulaire
urs=(brs-ars)/(2*np.sqrt(3));

#Calcul des moyenne et estimateur de l'écart-type de l'échantillon rectangulaire
moyrs=np.mean(rs);sigmans=np.std(rs);

#préparation d'un objet graphique : histogramme rectangulaire (normalisé) à présenter en premier dans une fenêtre graphique à un rang et deux colonnes
plt.clf()
plt.subplot(1,2,1)
plt.hist(rs, bins=4000,range=(0,2*moyrs),density=True,histtype='step', linewidth=1)

#Création d'un échantillon issu d'une population de densité de probabilité gaussienne avec écart-type et moyenne fixés
# .............................

#Calcul des moyenne et estimateur de l'écart-type de l'échantillon gaussien
moyns=np.mean(ns);sigmans=np.std(ns);

#préparation d'un objet graphique  : histogramme gaussien (normalisé) 
# .............................

#Création d'un échantillon issu d'une population de densité de probabilité triangulaire
ats=3.6;bts=3.8;mts=(bts+ats)/2;
# .............................

#Calcul de l'incertitude-type de la distribution triangulaire par la LPU
uts=(bts-ats)/(2*np.sqrt(6));

#Calcul de la moyenne et de l'estimateur de l'écart-type de l'échantillon triangulaire
moyts=np.mean(ts);sigmats=np.std(ts);

#préparation d'un objet graphique : histogramme triangulaire (normalisé) 
# .............................

#réalisation de l'échantillon fonction monômiale des trois variables
prodquot=ns*ts/(rs*rs);

#Calcul de la moyenne et de l'estimateur de l'écart-type de la distribution de la variable ""monôme des trois variables"
moyprodquot=np.mean(prodquot);sigmaprodquot=np.std(prodquot);

#affichage console des moyennes et incertitudes-type pour LPU
print (moyrs,'±',urs)
print (moyns,'±',sigmans)
print (moyts,'±',uts)

#Calcul de l'incertitude-type sur la variable "monôme" par la LPU
# .............................

#affichage console de la moyenne et incertitude-type de la variable "monôme" par la LPU
print ("Variabilité estimée")
print ('par LPU : ',moyns*moyts/(moyrs*moyrs),'±',sigmacalc)

#affichage console de la moyenne et estimateur d'écart-type de la variable "monôme" dans la distribution
print ('par MCM : ',moyprodquot,'±',sigmaprodquot)

#affichage console de l'intervalle de confiance à 95% basé sur la LPU
print ("L'intervalle de confiance d'environ 95% est de",round(moyns*moyts/(moyrs*moyrs)-2*sigmacalc,2),'à',round(moyns*moyts/(moyrs*moyrs)+2*sigmacalc,2))

#préparation d'un objet graphique à présenter en second dans une fenêtre graphique à un rang et deux colonnes
plt.subplot(1,2,2)

#préparation d'un objet graphique histogramme de l'échantillon "monôme"
plt.hist(prodquot, bins=400,density=True,histtype='step', linewidth=1)

#préparation des tableaux d'abscisses et ordonnées de la densité de probabilité gaussienne de moyenne et incertitude-type calculées par LPU
x1=np.arange(0,2*moyprodquot,moyprodquot/10000)
f =(1/(sigmacalc*np.sqrt(2*np.pi)))*np.exp(-((x1-moyprodquot)/sigmacalc)**2/2)

#préparation de l'objet graphique : "densité de probabilité gaussienne" avec remplissage couleur de la surface sous la courbe
plt.plot(x1,f,'r',alpha=0.5)

#préparation de l'objet graphique  : "bande rectangulaire de largeur l'intervalle de confiance à 95%"
plt.axvspan(moyprodquot-2*sigmacalc,moyprodquot+2*sigmacalc,0,1/(1.5*sigmacalc),alpha=0.2)

#affichage de la fenêtre graphique
plt.show()
