Calcul formel : Mode d'emploi - Exemples en Maple

Claude Gomez, Bruno Salvy, Paul Zimmermann

Masson, 1995

Chapitre VIII, section 2.7, exercice 8, page 212.

Philippe.Dumas@inria.fr
http://algo.inria.fr/dumas/Maple/

Page du Projet Algorithmes | Page de Philippe Dumas | Page Maple de Philippe Dumas

Retour en page principale
Table des matières
Index
Maple V.4 worksheet
Maple V.5 worksheet


Théorie | Pratique

Théorie. On peut difficilement imaginer un exercice plus truqué. Dans la théorie des séries de Fourier, la preuve du théorème de Dirichlet emploie le noyau de Dirichlet. Il est défini par la formule

[Maple Math]

ce qui donne

[Maple Math]

La première expression montre clairement que l'intégrale du noyau de Dirichlet sur un intervalle de longueur 2*Pi vaut Pi. Ensuite la théorie fait considérer le noyau de Fejér qui s'obtient par la moyenne de Cesàro à partir du noyau de Dirichlet

[Maple Math]

Le noyau de Fejér s'exprime encore par la formule.

[Maple Math]

Puisqu'on applique simplement une moyenne, la valeur de l'intégrale du noyau de Fejér sur un intervalle de longueur 2*Pi vaut Pi. Si l'on regarde l'intégrale proposée dans l'exercice, on constate que l'on est exactement en train de calculer cette intégrale du noyau de Fejér. La translation par alpha, la translation par x et la symétrie sont des illusions et ces paramètres ne servent en fait à rien. La réponse attendue est donc Pi. Comme on va le voir, elle ne va être obtenue que par un effort certain. Cet exercice montre bien qu'il vaut mieux disposer d'un peu de culture que d'un système de calcul formel.

Pratique. Pour mener le calcul, nous définissons le terme générique et nous l'exprimons avec des exponentielles, plus adéquates que les fonctions trigonométriques (car les expressions sont rationnelles en les exponentielles).

> un:=(sin(n*theta)/sin(theta))^2/n;

[Maple Math]

> un:=convert(readlib(`combine/trig`)(un),exp);

[Maple Math]

Ensuite il faut coder le fait que n est une entier. On peut évidemment penser à employer assume. Mais ce procédé est fondé sur un bricolage tartiné sur du calcul formel et n'est pas correctement pris en compte par toutes les procédures. Plutôt que cette astuce de gagne-petit, nous préférons employer une idée qui ressortit vraiment au calcul formel : pour coder le fait qu'une variable est entière nous employons une série génératrice. Autrement dit pour manipuler la suite (u_n) nous passons par la série formelle sum(u_n*z^n,n=0..infinity).

> gf:=sum(expand(un*z^n),n=1..infinity);

[Maple Math]
[Maple Math]

> gf:=evalc(gf);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

Il reste quelques cos^2+sin^2 donc une application de combine/trig s'impose.

> gf:=combine(gf,trig);

[Maple Math]
[Maple Math]
[Maple Math]

Si nous pensons que les indéterminées z et theta représentent des variables réelles, il est clair que la partie imaginaire doit être nulle, donc nous ne conservons que la partie réelle.

> gf:=evalc(Re(gf));

[Maple Math]

Dans la question on emploie la variable t et ici nous employons la variable theta. Les deux sont liées par la relation theta=(x-t)/2, donc il faut faire varier theta dans un intervalle de longueur Pi. Cependant l'intégrande f(theta) satisfait, pour tout theta, f(-theta)=f(theta) et f(Pi+theta)=f(theta). Elle est donc périodique paire et l'intégrale cherchée est le double de l'intégrale de 0 à Pi/2. Ainsi l'intégrale est indépendante d'alpha et x, comme nous l'avions remarqué au début (mais nous ne voulons pas nous appuyer sur le noyau de Fejér et c'est pourquoi nous donnons une preuve indépendante). Nous tentons donc de calculer cette intégrale.

> int(gf,theta=0..Pi/2);

[Maple Math]

La présence des valeurs absolues perturbe le système et nous nous débarassons de celles-ci en considérant que l'indéterminée z représente un réel strictement compris entre 0 et 1.

> gf:=eval(subs(z-1=1-z,abs=(expr->expr),gf));

[Maple Math]

> int(gf,theta=0..Pi/2);

[Maple Math]

Cela nous avance guère et, pleins d'espoir, nous poussons le système dans la voie de la vérité en employant une intégration par parties.

> hope:=student[intparts](%,numer(op(1,%)));

[Maple Math]

> op([2,1],hope);

[Maple Math]

Comme combine/trig n'a pas l'effet escompté, nous arrangeons l'expression à la main pour faire disparaître l'apparente singularité en Pi/2.

> integrand:=-subs(sin(2*theta)=2*sin(theta)*cos(theta),
tan(theta)=sin(theta)/cos(theta),op([2,1],hope));

[Maple Math]

Notre espoir d'arriver au bout de ce calcul grandit.

> Hope:=int(integrand,op([2,2],hope));

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

Il est clair qu'il faut appliquer simplify/radical pour améliorer cette écriture. Nous passons en paramètre l'option symbolic faute de quoi l'interprétation usuelle des indéterminées par des variables complexes empêcherait toute transformation.

> simplify(Hope,radical,symbolic);

[Maple Math]
[Maple Math]

Nous voyons poindre des racines carrées de z. Comme nous n'aimons rien tant que les expressions rationnelles, nous procédons à un changement de variables pour éliminer cette racine carrée.

> glory:=simplify(subs(z=Z^2,Hope),radical,symbolic);

[Maple Math]
[Maple Math]

> collect(glory,arctan,normal);

[Maple Math]

Nous n'allons pas être volontairement aveugles. Notre Z se promène dans l'intervalle ouvert ]0,1[, du moins c'est ainsi que nous l'interprétons. Or pour x strictement négatif, nous avons Arctg(x)+Arctg(1/x)=-Pi/2. Nous modifions en conséquence et à la main l'expression ci-dessus.

> eval(subs(arctan=(expr->-Pi/4),%));

[Maple Math]

Nous n'oublions pas que nous calculions la moitié de l'intégrale cherchée.

> Glory:=2*normal(%,expanded);

[Maple Math]

> Glory:=normal(subs(Z^2=z,Glory));

[Maple Math]

La conclusion s'impose : la suite des intégrales est constante de valeur Pi.

On pourrait aussi imaginer de chercher une récurrence linéaire à coefficients rationnels en n satisfait par la suite u_n, ce qui fournirait une équation différentielle à coefficients rationnels satisfaite par la série génératrice. Pour passer de l'une à l'autre on employerait gfun. Ceci éviterait les problèmes d'interprétation des indéterminées comme des variables réelles.

Retour en page principale