import numpy as np
import matplotlib.pyplot as plt

# Résistances R et précision associée en ohm
R = np.array([100,500,1e3,3e3,6e3])
delta_R = np.array([1,5,10,30,60])
# Temps caractéristiques tau et précision associée en s
tau = np.array([1.1e-4,4.9e-4,9.9e-4,30e-4,61e-4])
delta_tau = np.array([0.2e-4,0.2e-4,0.5e-4,1e-4,1e-4])

# Détermination des paramètres pente et ordonnée à l’origine par régression linéaire
pente,ordao = np.polyfit(R,tau,1)

# Nombre de simulations à effectuer 
N = 1000

# Calculs avec une distribution de probabilité uniforme
liste_pente,liste_ordao = [], []
for i in range(N):
    l = len(R)
    tirage_R = np.random.uniform(R-delta_R,R+delta_R ,l)
    tirage_tau = np.random.uniform(tau-delta_tau, tau+delta_tau,l)
    p=np.polyfit(tirage_R,tirage_tau,1)
    liste_pente.append(p[0])
    liste_ordao.append(p[1])
u_pente = np.std(liste_pente,ddof=1)
u_ordao = np.std(liste_ordao,ddof=1)

# Tracé de la droite modèle et des points expérimentaux avec les barres d’erreur
abs=np.linspace(min(R),max(R),2)
plt.plot(abs, pente*abs + ordao, 'r', label='Régression linéaire')
plt.errorbar(R,tau,xerr=2*delta_R/np.sqrt(3) ,yerr=2*delta_tau/np.sqrt(3),fmt='b+',label='Mesures')
plt.title("Tps caractéristique circuit RC")
plt.xlabel("R en ohm")
plt.ylabel("tau en s")
plt.legend()
plt.show()

# Affichage des paramètres du modèle et les incertitudes-types sur ces paramètres
print("incertitude-type sur C u(C) =", u_pente,"F (rappel : *ne conserver que 2 CS)")
print("Capacité C =",pente,"F (rappel : **conserver un nombre de CS cohérent avec la précision de u(C))") 
print("incertitude-type sur l'ordonnée à l'origine u(b) =", u_ordao,"s (rappel *)")
print("ordonnée à l'origine b =",ordao,"s (rappel **)") 

