Equations différentielles. Lignes de courants. Résolution d`équation

Transcription

Equations différentielles. Lignes de courants. Résolution d`équation
TD Méthodes numériques
Equations différentielles. Lignes de courants
PSI˚
Lycée Corneille
1
Equations différentielles. Lignes de courants.
L’objectif de ce TD est de discuter l’utilisation de l’outil informatique au travers de l’exemple de Python
dans le cadre du calcul scientifique.
Plus spécifiquement, on va utiliser les modules Python dédiés au calcul scientifique :
‚ le paquet NumPy qui permet l’utilisation des principales fonctions mathématiques de manière ”vectorielle”
‚ le paquet SciPy dédié au calcul scientifique (en l’occurence, à la résolution d’équation différentielle)
On va chercher dans ce second TD à rappeler/discuter les méthodes utilisées pour intégrer les équations
différentielles d’une (ou plusieurs) fonction(s) continue(s).
Dans un second temps, on utilisera cet outil pour dessiner les lignes de courant autour un cylindre en
rotation.
Résolution d’équation différentielle
Cadre de l’étude
On cherche à résoudre une équation différentielle d’ordre 1 vérifiée par une fonction yptq et qu’on mettra
sous la forme :
dy
“ f py, tq
dt
La fonction f peut être quelconque et caractérise l’équation différentielle qu’on cherche à résoudre.
Dans la suite, on s’intéressera à une équation différentielle d’ordre 1 de la forme
dy
`y “0
dt
– Pour simplifier (et sans perdre en généralité), on prendra τ “ 1. Quelle est la forme de f dans ce cas ?
– Quelle est la forme exacte de la solution avec une condition initiale yp0q “ y0 “ 1 ?
Toute la difficulté de la résolution ”numérique” de ce type de problème réside dans le passage de la description
continue d’une fonction à une représentation discrète. On va donc chercher à trouver la valeur de la fonction
y sur un ensemble de N “ 10p points de l’intervalle r0; 5s (qui est suffisant puisque cela correspond à une
”réponse” à 1%). On va donc chercher à calculer les valeurs yn “ yptn q “ ypn hq avec n P v0, N w
Plus p est grand est plus le pas de temps h est faible.
– La solution exacte étant connue on peut calculer les valeurs yn ”exactes” qu’on stockera dans un vecteur
solexacte qu’on calculera [1] . (on peut tracer la solution pour s’assurer qu’on a pas fait d’erreur)
τ
Méthode d’Euler
La première méthode qui peut être mise en place consiste dans l’algorithme d’Euler. On écrit alors
simplement un développement limité de Taylor Young
yn`1 “ ypn ¨ h ` hq “ ypn
¨ hq `
loomoon
yn
dy
ptn q
dt
loomoon
¨h
“ f pyn , tn q
La fonction f étant connue, on peut donc calculer de proche en proche les valeurs des yn .
– Mettre en oeuvre l’algorithme d’Euler en définissant la fonction euler qui renvoie les valeurs des yn
(stockées dans un vecteur) lorsqu’on lui fournit comme argument la fonction f , la condition initiale y0 et
l’ensemble des valeurs des tn (stockées dans un vecteur t).
On rappelle les fonctions utiles suivantes :
— la fonction linspace (de numpy) permet de déterminer simplement le vecteur t
— la méthode append permet de rajouter ”dynamiquement” une valeur dans un tableau
— la fonction len (de numpy) permet de déterminer la longueur d’un tableau
[1]. ne pas oublier que numpy permet de vectoriser la plupart des fonctions usuelles !
TD Méthodes numériques
Equations différentielles. Lignes de courants
PSI˚
Lycée Corneille
2
Méthode de Runge Kutta d’ordre 2 (ou méthode du point milieu)
Le principe de la méthode du point milieu consiste à ”corriger” la pente de la tangente qu’on utilise pour
calculer yn`1 en prenant en compte la pente au point ”intermédiaire” qu’on notera yn` 1 . Dans le détail, la
2
méthode consiste à écrire
h
yn` 1 “ yn ` f pyn , tn q
2
2
h
yn`1 “ yn ` hf pyn` 1 , tn ` q
2
2
– Mettre en oeuvre l’algorithme la méthode du point milieu en définissant la fonction RK2 qui renvoie les
valeurs des yn (stockées dans un vecteur) lorsqu’on lui fournit comme argument la fonction f , la condition
initiale y0 et l’ensemble des valeurs des tn (stockées dans un vecteur t).
Méthode de Runge Kutta d’ordre 4
L’idée de la méthode de Runge Kutta d’ordre 4 est la même que pour le RK2 mais avec un évaluation
de la pente plusieurs fois afin de ”corriger” au mieux l’erreur commise Dans le détail, la méthode consiste
à calculer 4 fois la pente (qu’on note k)
k1 “ f pyn , tn q
h
k1 , tn `
2
h
k3 “ f pyn ` k2 , tn `
2
k2 “ f pyn `
h
q
2
h
q
2
k4 “ f pyn ` h k3 , tn ` hq
yn`1 “ yn `
h
pk1 ` 2k2 ` 2k3 ` k4 q
6
– Mettre en oeuvre l’algorithme l’algorithme de Runge Kutta d’ordre 4 en définissant la fonction RK4 qui
renvoie les valeurs des yn (stockées dans un vecteur) lorsqu’on lui fournit comme argument la fonction f , la
condition initiale y0 et l’ensemble des valeurs des tn (stockées dans un vecteur t).
Utilisation de la méthode odeint de scipy
Le module scipy.integrate possède sa propre fonction odeint qui permet de résoudre les équations
différentielles d’ordre 1.
La syntaxe à utiliser pour cette fonction est la suivante
import s c i p y . i n t e g r a t e a s s i
...
s o l o d e=s i . o d e i n t ( f , y0 , t )
où f est la fonction qui donne dy
dt donc (pour le moment) ordre1, y0 la condition initiale donc (pour le
moment) r1s et t désigne l’ensemble des instants où on veut calculer la fonction.
Il convient également de remarquer que le format de sortie de odeint est légèrement différent (faire un
print(solide) pour s’en convaincre).
Il suffit d’utiliser les slicers pour s’en sortir en faisant
s o l o d e 2=s o l o d e [ : , 0 ]
TD Méthodes numériques
Equations différentielles. Lignes de courants
3
PSI˚
Lycée Corneille
Comparaison des différentes méthodes
On va chercher à discuter la qualité de l’algorithme d’intégration en ”quantifiant” l’erreur
commise. En notant sol l’ensemble des yn
calculés avec une des méthodes précédentes,
on peut quantifier cette erreur comme le plus
grand écart (en valeur absolue) entre la solution
exacte solexacte et sol.
– Calculer le logarithme de l’erreur maximale commise pour chacune des méthodes
d’intégration précédentes.
Pour différentes valeurs de p (on rappelle qu’on
prend N “ 10p points sur l’intervalle de temps),
calculer l’erreur commise et tracer log de l’erreur
en fonction de p “ log N .
Commenter.
Passage à une équation vectorielle. Exemple d’une équation d’ordre 2
Il peut arriver que l’équation à résoudre soit une équation ”vectorielle” au lieu de scalaire. On va montrer
comment odeint permet de résoudre de telles équations.
On cherche à modéliser le comportement d’un pendule pesant qu’on excite de manière sinusoı̈dale. Montrer
que la mise en équation (sans linéariser) aboutit à
d2 θ
2
` ω 0 sin θ “ A cos ωt
dt2
où ω0 est la pulsation propre de l’oscillateur (linéarité) qu’on prendra arbitrairement égale à 1 (ce qui revient
à adimensionner le temps)et ω la pulsation d’excitation.
Cette équation ne peut être résolue telle quelle car elle est d’ordre 2. L’astuce pour s’en sortir est de se
ramener à une équation vectorielle d’ordre 1 en introduisant la variable v “ dθ
dt . On a alors le système
ˇ
ˇ
ˇ
ˇ
dθ
ˇ θ
ˇ v
“ v
~
ˇ
ˇ
dX
d ˇ
dt
~ tq
ˇ
ùñ
“
“
“ f~pX,
ˇ
ˇ
dt
dt ˇ
d2 θ
dv
ˇ
“
“ ´ sin θ ` A cos ωt
ˇ v
ˇ ´ sin θ ` A cos ωt
dt2
dt
ˇ
ˇ
~ “ ˇ θ est un vecteur et f~pX,
~ tq est une fonction vectorielle représentant la variation temporelle de ce
où X
ˇ v
vecteur.
–Définir la fonction pendule qui définit la fonction f précédente.
La fonction odeint permet de résoudre les équations différentielles vectorielles (il est également possible
d’adapter les autres méthodes d’intégration que nous avons développé !).
9
–Résoudre avec odeint l’équation précédente en prenant A “ 0.1, ω “ 1, θp0q “ 1 et θp0q
“ 0.
–Représenter la solution θptq de cette équation (et faire un commentaire physique intelligent sur sa forme !)
Tracé de ligne de courant/champ
On va maintenant utiliser la fonction odeint pour tracer les lignes de champ/courant d’un champ vectoriel. Cette méthode est utile aussi bien en mécanique des fluides, qu’en électrostatique ou magnétostatique !
On s’intéressera dans la suite au cas de la mécanique des fluides
TD Méthodes numériques
Equations différentielles. Lignes de courants
4
PSI˚
Lycée Corneille
Définition d’une ligne de courant
Soit un champ de vitesse bidimensionnel stationnaire ~v pM q “ rvx px, yq, vy px, yqs, la ligne de courant est
par définition une courbe ayant pour origine un point M0 “ rx0 , y0 s qu’on choisit et qui est tangente en
chacun de ses points au vecteur vitesse. Si on considère le déplacement dx, dy le long de la ligne de courant
au voisinage du point M , on peut donc écrire qu’il existe un réel α tel que
ˇ
ˇ
ˇ dx
ˇ vx
ˇ
ˇ
ˇ dy “ α ˇ vy “ β~u
où ~u est un vecteur unitaire (qu’on peut donc calculer simplement connaissant ~v !)
Si on note ds le déplacement élémentaire le long de la ligne de courant (s est donc la distance parcourue le
long de la ligne i.e. l’abscisse curviligne) , on peut donc finalement écrire
ˇ
ˇ dx
ˇ
ˇ
ˇ
~
ˇ dx
d ˇˇ x
dX
ˇ ds
~
ˇ
ˇ dy “ ds ~u ðñ ˇˇ dy “ ds ˇ y “ ds “ ~u “ f p~v px, yqq “ ~g px, yq
ˇ
ds
On est donc ramené à une équation différentielle d’ordre 1 d’une fonction de s !
Champ de vitesse autour d’un cylindre en rotation
On donne le champ de vitesse autour d’un
cylindre (de rayon unitaire) en rotation :
ˆ
˙
y 2 ´ x2
y
vx px, yq “ V0 1 ` 2
´C 2
2
2
px ` y q
x ` y2
vy px, yq “ ´V0
2¨x¨y
x
`C 2
2
2
2
px ` y q
x ` y2
où V0 désigne la vitesse du fluide (on peut
la prendre arbitrairement égale à 1) et C
est relié à la rotation du cylindre (on prendra C “ 0.5)
–Ecrire un programme qui permet de calculer et tracer les lignes de courant à partir
de points de départ en x0 “ ´5 répartis
régulièrement sur la verticale dans l’intervalle r´5, 5s.