import matplotlib.pyplot as plt

tau = 1e3 * 1e-9 # calcul de tau = R*C
u0 = 0           # valeur initiale
E = 10           # valeur de la tension imposée pour t>0

fin = 5*tau      # durée de la simulation
dt = tau/10      # pas de temps, assez court 
N = int(fin/dt)  # calcul du nombre total d'itérations nécessaires

#------- Méthode d'Euler -------#
# Initialisation des listes :
liste_t = [0]
liste_u = [u0]
t = 0
u = u0

for i in range(N):
    # on dispose des variables de l'itération précédente : t et u
    # et on calcule leurs nouvelles valeurs :
    u = u + dt*(-u/tau + E/tau)            # A COMPLETER
    t = t + dt                             # A COMPLETER
    
    # On ajoute ces nouvelles valeurs à chaque liste :
    liste_t.append(t)                      # A COMPLETER
    liste_u.append(u)                      # A COMPLETER

#------- Tracé graphique -------#
plt.figure(1)              # crée la figure 1
plt.plot(liste_t, liste_u) # on trace
plt.xlabel('t (s)')        # légende de l'axe des abscisses
plt.ylabel('u (V)')        # légende de l'axe des ordonnées
plt.grid()                 # ajoute une grille
plt.show()                 # affiche le graphe





# Code à décommenter pour la question 4.
# #------- Calcul de la solution théorique, pour comparaison -------#
# # Initialisation des listes :
# t_theo = []  # contiendra des instants t où u_theo est calculé
# u_theo = []  # contiendra les valeurs de u_theo
# 
# # Boucle for pour créer 100 valeurs de t_theo et de u_theo
# for i in range(100):
#     t = fin/100*i                # ainsi t vaut 0, 1*fin/100, 2*fin/100, etc...
#     u = (u0-E)*exp(-t/tau) + E   # calcul de u
#     u_theo.append(u)             # ajout dans la liste
#     t_theo.append(t)             # ajout dans la liste

