# -*- coding: utf-8 -*-
''' TP 01 proposé par Magali
ce sont mes réponses
'''

import numpy as np
import matplotlib.pyplot as plt


#%% premier exo

def euler(f,y0,a,b,n):
    """méthode d'Euler
        f fonction défininssant l' équation diff
         y0 valeur initiale en a
         b borne de l'intervalle de calcul 
         n nombre de pas
    """
    pas= (b-a)/n
    resultat=[y0]
    y=y0
    t=a
    for i in range(1,n+1):
        y=f(t,y)*pas +y
        resultat.append(y)
        t=t+pas
    return resultat         





#%%
def f2(t,y):
    a,b=y
    return  np.array([2*a+b,-a+2*b])
    


#%%

n=5000
a=0
b=2.6
Y=euler(f2,[3,4],a,b,n)
T=[ a+ (b-a)/n *i for i in range( 0,n+1)]
plt.plot(T,Y)
plt.show()


#%% représentation dans l'espace des phases
n=1000
a=0
b=2.6
Y=euler(f2,[3,4],a,b,n)
T=[ a+ (b-a)/n *i for i in range( 0,n+1)]
plt.plot(T,Y)
plt.show()





# récupération de la liste des ordonnées



AB=np.array(Y)


plt.plot(AB[:,0],AB[:,1])
plt.show()

#%%
from scipy.integrate import odeint
Lt=np.linspace(a,b,n)
y_RK4 =odeint(lambda y,t :f2(t,y) ,[3,4],Lt)

T=[ a+ (b-a)/n *i for i in range( 0,n+1)]
plt.plot(T,Y)
plt.show()


