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 ( ) où , , et
(2)
pour des valeurs de k telles que .
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
une
séquence
Maple
supposée contenir, à la suite de précédents calculs, la succession de points [
,
],[
,
], ..., [
,
]. On donne le point [
,
] et on souhaite former la séquence [
,
],[
,
], ..., [
,
],[
,
], notée
.
É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 ), , , h et b . Les sont définis à l'aide de la relation (2). On souhaite construire la séquence de points = [ , ],[ , ], ..., [ , ]. Pour cela, on va gérer une variable s (de type exprseq ) valant successivement tous les .
(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 . 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) : |