# capacité numérique charge d'un condensateur

# importation des bibliothèques
from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt

# conditions initiales
E=10
u0=0
tau=0.1 #constante de temps du circuit
t0=0
tmax=0.5
nt=50#nombre de points de discrétisation

#définition de la fonction f
def f(u,t):
    return (E-u)/tau

#définition du vecteur temps
t=np.linspace(t0,tmax,nt)

# calcul des valeurs de u à t
s=odeint(f,u0,t)

#résolution à l'aide de la méthode d'Euler
se=np.zeros(nt)
Te=(tmax-t0)/(nt-1)# pas de discrétisation
for i in range(1,nt):
    se[i]=se[i-1]+Te/tau*(E-se[i-1])

plt.xlabel("temps t en s ")
plt.ylabel("tension en V ")
plt.plot(t,s,color='black',label=' avec odeint')
plt.plot(t,se,"+",color='red',label=' avec euler')
plt.grid(True)
plt.legend(loc="best")
plt.title("charge d'un condensateur")
plt.show()





