#Q4 : Importation des bibliothèques
import numpy as np
import matplotlib.pyplot as plt

#Q5 : Définition des variables
R = 1e3 #valeur de R en ohm
C = 1e-6 #valeur de C en farad


#Q6
def E(t):
    if t<0:
        return 0
    else :
        return 5

#Q7
def derivee_U(t,U):
    return 1/(R*C)*(E(t)-U)

#Q8
def step(t,U,dt):
    return derivee_U(t,U)*dt+U

#Q9
tau = R*C

#Q10
nbrpts = 1000

#Q11
liste_t = np.linspace(0,6*tau,nbrpts)

#Q12
def euler(Uzero, liste_t):
    liste_U = [Uzero]
    for i in range(1, len(liste_t)):
        dt = liste_t[i] - liste_t[i-1]
        U = step(liste_t[i-1], liste_U[i-1], dt)
        liste_U.append(U)
    return liste_U

#Q13
res = euler(0,liste_t)

#Q14
u_th = E(0)*(1-np.exp(-liste_t/tau))

#Q15
plt.plot(liste_t,res, 'o-', label='méthode d\Euler')
plt.plot(liste_t,u_th, label='solution exacte')

plt.xlabel('t (s)')
plt.ylabel('u (V)')
plt.legend()
plt.grid()
plt.show()

