module_equadif.mws

Informatique

Équations différentielles

I.  Equations différentielles

1.  Comment formuler une équation différentielle en Maple  ? Consultez l' aide  ; regardez les exemples . Certaines fonctions de base sont disponibles immédiatement ; d'autres nécessitent le chargement du package DEtools  :

>    with(DEtools):

2.  On va étudier le fonctionnement de Maple  sur l'exemple de cette e.d. vue en exercice :

2 x (1 -x ) y'  + (1 -x ) y = 1

     (a)  Définissez-la en Maple  (en lui donnant un nom), puis demandez la résolution. Sur quel intervalle Maple  la résout-il "spontanément" ?

>   

>   

     (b)  Traçons cette première solution. On observe qu'elle est fournie sous la forme d'une égalité  dont le membre de droite contient l' expression de la fonction dont on a besoin. Il faut donc extraire ce membre de droite ( rhs ) puis récupérer en tant que fonction l'expression obtenue ( unapply ). Ensuite, on peut tracer cette fonction sur le domaine convenable avec plot , après avoir fixé une valeur (p.ex. 0) pour la constante qui intervient dans l'expression.

>   

>   

     (c)  Utilisez assume  pour forcer Maple  à effectuer la résolution sur tous les intervalles possibles.

>   

>   

>   

 3.  tracé des solutions :

     (a)  Comment récupérer en tant que fonctions ( unapply ) les membres de droite ( rhs ) des expressions proposées par Maple  comme solutions ?

>   

>   

     (b)  En fixant des valeurs arbitraires pour les constantes, tracer une solution sur chaque domaine de résolution.

>   

>   

II. Méthode d'Euler

On rappelle que la méthode d'Euler consiste à approcher la courbe d'une solution d'une équation différentielle

y' = F( x , y ) (1)

par une ligne polygonale rejoignant les points ( a[k], y[k] ) où a[0] = a , y[0] = y(a) , a[k] = a+kh  et

y[k+1] = y[k]+h*F(a[k],y[k])  (2)

pour des valeurs de k  telles que a+kh <= a[n] .

1.  On rappelle en outre qu'étant données deux séquences s1  et s2  en Maple , leur concaténation (mise bout à bout) s'obtient en écrivant simplement s1,s2 .
    Soit
s[k]  une séquence Maple  supposée contenir, à la suite de précédents calculs, la succession de points [ a[0] , y[0] ],[ a[1] , y[1] ], ..., [ a[k] , y[k] ]. On donne le point [ a[k+1] , y[k+1] ] et on souhaite former la séquence [ a[0] , y[0] ],[ a[1] , y[1] ], ..., [ a[k] , y[k] ],[ a[k+1] , y[k+1] ], notée s[k+1] .
Écrire une procédure
ajoutePoint(x,y)  effectuant ce travail. Cette procédure utilisera la variable globale s  (donc comportera la déclaration global s;  dans son en-tête).

>    ajoutePoint := proc(x,y)
global s ;

>   

2.  Les données sont l'équation (1) : y ' = F ( x , y ), a[0] , a[n] , h  et b . Les y[k]  sont définis à l'aide de la relation (2). On souhaite construire la séquence de points s[n]  = [ a[0] , y[0] ],[ a[1] , y[1] ], ..., [ a[n] , y[n] ]. Pour cela, on va gérer une variable s  (de type exprseq ) valant successivement tous les s[k] .

     (a)  Quelle doit être la valeur initiale de s  ?

     (b)  Écrire une procédure construitS(F,h,a0,an,b)  effectuant ce travail à l'aide d'une boucle. On déclarera à nouveau s  comme variable globale, afin de pouvoir réutiliser le 1.

>   

>   

3.  Quelle instruction doit-on utiliser pour effectuer le tracé de la séquence de points s  obtenue en 2.(b)  ?

4.  Déduire des question précédentes une procédure Euler(F,h,a0,an,b)  effectuant le tracé de la ligne polygonale approchant la solution y  de (1) telle que y(a[0]) = b . Cette procédure fera éventuellement appel à celles des questions précédentes.

>   

Testez maintenant la procédure sur un exemple :

>    F := (x,y) -> -y + exp(-x)*cos(10*x) :