Quelques notebooks SAGE / Python. Équations différentielles ou calcul multivariable.
Image: ubuntu2004
Laboratoire 1 : Premiers pas dans la résolution numérique d'équations différentielles
MAT/GCH217 Automne 2020
Prof : Virginie Charette
Chargés d'exercices : Régis Koch, Kevin Thouin
Le but de ce premier labo est de nous familiariser avec l'usage de Python, particulièrement le calcul symbolique (sympy) pour la résolution d'équations différentielles.
Nous nous concentrerons sur deux aspects :
dessiner le champ de directions associé à une équation différentielle
résoudre "symboliquement" (vs numériquement) une équation différentielle
Commençons par importer quelques bibliothèques :
matplotlib pour tracer des graphes
sympy pour pouvoir faire du calcul symbolique : en fait, nous allons plutôt importer des commandes de la bibliothèque sympy, afin d'en alléger l'écriture.
A. Champs de direction
Commençons par tracer le champ de directions d'une équation différentielle. Une commande utile à cette fin est quiver. Exécutez la prochaine cellule pour en savoir plus long sur la syntaxe de cette commande.
Comment coder le champ de directions d'une fonction
Supposons qu'on ait l'équation différentielle suivante : Rappelons que la pente de la tangente à une courbe est donnée par .
Donc le vecteur suivant est tangent à la courbe-solution :
Et l'argument pour plt.quiver(X,Y,U,V) sera : X=x, Y=x, U=1, V=f(x,y).
Exemple
Nous allons tracer le champ de directions pour l'équation suivante: où sont des constantes quelconques.
Essayez-le avec différentes valeurs de .
Exercice 1. Tracer le champ de directions de l'équation différentielle suivante :
Choisissez vos bornes pour , de manière à ce qu'on voit bien ce qui se passe.
B. La commande dsolve
La commande dsolve appartient à la bibliothèque sympy. On peut lui donner n'importe quelle équation différentielle pouvant être résolue analytiquement (c'est-à-dire symboliquement, ou à la main) et sympy connaît la solution.
Puisqu'on fait du calcul symbolique, il faut déclarer tous nos symboles et fonctions.
Notons que Derivative retourne une fonction symbolique, tout comme y
La commande dsolve prend une équation différentielle, donnée avec la commande Eq, et retourne une équation solution.
Par exemple, utilisons dsolve pour résoudre :
On utilise .rhs si on veut seulement la valeur de la solution :
Exercice 2. Trouvez la solution de l'équation différentielle :
C. Conditions initiales
Par défaut, sympy utilisera C1, C2, etc. pour dénoter les constantes arbitraires.
On peut utiliser la commande solve pour trouver la valeur de C1 déterminée par la condition initiale.
Prenons par exemple l'équation différentielle suivante :
Nous utiliserons la commande solve pour trouver C1 satisfaisant la condition initiale .
Exercice 3. Trouvez la solution de l'équations différentielle suivante :
attention! Il y a deux solutions possibles avant d'imposer la condition initiale!
Exercice 4. Trouvez la solution de l'équation différentielle suivante :
Tracez la courbe solution sur le champ de directions trouvé à l'exercice 1.
D. Solutions implicites vs solutions explicites
Nous avons vu plusieurs exemples d'équations différentielles dont la solution est à laisser sous forme implicite.
Prenons par exemple l'équation suivante : Cette équation se résoud par séparation de variables et on a (vérifiez-le!) :
Tracer la courbe-solution se fait avec la commande plot_implicit. Par exemple, pour tracer le cercle :
Exercice 4. Tracez la courbe :
Utiliser dsolve pour des solutions implicites
Maintenant, sympy connaît toutes sortes de fonctions... et aura donc des réponses parfois étonnantes.
Par exemple, si on lui demande de résoudre l'équation :
voici ce que dsolve répond :
La fonction LambertW est définie comme la fonction inverse de . Autrement dit :