import numpy as np
import matplotlib.pyplot as plt

def regression_incertitude(U,I,u_U,u_I,N):
    a,b = np.zeros(N),np.zeros(N)
    n = len(U)
    for k in range(N):
        X = np.random.normal(I,u_I) 
        Y = np.random.normal(U,u_U)
        a[k],b[k] = np.polyfit(X,Y,1)
    return np.mean(a),np.mean(b),np.std(a,ddof=1),np.std(b,ddof=1)
    

data_1 =  np.loadtxt("TP7_ampoule.txt",skiprows=1,dtype=float)
U1,I1,u_U1,u_I1 = data_1[:,0],data_1[:,1],data_1[:,2],data_1[:,3]
plt.figure()
plt.errorbar(I1,U1,yerr=u_U1,xerr=u_I1,marker='*',
            linestyle='none')
plt.title("Caractéristique ampoule")
plt.xlabel("$I$ (mA)")
plt.ylabel("$U$ (V)")
plt.grid()
plt.show()

data2 =  np.loadtxt("TP7_pile.txt",skiprows=1,dtype=float)
U2,I2,u_U2,u_I2 = data2[:,0],data2[:,1],data2[:,2],data2[:,3]
p = regression_incertitude(U2,I2,u_U2,u_I2,10000)
E,u_E = p[1],p[3]
r , u_R = -p[0],p[2] 
plt.figure()
plt.errorbar(I2,U2,yerr=u_U2,xerr=u_I2,marker='*',
            linestyle='none')
plt.plot(I2,E-r*I2)
plt.title("Caractéristique pile")
plt.xlabel("$I$ (mA)")
plt.ylabel("$U$ (V)")
plt.grid()
plt.show()
print("E="+str(E))
print("r="+str(r))
print("u(E)="+str(u_E))
print("u(r)="+str(u_r))


data =  np.loadtxt("TP7_diode.txt",skiprows=1,dtype=float)
U,I,u_U,u_I = data[:,0],data[:,1],data[:,2],data[:,3]
plt.figure()
plt.errorbar(I,U,yerr=u_U,xerr=u_Imarker='*',
            linestyle='none')
plt.title("Caractéristique diode")
plt.xlabel("$I$ (mA)")
plt.ylabel("$U$ (V)")
plt.grid()
plt.show()
