# -*- 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):
    u,v=y
    return  np.array([2*u/3-4/3*u*v,u*v-v])
    


#%%

n=5000
a=0
b=50
Y=euler(f2,[0.9,0.8],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=1000000
a=0
b=50
Y=euler(f2,[0.9,0.9],a,b,n)
# 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()




