Calcul formel : Mode d'emploi - Exemples en Maple
Claude Gomez, Bruno Salvy, Paul Zimmermann
Masson, 1995
Chapitre X, section 1.4, exercice 3, page 263.
Philippe.Dumas@inria.fr
http://algo.inria.fr/dumas/Maple/
|
|
1. L'exercice comporte deux questions. Abordons la première de manière brutale, d'abord en V.3 puis en V.5.
> eq:=abs(x)*diff(y(x),x)+(x-1)*y(x)=x^2;
> dsolve(eq,y(x));
> eq:=abs(x)*diff(y(x),x)+(x-1)*y(x)=x^2;
> dsolve(eq,y(x));
On note une petite différence de comportement entre les deux versions. Cela n'a guère d'importance car cette voie est mauvaise. Il convient de discuter suivant le signe de la variable et donc de considérer deux équations.
> `eq+`:=x*diff(y(x),x)+(x-1)*y(x)=x^2;
> dsolve(`eq+`,y(x));
> `Y+`:=subs(%,y(x)):
> `eq-`:=-x*diff(y(x),x)+(x-1)*y(x)=x^2;
> dsolve(`eq-`,y(x));
> `Y-`:=subs(%,y(x)):
Les conditions du théorème de Cauchy-Lispchitz (cas linéaire) sont réunies quand on emploie l'un des deux intervalles ]-infinity,0[ ou ]0,+infinity[. Nous constatons bien que dans chaque cas, l'espace des solutions est de dimension 1.
Il convient maintenant d'étudier le comportement au voisinage de zéro. Une solution définie au voisinage de zéro coïncide avec un Y+ dans un voisinage à droite de zéro et avec un Y- dans un voisinage à gauche de zéro. Nous regardons donc le comportement de ces fonctions au voisinage de zéro.
> series(`Y+`,x);
> series(`Y-`,x);
Nous voyons que Y+ se prolonge par continuité en zéro et donne même une fonction dérivable quel que soit le choix de la constante _C1. Par contre Y- n'admet une limite en zéro que pour une valeur particulière de _C1.
> `Y-0`:=subs(_C1=-2,`Y-`);
> series(`Y-0`,x);
Pour cette valeur particulière _C1=-2, nous obtenons une fonction dérivable à gauche de zéro. Pour que cette fonction dérivable se raccorde avec un Y+ il est nécessaire de spécifier la valeur de la constante _C1 dans Y+.
> `Y+0`:=subs(_C1=-1,`Y+`);
> series(`Y+0`,x);
Nous constatons que les fonctions Y-0 et Y+0 se raccordent en une fonction dérivable (et même de classe C^1) mais la fonction obtenue n'est pas deux fois dérivable en zéro. Cela ne l'empêche pas de fournir une solution, définie sur toute la droite réelle, pour l'équation différentielle proposée. C'est d'ailleurs la seule solution maximale définie au voisinage de zéro.
Le tracé des courbes intégrales illustre bien la situation.
> `picture-`:=plot({seq(subs(_C1=k,`Y-`),k=-5..5)},
x=-4..0,y=-4..4,color=red):
> `picture+`:=plot({seq(subs(_C1=k,`Y+`),k=-5..5)},
x=0..4,y=-4..4,color=red):
> plots[display]({`picture-`,`picture+`});
2. Passons à la seconde question. Notons qu'il ne s'agit pas d'une équation linéaire à cause de la valeur absolue qui porte sur le y. Notons aussi que la fonction nulle est évidemment solution. La discussion est plus subtile que dans le cas précédent parce qu'on ne peut pas préjuger du signe de la solution. Cependant nous avons envie de traiter deux équations comme dans le cas précédent et ces deux équations sont linéaires à coefficients constants d'ordre 2. Leur résolution est donc assurée. Simplement, il ne faut garder que les solutions positives ou négatives suivant le cas. Nous résolvons donc les équations linéaires et nous les tronquons grâce à la fonction d'Heaviside qui est la fonction caractéristique de l'ensemble des réels positifs.
> eq1:=diff(y(x),x,x)-2*y(x);
> Y1:=subs(dsolve(eq1,y(x)),Heaviside(y(x))*y(x));
> eq2:=diff(y(x),x,x)+8*y(x);
> Y2:=subs(dsolve(eq2,y(x)),Heaviside(-y(x))*y(x));
> picture1:=plot({seq(seq(subs(_C1=k,_C2=l,Y1),l=-2..2),k=-2..2)},
x=-4..4,y=-4..4,color=red):
> picture2:=plot({seq(seq(subs(_C1=k,_C2=l,Y2),l=-2..2),k=-2..2)},
x=-4..4,y=-4..4,color=red):
> plots[display]({picture1,picture2});
La question à traiter est maintenant plus claire (dans notre esprit, car elle est en elle-même sans aucune ambiguïté). Il faut dans chaque cas étudier les intervalles maximaux où les solutions des deux équations linéaires ont un signe constant. Ensuite il faut regarder s'il est possible de raccorder ces solutions à signe constant.
Première équation. Commençons par la première équation. La solution générique s'écrit
Si les deux constantes
et
sont nulles, nous avons affaire à la solution
nulle. Écartons ce cas. Si
la solution ne s'annule pas et a le signe de
.
Dans le cas
elle s'écrit
et est définie partout. Dans le cas contraire elle est définie nulle part.
Ensuite si
la solution s'annule aux racines de l'équation
Comme la tangente hyperbolique est strictement croissante et varie de
-1 à 1, la discussion est facile. Si
la solution ne s'annule pas et a le signe de
(comme on le voit en regardant à l'infini). Donc si
on a une solution sur toute la droite réelle et sinon pas de
solution.
Enfin si
,
l'équation qui donne les points où s'annule la solution
possède exactement une racine
caractérisée par l'équation
En écrivant la solution sous la forme
nous voyons que si
nous obtenons une solution définie pour
par contre dans le cas
nous obtenons une solution définie pour
.
Deuxième équation. Considérons maintenant les solutions de la deuxième équation. Elles s'écrivent
Bien sûr, nous retrouvons la solution nulle que nous
écartons. En définissant un nombre
strictement positif par
nous pouvons récrire les solutions sous la forme
Évidemment une telle fonction s'annule une infinité de
fois. Les intervalles utiles sont ceux où elle est
négative. Ils ont pour extrémités les
et
avec
entier relatif.
Raccord. Maintenant la question qui se pose est de savoir s'il est possible de raccorder les solutions du premier type avec les solutions du second type pour franchir l'axe des abscisses. Nous calculons la dérivée d'une fonction du premier type et nous tenons compte de l'égalité
et de l'équation satisfaite par
pour obtenir la valeur de la dérivée au point où
le graphe de la fonction rencontre l'axe des abscisses. Cela nous
donne la valeur
En choisissant les deux constantes, nous obtenons n'importe quel
nombre réel non nul, positif ou négatif suivant le signe
de
.
De la même façon les fonctions du deuxième type
ont comme dérivées aux points où elles s'annulent
respectivement
et
.
En choisissant le nombre
on obtient n'importe quel nombre réel non nul.
Solutions maximales.
Finalement on peut énumérer les solutions maximales de
l'équation différentielle proposée. On remarquera
d'ailleurs que cette équation satisfait les hypothèses
du théorème de Cauchy-Lipschitz dans tout le plan des
(x,y). Les solutions maximales sont de trois types. Il y a
d'abord la solution nulle, définie sur toute la droite
réelle. Ensuite il y a les solutions du premier type qui ne
prennent que des valeurs strictement positives sur toute la droite
réelle (cas
,
et
,
,
).
Enfin il y a les solutions définies par
morceaux. Précisément il y trois morceaux : de
-infinity à un certain x0- on a une solution
de la première équation ; on passe ensuite a une
solution de la seconde équation en raccordant les
dérivées ; ensuite en x0+=x0-+Pi*sqrt(2)/4
on raccorde avec une solution de la première équation.
Le dernier type de solution maximale est évidemment le plus compliqué. Pour étayer nos dires nous procédons à une petite expérience en construisons une solution de ce type. Nous choisissons arbitrairement une solution positive définie sur un intervalle de la forme ]-infinity,x0[.
> y1:=cosh(sqrt(2)*x)-2*sinh(sqrt(2)*x);
Nous déterminons le point où elle s'annule.
> `x0-`:=solve(y1,x);
Ensuite nous cherchons l'entier relatif
à employer pour raccorder avec une solution de la seconde
équation.
> evalf(`x0-`/(2*Pi/sqrt(2)));
Le calcul nous dit qu'il faut prendre
. Nous définissons donc le deuxième morceau de la
solution, en laissant le paramètre qui va permettre d'ajuster
les dérivées.
> y2:=A*sin(2*sqrt(2)*(x-`x0-`)-Pi);
Nous comparons les comportements en x0- pour choisir le bon paramètre.
> series(y1,x=`x0-`,3);
> series(y2,x=`x0-`,3);
> y2:=subs(A=sqrt(3)/2,y2);
Ayant trouvé le deuxième morceau, nous allons voir ce qui se passe au point où il va revenir à zéro.
> `x0+`:=`x0-`+Pi/2/sqrt(2);
> series(y2,x=`x0+`);
Nous introduisons alors le troisième morceau en employant une solution de la première équation.
> y3:=K1*cosh(sqrt(2)*x)+K2*sinh(sqrt(2)*x);
Nous écrivons les équations qui expriment que le troisième morceau s'annule en x0+ et y possède la bonne dérivée.
> eq0:=subs(x=`x0+`,y3);
> eq1:=subs(x=`x0+`,diff(y3,x))=sqrt(3)*sqrt(2);
Nous déterminons ainsi les deux paramètres et nous substituons leurs valeurs.
> solve({eq0,eq1},{K1,K2});
> y3:=combine(convert(subs(%,y3),exp),exp);
La solution maximale est déterminée. Nous pouvons la tracer.
> plot(piecewise(x<=`x0-`,y1,x<=`x0+`,y2,y3),
x=`x0-`-2..`x0+`+2,color=red);