Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

TD3 Python

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 4

ASD TD3

Python

Objectif

L'objectif de la séance est d'utiliser le logiciel Python et ses bibliothèques numpy et scipy pour simuler
les solutions du système d'équations diérentielles vu dans les deux premiers TD à l'aide des méthodes
d'intégration numérique étudiées en cours.

Introduction
1. Dans le menu Windows, sélectionnez Anaconda et lancez Spyder. Le programme peut mettre du
temps à se lancer, il est inutile de multiplier les double-clics. Spyder est un environnement de
développement pour Python.

Une fois Spyder ouvert, vous verrez à gauche une grande fenêtre principale, l'éditeur, ainsi que deux
fenêtres à droite, l'aide (en haut) et la console (en bas). Spyder peut être utilisé de deux façons diérentes.
La première consiste à saisir des instructions Python dans la console et à les exécuter grâce à la touche
entrée. Spyder eectue alors l'instruction demandée et ache le résultat dans la console.

2. Dans la fenêtre de commande, tapez les instructions suivantes l'une après l'autre et exécutez-les
avec la touche entrée. Expliquez l'eet de chaque instruction.

a=1
a=a+1
a
l=[10, 20, 30, 40]
l
l[2]
len(l)
for i in range(0,len(l)): l[i]+=1

Quand on souhaite eectuer une suite d'instructions, plutôt que de les taper les unes après les autres
dans la fenêtre de commande, on utilise plus volontiers la seconde méthode : on se sert d'un ou plusieurs
chiers texte dans lesquels on enregistre la suite d'instructions à eectuer, puis on demande à Python
d'eectuer toutes ces instructions. C'est cette méthode que nous allons utiliser.

I) Simulation numérique de la réponse aux conditions initiales


(question 6)

1. Construction de la fonction vitesse


3. Pour simuler les solutions d'une équation diérentielle, nous allons utiliser l'éditeur. Créez un nou-
veau chier en cliquant sur l'icône Nouveau chier (page blanche). Ce chier va nous permettre
d'expliquer à Spyder quelle est l'équation diérentielle à laquelle nous nous intéressons. Tapez le
code à trous suivant dans ce chier.

1
td3.py
1 import numpy as np
2 import matplotlib.pyplot as plt
3
4 # constantes
5 u = 9
6
7 # fonction qui renvoie dx/dt
8 def vitesse(x,t):
9 x1 = x[0]
10 x2 = x[1]
11 dx1_dt = 10 * x1 * ??? # à compléter
12 dx2_dt = u - ??? # à compléter
13 dx_dt = np.array([dx1_dt, dx2_dt])
14 return dx_dt
15

4. Complétez les trous ( ? ? ?) pour que la fonction code les équations diérentielles du TD.
5. Sauvegardez ce chier dans votre espace de stockage personnel (disque N ://) en allant dans Fichier,
puis Enregistrer sous. Nous appellerons ce chier td3.
6. Exécutez ce chier en cliquant sur l'icône Exécuter le chier (triangle vert). Une fenêtre avec des op-
tions apparaît. Assurez-vous que les options Exécuter dans une nouvelle console dédiée et Supprimer
toutes les variables avant l'exécution sont bien cochées.
7. Testez le chier en exécutant dans la console vitesse([9,1],0). Que représente le résultat obtenu ?
Les valeurs sont-elles cohérentes ?

2. Simulation des solutions par la méthode d'Euler

8. Rajoutez le code à trous suivant à la suite de votre chier td3.


td3.py
16 # conditions initiales
17 x0 = [8, 1]
18
19 # constantes de l'intégration numérique
20 N = 10
21 tf = 1
22 dt = tf/N
23
24 # instants de calcul
25 instants = np.linspace(0,tf,N+1) # N+1 points entre 0 et tf
26
27 # méthode d'Euler
28 x_euler = np.zeros((N+1,2))
29 x_euler[0,:]=x0
30 for i in range(0,N):
31 x_euler[i+1,:]=??? # à compléter
32
33 # méthode par linéarisation
34 x1_lin = 9-np.exp(-6*instants)/2-np.exp(-12*instants)/2
35 x2_lin = 1+ ??? # à compléter
36
37 # sorties
38 y_euler = x_euler[:,0]*x_euler[:,1]
39 y_lin = 1*(x1_lin-9)+9*(x2_lin-1)+9
40
41 # affichage
42 plt.subplot(3, 1, 1)
43 plt.plot(instants, x_euler[:,0])

2
44 plt.plot(instants, x1_lin)
45 plt.legend(['Euler', 'linéarisation'])
46 plt.xlabel('t')
47 plt.ylabel('x1')
48
49 plt.subplot(3, 1, 2)
50 plt.plot(instants, x_euler[:,1])
51 plt.plot(instants, x2_lin)
52 plt.legend(['Euler', 'linéarisation'])
53 plt.xlabel('t')
54 plt.ylabel('x2')
55
56 plt.subplot(3, 1, 3)
57 plt.plot(instants, y_euler)
58 plt.plot(instants, y_lin)
59 plt.legend(['Euler', 'linéarisation'])
60 plt.xlabel('t')
61 plt.ylabel('y')
62
63 plt.show()

9. Complétez la ligne 31 du code précédent pour implémenter la méthode d'Euler.


10. Complétez la ligne 35 du code précédent à l'aide des calculs faits en TD.
11. Justiez la ligne 39 du code précédent.
12. Exécutez le chier td3. Une fenêtre apparaît, contenant 3 graphes avec sur chacun les deux courbes
souhaitées. La courbe bleue est celle calculée avec la méthode d'Euler, la courbe rouge est celle
calculée à partir de la linéarisation. Ces courbes correspondent-elles aux allures vues à la séance
précédente ?
13. Pour que les courbes soient plus lisibles, nous allons les acher dans une fenêtre séparée. Pour cela,
allez dans Outils, Préférences, Console IPython et dans l'onglet Graphiques, modiez la valeur de
l'option Sortie, qui indique En ligne, par Automatique. Relancez votre programme. Si la modication
d'achage n'est pas prise en compte, fermez la console qui porte le nom de votre chier puis exécutez
à nouveau votre chier td3.
14. Dans le chier td3, changez la variable N pour la mettre à 100 et relancez le programme. Que peut-on
conclure ? Même question avec N=1000 et N=5. Dans la suite, on conservera N=100.
15. Tracez le diagramme de phase (x1 en abscisses, x2 en ordonnées). Pour cela, ajoutez le code à trous
suivant à la n de votre chier td3 et complétez-le.
td3.py (extrait)
64 plt.figure()
65 plt.plot(???) # à compléter
66 ??? # à compléter
67 plt.show()

3. Simulation des solutions avec odeint

La bibliothèque scipy de Python dispose en fait déjà de fonctions qui permettent de calculer numéri-
quement les solutions des équations diérentielles.

16. Chargez la fonction odeint de la bibliothèque scipy en ajoutant au début du chier l'instruction
from scipy.integrate import odeint.
17. Ajoutez l'instruction suivante dans votre chier td3 après la boucle de la partie méthode d'Euler.
td3.py (extrait)
# méthode avec odeint
x_sim = odeint(vitesse, x0, instants)

3
18. Rajoutez dans votre code, dans la partie sorties, une ligne pour calculer la sortie correspondante
y_sim.
19. Ajoutez dans votre code, dans la partie affichage, des commandes permettant d'acher les courbes
obtenues avec odeint sur les mêmes graphiques.
20. Sauvegardez votre chier, puis exécutez-le. Comparez les résultats obtenus avec ceux des autres
méthodes.

II) Simulation numérique de la réponse indicielle (question 7)

Nous allons maintenant modier notre chier pour simuler les résultats de la question 7.

21. Modiez le chier td3 en changeant u=9 par u=10.


22. Modiez le chier td3 en changeant la condition initiale par [9;1].
23. Modiez le chier td3 en changeant les lignes commençant par x1_lin, x2_lin et y_lin avec les
valeurs calculées à la question 7 du TD. Sauvegardez, puis exécutez ce chier. Commentez.
24. Modiez tf pour le mettre à 2. L'écart que l'on observe entre les courbes a-t-il tendance à augmen-
ter ? diminuer ? Comment l'interpréter ?

III) Pour aller plus loin


25. Simulez les solutions de la question 9 (u variable dans le temps) avec une des méthodes vues précé-
demment.
26. Modiez votre chier td3 pour implémenter la méthode de Runge-Kutta 2. Pour cela, vous intro-
duirez des variables x_rk2 pour stocker les états et y_rk2 pour les sorties. Utilisez le pseudo-code
donné dans le cours utilisant des variables intermédiaires F1 et F2. Achez les courbes sur les
mêmes graphiques. Sauvegardez ce chier, puis exécutez-le. Comparez avec la méthode d'Euler et
avec odeint pour diérentes valeurs de N.
27. Implémentez la méthode de Runge-Kutta d'ordre 4.

Vous aimerez peut-être aussi