##TP d'Electricité n°1. Mesure de résistances. Incertitudes
####Détermination de R par la loi d'Ohm ####
import numpy as np
import matplotlib.pyplot as plt


### A-Détermination à partir d'un couple (I,U)
### incertitude de type A par une méthode Monte-Carlo

# Entrez les valeurs de I et de U
I =4.3701 # mA
U =9.560 # V

# Calcul des 1/2domaines de variabilité
DeltaI =0.2*I/100+0.0002 # mA
DeltaU = 0.3*U/100+0.01 # V


# Entrez le nombre de simulation que vous voulez effectuer
N = 10000

# Calculs avec une distribution de probabilité uniforme
R = []#creation d'une liste vide

#Methode Monte-Carlo : on tire au hasard une valeur de I et une valeur de U
#la valeur de R obtenue est placée dans une liste

for i in range(0,N):
    intensité = np.random.uniform(I-DeltaI,I+DeltaI)
    tension = np.random.uniform(U-DeltaU,U+DeltaU)
    resistance = 1000*tension/intensité #intensité en mA
    R.append(resistance)


#Calcul et affichage de la moyenne, de l'écart type et de l'écart normalisé ou z score
moy = np.mean(R)        #valeur moyenne
std = np.std(R,ddof=1)  #ecart type expérimental
Rref=2200               #valeur de référence en ohm   VERIFIER LA VALEUR
z_score=abs((moy-Rref)/std)# écart normalisé

print("-----------------------------")
print("A-Détermination à partir d'un couple (I,U)")
print("Moyenne =",round(moy,2),"ohm")
print("Ecart type =",round(std,2),"ohm")
print("z_score =",round(z_score,2))

# comparaison avec le résultat donné par la formule de composition des incertitudes
u_Rcal=(U*1000/I)*np.sqrt((DeltaI/(I*np.sqrt(3)))**2+(DeltaU/(U*np.sqrt(3)))**2)
print( "u_Rcal=",round(u_Rcal,2),'ohm')


