#SE2 Euler

import matplotlib.pyplot as plt #importation des bibliothèqes de tracé de courbe
import numpy as np #bibliothèque de calcul numérique

#l'équadiff s'écrit: u'(t)=f(u, t) où f(u, t)=(E - u)/tau
#la relation de récurrence s'écrit: u_{k+1} = u_k + h*f(u_k, t_k)

def ordre1_euler(tau, E, n): #definition de la fonction Euler d'arguments tau, E et n
    t = 0 #initialisation des variables
    u = U0
    les_t = [0]  #creation d'une liste ayant pour premier element 0, le reste etant vide
    les_u = [U0] #creation d'une liste ayant pour premier element U0, le reste etant vide
    h = tmax / n #definition du pas
    for i in range(n):  #début de la boucle for : pour i variant de 0 à n-1
        u = u + h * (E - u) / tau #on calcule uk+1 connaissant uk
        t = t + h                 #on calcule tk+1 connaissant tk
        les_u.append(u)           #on ajoutte les valeurs calculées dans les listes
        les_t.append(t)
        #les_t contient [t0,...,ti] et les_u contient [u0,...,ui]
    return(les_t, les_u)  #la fonction retournera deux listes

##Tracé de la solution de la méthode d'Euler
E=5         #initialisation des variables
U0=0
tau=1
tmax=6*tau
n = 10  #MODIFIER LE NOMBRE DE POINTS

les_t, les_u = ordre1_euler( tau, E, n)          #appel de la fonction avec ses arguments
plt.plot(les_t, les_u, color='b',label='euler')  #tracé de la courbe
plt.show()                                       #affichage de la courbe



