Calcul formel : Mode d'emploi - Exemples en Maple
Claude Gomez, Bruno Salvy, Paul Zimmermann
Masson, 1995
Chapitre IX, section 3.3, exercice 10, page 254.
Philippe.Dumas@inria.fr
http://algo.inria.fr/dumas/Maple/
|
|
L'exercice fait référence à l'exemple 29 de la page 248.
Nous nous appuyons sur les remarques suivantes. D'abord le maximum est une opération associative qui permet d'écrire pour des variables réelles . Ceci permet de donner une expression légérement différente et plus appropriée de l'expression à considérer
.
Ensuite le maximum s'exprime à l'aide de la fonction d'Heaviside, qui est mieux prise en considération par le système que le maximum. On a par exemple
.
La difficulté vient de ce que le maximum est itéré. Nous ne pouvons pas espérer intégrer une composée de fonction d'Heaviside. Par contre il n'y pas de problème si la fonction d'Heaviside n'apparaît qu'à un niveau. Toute la difficulté de l'exercice est donc de contourner cette composition.
Enfin la variable x joue un rôle particulier alors que les deux variables y et z jouent des rôles symétriques. Nous allons donc d'abord intégrer par rapport à x pour évaluer l'intégrale triple.
Pour alléger l'écriture nous définissons une procédure M qui exprime le maximum à l'aide de la fonction d'Heaviside.
> M:=proc(u,v)
u*Heaviside(u-v)+v*Heaviside(v-u)
end:
D'après l'expression F vue plus haut, il faut déterminer laquelle des deux quantités x*max(y,1-y) et (1-x)*max(z,1-z) donne la plus grande valeur. Pour cela nous allons tester le signe de leur différence.
> test:=x*M(y,1-y)-(1-x)*M(z,1-z);
Il est clair que les places de y et z par rapport à 1/2 sont déterminantes. Nous introduisons donc quatre cas, numérotés de manière naturelle. Les instructions qui suivent ne sont pas tout à fait satisfaisantes, d'autant que Heaviside ne se comporte pas de la même manière en V.4 et en V.5. En Maple V.5, Heaviside(2*x) est récrit Heaviside(x), ce qui n'est pas le cas en Maple V.4.
> ycase0:={Heaviside(y-1/2)=0,Heaviside(1/2-y)=1}:
ycase1:={Heaviside(y-1/2)=1,Heaviside(1/2-y)=0}:
> zcase0:={Heaviside(z-1/2)=0,Heaviside(1/2-z)=1}:
zcase1:={Heaviside(z-1/2)=1,Heaviside(1/2-z)=0}:
Ensuite nous regardons ce que devient la fonction test dans chacun des quatre cas.
> printlevel:=2:
for yi in {0,1} do for zi in {0,1} do
test.yi.zi:=collect(subs(ycase.yi,zcase.zi,test),x,factor)
od od;
printlevel:=1:
Dans chaque cas, nous avons une expression de la forme (u+v)*x-u avec u et v entre 0 et 1. Du coup la quantité est négative pour x entre 0 et u/(u+v) et positive de u/(u+v) à 1. Pour calculer l'intégrale sur chacun des petits carrés qui correspondent à chacun des quatre cas, nous déterminons donc la valeur critique de x, puis nous intégrons successivement en x, puis en y et en z. À la fin nous additionnons les quatre intégrales partielles pour obtenir l'intégrale globale. Comme prévu, la fonction d'Heaviside ne pose pas de problème pour l'intégration.
> for yi in {0,1} do for zi in {0,1} do
x.yi.zi:=solve(test.yi.zi,x)
od od;
> for yi in {0,1} do for zi in {0,1} do
Ix.yi.zi:=normal(int(1-x,x=0..x.yi.zi))*M(z,1-z)
+normal(int(x,x=x.yi.zi..1))*M(y,1-y);
Ixy.yi.zi:=int(Ix.yi.zi,y=yi/2..(yi+1)/2);
Ixyz.yi.zi:=int(Ixy.yi.zi,z=zi/2..(zi+1)/2)
od od:
> Ixyz:=add(add(Ixyz.yi.zi,zi={0,1}),yi={0,1});
> Ixyz:=collect(Ixyz,{ln(2),ln(3)});
Nous obtenons bien le résultat annoncé.