
"""
ATTRACTEUR DE LORENZ PAR LA METHODE D'EULER EXPLICITE

"""

## Importation des bibliothèques utiles
## ------------------------------------

import numpy as np                  # pour la manipulation des tableaux
import matplotlib.pyplot as plt     # pour les représentations graphiques
from mpl_toolkits.mplot3d import Axes3D # pour les graphes 3D

## Saisie des données du problème
## ------------------------------------
# Définition des constantes utiles
sig = 10      
rho = 28  
beta = 8/3      
 
#Paramètres de la résolution numérique 
r0 = [0.5,0,0]      # vecteur conditions initiales (adimensionné)
dt=0.01           # pas de temps d'intégration
t0, tf = 0, 50    # bornes de l'intervalle de résolution 

## Implémentation de la méthode d'Euler explicite
## ----------------------------------------------

def euler(F, r0, t0, tf, dt):
# A COMPLETER


## Application à l'attracteur de Lorenz
## ---------------------------------------

def Lorenz(r, t):
    """
    Fonction explicitant dr/dt en fonction de r et t
    pour l'attracteur de Lorenz (grandeurs adimensionnées).
    r : vecteur d'état 3D (X,Y,Z)
    """
# A COMPLETER
        

# Résolution  - Représentation graphique
## ---------------------------------------

t,r=euler(Lorenz, r0, t0, tf, dt)

# Tracé 3D

fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')
ax.plot(r[:,0], r[:,1], r[:,2], color='blue')  # nuage de points

ax.set_title("Attracteur de Lorenz")
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")

plt.show()

