Vous êtes sur la page 1sur 325

Calcul formel : mode demploi

Exemples en Maple
Philippe Dumas Claude Gomez Bruno Salvy Paul Zimmermann

Avant-Propos
e calcul formel est dsormais accessible ` un grand e a dingnieurs, e Lplus chercheurs oules euniversites,etles laboratoires ou nombreplacedetude. de dtudiants, est appel ` prendre une ea de plus en grande dans les bureaux Les syst`mes de calcul formel sont en eet dj` disponibles sur les ordinateurs e ea portables et certains le sont sur des ordinateurs de poche. Ce livre sadresse ` a des utilisateurs, dbutants ou non, qui ne sont pas forcment spcialistes du e e e domaine, mais souhaitent exploiter au mieux les possibilits de leur syst`me. e e De nombreux calculs, trop longs pour tre mens ` bien ` la main, peuvent e e a a tre eectus avec sret en quelques secondes par une utilisation judicieuse e e u e dun syst`me de calcul formel, mais il faut savoir se retrouver parmi les cene taines de fonctions prsentes dans les manuels de rfrence. Pour cela, il e e ee faut dpasser lapproche bo noire o` on pose une question au syst`me, et e te u e on attend quil veuille bien renvoyer une rponse, sans comprendre pourquoi e il choue ou parvient ` un rsultat. Il est important de conna e a e tre quelques oprations sur les objets de base (entiers, polynmes, fractions rationnelles, e o sries), et de savoir quelles classes de probl`mes sait rsoudre un syst`me e e e e (quelles quations direntielles, quels calculs de primitives, quels types de e e syst`mes dquations,...). e e Il nest pas ncessaire dtre informaticien pour lire ce livre, mais la prae e tique dun langage de programmation facilitera la lecture de certains passages. Dun point de vue mathmatique, ce livre peut tre abord avec le niveau des e e e classes prparatoires ou du premier cycle des universits ; certains exercices e e sont pris parmi les questions poses aux concours dentre aux grandes coles. e e e Bien que lessentiel de ce livre sapplique ` tous les syst`mes de calcul a e formel, il tait important den choisir un pour traiter des exemples concrets e et montrer les probl`mes que ce traitement pose. Nous avons choisi le syst`me e e Maple, et tous les exemples ont t raliss en version V.3. La plupart dentre ee e e eux peuvent tre reproduits tels quels dans les autres versions de Maple. e Tous les calculs ont t raliss sur une station de travail Dec Alpha 3000ee e e 400 sous Unix avec le syst`me de gestion de fentres X Window. Les temps e e de calcul, lorsquils sont indiqus, correspondent donc ` cette machine. Mais e a tous les exemples peuvent tre raliss sur nimporte quel ordinateur disposant e e e dune mmoire susante. e

iii

iv

AVANT-PROPOS

Dans la premi`re partie du livre, les principales fonctionnalits du syst`me e e e sont prsentes (chap. I), ainsi que lutilisation de son langage de programe e mation (chap. II). En seconde partie, on aborde successivement les principaux champs dapplication du calcul formel. Dabord le trac de courbes (chap. III), puis les obe jets de base que sont les entiers (chap. IV), les structures reprsentables par un e nombre ni dobjets de base : lalg`bre linaire (chap. V), les polynmes et les e e o fractions rationnelles (chap. VI), suivis par des objets plus symboliques : les suites (chap. VII), les sries et les dveloppements asymptotiques (chap. VIII), e e les fonctions dans les chapitres sur lintgration (IX), le calcul direntiel (X) e e et les calculs en probabilits (XI). Enn on conclut sur le lien entre cale cul formel et calcul numrique, en particulier en abordant le probl`me de e e linterface avec les langages ecaces comme Fortran ou C (chap. XII). Un livre sur le calcul formel est en mme temps un livre sur le calcul. e Plusieurs des mthodes prsentes dans cet ouvrage ne sont pas enseignes en e e e e premier cycle, mais nous illustrons systmatiquement ces mthodes par des e e exemples. Si lon utilise un syst`me de calcul formel sans avoir une ide prcise de e e e ce que signie la question quon lui pose, il est fort possible que la rponse du e syst`me soit fausse. Lutilisation optimale de ce livre pour ltudiant est donc e e en conjonction avec un cours de mathmatiques autour duquel il pourra mener e des exprimentations faciles sans passer par des calculs pnibles, et ainsi dise e poser de plus de temps pour comprendre les concepts. Pour le chercheur ou lingnieur, nous esprons leur donner des balises pour formuler leurs e e probl`mes, de faon ` ce que le syst`me puisse aider ` les rsoudre. e c a e a e

Contents
iii 1

Avant-Propos Introduction Premi`re partie e Syst`me de calcul formel : mode demploi e Chapter I. 1. 2. Une session dtaille e e Classes dexpressions et simplication 2.1. Classes lmentaires ee 2.2. Classes ` forme normale a 2.3. Expressions complexes et simplication 2.4. Hypoth`ses sur les variables e 2.5. Objets composs e 2.6. Oprateurs fonctionnels e 2.7. Exercices Chapter II. 1. Utilisation avancee ` Prise en main du systeme

7 7 16 16 19 22 27 28 29 30 33 33 33 35 39 44 45 46 47 49 52 54 54

Primitives du langage de programmation e 1.1. Elments de syntaxe 1.2. Itration e 1.3. Procdures e 1.4. Exercices Manipulation dexpressions 2.1. Structure des expressions 2.2. Cration dexpressions e 2.3. Types de base et simplication automatique 2.4. Types plus complexes 2.5. Exercices Approfondissement du syst`me e
v

2.

3.

vi

CONTENTS

3.1. 3.2. 3.3. 3.4.

R`gles dvaluation e e Structure interne des objets Maple Dveloppement dextensions du syst`me e e Exercices

54 67 68 72

Seconde partie Domaines dutilisation et applications Chapter III. 1. Courbes et surfaces 77 77 77 80 81 81 83 84 84 84 85 86 87 87 87 87 88 88 89 89 93 93 93 95 99 100 104 106 106 107 113 115

Tracs en deux dimensions e 1.1. Courbes y = f (x) 1.2. Courbes paramtriques et polaires e 1.3. Courbes implicites 1.4. Trac de donnes e e 1.5. Exercices Tracs en trois dimensions e 2.1. Surfaces z = f (x, y) 2.2. Courbes et surfaces paramtres e e 2.3. Surfaces implicites 2.4. Trac de donnes e e 2.5. Trac dintersection e 2.6. Exercices Autres types de tracs e 3.1. Tracs simultans e e 3.2. Lignes de niveau 3.3. Trac point par point e 3.4. Tracs en couleur e 3.5. Animation Chapter IV. Arithmetique et combinatoire

2.

3.

1.

Arithmtique e 1.1. Calculs entiers et rationnels 1.2. Divisibilit et primalit e e 1.3. Fractions continues 1.4. Equations en nombres entiers 1.5. Exercices Combinatoire 2.1. Approche empirique 2.2. Structures dcomposables e 2.3. Le probl`me des ob`ses e e 2.4. Exercices

2.

CONTENTS

vii

Chapter V. 1.

Calcul matriciel

117 117 117 119 120 120 121 121 122 129 130 132 132 132 133 136 137 139 139 141 141 142 150 150 151 156 162 165 165 165 169 172 173 173 175 178 179 179

Matrices et vecteurs 1.1. Les objets vecteur et matrice en Maple 1.2. Manipulation des matrices 1.3. Calculs matriciels de base 1.4. Exercices Alg`bre linaire e e 2.1. Rsolution de syst`mes linaires e e e 2.2. Calculs sur des matrices 2.3. Optimisation linaire e 2.4. Automatique 2.5. Exercices Espaces vectoriels euclidiens 3.1. Isomtries e 3.2. Rduction dune forme quadratique e 3.3. Optimisation quadratique 3.4. Exercices Chapter VI. Polynomes et fractions rationnelles

2.

3.

1.

Oprations de base et polynmes en une variable e o 1.1. Oprations purement syntaxiques e 1.2. Rcriture et simplication e 1.3. Calculs en une variable 1.4. Exercices Polynmes et syst`mes multivaris o e e 2.1. Bases de Grbner o 2.2. Applications 2.3. Exercices Chapter VII. Suites reelles

2.

1.

Rcurrences linaires e e 1.1. Coecients constants 1.2. Coecients polynomiaux 1.3. Exercices Rcurrences dordre un e 2.1. Rcurrences du type un+1 = f (un ) e 2.2. Rcurrences du type un+1 = f (n, un ) e 2.3. Exercices Sommes et produits 3.1. Sommes gomtriques e e

2.

3.

viii

CONTENTS

3.2. 3.3. 3.4. 4.

Suites hypergomtriques et sommes indnies e e e Autres sommes indnies e Exercices

179 180 180 181 181 184 186 189 189 189 191 194 196 198 198 199 199 201 202 203 204 206 207 207 208 209 210 213 214 216

Calculs numriques e 4.1. Premiers termes dune suite rcurrente e 4.2. Evaluations numriques de limites e 4.3. Exercices Chapter VIII. Series et developpements asymptotiques

1.

Sries numriques e e 1.1. Calcul approch de constantes dnies par des sries e e e 1.2. Evaluation exacte de sries e 1.3. Convergence et divergence des sries e 1.4. Exercices Sries enti`res et dveloppements limits e e e e 2.1. Disque de convergence 2.2. Fonctions dnies explicitement e 2.3. Fonctions dnies implicitement e 2.4. Sommes et produits 2.5. Intgrales e 2.6. Sries gnratrices e e e 2.7. Exercices Dveloppements asymptotiques e 3.1. Fonctions dnies explicitement e 3.2. Fonctions dnies implicitement e 3.3. Sommes 3.4. Suites itratives e 3.5. Intgrales e 3.6. Solutions dquations direntielles e e 3.7. Sries gnratrices e e e 3.8. Exercices

2.

3.

CONTENTS

ix

Chapter IX. 1.

Integrales et primitives

219 219 220 222 224 225 227 228 231 232 234 236 237 240 240 241 243

Primitives 1.1. Fractions rationnelles 1.2. Fonctions lmentaires ee 1.3. Autres fonctions 1.4. Commandes de rcriture e Intgrales dnies e e 2.1. Utilisation dune primitive 2.2. Classes dintgrales dnies e e 2.3. Mthode des rsidus e e 2.4. Transformes intgrales e e 2.5. Intgrales multiples e 2.6. Intgration numrique e e Intgrales paramtres e e e 3.1. Cas gnral e e 3.2. Suites dintgrales e 3.3. Exercices Chapter X. Calcul differentiel

2.

3.

245 245 245 249 250 252 252 253 254 255 257 257 258 258 263 264 265 265 265 267 269

1.

Equations direntielles ordinaires e 1.1. Solutions exactes 1.2. Dveloppements en srie et asymptotiques e e 1.3. Mthodes numriques e e 1.4. Exercices Etude direntielle de courbes e 2.1. Un calcul de dveloppe e e 2.2. Un calcul de godsique e e 2.3. Exercices Chapter XI. Calculs en Probabilite

2.

1.

Oprations lmentaires e ee 1.1. Probabilits combinatoires e 1.2. Sommes de variables alatoires e 1.3. Produits de variables alatoires e 1.4. Exercices Marches alatoires et probl`mes de ruine e e 2.1. R`gles du jeu et probl`mes e e 2.2. Premier retour 2.3. Gain 2.4. Ruine

2.

CONTENTS

2.5. 3.

Exercices

269 270 270 271 273 275 275 275 279 281 284 285 286 291 294

Simulation 3.1. Tirage uniforme 3.2. Tirage selon une distribution xe e 3.3. Exercices Chapter XII. Calcul formel et calcul numerique

1.

Calcul numrique ` lintrieur du syst`me e a e e 1.1. La prcision arbitraire e 1.2. Les ottants de la machine 1.3. Un exemple concret Lien avec dautres langages ou biblioth`ques e 2.1. Utilisation de sous-programmes en C ou Fortran 2.2. Code valuant une expression e 2.3. Production de programmes 2.4. Lien avec les biblioth`ques numriques e e

2.

Annexes Annexe A. Annexe B. Informations lectroniques e Revues et confrences e Annexe C. 1. 2. 3. Syst`mes gnraux e e e Syst`mes spcialiss e e e Syst`mes de CAO en automatique e ` Index des systemes actuels Une session Mathematica Autour du calcul formel 301 303 303 303 305 305 306 307 309 309 309 311

Bibliographie Ouvrages gnraux e e Ouvrages plus spcialiss e e Index

Introduction
1858, Charles Delaunay sadressa en ces termes ` lAcadmie a e Enences : jai entrepris il yde plus de douze ans... Deux lach`eplus des SciJai lhonneur faire part ` lAcadmie de a e vement des calculs que a ans tard, il ajouta : Jai lhonneur de prsenter ` lAcadmie le tome XXVIII de ses e a e Mmoires, formant le premier volume de ma Thorie du mouvement de la e e Lune. Deux tomes des Mmoires de lAcadmie des Sciences seront cone e sacrs ` la thorie de Delaunay, le tome XXVIII publi en 1860 (883 pages) e a e e et le tome XXIX publi en 1867 (931 pages). e La Thorie du Mouvement de la Lune. Ltude du mouvement de la Lune se e e ram`ne au calcul de ce quon appelle la fonction perturbatrice. Cette fonction e prend en compte laction de la Terre et les perturbations dues au Soleil. Pour obtenir une approximation prcise du mouvement de la Lune, Delaunay e calcule un dveloppement de la fonction perturbatrice par rapport ` quatre e a petites quantits : les excentricits des orbites de la Lune et du Soleil, le sinus e e du demi-angle entre les plans dorbite de la Lune et du Soleil, et le rapport des distances moyennes ` la Terre de la Lune et du Soleil. a Les oprations ncessaires pour mener ` bien ce calcul sont la recherche de e e a dveloppements limits ` une ou plusieurs variables, la drivation, lintgration e e a e e et la linarisation dexpressions trigonomtriques. Aujourdhui, ` laide dun e e a syst`me sachant eectuer ces oprations, on obtient en quelques minutes le e e dveloppement de la fonction perturbatrice au mme ordre que Delaunay e e (voir lexercice p. 205). Sans pour autant discrditer le travail gigantesque de Delaunay (une e seule erreur a t trouve dans sa formule de cent trente-huit pages de la ee e fonction perturbatrice), cet exemple donne un aperu des nouveaux outils de c calcul scientique disponibles aujourdhui sur ordinateur. Quest-ce que le calcul formel ? Selon le contexte, lexpression calcul formel on dit aussi calcul symbolique, plus rarement calcul mathmatique assist e e par ordinateur a des sens dirents. Nous en distinguons trois. Quand e on dit Delaunay a fait un calcul formel, on veut dire par l` un cala cul symbolique, par opposition ` un calcul purement numrique. Dans la a e phrase le calcul formel est en pleine volution, on dsigne la discipline ree e couvrant les oprations symboliques sur ordinateur. Enn, quand on parle e
1

INTRODUCTION

dun syst`me de calcul formel, cela signie un logiciel permettant de faire e des calculs mathmatiques exacts, cest-`-dire ` peu pr`s ce que lon apprend e a a e en classe prparatoire aux grandes coles scientiques ou dans le premier cye e cle des universits, ce qui ne lempche pas de savoir faire aussi du calcul e e numrique et des tracs graphiques. e e Histoire du calcul formel. Les premiers calculs symboliques sur ordinateur ont t raliss il y a plus de quarante ans. Il sagissait alors doprations ee e e e spciques, comme le calcul de drives de fonctions. Les tout premiers e e e syst`mes taient en gnral spcialiss et crits par une ou deux personnes e e e e e e e (Alpak par Brown en 1964, Formac par Bond et Tobey en 1964). Ces syst`mes ont disparu depuis, faute de moyens humains et de dveloppement. e e Sont apparus ensuite Reduce en 1968, Matlab en 1968 qui a donn Macsyma e en 1970, et Scratchpad, dvelopp par IBM d`s le milieu des annes soixe e e e ante, qui est devenu Scratchpad II en 1975, pour ntre dius ociellement e e quen 1991 sous le nom dAxiom. Ces trois syst`mes (Reduce, Macsyma et e Scratchpad) ont t crits en Lisp. On a longtemps pens que ce langage tait e ee e e prfrable pour dvelopper un syst`me de calcul formel, jusqu` lapparition ee e e a vers le milieu des annes 1970 du langage C, dans lequel ont t crits Maple e eee (1980) et Mathematica (1988), successeur de SMP (1982). Le calcul formel aujourdhui. Il a acquis une notorit considrable depuis ee e 1988 avec larrive de Mathematica, dont le concepteur, Stephen Wolfram, e a men une campagne de publicit impressionnante partout dans le monde. e e Cette publicit a fait mieux conna le calcul formel dans le milieu industriel. e tre Les principaux syst`mes de calcul formel utiliss actuellement sont Axiom, e e Macsyma, Maple, Mathematica et Reduce. Tous les cinq sont des syst`mes e gnraux, cest-`-dire quils savent manipuler des nombres en prcision are e a e bitraire, factoriser ou dvelopper des polynmes et fractions ` nombre quele o a conque de variables, driver et intgrer lorsque cest possible des exprese e sions construites ` laide de fonctions lmentaires, rsoudre des quations, a ee e e direntielles ou non, de faon exacte ou ` dfaut numrique, eectuer des e c a e e dveloppements limits ` un ordre quelconque, manipuler des matrices ` coefe e a a cients symboliques, tracer des graphiques en deux ou trois dimensions. Ces syst`mes voluent sans cesse, au rythme dune nouvelle version tous les ans e e environ. Il existe aussi des logiciels spcialiss pour certains calculs symboliques. e e Ces logiciels ne fournissent pas tous les outils que propose un syst`me gnral, e e e mais ils disposent de fonctionnalits spciques ` un domaine quils sont e e a souvent les seuls ` orir. En outre, dans leur domaine, ces logiciels sont a gnralement plus ecaces que les logiciels gnraux. Cest le cas de Pari et e e e e Kant en thorie des nombres, de Cayley (devenu Magma) et Gap en thorie e e des groupes, de Macaulay pour les manipulations didaux, de Gb pour les e calculs de bases de Grobner.

INTRODUCTION

Note sur les exemples. Nous avons choisi Maple pour illustrer ce livre car, parmi les syst`mes actuels, il nous semble tre le seul ` tre ` la fois dacc`s e e ae a e facile, tr`s dius (aussi bien par le nombre dutilisateurs que par la diversit e e e des machines le supportant), disposant dune biblioth`que susamment riche e et ouverte (on peut lire les sources de la plupart des fonctions), et aisment e extensible. Pour faire ressortir les commandes donnes ` Maple dans les exemples, e a celles-ci sont aches dans une police de caract`res spciale. En revanche, les e e e rsultats renvoys sont achs sensiblement comme Maple le fait lui-mme : e e e e sum(1/n^2,n=1..infinity); 2 6 Pour conomiser lespace, il nous arrive de regrouper plusieurs instructions e sur une seule ligne, comme assume(R1>0); assume(R2>0); ou bien de condenser plusieurs instructions en une seule : s1:=normal(subs(coordsI,y/sqrt(x^2+y^2))); Le lecteur pourra dcomposer les direntes commandes en faisant e e tmp1:=y/sqrt(x^2+y^2); tmp2:=subs(coordsI,tmp1); s1:=normal(tmp2); ce qui lui permettra de mieux suivre les tapes du calcul. e Remerciement. Philippe Dumas a relu patiemment plusieurs versions de chacun des chapitres de ce livre. Ses commentaires, tant sur le plan de la correction que de la pdagogie, ont grandement contribu ` la lisibilit de ce livre. e ea e Nous len remercions vivement, ainsi que J.-C. Fort, pour ses commentaires sur une premi`re version du chapitre XI. e

Premi`re partie e Syst`me de calcul formel : e mode demploi

CHAPTER I

Prise en main du syst`me e


syste calcul peut tre employ e e une calculaUntrice deme delutilisateurformelavoir oubliees.emoire, commecest retrouve poche. Dabord, comme un aide-m le syst`me e des formules que peut Ensuite, et lemploi ` le plus important, le syst`me eectue des calculs longs et fastidieux que e lutilisateur saurait faire lui-mme. Le logiciel apporte alors vitesse et sret. e u e Enn, et cest un usage frquent mais dangereux si les rsultats sont accepts e e e aveuglment, certaines fonctionnalits des syst`mes sont employes comme e e e e bo noires pour eectuer des calculs que lutilisateur ne saurait pas mener tes a ` bien. Nous dtaillons tout dabord un exemple ` travers lequel nous prenons e a un premier contact avec le syst`me Maple et nous introduisons les notions e lmentaires. Ensuite nous donnons un panorama des principales classes ee dexpressions manipules par les syst`mes, ce qui permet daborder les mae e nipulations de base dun syst`me de calcul formel et le probl`me important e e de la simplication des expressions. 1. Une session dtaille e e Le probl`me consiste ` trouver laire de lintersection de deux cercles, le e a centre de lun tant situ sur lautre cercle. Le traitement de cet exemple e e a ` laide de Maple prsente la syntaxe de ce syst`me ; les principes utiliss, e e e comme pour la plupart des exemples de ce livre, sont cependant valables pour ` tous les syst`mes de calcul formel. A titre de comparaison, ce mme exemple e e est trait ` laide de Mathematica en annexe A. ea La premi`re partie de ltude consiste ` xer les notations. Le plan e e a est muni dun rep`re orthonorm daxes Ox et Oy. Les deux cercles (C1 ) e e et (C2 ) ont pour rayons respectifs R1 et R2 . Sans restreindre la gnralit e e e du probl`me, le point O est pris pour centre du cercle (C1 ) et (C2 ) est centr e e en O2 sur laxe Ox (voir g. 1 p. 8). Les quations des deux cercles sont donc e : (C1 ) : (C2 ) :
2 x2 + y 2 = R1 , 2 (x R1 )2 + y 2 = R2 .

Si I et J sont les points dintersection des deux cercles, laire cherche est e gale ` la somme des deux dirences daires suivantes : e a e laire du secteur OIJ du cercle (C1 ) moins laire du triangle OIJ,
7

` I. PRISE EN MAIN DU SYSTEME

(C1 )

I (C2 ) O 1 2 H O2 R2 x

R1 J

Figure 1 Les deux cercles (C1 ) et (C2 ).

laire du secteur O2 IJ du cercle (C2 ) moins laire du triangle O2 IJ. Le probl`me est conceptuellement tr`s simple, mais ces calculs daire sont e e assez lourds. Ces deux conditions en font un candidat idal pour lutilisation e du calcul formel. ` A ce stade, le lecteur peut lancer Maple pour suivre pas ` pas les tapes a e de cette session. Lorsque Maple est activ, appara une fentre appele worksheet qui se e t e e prsente de faon dirente selon le type dordinateur utilis. La gure 2 mone c e e tre laspect obtenu sur une station de travail avec le gestionnaire de fentres e X Windows. Le principe de worksheet est le mme pour tous les syst`mes. Lutilisateur e e entre ses expressions dans la syntaxe Maple et le rsultat est ach apr`s e e e chaque calcul. Lachage est prsent sous une forme haute rsolution qui e e e ressemble ` la typographie mathmatique. Cest le cas en particulier pour les a e lettres grecques (comme alpha dans la gure 2) et quelques autres symboles (racines carres, sommes et intgrales). e e Chaque worksheet comporte trois types de zones : les zones dentre (ou e input), les zones dachage de rsultat (ou output) et les zones de commene taire ou de dessin (text). Les zones dentre et de texte sont modiables e avec les commandes habituelles ddition. En particulier, la souris sert ` se e a dplacer, copier ou insrer du texte. La version actuelle ne permet pas la e e saisie de caract`res accentus. e e

1. UNE SESSION DETAILLEE

Figure 2 Fentre Maple sous X Windows. e Nous allons maintenant saisir les quations dnissant les cercles (C1 ) e e et (C2 ). Toute commande Maple doit tre termine par un point virgule ; ou e e par deux points :. Cest impratif car cest ce qui indique ` Maple que e a la commande est termine, ; signiant que le rsultat doit tre ach et e e e e : quil ne doit pas ltre, par exemple pour des calculs intermdiaires dont e e

10

` I. PRISE EN MAIN DU SYSTEME

lachage serait tr`s long. En revanche, les passages ` la ligne au milieu e a dexpressions nont pas dimportance et servent ` les prsenter plus clairement. a e Voici donc comment saisir les quations des deux cercles : e eq1 := x^2+y^2=R1^2; eq1 := x2 + y 2 = R1 2 eq2 := (x-R1)^2+y^2=R2^2; eq2 := (x R1 )2 + y 2 = R2 2 Ces commandes font appara tre deux types dgalit. Lgalit mathe e e e e matique est reprsente par le signe = et sert ` manipuler des quations. e e a e Laectation, reprsente par le signe :=, est une opration informatique e e e qui permet de nommer des expressions. Ainsi, lquation du cercle (C1 ) est e dsormais connue du syst`me sous le nom eq1, tandis que eq2 est la variable e e dsignant lquation de (C2 ). e e Lusage de symboles est la dirence essentielle entre les syst`mes de calcul e e formel et les langages de programmation traditionnels comme C, Fortran, Pascal, Lisp,... Dans ces derniers, les oprations lmentaires seectuent sur e ee des valeurs numriques. Dans les syst`mes de calcul formel, ces oprations e e e sappliquent galement ` des symboles, comme dans notre exemple x, y, R1 e a et R2. On peut aussi noter ` ce stade que Maple distingue majuscules et a minuscules. Une fois les quations saisies, ltape suivante consiste ` rsoudre le syst`e e a e e me form par ces deux quations pour trouver les coordonnes des points e e e dintersection. Pour trouver comment eectuer cette rsolution, nous utilisons laide en e ligne. Maple est enti`rement auto-document. Un menu daide permet davoir e e acc`s ` un help browser. L` se trouvent dcrits tous les objets et fonctions e a a e de Maple. Cest le moyen le plus ecace pour trouver le nom de la fonction ralisant un calcul donn (cest en gnral le nom anglais de lopration e e e e e mathmatique). Une fois ce nom trouv, ici solve, la commande help(solve), e e ou sa forme abrge ?solve, fournit des informations sur la fonction (syntaxe, e e arguments,...). Le dbut de laide en ligne dcrit bri`vement le rle et lusage de la fonce e e o tion :
> ?solve FUNCTION: solve - Solve Equations CALLING SEQUENCE: solve(eqn, var) solve(eqns, vars) PARAMETERS: eqn - an equation or inequality eqns - a set of equations or inequalities var - (optional) a name (unknown to solve for) vars - (optional) a set of names (unknowns to solve for)

1. UNE SESSION DETAILLEE

11

Ensuite une partie appele synopsis dcrit compl`tement la fonction. Une e e e partie appele examples donne des exemples simples dutilisation, quil est e possible dexcuter soi-mme. Enn, une partie tr`s importante appele see e e e e also donne le nom de fonctions ayant un rapport avec celle dont on a demand e la documentation. Cela permet souvent de trouver de proche en proche le nom de la fonction dsire. e e Lacc`s facile ` cette aide en ligne est capital pour un syst`me de calcul e a e formel. En eet, il est impossible ` un utilisateur de conna le nom et encore a tre moins la syntaxe du millier de fonctions que contient le syst`me. Laide en e ligne contient tout le manuel de rfrence du syst`me, et grce ` la souris on ee e a a sy dplace bien plus facilement que dans la version papier. e Pour revenir ` notre probl`me, nous utilisons la fonction solve avec la a e syntaxe solve(eqns,vars) : solve({eq1,eq2},{x,y}); x= 1 R2 1 2R1 2 R2 2 ,y = 2 R1 2 1 2R1 2 R2 2 1 R2 ,y = 2 R1 2 4R1 2 R2 2 R1 4R1 2 R2 2 R1 ,

x=

Les expressions entre accolades { } reprsentent des ensembles. Nous e rsolvons lensemble (donc le syst`me) {eq1,eq2} dquations, par rapport ` e e e a lensemble {x,y} dinconnues. Le rsultat est donn sous la forme dun objet e e Maple appel en anglais expression sequence et que nous appellerons suite e dexpressions. Une suite dexpressions est une suite ordonne dexpressions e spares par des virgules. Elle peut comprendre zro lment (tre vide) ; e e e ee e dans ce cas elle est reprsente en Maple par le symbole NULL. e e Il faut faire attention ` ne pas confondre une suite dexpressions avec un a ensemble (entre accolades) ou une liste (entre crochets, nous nen avons pas encore rencontr). Ces trois types dobjets sont dcrits au 2.5 et le tableau 9 e e p. 29 rsume leurs proprits. e ee La fonction solve donne deux solutions correspondant aux deux points I et J dintersection des cercles. Chacune est donne sous la forme dun ene semble dquations donnant les valeurs de x et de y. La premi`re solution, e e avec y > 0, correspond au point I situ au-dessus de laxe des abscisses. e Nous navons pas donn de nom au rsultat de solve. Pour sy rfrer, e e ee nous utilisons donc le caract`re spcial " qui par dnition a pour valeur le e e e dernier rsultat calcul par Maple. On peut aussi utiliser "" et """ pour faire e e rfrence respectivement ` lavant-dernier et ` lantpnulti`me rsultat calee a a e e e e cul par Maple. Loprateur de slection [ ] permet dextraire des lments e e e ee dune liste, dun ensemble ou dune suite dexpressions. Donc "[1] a pour valeur lensemble dquations donnant les coordonnes du point I. e e coordsI:="[1]: Laire des triangles se dduit des valeurs de sin 1 , cos 1 , sin 2 et cos 2 e (g. 1 p. 8), que nous nommerons respectivement s1, c1, s2 et c2. Par

12

` I. PRISE EN MAIN DU SYSTEME

exemple, sin 1 est donn par e (1) sin 1 = y x2 + y2 .

Pour obtenir cette valeur en Maple, deux approches sont possibles. La premi`e re consiste ` aecter les coordonnes de I aux variables x et y. Ceci est a e permis en Maple, o` le nom x reprsente ` la fois un symbole mathmatique u e a e et une variable informatique. La commande assign (applique par exemple ` e a coordsI) eectue cette aectation. La seconde approche, que nous prfrons, ee consiste ` substituer dans le membre droit de lquation (1) les symboles x et y a e par les coordonnes de I. Cette opration est eectue par la commande subs. e e e s1:=normal(subs(coordsI,y/sqrt(x^2+y^2))); 1 R2 4R1 2 R2 2 s1 := 2 R1 R1 2 s2:=normal(subs(coordsI,y/sqrt((R1-x)^2+y^2))); 1 R2 4R1 2 R2 2 s2 := 2 R1 R2 2 c1:=normal(subs(coordsI,x/sqrt(x^2+y^2))); 1 2R1 2 R2 2 c1 := 2 R1 R1 2 c2:=normal(subs(coordsI,(R1-x)/sqrt((R1-x)^2+y^2))); 1 R2 2 c2 := 2 R1 R2 2 Pour obtenir un rsultat simpli, nous avons employ la commande e e e normal qui rduit au mme dnominateur les fractions rationnelles, et die e e ` vise numrateur et dnominateur par leur pgcd. A titre de comparaison, voici e e le rsultat brut (non simpli) donn par Maple pour le calcul de cos 2 : e e e subs(coordsI,(R1-x)/sqrt((R1-x)^2+y^2)); 1 2R1 2 R2 2 + R1 2 R1 2 1 2R1 2 R2 2 R2 2 (4R1 2 R2 2 ) + R1 + 2 R1 R1 2 Les fonctions de simplication sont dcrites en dtail dans la seconde e e partie de ce chapitre. Laire cherche sobtient alors en faisant la somme des dirences des e e secteurs circulaires et des aires des triangles. Les aires des secteurs circulaires sobtiennent facilement ` partir des angles 1 et 2 . Pour obtenir ceux-ci ` para a tir des valeurs que nous avons dj`, il sut dappliquer la commande arccos ea a ` leurs cosinus. Maple dispose ainsi de toutes les fonctions mathmatiques e usuelles (logarithme, exponentielle, fonctions trigonomtriques, fonctions trie gonomtriques hyperboliques...). e La multiplication est dnie ` laide de * qui est impratif. e a e A:=normal(R1^2*(arccos(c1)-s1*c1)+R2^2*(arccos(c2)-s2*c2)); 4
2

1. UNE SESSION DETAILLEE

13

A := arccos

1 2R1 2 R2 2 2 R1 R1 2

1 R1 2 R2 2

4R1 2 R2 2

+ R2 2 arccos

1 R2 2 2 R1 R2 2

Cette formule nest pas totalement satisfaisante : certaines simplications manquent, en particulier
2 R1 R1

et

2 R2 R2 .

Cette transformation est valide puisque R1 et R2 sont des rels positifs, mais e le syst`me de calcul formel ne le sait pas, en particulier il pourrait sagir de e nombres complexes. Plusieurs techniques permettent de rsoudre ce probl`me e e et la discussion compl`te sera faite au 2. Une solution simple consiste ` sime a plier lexpression par la commande simplify avec comme arguments sqrt (pour simplier les racines carres) et symbolic (pour forcer la transformae tion x2 x). A:=simplify(A,sqrt,symbolic); 1 1 R2 1 2R1 2 R2 2 A := arccos R1 2 R2 4R1 2 R2 2 +R2 2 arccos 2 2 2 R1 R1 2 Comme limmense majorit des commandes Maple, la commande simplify e ne modie pas son argument. Elle calcule un rsultat et le renvoie. Pour e modier A, il faut donc lui aecter le rsultat de simplify. e Cette formule naurait sans doute pas t tr`s dicile ` obtenir ` laide ee e a a dune feuille de papier et dun stylo. Cependant le grand nombre de simplications ncessaires ` son obtention rend le risque derreur lev. Le calcul e a e e formel apporte une scurit supplmentaire : nous sommes srs que les calculs e e e u sont justes ! En revanche les expressions que nous avons donnes ` Maple ne e a le sont peut-tre pas. Une simple vrication sav`re utile. e e e Le calcul de laire que nous avons ralis est valable pour R2 variant entre e e 0 et 2R1 . Pour R2 = 0, laire de lintersection vaut 0 et pour R2 = 2R1 elle 2 vaut laire du cercle (C1 ) soit R1 . Pour calculer la valeur de A lorsque R2 = 0, il sut de substituer 0 ` R2 dans A par la commande subs que nous avons a dj` vue. Nous illustrons ici lautre mthode, moins pratique, qui consiste ea e a ` utiliser le symbole R2 comme un nom de variable, et ` aecter 0 ` cette a a variable. R2:=0: A; 0 Le rsultat est bien vri. Le premier calcul est termin par :, ce qui e e e e dispense de lachage du rsultat. e Laectation de 0 ` R2 a modi la valeur de A qui vaut ` prsent 0. a e a e Cest un pi`ge classique en Maple. D`s quune valeur est aecte ` un nom, e e e a cette valeur est remplace dans toutes les expressions o` appara le nom, y e u t compris dans les expressions dnies avant laectation, comme A ici. En fait, e la valeur de laire que nous avons calcule nest pas perdue. Pour la retrouver e il sut dannuler laectation du nom R2. Pour cela on donne comme valeur

14

` I. PRISE EN MAIN DU SYSTEME

a ` R2 le symbole R2. Ce dernier sobtient en entourant le nom dapostrophes. Dans lexemple suivant a vaut 2 mais a vaut a. a:=2: a,a; 2, a Annulons donc laectation de R2 : R2:=R2: A; 1 1 R2 1 2R1 2 R2 2 R1 2 R2 4R1 2 R2 2 + R2 2 arccos arccos 2 2 2 R1 R1 2 et A retrouve bien la valeur qui lui a t donne. ee e Il appara clairement que ce procd (aectation puis annulation de cellet e e ci) est bien lourd. Pour valuer une expression pour diverses valeurs de ses e param`tres, lutilisation de la commande subs est prfrable : e ee subs(R2=0,A); arccos(1)R1 2 Cet exemple illustre une particularit de la commande subs. Nous avons e demand ` Maple de remplacer R2 par 0 dans A. Le rsultat est juste mais e a e la fonction subs ne ralise que la substitution, sans valuer les fonctions qui e e pourraient ltre dans le rsultat. Cest un des rares cas o` il est ncessaire e e u e dutiliser la commande dvaluation eval de Maple. Il faut le faire chaque e fois qu` lissue dune substitution, les fonctions prsentes dans lexpression a e doivent tre rvalues. La bonne solution est nalement e ee e eval(subs(R2=0,A)); 0 De mme on peut vrier la valeur de laire pour R2 valant 2R1 : e e eval(subs(R2=2*R1,A)); R1 2 Le rsultat est bien celui attendu. Il fait appara la constante Maple Pi e tre qui ` la dirence des programmes numriques nest pas une approximation a e e mais reprsente bien le nombre transcendant . e Maple conna dautres constantes comme E qui reprsente la base e des t e logarithmes npriens, ou la constante dEuler reprsente par gamma. De e e e e mme, le symbole infinity reprsente + et -infinity reprsente . e e e Pour conclure ce probl`me, nous tudions le rapport qui doit exister entre e e les rayons R2 et R1 pour que laire de lintersection des deux cercles soit gale e a la moiti de laire du cercle (C1 ). Si K est ce rapport, nous commenons ` e c par remplacer dans la valeur de laire le rayon R2 par KR1 : AA:=normal(subs(R2=K*R1,A)); 1 1 AA := R1 2 R1 2 arccos 1 + K 2 KR1 4R1 2 K 2 R1 2 2 2 1 + K 2 R1 2 arccos K 2 Il ne reste plus qu` rsoudre lquation en K exprimant que laire AA a e e 2 vaut R1 /2.

1. UNE SESSION DETAILLEE

15

solve(AA=Pi*R1^2/2,K); Maple ne trouve aucune solution et retourne comme valeur la suite dexpressions vide NULL dont lachage est vide (essayer NULL;). En eet, il ny a pas de solution analytique ` ce probl`me. En revanche, il est possible de calculer a e une valeur numrique approche de K. Dans ce cas cest la fonction fsolve e e qui est utilise. Cette fonction requiert une quation en une seule variable. Il e e 2 nous faut donc diviser AA par R1 et simplier. simplify(AA/R1^2,sqrt,symbolic); K2 arccos 1 + 2 fsolve("=Pi/2,K); 1.158728473 La prcision par dfaut est de 10 chires ; pour la modier il sut dattribuer e e a ` la variable Digits le nombre de chires signicatifs souhaits. e Pour nir, nous traons la courbe (g. 3 p. 15) donnant le rapport de c laire de lintersection et de laire de (C1 ) en fonction de K. La fonction ` a utiliser est plot dont la syntaxe est tr`s simple : e plot(AA/(Pi*R1^2),K=0..2); K 4 K2 K + K 2 arccos 2 2

Figure 3 Rapport des aires en fonction de K. En fait, nous venons de rsoudre le probl`me suivant : e e Un paysan poss`de un pr circulaire de rayon gal ` 100 e e e a m`tres. Il attache sa ch`vre ` un pieu plant sur la cire e a e confrence du pr. Quelle doit tre la longueur de la corde e e e reliant la ch`vre au pieu de faon que la ch`vre puisse e c e brouter exactement la moiti de la surface du pr ? e e La rponse est donc 115,87 m`tres. e e

16

` I. PRISE EN MAIN DU SYSTEME

2. Classes dexpressions et simplication Lexemple trait en dtail dans les pages prcdentes montre que la rsolue e e e e tion dun probl`me passe par lemploi de nombreuses fonctions : solve, subs, e normal, simplify, eval, fsolve, plot. Outre la ma trise de laide en ligne, il faut apprendre ` raisonner en termes de classes dexpressions. Chaque a fonction Maple sapplique ` (et produit) une classe bien dnie dexpressions. a e Reconna tre quune expression appartient ` telle ou telle classe permet du a mme coup de savoir quelles fonctions on peut lui appliquer. e Un probl`me pour lequel cette reconnaissance est essentielle est celui de e la simplication dexpressions. Cest autour de ce probl`me que sont dnies e e les principales classes dexpressions des syst`mes de calcul formel. En efe fet, d`s quil est possible de dterminer si une expression appartenant ` une e e a classe est nulle ou non, il est possible deectuer des divisions dans cette classe. Autrement, tous les calculs qui demandent une division deviennent hasardeux. Dans les classes les plus simples, il existe une forme normale. Sous cette forme, deux expressions reprsentent le mme objet mathmatique e e e si et seulement si elles sont identiques. Cependant, la reprsentation idale e e nest pas toujours la forme normale. Dans le cas des polynmes par exemple, o la reprsentation dveloppe est une forme normale, mais la reprsentation e e e e factorise permet des calculs de pgcd bien plus rapides. Ce genre dexemple e am`ne les syst`mes de calcul formel ` un compromis. Un certain nombre e e a de simplications basiques, comme la rduction des rationnels ou la multiplie cation par zro, sont eectues automatiquement ; les autres rcritures sont e e e laisses ` linitiative de lutilisateur auquel des commandes spcialises sont e a e e proposes. e En Maple les principales fonctions permettant de rcrire des expressions e sont normal, expand, combine, collect et simplify. Pour bien utiliser ces fonctions, il faut savoir quel type de transformations elles eectuent et ` quelle a classe dexpressions ces transformations sappliquent. Ainsi, lusage aveugle de la fonction simplify peut conduire ` des rsultats faux. Un second argument a e de simplify permet nanmoins de prciser la simplication ` eectuer. Toute e e a utilisation de simplify sans ce second argument est tr`s dangereuse. e Dans cette section, nous allons passer en revue les principales classes dexpressions dun syst`me de calcul formel et les fonctions de manipulation e correspondantes. Nous insisterons sur les fonctions de rcriture, cest-`-dire e a celles qui modient la forme dune expression sans changer sa signication mathmatique. Un premier aperu est donn par le tableau 1. La plupart de e c e ces classes dexpressions seront tudies plus en dtail dans la seconde partie e e e de ce livre.

2.1. Classes lmentaires. Les classes lmentaires sont formes dexpresee ee e sions sans variable, cest-`-dire de constantes : entiers, rationnels, nombres a ottants, boolens, rsidus modulo p et nombres p-adiques. e e

2. CLASSES DEXPRESSIONS ET SIMPLIFICATION

17

2.1.1. Entiers Dans un syst`me de calcul formel les oprations sur des nombres entiers e e ou rationnels sont exactes. Exemple 1. Un calcul typique dentier est celui de factorielle 100. 100!; 93326215443944152681699238856266700490715968264381621\ 46859296389521759999322991560894146397615651828625369\ 7920827223758251185210916864000000000000000000000000 De nombreuses fonctions sappliquent aux entiers. Une slection des plus e importantes sera prsente au chapitre IV. e e Exemple 2. Fermat avait conjectur que tous les nombres de la forme e n 22 + 1 taient premiers. Voici le premier exemple qui invalide sa conjecture : e ifactor(2^(2^5)+1); (641)(6700417) Du point de vue de la simplication, tous les entiers sont reprsents en e e base dix (ou deux selon les syst`mes), ce qui constitue une forme normale. e Lgalit dentiers est donc facile ` tester (en Maple, le test dgalit syne e a e e taxique se fait en temps constant, indpendamment de la taille des objets). e Toute opration sur des entiers est immdiatement eectue ; par exemple, e e e 22 nest pas reprsentable en Maple, il est immdiatement transform en 4. e e e Cela signie aussi quun nombre factoris ne peut pas tre reprsent comme e e e e un entier, puisqualors il serait immdiatement dvelopp. Dans lexemple e e e prcdent, le rsultat est en ralit un produit de fonctions. e e e e e Table 1 Principaux simplicateurs. Classe dexpressions Fonction

entiers simplication automatique rationnels simplication automatique ottants evalf boolens e evalb rsidus mod p e mod nombres p-adiques padic[evalp] matrices evalm fractions rationnelles normal dveloppements limits e e series nombres algbriques e evala racines carres e rationalize nombres complexes evalc fonction f simplify(. . .,f)

18

` I. PRISE EN MAIN DU SYSTEME

2.1.2. Rationnels La proprit de forme normale stend aux nombres rationnels. Non seuleee e ment les additions, multiplications et quotients sont immdiatement excuts, e e e mais en plus les fractions rationnelles sont toutes rduites. e Exemple 3. Dans cet exemple, les factorielles sont dabord values, puis e e le rationnel obtenu est simpli : e 99!/100!-1/50; 1 100 2.1.3. Flottants Les r`gles de simplication automatique sont moins systmatiques pour e e les nombres approchs numriquement, appels aussi nombres en virgule ote e e tante, ou plus simplement ottants. Lorsquils interviennent dans une somme, un produit ou un quotient faisant intervenir par ailleurs des rationnels, ils sont contagieux, cest-`-dire que toute lexpression devient un nombre ottant. a Exemple 4. 72/53-5/3*2.7; 3.141509435 Pour les autres expressions, la fonction de base pour ces calculs est evalf qui value numriquement une expression (tous les nombres sont transforms e e e en ottants). Un argument optionnel permet de prciser le nombre de chires e signicatifs utiliss lors du calcul. e Exemple 5. Voici avec 50 chires signicatifs evalf(Pi,50); 3.1415926535897932384626433832795028841971693993751 La prcision peut galement tre rgle par la variable globale Digits, e e e e e qui vaut 10 par dfaut. e Les ottants en Maple sont lis ` leur prcision : ainsi la valeur prcdente e a e e e est dirente syntaxiquement de la valeur de calcule avec dix chires sige e nicatifs. Compte tenu de cette restriction, les ottants renvoys par evalf e sont sous forme normale. Le chapitre XII revient plus en dtail sur lusage e des ottants en Maple. 2.1.4. Boolens e Les expressions boolennes forment aussi une classe lmentaire. Les deux e ee formes normales sont true et false. Les autres expressions sy rduisent par e la commande evalb. Exemple 6. a:=0:b:=2:c:=3: evalb(a=1 or (b=2 and c=3)); true

2. CLASSES DEXPRESSIONS ET SIMPLIFICATION

19

2.1.5. Classes issues de larithmtique e Les autres constantes formant une classe lmentaire munie dune forme ee normale sont les rsidus modulo p, avec pour fonction de rduction mod, et les e e nombres p-adiques, mis sous forme normale par la fonction padic[evalp]. ` 2.2. Classes ` forme normale. A partir de constantes bien dnies, des a e classes dobjets symboliques faisant intervenir des variables et admettant une forme normale peuvent tre construites. Les plus importantes sont les matrie ces, les polynmes et fractions rationnelles, les dveloppements limits et les o e e nombres algbriques. Pour chacune de ces classes, nous indiquons les princie pales fonctions de rcriture. e 2.2.1. Matrices La forme normale dune matrice est obtenue lorsque tous ses coecients sont eux-mmes sous forme normale. Le syst`me neectue aucune simplie e cation automatique sur les matrices et il faut demander explicitement le calcul dune somme, dun produit ou dune puissance de matrices. La fonction dvaluation correspondante sappelle evalm. Il faut utiliser loprateur &* e e pour les produits, car la multiplication commutative * simplierait abusivement a*b-b*a en 0 et a*b*a en a^2*b, avant mme que soient eectus les e e produits matriciels. De mme il faut faire attention avec la puissance, car A^0 e est simpli automatiquement en 1 au lieu dtre transform en la matrice e e e identit. e Exemple 7. La matrice identit sobtient comme lment neutre de la e ee multiplication sous la forme &*(). Nous utilisons la commande Maple alias qui permet de simplier lcriture en achant Id au lieu de &*(). e alias(Id=&*()): a:=array([[1,2,3],[2,4,8],[3,9,27]]); 1 2 3 a := 2 4 8 3 9 27 evalm( (a^2+ Id) &* a^(-1) ); 5 13/2 7 1 2 19/2 7/3 25/3 27

De nombreuses autres fonctions sappliquent aux matrices. Elles sont dtailles au chapitre V. e e 2.2.2. Polynmes et fractions rationnelles o Les calculs sur les polynmes et les fractions rationnelles ` une ou plusieurs o a indtermines sont les oprations de base dun syst`me de calcul formel. Cone e e e trairement aux classes prsentes jusquici, il ny a pas une bonne reprsentae e e tion des polynmes. Les fonctions permettant de rcrire un polynme sous o e o

20

` I. PRISE EN MAIN DU SYSTEME

Table 2 Rcritures de polynmes. e o Polynme p o collect(p,x) collect(p,[x,y]) collect(p,[x,y], distributed) expand(p) factor(p) zx2 + x2 (x2 + y 2 )(ax 2by) + zy 2 + y 2 (z + 1 + 2by)x2 y 2 ax + 2y 3 b + zy 2 + y 2 x3 a (z + 1 + 2by)x2 y 2 ax + 2y 3 b + (z + 1)y 2 x3 a (z + 1)x2 + 2byx2 y 2 ax + 2y 3 b + (z + 1)y 2 x3 a zx2 + x2 x3 a + 2x2 by y 2 ax + 2y 3 b + zy 2 + y 2 (x2 + y 2 )(ax + z + 1 + 2by)

diverses formes sont rsumes au tableau 2. Le tableau 3 rsume celles cone e e cernant les fractions rationnelles. Des informations plus prcises sur chacune e de ces fonctions et sur les nombreuses autres oprations que peuvent subir e polynmes et fractions rationnelles sont donnes au chapitre VI. o e Table 3 Rcritures de fractions rationnelles. e Fraction f
x3 +3x2 +2x+yx2 +3yx+2y x3 +yx+2x2 +2y

Opration e normal(f) factor(f)

Rsultat e
x2 +yx+x+y x2 +y (x+1)(x+y) x2 +y (x2 +3x+2)y x3 +3x2 +2x x3 +x+2x2 +2 + x3 +x+2x2 +2 (x+1)y (x+1)x x2 +1 + x2 +1 3yx x2 2 x2 +1 + x2 +1 + x2 +1

x3 +3x2 +2x+yx2 +3yx+2y x3 +x+2x2 +2

collect(f,y) collect(f,y,normal)

x2 +3yx+2 x2 +1

expand(f)

2.2.3. Dveloppements limits e e Comme les matrices et les ottants, les dveloppements limits ont une e e forme normale, mais celle-ci nest pas produite automatiquement. La commande de rduction est series. Comme pour evalf, lordre des dveloppee e ments est spci soit en donnant un argument supplmentaire ` series, soit e e e a en modiant la variable globale Order, qui vaut 6 par dfaut. e Exemple 8. series(x/(2+x-x^2+O(x^3)),x); 1 1 3 x x2 + x3 + O(x4 ) 2 4 8 s:=series(exp(sin(log(1+x))),x); 1 1 1 s := 1 + x x3 + x4 x5 + O(x6 ) 6 12 30 series(s^2+x^3,x,4); 2 1 + 2x + x2 + x3 + O(x4 ) 3

2. CLASSES DEXPRESSIONS ET SIMPLIFICATION

21

Il est important de noter que si les coecients des dveloppements limits e e sont dans une classe dexpressions nadmettant pas de forme normale, alors les rsultats renvoys par series peuvent tre faux. e e e Exemple 9. Une des faons les plus simples de dguiser 0 consiste ` c e a lcrire exp(1) exp(1) 1. Ceci conduit ` une erreur de series : e a f:=1/(z-z*exp(z)*exp(-1/z)); 1 f := 1 z zez e( z ) series(f,z=1,2); 1 1 3ee1 + (z 1) + O((z 1)2 ) 1 ee1 (ee1 1)(1 ee1 ) Le premier terme est en ralit inni, series devrait reprer un ple simple e e e o et produire (1 z)1 /2 + O(1), ce que lon obtient en appliquant series ` a combine(f,exp) (tab. 5 p. 25). 2.2.4. Nombres algbriques e Un nombre algbrique est dni comme racine dun polynme. Lorsque e e o le degr du polynme est plus grand que 4, il nest pas possible de le rsoudre e o e explicitement en gnral. Cependant, de nombreux calculs sur ses racines e e peuvent tre mens ` bien sans autre information que le polynme lui-mme. e e a o e Ces calculs sont dtaills au chapitre VI. e e Les nombres algbriques sont reprsents en Maple par loprateur RootOf e e e e qui prend en argument le polynme. Les fractions rationnelles en un nombre o algbrique admettent une forme normale, calcule par evala. e e Exemple 10. alias(alpha=RootOf(x^7+3*x^2+1,x)): alpha^3/(alpha^8+3*alpha^2+1); 3 8 + 32 + 1 evala("); 1 34 11 6 11 5 4 4 4 3 34 2 + + 5 5 5 5 5 5 5 Il faut noter que lexpression RootOf(x^7+3*x^2+1,x), que nous avons fait acher pour une meilleure lisibilit ` laide de la commande alias, e a reprsente lune quelconque des sept racines du polynme x7 + 3x2 + 1. Par e o contre, lidentit prouve par evala nest vraie que si les direntes occure e e rences du symbole sont remplaces par la mme racine. e e 2.2.5. Racines carres e Pour simplier des fractions rationnelles dont le dnominateur comprend e des racines carres, la mthode classique de multiplication par lexpression e e conjugue est ralise par la commande rationalize, quil faut charger au e e e pralable par readlib(rationalize). e rationalize(1/(1+sqrt(2)+sqrt(3)));

22

` I. PRISE EN MAIN DU SYSTEME

1 (1 3 + 2)(1 + 3) 4 Pour obtenir une forme normale, il faut dvelopper le rsultat donn par la e e e commande rationalize ; les facteurs obtenus au numrateur dpendent en e e eet de lordre dlimination des racines carres. e e expand("); 1 1 1 2 2 3 + 2 4 4 Nous aurions pu obtenir le mme rsultat (mais plus laborieusement) ` laide e e a de RootOf et evala, en substituant RootOf(x^2=n) ` sqrt(n), puis en apa pliquant evala, et en eectuant la substitution inverse. La commande rationalize accepte galement des expressions contenant e des racines imbriques ou des variables : e rationalize(1/(sqrt(x-sqrt(y))+sqrt(z+t))); z+t+ x y z+tx y z 2 + 2tz 2xz + t2 2tx + x2 y 2.3. Expressions complexes et simplication. Les classes dexpressions prsentes jusquici partagent la proprit davoir une procdure de dcision e e ee e e pour la nullit. Cest-`-dire que pour toutes ces classes un programme peut e a dterminer si une expression donne est nulle ou non. Dans de nombreux cas, e e cette dcision se fait par rduction ` la forme normale : lexpression est nulle e e a si et seulement si sa forme normale est le symbole 0. Malheureusement, toutes les classes dexpressions nadmettent pas une forme normale. Pire encore, pour certaines classes il est impossible de prouver la nullit dune expression en temps ni. Un exemple dune telle classe est e fourni par les expressions composes ` partir des rationnels, des nombres et e a log 2 et dune variable, par utilisation rpte de laddition, de la soustraction, e ee du produit, de lexponentielle et du sinus. Bien sr, une utilisation rpte de u e ee evalf en augmentant la prcision permet souvent de savoir si une expression e particuli`re est nulle ou non ; mais Richardson a montr quil est impossible e e dcrire un programme prenant en argument une expression de cette classe et e donnant au bout dun temps ni le rsultat vrai si celle-ci est nulle, et faux e sinon. Cest dans ces classes que se pose avec le plus dacuit le probl`me de e e la simplication. Sans forme normale, les syst`mes ne peuvent que donner e un certain nombre de fonctions de rcriture avec lesquelles lutilisateur doit e jongler pour parvenir ` un rsultat. Pour y voir plus clair dans cette juna e gle, il faut l` encore distinguer plusieurs sous-classes, savoir quelles fonctions a sappliquent et quelles transformations sont eectues. e 2.3.1. Constantes Comme dit prcdemment, les calculs se font avec des nombres entiers e e ou rationnels exacts et avec des constantes mathmatiques vraies (qui ne sont e pas des reprsentations ottantes). e

2. CLASSES DEXPRESSIONS ET SIMPLIFICATION

23

Les constantes les plus simples sont les rationnels, le nombre not Pi, e la base e des logarithmes npriens note E, le nombre imaginaire i not I et e e e e la constante dEuler note gamma. e Ces constantes sont relativement bien connues du syst`me. Une exception e est la constante E, peu utilise par Maple, ` laquelle il faut prfrer exp(1). e a ee Pour la classe simple des polynmes en et e, aucun algorithme de dcision o e nest connu : ` ce jour on ignore sil existe un tel polynme non trivial qui a o vaille zro. e En utilisation interactive, une bonne faon de traiter ces constantes dans c des simplications compliques est de les remplacer toutes sauf i par des varie ables et dutiliser les procdures de forme normale des fractions rationnelles. e Ceci revient ` faire lhypoth`se que toutes ces constantes sont algbriquement a e e indpendantes. Cette remarque se gnralise ` des constantes plus complexes e e e a comme ln 2, exp( + log 3),... mais il faut alors tre sr que celles-ci ne sont e u pas trivialement dpendantes. e 2.3.2. Nombres complexes Les nombres complexes existent dans tous les syst`mes de calcul formel. e En Maple, on note I le nombre imaginaire i. La fonction de base pour les calculs sur les nombres complexes est evalc. Elle met une expression sous la forme a + ib, o` a et b sont rels. Comme la u e nullit nest pas en gnral dcidable, il en va de mme de la ralit. Cepene e e e e e e dant, d`s que a et b sont dans des classes ` forme normale, evalc fournit une e a forme normale pour les complexes associs. e Exemple 11. On peut par exemple calculer i : (I)^(1/2); (1)1/4 evalc("); 1 1 2+ I 2 2 2 Le rsultat de ce calcul pose le probl`me de la dtermination des racines. e e e Limaginaire i a deux racines alors que evalc nen donne quune. Dans le cas dexpressions plus compliques, les choix multiples de racines carres ou e e cubiques peuvent rendre la reconnaissance de 0 dicile, surtout si ces choix doivent tre faits de mani`re cohrente dans lexpression. e e e Le mme type de probl`me se pose avec toutes les fonctions multiformes, e e comme le logarithme ou les fonctions hypergomtriques. Le syst`me fournit e e e alors peu dassistance pour les simplications. Par ailleurs, dans un calcul avec des expressions complexes, evalc suppose que les variables qui interviennent sont relles. Tout ceci entra quil faut e ne tre tr`s prudent avec la manipulation de nombres complexes. e e Les autres commandes principales sont Re, Im, abs et argument donnant respectivement la partie relle, la partie imaginaire, le module et largument. e z:=a+I*b: Re(z),Im(z),abs(z),argument(z);

24

` I. PRISE EN MAIN DU SYSTEME

(a) (b), (a) + (b), |a + Ib|, argument(a + Ib) Un appel ` evalc simplie en supposant a et b rels : a e evalc(Re(z)),evalc(Im(z)),evalc(abs(z)),evalc(argument(z)); a, b, a2 + b2 , arctan(b, a)

2.3.3. Fonctions Nous avons vu lors de lexemple de la section 1 que la plupart des fonctions mathmatiques se retrouvent en Maple, en particulier les fonctions e trigonomtriques, le logarithme et lexponentielle. La simplication de telles e fonctions est cruciale. Le tableau 5 p. 25 dcrit les commandes de base e ralisant ces simplications. e Tout ce qui concerne le classique tableau de variation de la fonction (calcul des drives, des asymptotes, des extremums, recherche des zros et trac de la e e e e courbe) peut tre facilement ralis ` laide dun syst`me de calcul formel. Les e e ea e principales oprations Maple qui sappliquent ` une fonction sont rsumes au e a e e tableau 6 p. 25. 2.3.4. Equations Un leitmotiv de ce livre est la manipulation dobjets dnis par des e quations, sans passer par la rsolution de celles-ci. e e Ainsi, une fonction dnie par une quation direntielle linaire et des e e e e conditions initiales est parfaitement prcise. Lensemble des solutions dquae e e tions direntielles linaires est clos par addition et produit (entre autres) e e et forme ainsi une importante classe o` lon peut dcider de la nullit. En u e e revanche, si lon rsout une telle quation, la solution, prive de son quation e e e e de dnition, tombe dans une classe plus grande o` bien peu est dcidable. Les e u e chapitres de la seconde partie reviendront plus en dtail sur ces considrations. e e Cependant, dans certains cas, surtout en utilisation interactive, il est utile de chercher une solution explicite, par exemple pour passer ` une application a numrique. Les principales fonctions de rsolution sont rsumes au tableau 4. e e e e Table 4 Rsolution dquations. e e Commande fsolve isolve msolve linsolve dsolve rsolve solve Usage solutions ottantes solutions enti`res e solutions modulaires solutions dquations linaires e e solutions dquations direntielles e e solutions de rcurrences e rsolveur symbolique gnral e e e

2. CLASSES DEXPRESSIONS ET SIMPLIFICATION

25

Table 5 Simplications des fonctions lmentaires. ee Commande expand( ) Rsultat e

sin(a + b) sin(a) cos(b) + cos(a) sin(b) cos(a + b) cos(a) cos(b) sin(a) sin(b) idem pour les fonctions hyperboliques ea+b ea eb combine( ,trig) cos(a) cos(b) cos(a b)/2 + cos(a + b)/2 cos(a) sin(b) sin(a + b)/2 sin(a b)/2 sin(a) sin(b) cos(a b)/2 cos(a + b)/2 idem pour les fonctions hyperboliques combine( ,exp) ea eb ea+b (ea )b eab a+n ln b e bn ea o` n est entier u combine( ,ln) n ln b ln(bn ) o` n est entier u ln a + ln b ln(ab) simplify( ,trig) sin(x)2 + cos(x)2 1 cosh(x)2 sinh(x)2 1 simplify( ,exp) ea ln b ba simplify( ,ln) ln(ba ) a ln b ou expand( ) ln(ab) ln a + ln b simplify( ,power) xa xb xa+b simplify( ,power,symbolic) (ab )c abc a2 a ou combine( ,power) convert( ,exp) cos(x) (eix + eix )/2 cosh(x) (ex + ex )/2 convert( ,trig) eix cos(x) + i sin(x) ex cosh(x) + sinh(x) convert( ,ln) arccos(x) i ln(x + i 1 x2 ) arctanh(x) (ln(1 + x) ln(1 x))/2 Table 6 Principales oprations sur les fonctions. e Expression Rsultat e

f la fonction elle-mme e diff(f,x) drive par rapport ` x e e a int(f,x) primitive par rapport ` x a eval(subs(x=a,f)) f (a) limit(f,x=a) limite de f (x) lorsque x a series(f,x=a) dveloppement limit en x = a e e asympt(f,x) dveloppement asymptotique lorsque x e plot(f,x=a..b) la courbe y = f (x) pour x [a, b]

26

` I. PRISE EN MAIN DU SYSTEME

Table 7 Calcul avec des formes inertes. Forme inerte Int Sum Product RootOf DESol Diff Limit Re, Im Eigenvals Fonctions qui sy appliquent diff, evalf, series diff, evalf diff, evalf, mod evala, sum, factor, allvalues, testeq, solve evalf, product, diff, evalc, evalgf, series diff, series diff, D, liesymm, expand evalf evalc Svd, evalf

2.3.5. Formes inertes en Maple Dans lexemple 10 p. 21, nous avons reprsent les racines du polynme e e o x7 + 3x2 + 1 ` laide de RootOf. Cette fonction ne fait aucun calcul ; elle a sert uniquement ` reprsenter lune des solutions dune quation. De telles a e e fonctions qui ne font rien sont appeles des fonctions inertes. Leur rle est e o dtre reconnues par les fonctions du syst`me qui eectuent des calculs. e e RootOf nest pas la seule fonction inerte de Maple. La fonction DESol reprsente les solutions dune quation direntielle. La fonction Int reprsene e e e te une intgrale que le syst`me ne cherche pas ` calculer (contrairement ` int). e e a a Ainsi, la dirence entre e evalf(Int(f,x=a..b)) et evalf(int(f,x=a..b)) est que dans le premier cas, la routine dvaluation numrique dintgrale e e e est immdiatement appele, alors que dans le second cas, le syst`me cherche e e e dabord une forme symbolique. Sil en trouve une, par exemple lorsque f = cos x, elle est employe ; sinon la routine dvaluation numrique est appele. e e e e Par exemple lorsque f = cos(sin x), apr`s avoir perdu du temps ` chercher en e a vain une solution symbolique, le syst`me ralise lvaluation numrique. La e e e e fonction Sum joue le mme rle pour les sommes. e o Lorsquune expression contient des formes inertes, la procdure value e les rend actives an de calculer la valeur de lexpression. Pour RootOf, la commande allvalues joue partiellement ce rle. o Les principales formes inertes peuvent tre rcrites par combine, expand, e e simplify et certaines commandes du package student. Le tableau 7 montre les autres fonctions qui prennent en compte les formes inertes. La forme inerte la mieux connue du syst`me est RootOf. Son argument e nest pas forcment un polynme ; les commandes evalf et series savent e o aussi traiter des quations plus gnrales. Voici par exemple une faon de e e e c trouver numriquement une racine de lquation z + cos z = 2 e e evalf(RootOf(z+cos(z)=2)); 2.988268926

2. CLASSES DEXPRESSIONS ET SIMPLIFICATION

27

et voici comment obtenir un dveloppement limit ` lorigine de la fonction e ea y(x) dnie implicitement par y exp(x) = y 5 + ln(1 + x) : e series(RootOf(y*exp(x)=y^5+ln(1+x),y),x); 3 4 209 5 x x2 + x3 x4 + x + O(x6 ) 2 3 120 2.4. Hypoth`ses sur les variables. Les variables non aectes posent e e probl`me lors des calculs. Nous avons rencontr un cas typique dans le 1 e e e e : que vaut x2 ? Si x est rel positif, on voudrait obtenir x, si x est rel ngatif, on voudrait obtenir x et si x est un nombre complexe quelconque, e on doit choisir parmi deux racines complexes opposes. Ce probl`me du type e e de la variable se pose dans bien dautres cas. Dans le 1, le probl`me avait t rgl par lemploi de loption symbolic de e ee e e la fonction simplify qui permet de raliser les simplications sans se poser de e question. Dans le cas gnral, la bonne solution consiste ` utiliser la fonction e e a assume qui permet de prciser les proprits dune variable. e ee Exemple 12. On aurait pu exprimer que les variables R1 et R2 taient e relles positives de la faon suivante : e c assume(R1>0); assume(R2>0); about(R1); Originally R1, renamed R1~: is assumed to be: RealRange(Open(0),infinity) La fonction about indique les hypoth`ses faites sur une variable. Apr`s e e lappel de assume, les variables sont automatiquement renommes et un tilde e appara lors de leur impression. Mais on continue ` les utiliser normalement t a en entre. e Exemple 13. Avec ces hypoth`ses sur R1 et R2 les simplications aue raient t ralises automatiquement : ee e e A:=normal(R1^2*(arccos(c1)-s1*c1)+R2^2*(arccos(c2)-s2*c2)); 1 1 2R1 2 R2 2 R1 2 R2 4R1 2 R2 2 A := arccos 2 2 R1 2 1 R2 + R2 2 arccos 2 R1 Le seul moyen de supprimer les hypoth`ses faites sur une variable est e de lui donner une valeur (qui peut tre son nom). Par ailleurs les nouvelles e hypoth`ses nont pas deet rtroactif et il faut ventuellement refaire des e e e calculs. Exemple 14. La variable e garde sa valeur obtenue pour a > 0 mme e apr`s avoir spci que a est ngatif. e e e e assume(a>0); e:=1+sqrt(a^2); e := 1 + a assume(a<0); e;

28

` I. PRISE EN MAIN DU SYSTEME

Table 8 Principales proprits reconnues par Maple. ee Dclaration e assume(x<>0) assume(x>=0) assume(x<=0) assume(x>0) assume(x<0) assume(x,integer) assume(x,real) Fonctions lexploitant signum signum, abs, signum, abs, signum, abs, signum, abs, floor, frac, signum, abs, csgn, int csgn, int csgn, int csgn, int round, trunc Re, Im

1 + a e:=1+sqrt(a^2); e := 1 a Pour rsumer, voici les principales fonctions manipulant des hypoth`ses : e e assume dclare une hypoth`se ; e e additionally rajoute une hypoth`se ` une variable ; e a isgiven teste si une hypoth`se a t dclare ; e ee e e is teste si une hypoth`se se dduit de celles qui ont t dclares ; e e ee e e about liste les hypoth`ses faites sur une variable. e Lintgration de ce mcanisme nest pas encore totale, mais Maple est le e e syst`me le plus avanc dans ce domaine. Dans le tableau 8, nous indiquons les e e principales proprits utilisables et une partie des fonctions qui en tiennent ee compte. Ce tableau est tr`s incomplet, puisque les fonctions qui utilisent e signum (fonction signe pour les expressions relles ou complexes) par exemple e tiennent galement compte de ces proprits. Il faut enn noter que pour des e ee raisons discutables decacit, les tests internes sont faits par isgiven et non e par is. Cela force parfois lutilisateur ` fournir des information redondantes. a Exemple 15. Le polynme z 2 1 est ngatif dans lintervalle ]1, 1[, o e mais la dduction nest pas immdiate : e e f:=signum(z^2-1): assume(z<1,z>-1): f; signum(z 2 1) is(z^2<1); true additionally(z^2<1): f; 1 2.5. Objets composs. Nous avons dj` utilis des ensembles et des suites e ea e dexpressions dans le 1. Maple g`re aussi des listes. Le tableau 9 dcrit les e e caractristiques et dirences de ces objets. Un dernier type dobjet compos e e e est la table, mais lutilisation un peu dlicate des tables en Maple repousse e leur tude au chapitre II. e

2. CLASSES DEXPRESSIONS ET SIMPLIFICATION

29

Table 9 Listes, ensembles et suites dexpressions. Objet liste Caractristiques e

type : list syntaxe : [a,b,c] ordonn : [a,b,c] = [b,a,c] e lments rpts : [a,a,c] [a,a,c] ee e ee plusieurs niveaux : l:=[b,c]; [a,l,d] [a,[b,c],d] liste vide : [] ensemble type : set syntaxe : {a,b,c} non ordonn : {a,b,c} = {b,a,c} e pas dlments rpts : {a,a,c}{a,c} ee e ee plusieurs niveaux : l:={b,c}; {a,l,d} {a,{b,c},d} ensemble vide : {} suite type : exprseq dexpressions syntaxe : a,b,c ordonn : a,b,c = b,a,c e lments rpts : a,a,c a,a,c ee e ee un seul niveau : l:=b,c; a,l,d a,b,c,d suite vide : NULL

2.6. Oprateurs fonctionnels. Nous avons vu dans le 1 comment donner e une valeur ` une expression avec la fonction subs. Une autre faon de raliser a c e cette opration est dutiliser un oprateur fonctionnel. e e En Maple la notation `che -> cre une fonction de zro ou plusieurs e e e arguments. Exemple 16. Voici comment dnir une fonction f qui ` (x, y) associe e a lexpression x2 + y 2 1 f:=(x,y)->x^2+y^2-1; f := (x, y) x2 + y 2 1 f(1,a); a2 La fonction f svalue alors comme nimporte quelle fonction Maple. e Inversement, ` partir dune expression algbrique, on peut obtenir une a e fonction. Pour cela on utilise la fonction unapply, quivalent de labstraction e du -calcul. Exemple 17. On dnit la fonction fA ayant pour argument R2 et cale culant laire A obtenue dans le 1. Il est alors facile de vrier les valeurs de e laire pour R2 = 0 et R2 = 2R1 . fA:=unapply(A,R2);

30

` I. PRISE EN MAIN DU SYSTEME

fA := R2 R1 2 arccos 1 R2 2 fA(0),fA(2*R1);

1 2R1 2 + R2 2 R1 2 2 R1 2 1 R2 4R1 2 R2 2 + R2 2 arccos 2 R1 0, R1 2

En Maple on peut mme composer ou driver les oprateurs fonctionnels e e e a ` laide de loprateur de composition @ et de loprateur de drivation D. e e e Loprateur @@ est lopration de composition itre. Ainsi, f@f@f et f@@3 e e ee reprsentent tous deux la troisi`me itre de f . e e ee Exemple 18. f:=x->x^x; f := x xx (f@f)(x); (xx )(x (D@@2)(f@f)(x); (xx )(x ) (ln(xx ) + 1)2 +
x x x

(xx )(x xx

(xx )2 (ln(x) + 1)2 xx x

+ (xx )(x ) (ln(xx ) + 1) xx (ln(x) + 1)2 +

Malgr toutes ces possibilits oertes par les oprateurs fonctionnels, nous e e e conseillons de travailler plutt sur des expressions algbriques pour manipuler o e des fonctions! avec subs mathmatiques (tab. 6 p. 25). Bien que lvaluation e e soit un peu moins facile (il faut excuter subs puis parfois eval), les exe pressions se prtent ` des oprations plus nombreuses. Par exemple, Maple e a e sait calculer une primitive dune expression, mais ne peut le faire pour un oprateur fonctionnel. Il en va de mme pour de nombreuses commandes e e dont largument doit tre une expression. e 2.7. Exercices. Ces exercices visent essentiellement ` faire excuter des cala e culs simples en apprenant progressivement ` se dbrouiller ` laide de la doca e a umentation en ligne. Pour chaque exercice, sont indiqus entre crochets les e items de la documentation en ligne ` consulter. a 1. Calculer la valeur numrique de e 163 262537412640768744 avec succese sivement 10, 20, 30, 40 et 50 chires signicatifs. Commentaires. [evalf] 2. Montrer que (z + 1)(z + j)(z + j 2 ) = (1 + z)(1 + jz)(1 + j 2 z) o` j est u une racine cubique de lunit. Pour cela on dnira j comme un nombre e e algbrique. [RootOf, evala, alias] e 3. Retrouver les formules dveloppes de sin(3x), cos(3x) et ch(5x). [expand, e e inifcns] 4. Simplier cos(4 arctan(x)) + cos(6 arctan(x)). [expand, normal]

2. CLASSES DEXPRESSIONS ET SIMPLIFICATION

31

5. Calculer le dterminant de e cos(x + a) cos(x + b) cos(x + c)

sin(x + a) sin(x + b) sin(x + c)

1 1 1

et le simplier. [linalg] 6. Utiliser le dveloppement de Taylor de arctan x en x = 0 pour obtenir e une approximation rationnelle de 16 arctan(1/5) 4 arctan(1/239). Faire lvaluation numrique pour des dveloppements dordre de plus en plus e e e lev. [series, convert, subs, evalf] e e 7. Rsoudre x x = ( x)x . Tracer la courbe y = x x ( x)x pour x [0, 5]. e 8. Rsoudre le syst`me dquations suivant en x et y : e e e xy ln2 x + ln2 y = a2 5 = 2 ln2 a

Rsoudre le mme syst`me en remplaant a par 2. Comparer la forme des e e e c solutions. [solve] e 9. Mener ltude de la fonction x |x 1| ln |x|. Dterminer domaine e de dnition, extremums, asymptotes, points de rebroussement, concavit. e e [singular, solve, diff, limit, plot] 10. Obtenir lexpression 1 1+ 1 1+ 1 1+ 1 1+ 1 1+ 1+x a ` laide de la composition des fonctions.

Cette formule, trouve par Machin en 1706, lui permit de calculer 100 dcimales de . e e

CHAPTER II

Utilisation avance e
nest pas possible dutiliser pleinement un syst`me de calcul formel e Ilsansnoire o` lon interroge le syst`efonctionnement. Une approche du type en comprendre les principes de bo te u me est tr`s rapidement insatisfaisante. e Il est ncessaire daider le syst`me en cas dchec et donc de comprendre ce e e e pourquoi il a chou. e e La comprhension dun syst`me passe dune part par la connaissance au e e moins vague des algorithmes employs, que nous dtaillerons dans la sece e onde partie de ce livre. Dautre part, cette connaissance passe plus fondamentalement par lassimilation du mode de fonctionnement des syst`mes. e Plus prcisment, il est important de comprendre comment se fait le lien ene e tre la connaissance mathmatique et sa reprsentation informatique, an de e e mieux apprhender ce qui est faisable et ce quil est illusoire dattendre dun e syst`me. Nous aborderons ces probl`mes de reprsentation de linformation e e e mathmatique au 2, et nous verrons au 3 (notamment au 3.3) comment e tendre le syst`me. Auparavant, nous dcrivons les notions de base du langage e e e de programmation de Maple.

1. Primitives du langage de programmation Le syst`me Maple, comme la plupart des syst`mes de calcul formel, est e e dot dun langage de programmation. Bien souvent, un calcul ncessite lutilie e sation de plusieurs instructions, qui dpendent ventuellement de rsultats e e e intermdiaires. Si ces oprations sont ` eectuer sur de nombreuses donnes, e e a e il est alors utile den faire une ou plusieurs procdures, qui automatisent e lensemble du calcul. e 1.1. Elments de syntaxe. Apr`s une prsentation rapide de la syntaxe e e du test, de litration et des procdures, nous reviendrons plus en dtail sur e e e ces deux derni`res oprations et leurs nombreuses variantes. e e Itration. Litration est lopration qui sobtient dans la plupart des langages e e e de programmation par les mots-cls for ou while. Il sagit deectuer une e mme opration en faisant varier un indice, ventuellement avec une condition e e e a e ` vrier avant de lancer une nouvelle tape. e
33

34

II. UTILISATION AVANCEE

La faon la plus directe deectuer une itration en Maple scrit : c e e for var from dpart by pas to n e while cond do calcul od in expr

Exemple 1. Voici la boucle qui calcule le pgcd de polynmes a(x) et b(x) o par lalgorithme dEuclide : p2:=a; t:= b; while t<>0 do p1:=p2; p2:=t; t:=rem(p1,p2,x); od; pgcd:=p2; Rptitivement, une division euclidienne est eectue entre le quotient et e e e le reste des deux polynmes prcdents. Le dernier rsultat non nul est le o e e e pgcd. La syntaxe de la boucle sera illustre sur dautres exemples dans ce e chapitre. Tests. La syntaxe des tests est donne par : e if cond1 then calcul1 elif cond2 then calcul2 else calcul3 Cela signie : si la condition cond1 est vrie alors eectuer le calcul e e calcul1, sinon si la condition cond2 est vrie alors eectuer le calcul calcul2, e e et sinon le calcul calcul3. Le champ elif et le champ else sont bien entendu facultatifs, et le nombre de champs elif nest pas limit. e Exemple 2. En combinant litration et le test, voici comment calculer e la somme des inverses des nombres premiers infrieurs ` 10 : e a s:=0: for i to 10 do if isprime(i) then s:=s+1/i fi od: s; 247 210 Procdures. Les oprateurs fonctionnels prsents au chapitre I constituent e e e e le cas le plus simple de procdures. La syntaxe gnrale de celles-ci suit le e e e schma suivant : e proc(x1:type1,x2:type2,x3:type3,...) local y1,y2,y3,...; global z1,z2,z3,...; options op1,op2,op3,...; corps de la procdure e end;

1. PRIMITIVES DU LANGAGE DE PROGRAMMATION

35

Le corps de la procdure est constitu dinstructions du mme type que e e e les instructions de lutilisation interactive. Nous reviendrons en dtail sur les e direntes parties de la procdure au 1.3. Lexemple suivant montre quil e e nest pas dicile de crer une procdure ` partir dun calcul qui fonctionne. e e a Exemple 3. Le calcul de pgcd de lexemple 1 se transforme en une procdure qui calcule le pgcd de deux polynmes : e o simple gcd:=proc(a,b,x) local p1,p2,t; p2:=a; t:= b; while t<>0 do p1:=p2; p2:=t; t:=rem(p1,p2,x); od; p2; end: 1.2. Itration. Litration en Maple existe sous quatre formes : la boucle e e do, introduite ci-dessus, et les primitives seq, $, map du langage. Nous passons maintenant en revue ces direntes instructions. e Boucle do. Seuls les mots-cls do et od sont obligatoires dans la boucle do. e Nous allons illustrer la syntaxe du do sur plusieurs exemples, en commenant c par la premi`re version, plus proche des autres langages de programmation. e Exemple 4. Le produit
1000

(2k + 1),
k=1

est calcul par la boucle e p:=1: for t from 3 by 2 to 2001 do p:=p*t od: Lorsque les champs from ou by ne sont pas prciss ils sont pris gaux ` e e e a un, ce qui permet une expression assez condense. e Exemple 5. Le calcul des cinq premi`res drives de exp(ex ) est eectu e e e e par f[0]:=exp(exp(x)): for i to 5 do f[i]:=diff(f[i-1],x) od: et si les drives dordre infrieur ` cinq sont inutiles, il sut dexcuter e e e a e f:=exp(exp(x)): to 5 do f:=diff(f,x) od: Le champ while sert ` contrler larrt, par exemple pour une itration a o e e numrique. Voici un exemple typique. e

36

II. UTILISATION AVANCEE

Exemple 6. Le calcul de donne a comme limite de

2 est bas sur litration de Newton qui e e 1 2 un + a un .

un+1 =

sqrt2:=2.:oldsqrt2:=0: to 100 while abs(oldsqrt2-sqrt2)>10^(-8) do oldsqrt2:=sqrt2; sqrt2:=sqrt2/2+1/sqrt2 od: sqrt2; 1.414213562 Le champ to 100 est facultatif ici. Il est utilis pour limiter le nombre e ditrations au cas o` la suite ne convergerait pas. e u Il est parfois utile de savoir qu` la n de lexcution dune boucle, la a e variable indice vaut la premi`re valeur qui nest pas utilise dans le corps de e e la boucle. Si lindice est utilis ensuite, il faut penser ` le rinitialiser. Mais e a e cette valeur peut galement tre utile dans les calculs. e e Exemple 7. Dans lexemple 4 ci-dessus, ` la n de la boucle, t vaut 2003. a Exemple 8. Voici comment calculer la valeur minimale de n telle que
n

k=1

1 > 1, 7 k!

s:=0: for k while s<=1.7 do s:=s+1/k! od: nmin:=k-1; nmin := 4 Exemple 9. La commande member dtermine si un objet appartient ` e a une liste et, si cest le cas, aecte ` son troisi`me argument lindice de la a e premi`re occurrence. Voici comment elle pourrait scrire en Maple: e e simple member:=proc(a,l:list,pos:name) local i, nb elts; nb elts:=nops(l); for i to nb elts while a<>l[i] do od; if i=nb elts+1 then false else pos:=i1; true end: Il nous reste ` dcrire la seconde faon dutiliser la boucle do : lappel avec a e c in. Dans ce cas, la variable dindice, au lieu de prendre des valeurs enti`res e dans une progression arithmtique, prend pour valeurs successives les souse expressions de lexpression donne. La dnition prcise de ce que lon entend e e e par sous-expression sera donne en 2, disons simplement pour linstant quil e sagit des oprandes de lexpression. e

1. PRIMITIVES DU LANGAGE DE PROGRAMMATION

37

Exemple 10. Voici une mani`re de calculer la somme des carrs des e e lments dune liste : ee s:=0: for i in liste do s:=s+i^2 od: En fait, liste dans cet exemple na pas besoin dtre une liste. Cette boucle e donne le mme rsultat que liste vaille [x,y,z], x+y+z, x*y*z ou x,y,z. e e Signalons une erreur courante qui est commise lorsque lobjet liste est produit automatiquement (par exemple une suite dexpressions issue de solve). En eet, quon sattende ` une somme, un produit ou une suite a dexpressions, lorsque liste contient une seule composante x, linstruction ci-dessus ne calcule pas x^2 comme on le voudrait, mais la somme des carrs e des composantes de x. Dans le cas de la suite dexpressions, ce probl`me se contourne aisment e e en mettant des crochets autour de celle-ci pour la transformer en liste. La dirence entre e for i in s do ... od et for i in [s] do ... od

est que seule la seconde forme garantit un seul passage dans la boucle lorsque s est une suite dexpressions ` un lment. Il ny a pas de solution similaire a ee dans le cas de la somme et du produit ; il faut alors tester le type de lobjet avant la boucle. Lexemple suivant illustre ` quel point tout est optionnel dans la boucle a en Maple. Exemple 11. La boucle suivante calcule 2 indniment. e do 1+1 od; Ce type de boucle innie est essentiellement utile en conjonction avec un test et linstruction break. Cette instruction permet de sortir de la boucle sans attendre que lindice ait atteint sa valeur maximale ou que la condition du champ while soit vrie. Ainsi lanalogue dune boucle repeat...until e e de Pascal scrit en Maple e do ... if condition then break ; od; Procdure seq. La boucle do est la boucle la plus gnrale de Maple. Dans e e e quelques cas, elle est avantageusement remplace par des commandes moins e gnrales mais souvent plus ecaces. La plus utile de ces commandes est la e e procdure seq. Comme la boucle do, elle a deux syntaxes : e seq(f,i=a..b) ou seq(f,i=expr).

38

II. UTILISATION AVANCEE

En termes de fonctionnalit, cette commande est quivalente selon le cas e e a ` lune des deux boucles from a to b s:=NULL: for i do s:=s,f od in expr Cependant le syst`me conna a priori la taille du rsultat. Ceci permet e t e de le construire sans utiliser de place mmoire supplmentaire pour les cale e culs intermdiaires et m`ne ` un gain apprciable decacit. Le cot de la e e a e e u construction passe ainsi de O(n2 ) ` O(n) o` n est le nombre dlments de la a u ee suite. Lutilisation principale de la commande seq est le calcul de sommes ou de produits. Il sut pour calculer
b b

f
i=a

ou
i=a

dexcuter e convert([seq(f,i=a..b)],+) ou convert([seq(f,i=a..b)],*). Lavantage de cette forme ditration par rapport ` la boucle do est doue a ble. Dune part, comme pour la squence, dans le cas dune somme dobjets e symboliques cette forme nutilise pas de mmoire supplmentaire. Dautre e e part, les simplications automatiques lies ` la cration de la somme ou du e a e produit ne sont eectues quune fois, au lieu dtre eectues ` chaque pase e e a sage dans la boucle. Le cot de ces simplications peut ainsi passer de O(n2 ) u a ` O(n log n), o` n est le nombre doprandes du rsultat. u e e En revanche, dans le cas o` les objets sont numriques, la commande seq u e construit une liste parfois beaucoup plus grosse que la taille du rsultat. Il e faut donc choisir le type ditration en fonction du type de f . e Exemple 12. Lexemple 4 est plus rapide que litration par seq : e convert([seq(2*k+1,k=1..1000)],*): En revanche, le calcul suivant s:=0: for n to 400 do s:=s+exp(n*x) od: est quatre fois plus lent que sa version utilisant seq : s:=convert([seq(exp(x*n),n=1..400)],+): Commande $. La commande $ produit ecacement deux types de squences e particuli`res : la rptition dune expression et la succession dentiers. e e e Dans le premier cas, la syntaxe x$i o` i est un entier produit i copies u de x. Dans le second cas, la syntaxe est simplement $a..b, o` a et b sont des u entiers, ce qui produit la suite dexpressions compose des entiers de a ` b. e a Exemple 13. Un emploi frquent de la commande $ est le calcul de e drives. La procdure diff prend en eet comme premier argument la fonce e e tion et les arguments suivants sont les variables par rapport auxquelles il faut

1. PRIMITIVES DU LANGAGE DE PROGRAMMATION

39

calculer la drive. Pour calculer une drive ne , la commande est abrge e e e e e e par lutilisation de $ f:=exp(x^2): diff(f,x$5); 120xex + 160x3 ex + 32x5 ex
2 2 2

Ce qui nest quune abrviation en utilisation interactive devient crucial dans e lcriture doprations plus complexes. Linstruction diff(f,x$k) simplie e e lcriture de nombreuses boucles. Par sa construction mme, cette technique e e ne permet cependant pas de driver zro fois par rapport ` une variable pour e e a retrouver loprateur identit. e e Commande map. Un peu comme seq, map applique une procdure ` chacun e a des oprandes dune expression. La dirence tient en ce que map conserve e e le type de son argument. Si s est une somme, linstruction map(f,s) est quivalente ` e a convert([seq(f(i),i=s)],+); Lapplication la plus frquente est map(f,l), o` l est une liste, qui renvoie e u une liste dont chaque lment est le rsultat de lapplication de f ` llment ee e a ee correspondant de l. Ceci permet dappliquer une procdure ` chacun des e a lments dune liste sans crire de boucle. Si la procdure f prend plusieurs ee e e arguments, les autres arguments sont donns apr`s la liste. e e Exemple 14. Voici un calcul simultan de drives : e e e l:=[sin(x),cos(x+y),exp(x^2)]: map(diff,l,x); 2 [cos(x), sin(x + y), 2xex ] La procdure zip est similaire mais beaucoup moins ecace car elle ne fait e pas partie du noyau (voir tab. 4 p. 66). Elle permet de balayer simultanment e deux listes. 1.3. Procdures. Comme lont fait appara e tre les exemples prcdents, la e e valeur retourne par une procdure est la derni`re expression value. Ceci e e e e e permet dencapsuler une suite doprations mises au point en utilisation e interactive dans un proc...end sans avoir ` rajouter dindication partica uli`re. e Bien que la syntaxe prsente p. 34 indique quil est possible de done e ner un type aux arguments dune procdure, cela nest nullement ncessaire. e e Lorsquun type est dclar, ` chaque appel de la procdure, linterpr`te vrie e e a e e e que largument est bien du type spci. Par exemple, ` chaque excution e e a e de la procdure simple_member, le deuxi`me argument et le troisi`me sont e e e tests pour vrier quil sagit bien dune liste et dun nom de variable. e e Linstruction RETURN permet de renvoyer un rsultat avant darriver ` la e a derni`re instruction dune procdure. De mme, linstruction ERROR(mesg) e e e dclenche une erreur, avec mesg pour message. e

40

II. UTILISATION AVANCEE

Exemple 15. Cette procdure renvoie son argument sil est ngatif et e e calcule sa factorielle sinon. proc(n:integer) local i,f; if n<0 then RETURN(n) ; f:=1; for i to n do f:=f*i od; f end; Exemple 16. Une autre faon de programmer la factorielle est dutiliser c la rcursivit : e e fact:=proc(n) if n<0 then ERROR(invalid argument) ; if n=0 then 1 else n*fact(n1) end: Lorsque la procdure est appele avec un entier positif, elle se rappelle e e avec largument rduit de 1, jusqu` ce que largument vaille 0, alors elle e a renvoie 1 et eectue chacune des multiplications. Les oprateurs fonctionnels introduits au chapitre I peuvent tre utiliss e e e dans le cas restreint o` la procdure na pas de variable locale et est rduite u e e a ` une seule instruction. Variables locales et globales. Pour rendre les programmes rutilisables, il faut e viter quils changent la valeur de variables de lenvironnement. Cest ` cela e a que servent les variables locales dans les procdures. Ces variables ne sont e visibles que de lintrieur de la procdure. D`s que la procdure termine ou e e e e quelle appelle une autre procdure, elles deviennent invisibles. e Exemple 17. Cet exemple illustre la dirence entre variable globale et e variable locale : y:=2: f:=proc() global y; y:=3 end: f(): y; 3 y:=2: f:=proc() local y; y:=3 end: f(): y; 2 Dans le premier cas, la variable globale y a t modie par la procdure. ee e e Dans le second cas, cest la variable locale y qui a t modie, la variable ee e globale restant inchange. Un troisi`me exemple illustre ce quil en est des e e procdures appeles e e a:=proc() local b,y; b:=proc() global y; y:=3 end;

1. PRIMITIVES DU LANGAGE DE PROGRAMMATION

41

b() end: y:=2: a(): y; 3 Dans cet exemple, il y a deux procdures imbriques, la premi`re ayant pour e e e variable locale y. Laectation de y dans la sous-procdure b concerne la e variable globale y qui de ce fait est modie. Contrairement ` des langages e a comme Pascal, il ny a pas moyen daccder depuis b ` la variable locale y e a de a. Les seules variables accessibles depuis une procdure sont, outre ses e variables locales, les variables dnies au niveau de linterpr`te. e e Il faut faire attention ` une erreur grave : laisser une variable locale sortir a dune procdure. Celle-ci sachera alors de la mme faon que la variable e e c globale de mme nom, et il devient impossible de les distinguer. e Exemple 18. Voici la version la plus dpouille de ce probl`me : e e e proc() local x; x end()-x; xx Dans cet exemple, la dirence x-x na pas t simplie, puisque les deux e ee e symboles x reprsentent des variables direntes, mais qui sont devenues e e toutes deux accessibles au toplevel. Dans chaque procdure on dispose, outre des variables locales dclares e e e explicitement, de la variable nargs qui donne le nombre de param`tres passs e e a ` la procdure, de la suite dexpressions args des arguments (args[1] est e le premier, args[nargs] le dernier) et comme en utilisation interactive, des variables ", "" et """ qui donnent les derni`res valeurs calcules ` lintrieur e e a e de la procdure. e Passage des param`tres. Le passage des param`tres se fait toujours par valeur, e e cest-`-dire que les arguments sont toujours valus avant dtre passs ` une a e e e e a procdure. e Pour faire un passage par variable ou par rfrence, il faut ee passer le nom de la variable. Cest ainsi quune procdure peut modier une e variable. Exemple 19. Voici un exemple de ce que lon ne peut pas faire : y:=2: f:=proc(x) x:=3 end: f(y); Error, (in unknown) Illegal use of a formal parameter En eet, il y a erreur puisque lon essaye deectuer 2:=3. En revanche, en passant le nom de la variable en argument, il ny a pas de probl`me : e y:=2: f(y): y; 3 De nombreuses procdures Maple prennent ainsi des noms de variable en e argument, comme iquo qui calcule le quotient de deux entiers et aecte le reste ` la variable passe en troisi`me argument. a e e
Les rares exceptions sont assigned, eval, evalf, evalhf, evaln, seq, time et userinfo.

42

II. UTILISATION AVANCEE

` Table de remember. A toute procdure Maple est associe une table dans e e laquelle on peut stocker des couples (entre, sortie) au cours dune session. e Lorsque la procdure est appele, linterpr`te commence par regarder si largue e e ment (ou la suite des arguments) est une entre de la table, auquel cas il e renvoie le rsultat correspondant. Attention, ceci signie quil ne faut pas e utiliser cette table si la procdure tient compte lors du calcul de la valeur de e variables globales. Par ailleurs, si une erreur se produit durant lexcution de e la procdure, rien nest stock dans la table de remember. e e La faon la plus simple (et la plus brutale) dutiliser cette table est c dajouter au dbut de la procdure les mots-cls option remember. Dans e e e ce cas tous les couples (entre, sortie) seront gards dans la table. Voici un e e exemple o` lintrt de loption remember est manifeste. u ee Exemple 20. Cette procdure nutilise pas loption : e bo1:=proc(n) if n=0 or n=1 then 1 else bo1(n1)+bo1(n2) end: time(fibo1(20)); 25.683 Cette seconde procdure eectue le mme calcul, mais avec loption remember e e : bo2:=proc(n) option remember; if n=0 or n=1 then 1 else bo2(n1)+bo2(n2) end: time(fibo2(20)); .034 Dans le premier cas, le nombre doprations arithmtiques eectues par le e e e programme est exponentiel en n, dans le second il est linaire. e En gnral, il faut faire un choix entre la vitesse que peut apporter une e e option remember et la consommation mmoire entra ee par la table de ree n member. Aussi vaut-il mieux limiter lusage de cette option ` des procdures a e qui travaillent sur des objets pour lesquels le temps de calcul est grand par rapport ` la taille du couple (entre, sortie). a e Une meilleure utilisation de la table de remember consiste ` ny conserver a quune slection de ces couples. Il sut pour cela daecter le rsultat de la e e procdure, apr`s que la procdure a t dnie. e e e ee e Exemple 21. Voici une illustration du mcanisme : e f:=proc() 3 end: f(2):=4: f(2); 4 Ici f est la procdure constante 3, mais il est possible daecter une valeur e quelconque ` lune de ses images, et le dernier appel montre bien que la a procdure f nest alors pas excute. e e e

1. PRIMITIVES DU LANGAGE DE PROGRAMMATION

43

Exemple 22. Voici une programmation de la factorielle plus proche de la dnition mathmatique : e e fact:=proc(n) n*fact(n1) end: fact(0):=1: Attention laectation fact(0):=1 doit tre faite apr`s la dnition de e e e fact, car la cration dune procdure rinitialise sa table de remember. e e e Exemple 23. Il est galement possible de faire cette aectation ` linte a e rieur de la procdure, ce qui permet ` la n dun calcul de stocker la valeur e a apr`s avoir test si cela en vaut la peine. Voici un exemple simpli : e e e g:=proc(x) print(x); if x=2 then g(x):=3 else x end: g(2); g(2); 2 3 3 Le premier appel g(2) eectue le calcul (linstruction print(x) est excute) e e et entre le couple (2, 3) dans la table de remember de g. Lors du second appel, le calcul nest plus eectu et la procdure renvoie tout de suite la valeur. e e Cest ainsi quen Maple fonctionnent la plupart des procdures correspone dant ` des fonctions mathmatiques, lorsque leur argument est une variable a e non aecte. Par exemple, le corps de la procdure exp ressemble ` ceci : e e a exp := proc(x) if type(x,oat) then ... elif ... ... else exp(x):=xp(x) e end: Il est impossible ici de renvoyer exp(x) ce qui entra nerait une boucle sans n. Il serait possible de retourner simplement exp(x), mais alors chaque apparition de ce terme dans une expression redclencherait lexcution de tout e e le corps de la procdure exp, ce quil est prfrable dviter. e ee e Quelle que soit la faon de modier la table de remember (par option c remember ou par aectation), il est possible de la voir et de lutiliser en faisant op(4,eval(.)). Exemple 24. Voici le contenu de la table de remember de la procdure e exp : op(4,eval(exp));

44

II. UTILISATION AVANCEE

table([ =0 x = ex I = 1 0=1 ]) Initialement, cette table contient des valeurs qui ont t rentres explicitement ee e par des aectations. Le couple (x, exp(x)) a t introduit par linvocation ee de la procdure exp sur la variable x. e Pour conclure, mentionnons un emploi important de loption remember en Maple, ` savoir la procdure readlib, qui ne charge ainsi quune seule fois a e les procdures en mmoire. e e 1.4. Exercices. 1. Calculer numriquement exp(1) sans utiliser evalf, par la formule e exp(1) = 1 , n! n=0

en arrtant le calcul lorsque le terme devient infrieur ` 10Digits2 . e e a 2. La suite de Syracuse est la suite dnie par u0 N , et e 1 si un = 1, un+1 = un /2 si un est pair, 3un + 1 sinon. On ne sait pas ` lheure actuelle sil existe un entier u0 pour lequel cette a suite natteint jamais 1. (1) Ecrire une procdure prenant en argument un entier positif et calcue lant le nombre minimum ditrations ncessaires pour aboutir ` 1 ` e e a a partir de cet entier ; (2) crire une procdure similaire agissant sur un ensemble dentiers, et e e renvoyant le nombre minimum ditrations ncessaires pour que tous e e les entiers de lensemble aboutissent ` 1 (sans appeler la procdure a e prcdente). e e 3. Ecrire une procdure rcursive prenant en entre une liste et renvoyant la e e e liste de toutes les permutations des lments de cette liste. ee 4. Ecrire une procdure prenant en entre deux entiers positifs k et n et e e renvoyant 1 . i1 ik
1i1 i2 ik n

[Indication : grer une liste des indices.] e

2. MANIPULATION DEXPRESSIONS

45

^ t  t  t x 2

* rr exp

rr r r sin

3/2

+ & * e  e e  ^ -1 t t t x -1

& & * e  e  e 1/3

Figure 1 Larbre reprsentant x2 exp(3/2) sin(/3 1/x). e

2. Manipulation dexpressions Les procdures que nous avons vues jusqu` maintenant ne font pas vraie a ment de calcul formel, faute doutil pour manipuler des expressions. Dans cette section nous allons tudier en dtail la notion dexpression, et ainsi are e river ` une meilleure comprhension du fonctionnement intime de Maple. a e La notion dexpression est au cur du calcul formel. Lorsque lon utilise une expression mathmatique telle que sin(/3 + x), on a en tte une fonce e tion (sin) et un rel dont on conna de nombreuses proprits, ainsi quune e t ee variable x. Du point de vue du syst`me, en revanche, il sagit dune exprese sion. Pour le syst`me, a priori, il sagit dune fonction nomme sin applique e e e a ` une somme de deux termes, ` savoir une variable x et le quotient dune a autre variable par lentier 3. Pour toutes les oprations mathmatiques e e que lutilisateur souhaite raliser sur cette expression (la driver, lintgrer, e e e calculer son dveloppement de Taylor), le syst`me ne dispose que de cette e e information syntaxique. Des questions centrales du calcul formel, comme la simplication, sont lies ` cette distinction entre la vision syntaxique du syst`me et la vision e a e mathmatique de lutilisateur. Ce livre sattache ` dcrire les fonctionnalits e a e e des syst`mes en termes de classes dexpressions. Ces classes sont des enseme bles dexpressions purement syntaxiques et non mathmatiques. Ainsi, 0 et 1 e exp(1) exp(1) sont deux objets identiques dun point de vue mathmatique, e mais tr`s dirents du point de vue dun syst`me de calcul formel. e e e Un des objectifs de ce chapitre est de montrer comment le syst`me Maple e ralise le passage du syntaxique au mathmatique. Les autres syst`mes (exe e e cept Axiom) fonctionnent sur les mmes principes. e e

46

II. UTILISATION AVANCEE

2.1. Structure des expressions. Une expression comme x2 exp(3/2) sin(/3 1/x) peut tre visualise comme un arbre (g. 1). Cet arbre se lit de haut en bas e e et se dcrit avec un vocabulaire gnalogique : les nuds situs sous la racine e e e e sont ses ls, et les ls dun mme nud sont des fr`res. e e ` A la racine de larbre se trouve loprateur * qui reprsente le produit. e e Ses trois ls sont les trois facteurs x2 , exp(3/2), sin(/3 1/x), eux-mmes e reprsents par des arbres. Les nuds de larbre, comme la racine, reprsentent e e e soit des oprations (+,*, ^), soit des fonctions (sin, exp), et les feuilles reprsene e tent soit des rationnels (2, 3/2, 1/3, 1), soit des noms de variables (x, Pi). Les procdures Maple travaillent toutes sur des expressions reprsentes e e e par de tels arbres et les oprations de base consistent donc ` analyser ces e a arbres pour en dterminer les composants, ` modier ces composants et ` les e a a utiliser pour crer de nouveaux arbres. e Oprandes. Les arbres qui se trouvent sous la racine peuvent tre isols par e e e la procdure op (comme oprande). Avec une expression comme argument, e e cette procdure renvoie la suite des ls de lexpression, leur nombre tant e e renvoy par la procdure nops. Pour slectionner un ls particulier, on donne e e e en premier argument ` op son numro. On peut bien sr ` nouveau isoler un a e u a sous-arbre dun sous-arbre. Avec 0 comme premier argument, op renvoie la racine de larbre (sauf pour les sries et les tables). e Exemple 25. Lexpression ci-dessus servira dexemple pour la majeure partie de cette section. f:=x^2*exp(3/2)*sin(Pi/3-1/x): op(f); x2 , op(1,op(op(3,f))); /3 op(0,op(3,f)); sin op(0,f); Lordre des oprandes dans une somme ou un produit nest pas ncessairee e ment le mme dune session ` lautre. Il ne faut donc pas baser un programme e a sur la position dun nud par rapport ` ses fr`res dans un arbre dont la a e racine est un oprateur commutatif. La seule proprit garantie, cest que le e ee coecient rationnel dun produit lorsquil est dirent de 1 est la premi`re e e oprande. e e3/2 , sin(/3 1/x)

2. MANIPULATION DEXPRESSIONS

47

Sous-expressions. Un sous-arbre est lensemble des descendants dun nud de larbre. On appelle sous-expression une partie dexpression qui forme un sous-arbre de larbre reprsentant lexpression. Dans notre exemple, x, 2, 3/2, e sin(/3 1/x), x2 , /3 1/x sont des sous-expressions, mais pas x2 exp(3/2), qui nest pas reprsent par un sous-arbre (il manque un des descendants du e e produit). La commande has dtermine si une expression appara en sous-expression e t dune autre. Lutilisation de has permet par exemple de dterminer si une e expression est indpendante dune variable. e Exemple 26. Toujours sur la mme expression : e has(f,x), has(f,z); true, false Contrairement ` op et nops, has parcourt toute lexpression (en cas de a rponse ngative), ce qui est coteux sur de tr`s grosses expressions. Pour e e u e dterminer si une des oprandes est gal ` une expression, il vaut mieux utiliser e e e a member : member(x^2,[op(f)]); true Linstruction [op(f)] cre une liste dont les lments sont les oprandes de e ee e f. Il devient possible dy appliquer member, qui teste ici lappartenance de x2 a ` cette liste. 2.2. Cration dexpressions. Les oprations que nous venons de voir pere e mettent dexplorer une expression. Celles qui suivent crent des expressions ` e a partir dexpressions existantes. Combines avec les primitives de la premi`re e e section, elles forment tout larsenal du programmeur Maple. Les principales procdures qui crent de nouveaux objets ` partir dexprese e a sions existantes sont : subsop, convert, subs, select. Il faut noter que ces procdures ne modient pas leur argument. La plupart e des objets que manipule Maple ne peuvent en eet pas tre modis. Les e e procdures que nous allons prsenter crent des copies altres de leur argue e e ee ment. Cette copie nentra cependant pas une trop grande consommation ne de mmoire, pour des raisons sur lesquelles nous reviendrons au 3.2. e Procdure subsop. La procdure subsop remplace un oprande par une valeur. e e e Exemple 27. liste:=[2,4,5,8]: subsop(3=6,liste); [2, 4, 6, 8] Une utilisation importante de subsop est la suppression dun lment en ee exploitant le fait que NULL est llment neutre des suites dexpressions. ee

48

II. UTILISATION AVANCEE

Exemple 28. Toujours sur la mme liste (on remarque au passage quelle e na pas t modie par la commande subsop) : ee e subsop(1=NULL,liste); [4, 5, 8] Procdure convert. Nous avons dj` rencontr la procdure convert pour cale ea e e culer des sommes et des produits, en utilisation conjugue avec seq. De mme e e que subsop permet de changer un ls de larbre reprsentant lexpression, e convert permet den changer la racine. Son second argument est le nouveau type. La principale utilisation de convert est celle que nous avons vue avec seq, rendue ncessaire par linexistence dune addition et dun produit e prxes en Maple. e Procdure subs. La faon naturelle de calculer en Maple la valeur dune fonce c tion pour une valeur donne de sa variable consiste ` substituer partout dans e a lexpression la variable par sa valeur. Les r`gles de simplication automatique e am`nent alors ` la valeur cherche. e a e Exemple 29. Nous valuons un polynme : e o f:=x^2+3*x+7; subs(x=3/2,f); 55 4 Plus gnralement, subs permet de remplacer toute sous-expression par e e une expression syntaxiquement admissible. Exemple 30. Il ne faut pas oublier quune sous-expression est lensemble des descendants dun nud de larbre. Ainsi, lors de la substitution subs(a+b=3,a+b+c+sin(a+b)); a + b + c + sin(3) le premier terme a + b nest pas remplac, puisquil ne constitue pas une e sous-expression de la somme. Ce type de simplication peut sobtenir soit par subs(a=3-b,a+b+c+sin(a+b)); 3 + c + sin(3) soit par le mcanisme plus gnral e e e simplify(a+b+c+sin(a+b),{a+b=3}); Cette derni`re commande est cependant extrmement coteuse de par lalgoe e u rithme employ (voir chap. VI). e Comme nous lavons dj` mentionn au chapitre I, il est parfois ncessaire ea e e dappliquer eval au rsultat de subs. Les raisons de cette ncessit seront e e e claircies au 3.1. e

2. MANIPULATION DEXPRESSIONS

49

Procdure select. Une autre commande tr`s utile pour isoler des sous-exprese e sions particuli`res est la procdure select. Elle prend en argument une e e procdure qui renvoie un boolen (comme type ou has), puis une expression et e e ventuellement dautres arguments de la procdure. Elle renvoie lexpression e e en conservant uniquement les oprandes pour lesquels la procdure donne en e e e premier argument retourne true. Exemple 31. Voici quelques applications ` une liste : a liste:=[sin(x),3,Pi/2,26]: select(has,liste,x), select(type,liste,integer); [sin(x)], [3, 26] Exemple 32. Pour demander en une ligne ` Maple de calculer a 1 , 2p

p premier p 1000

il sut de faire convert([seq(1/2^p,p=select(isprime,[$1..1000]))],+); 2.3. Types de base et simplication automatique. En Maple, la racine de larbre dtermine le type de lexpression. Les types de base du syst`me e e sont rsums au tableau 1. Par exemple, la liste [1,2,3] est reprsente par e e e e un arbre dont la racine est le mot-cl list et les ls sont 1, 2, 3. e Pour certains de ces types, quelques simplications automatiques ont lieu a ` la cration de lexpression. Nous dtaillons maintenant les principales sime e plications. Sommes et produits. Les sommes sont traites comme des sommes de proe duits (nombre fois expression), o` un nombre est de type numeric, cest-`u a dire integer, rational ou float. De mme, les produits sont traits comme e e ` des produits de puissances (expression puissance nombre). A la cration dune e somme ou dun produit, les oprandes sont parcourus pour regrouper les souse expressions gales. Ainsi, pour valuer la somme 2x + 3y + 3x, le simplie e cateur interne commence par passer en revue les oprandes pour sapercevoir e que x appara deux fois, et regroupe alors en eectuant lopration sur les t e numeric 2 et 3. Le produit x2 y 3 x3 est trait exactement de la mme mani`re. e e e Sont traites ` part les expressions numriques dans les produits : elles sont e a e toujours groupes en tte du produit. e e Exemple 33. Le produit x2 3y 2 4x3/2 yz est cr ainsi : ee x^2*3*y^2*4*x^(3/2)*y*z;
Cette opration nest pas aussi co teuse que lon pourrait le penser car le test dgalit e u e e des expressions se fait en temps constant indpendamment de la taille des expressions, sans e parcourir les deux arbres rcursivement (voir 3.2). e

50

II. UTILISATION AVANCEE

Table 1 Types de base du syst`me. e Nom du type +, *, ^ integer rational float string ou name function list set exprseq = <> <, <= and, or, not .. procedure table series . indexed uneval Usage oprations e entiers rationnels nombres ` virgule ottante a cha nes de caract`res ou noms de variable e fonctions listes ensembles suites dexpressions quations e inquations e ingalits strictes et larges e e expressions boolennes e intervalles procdures e tables dveloppements limits e e concatnation de cha e nes de caract`res e variables indexes comme a[3] e expressions protges (voir 3.1) e e

12y 3 x7/2 z Cet exemple illustre galement labsence dordre automatique dans les proe duits et les sommes. Listes et ensembles. La distinction entre listes et ensembles provient de ce que dans ces derniers les lments napparaissent quune fois (tab. 9 p. 29). ee ` A la cration dun ensemble, le simplicateur interne entreprend un parcours e similaire ` celui quil eectue pour les sommes et les produits, an dliminer a e les doubles. Une procdure eectuant lunion de deux ensembles scrit donc e e simplement : Union:=proc(e1:set,e2:set) {op(e1),op(e2)} end: Cest dailleurs ainsi que la procdure union tait crite dans les premi`res e e e e versions de Maple. En consquence, lorsque les objets manipuls sont tous distincts, il vaut e e mieux utiliser des listes plutt que des ensembles, puisque la cration dune o e liste ne gaspille pas de temps dans cette simplication automatique. Suites dexpressions (le type exprseq). La seule simplication se produisant a ` la cration dune suite dexpressions est la suppression de llment neutre e ee

2. MANIPULATION DEXPRESSIONS

51

NULL, dont nous avons montr comment tirer parti par la commande subsop e (p. 48). Dveloppements limits (series). Ce type est un peu particulier comme le e e montre laction de op : s:=series(sin(z),z); z3 z5 s := z + + O(z 6 ) 6 120 op(s); 1, 1, 1/6, 3, 1/120, 5, O(1), 6 Les oprandes sont successivement des coecients et des puissances, le e dernier terme utilisant lidentit O(z 6 ) = O(1)z 6 . Le nom de la variable e est accessible comme 0e oprande. Lors de la cration dun dveloppement e e e les termes dont le coecient est 0 sont supprims. Cette simplication est e utile pour rechercher un dveloppement par coecients indtermins (voir e e e chap. VIII).

52

II. UTILISATION AVANCEE

2.4. Types plus complexes. Types du syst`me. Les 26 types de base du tableau 1 p. 50 sont insusants e en pratique. Par exemple, un programme de calcul de factorielle a besoin de sassurer que son argument est un entier positif ou nul. Pour cela il existe une procdure type qui reconna 84 types plus complexes, comme posint pour e t les entiers positifs, nonnegint pour les entiers positifs ou nuls, numeric pour les entiers, rationnels ou ottants,... Tous ces types sont utilisables pour la spcication des arguments des e procdures et sont aussi accessibles via la commande type. e Types procduraux. Il est par ailleurs possible de crer des types. Un noue e veau type est dclar par la cration dune procdure type/nom_de_type. e e e e Cette procdure renvoie true ou false selon que son argument est du type e nom_de_type ou non. Exemple 34. Le type entier positif ou nul infrieur ` 100 est cr par e a ee : type/int100:=proc(f) evalb(type(f,nonnegint) and f<100) end: Ce type sutilise comme nimporte quel type Maple : smallfact:=proc(n:int100) local f,i; f:=1; for i to n do f:=f*i od end: smallfact(0):=1: smallfact(4); 24 smallfact(100); Error, smallfact expects its 1st argument, n, to be of type int100, but received 100 Les types peuvent galement tre paramtrs. Ainsi le type polynom e e e e de Maple peut prendre en argument une variable et le type des coecients. Pour tester un tel type, la procdure type/nom_de_type utilise des arguments e supplmentaires. e Exemple 35. Le type suivant permet de dtecter si une expression (mais e pas ncessairement la fonction quelle dnit) est indpendante dune variable e e e donne. e type/independent:=proc(f,x) not has(f,x) end: type(x^2+3*y,independent(x)); false Lintrt dun tel type rside dans son emploi avec select ou lors de la ee e cration de types structurs qui sont dcrits au paragraphe suivant. e e e

2. MANIPULATION DEXPRESSIONS

53

Cet exemple nous permet par ailleurs dintroduire la distinction entre types de surface et types rcursifs. Pour savoir si une expression est de type e +, il sut de regarder sa racine. En revanche, pour savoir si une expression est du type independent ci-dessus, ou du type constant, il faut parfois parcourir toute lexpression. Si lon recherche lecacit, il faut donc toujours se e demander si les caractristiques ` reconna e a tre ne peuvent pas tre obtenues e en restant ` la surface de lexpression, cest-`-dire pr`s de la racine. a a e Types structurs. Le langage des types structurs permet de construire des e e types complexes ` partir de types existants, quils soient de base ou procdua e raux. Par exemple, une liste contenant exclusivement des entiers ou des variables sera slectionne par le type list({integer,name}). La syntaxe e e dtaille des types structurs est obtenue par ?type[structured]. Ces types e e e vitent souvent lcriture dune procdure, do` des tests beaucoup plus ee e e u caces. Exemple 36. Pour driver une expression de type puissance par rapport e a une variable x en appliquant ` (f a ) = af f a1 , il faut dabord vrier que a ne dpend pas de la variable x. Lcriture e e e if type(expr,) and not has(op(2,expr),x) then ... est avantageusement remplace par e if type(expr,anythingndependent(x)) then ... qui utilise le type independent que nous venons de crer et le type anything e satisfait par nimporte quel objet ` lexception des suites dexpressions. a Type des sous-expressions. La commande hastype, analogue ` has, teste a si des sous-expressions ont un type donn. La commande indets eectue e le mme parcours de lexpression, tout en collectant lensemble des souse expressions du type demand. e Exemple 37. Pour dterminer si une expression contient des exponene tielles qui peuvent se dvelopper, il sut dutiliser un type structur. e e f:=1+2*x*sin(exp(x+y+exp(x+2))); x+2 f := 1 + 2x sin(ex+y+e ) hastype(f,exp(+)); true indets(f,exp(+)); ex+y+e
x+2

, ex+2

Il faut noter que indets parcourt toute lexpression rcursivement et ape pelle type sur toutes les sous-expressions (idem pour hastype en cas dchec). e Si le type test est lui-mme un type rcursif et non un type de surface, le e e e test peut savrer peu performant. e

54

II. UTILISATION AVANCEE

2.5. Exercices. 1. Ecrire les procdures suivantes qui sappliquent ` des listes : e a (1) append qui renvoie la concatnation de plusieurs listes ; e (2) cons et endcons qui renvoient la liste apr`s avoir ajout un lment e e ee respectivement au dbut et ` la n ; e a (3) first et last qui renvoient respectivement le premier et le dernier lment dune liste ; ee (4) reverse qui renvoie une liste dont les lments sont dans lordre ee inverse de son argument ; (5) rest qui renvoie la n dune liste ` partir du ie lment. a ee 2. La structure relle des expressions est lg`rement plus complique que ce e e e e qui appara en gure 1 p. 45. On peut sen rendre compte en faisant t subs(1=toto,f), o` f est lexpression qui y est reprsente. Expliquer ce u e e qui appara Refaire lexprience avec une somme au lieu dun produit. t. e 3. Approfondissement du syst`me e Dans cette section nous abordons des particularits de Maple quil est e bon de comprendre pour lutiliser intensivement. Nous conseillons de passer directement ` la seconde partie du livre, pour revenir sur cette section apr`s a e avoir acquis une bonne pratique du syst`me. e 3.1. R`gles dvaluation. La commande subs (2.2) ne fait que substituer e e un terme ` une sous-expression. Les simplications automatiques sont efa fectues, mais lexpression nest pas rvalue. e ee e Exemple 38. f:=sin(x)+2*x+3: g:=subs(x=0,f); g := sin(0) + 3 La variable x a bien t remplace par 0, mais la procdure sin na ee e e pas t rappele pour simplier le rsultat. Malgr ce rsultat dans lequel ee e e e e appara sin(0), la variable g semble bien avoir t simplie : t ee e g; 3 Pour comprendre ce qui se produit dans cet exemple, il est important de conna certaines r`gles dvaluation de Maple. Les r`gles dvaluation dun tre e e e e langage de programmation spcient quand et comment les expressions sont e values. Nous allons maintenant prciser ces r`gles pour le syst`me Maple. e e e e e 3.1.1. Evaluation et protection des variables La dirence principale entre Maple et les langages de programmation e traditionnels rside dans lvaluation des variables non aectes. Dans les e e e langages traditionnels, cette valuation est considre comme une erreur. En e ee Maple, elle renvoie le nom de la variable. Ce mcanisme permet de traiter les e indtermines mathmatiques comme des variables informatiques. e e e

` 3. APPROFONDISSEMENT DU SYSTEME

55

En pratique il est recommand de bien distinguer ces deux types dobjets. e Le membre gauche dune aectation est rserv aux variables informatiques e e qui ont ainsi toujours une valeur. Le membre droit peut faire appara ` la tre a fois des variables informatiques, qui sont alors values ` leur valeur, et des e e a indtermines mathmatiques. Lvaluation dune expression pour certaines e e e e valeurs des indtermines est obtenue grce ` subs, comme dans lexemple e e a a ci-dessus. Laectation se visualise comme la cration dune `che de la variable e e vers la valeur. Par exemple, la suite daectations x:=y: y:=z: cre les `ches reprsentes en gure 2. La premi`re commande cre lexprese e e e e e sion forme de lindtermine y et lui donne pour nom x. La seconde utilise e e e lindtermine y comme une variable et lui aecte lindtermine z. e e e e xyz Figure 2 Evaluation de variables. Lvaluation consiste alors ` suivre ces `ches pour obtenir une valeur. e a e Pour dcomposer les tapes de lvaluation, nous utilisons la commande eval e e e dont le second argument contrle le nombre de `ches suivies : o e x,eval(x,1),eval(x,2); z, y, z Le premier rsultat montre que lvaluation normale suit toutes les `ches. Le e e e deuxi`me montre quen ralit, la valeur de x est celle de la variable y. Si y e e e est modie, sa nouvelle valeur sera aussi celle que renverra lvaluation de x. e e Contrairement ` lgalit mathmatique, laectation est dissymtrique a e e e e puisquelle cre une `che de la variable vers la valeur. Une autre cause de e e cette dissymtrie tient ` lvaluation. Le membre droit de laectation est e a e valu, le membre gauche ne lest pas. e e Exemple 39. Considrons les instructions e x:=y: y:=x: La premi`re aectation cre une `che de x vers la valeur de y. Ensuite, le e e e membre droit de la seconde aectation svalue en la valeur de x, cest-`-dire e a celle de y. Cette seconde aectation na donc aucun eet puisquelle cre une e `che de y vers sa propre valeur. e Pour dsaecter une variable, il faut lui aecter son nom. Le rle des e o apostrophes est de protger leur argument contre une valuation. Laectation e e x:=x: est traite normalement : le membre droit est dabord valu. Mais les apose e e trophes ont une r`gle dvaluation particuli`re. Le rsultat de lvaluation e e e e e dune expression entre apostrophes est cette expression non value. Dans la e e

56

II. UTILISATION AVANCEE

x x3 Figure 3 Evaluation dune variable protge. e e dsaectation, la valeur du membre droit est donc la variable elle-mme (g. 3). e e Chaque valuation fait dispara un niveau de protection : e tre x:=3: v1:=x; v2:=v1; v3:=v2; v1 := x v2 := x v3 := 3 La protection permet galement de crer des boucles (gnralement ine e e e volontaires). Exemple 40. Une variation de lexemple 39 cre lexemple le plus simple e de boucle : x:=y: y:=x: eval(x,10), eval(x,17); x, y En revanche, lvaluation de x ou y sans limitation sur le nombre dtapes e e entra lvaluateur dans une boucle innie qui se termine par le dbordement ne e e de la pile et sur certaines machines par la mort du syst`me. e Lutilisation conjointe de la commande eval et de la protection permet un acc`s simultan ` la variable et ` sa valeur. e ea a Exemple 41. La procdure incr augmente de 1 la valeur dune variable e : incr:=proc(x:name) if assigned(x) then x:=eval(x)+1 end: Il est ncessaire de sassurer que largument est bien un nom de variable e aecte, car autrement eval(x) renverrait le nom x et en termes de `ches, e e laectation construirait donc une `che de x vers un arbre dont la racine est e ` e +, dont un oprande est 1 et lautre oprande est ` nouveau x. A lvaluation e e a suivante de cet arbre, le syst`me mourrait dune explosion de la pile en pare courant indniment ces `ches. e e x:=3: incr(x); Error, incr expects its 1st argument, x, to be of type name, but received 3 incr(x): x; 4

` 3. APPROFONDISSEMENT DU SYSTEME

57

Pour dsaecter une variable, il faut lui aecter son nom. La protection e permet davoir acc`s ` ce nom mais est parfois dlicate demploi. La come a e mande evaln, plus gnrale, donne un acc`s direct ` ce nom pour toutes les e e e a variables. Exemple 42. Pour dsaecter les variables indexes x[1]...x[10], on ne e e peut pas faire for i to 10 do x[i]:=x[i] od; puisque la variable i ne va pas tre value dans le terme de droite. En e e e revanche, on peut utiliser subs ainsi for i to 10 do x[i]:=subs(t=i,x[t]) od; La solution la plus directe consiste ` utiliser la commande evaln : a for i to 10 do x[i]:=evaln(x[i]) od; 3.1.2. Evaluation des expressions Lvaluation dune expression consiste ` parcourir larbre la reprsentant e a e en valuant chacun des nuds et chacune des feuilles. Les simplications e automatiques sont dabord appliques ` lexpression. En dehors des cas e a spciaux dvaluation (comme les apostrophes), les descendants de la racine e e sont valus rcursivement et la procdure qui est ` la racine est alors value e e e e a e e avec ces arguments. Exemple 43. Pour illustrer la simplication automatique de la premi`re e phase, nous crons une procdure dont lvaluation produit une boucle innie e e e : boucle_inf:=proc() do od end: Voici quelques simplications automatiques eectues avant lvaluation : e e true or boucle_inf(), boucle_inf()-boucle_inf(); true, 0 La protection des expressions agit comme pour les noms : lvaluateur e se contente dter un niveau de protection, mais nvalue pas lobjet protg. o e e e Les simplications automatiques ont cependant lieu : f(boucle_inf()),sin(boucle_inf()-boucle_inf()); f (boucle inf()), sin(0) Dans le contexte du calcul symbolique, la protection est cruciale. Par exemple, il est absolument ncessaire davoir un mcanisme qui permette ` e e a la procdure exp appele avec le nom x de renvoyer exp(x) sans que celui-ci e e soit ` nouveau valu. La valeur retourne est donc exp(x). Nous avons a e e e vu au 1.3 que cette valeur tait mme mise dans la table de remember de e e la procdure exp, mais ceci ne constitue quune optimisation et nest pas e absolument ncessaire. e Pour conclure, nous mentionnons un usage constant fait par Maple de la protection, ` savoir le chargement automatique de procdures. Au dbut a e e dune session Maple, un certain nombre de procdures sont dnies par e e

58

II. UTILISATION AVANCEE

fct:=readlib(fct): Ainsi lorsque fct est appele pour la premi`re fois, la procdure est charge en e e e e mmoire. Les apostrophes externes sont l` pour retarder lappel ` readlib, les e a a apostrophes internes servent ` ce que lors de lappel, largument de readlib a soit le nom de la procdure et non la valeur readlib(fct), ce qui entra e nerait une boucle innie. Exemple 44. La procdure factor est dnie ainsi : e e eval(factor,1); readlib(factor) print(factor); proc(x,K) ... end Dans le second appel, largument de print est dabord valu et la dnition e e e initiale de la procdure a t remplace par le contenu trouv dans la bibe ee e e lioth`que. e 3.1.3. Evaluation totale ou partielle Une question qui se pose ` Maple est de savoir ` quel moment valuer a a e les expressions. Si lvaluation dune expression est dclenche chaque fois e e e quelle est rencontre, le syst`me risque de parcourir tout larbre pour valuer e e e chacune des procdures quil contient et dans beaucoup de cas renvoyer exe actement lexpression de dpart. Par exemple si une expression contient la e sous-expression exp(3/2), chaque tape du calcul va relancer la procdure e e exp qui va se rendre compte quelle ne sait rien faire dautre sur 3/2 que de renvoyer exp(3/2). La stratgie de Maple face ` cette question est la suivante : e a les variables ", "", et """ sont toujours values totalement, ainsi e e que les arguments de la procdure $ ; e en utilisation interactive, lvaluation totale est lance ` chaque e e a tape ; e dans une procdure, les expressions ne sont values qu` un niveau e e e a (sauf les exceptions dj` mentionnes) ; ea e lappel explicite ` la commande eval permet de contrler lvaluation. a o e En pratique, cette stratgie a trois consquences pour lutilisateur. Lorsque e e lon utilise subs et quil est important que les simplications des fonctions aient lieu avant la suite du calcul, il faut alors faire eval(subs(.)). Deuxi`mee ment, il faut viter dutiliser les variables locales ", "" et """ dans les procdue e res lorsquelles reprsentent autre chose que des nombres, puisqualors on a e une perte decacit due ` lvaluation totale. Troisi`mement, il faut viter e a e e e dutiliser la procdure $ le plus souvent possible ; il vaut mieux recourir ` e a seq. Pour le reste, il est important de bien comprendre la distinction entre variable et valeur mais les subtilits de lvaluation ` un ou plusieurs niveaux e e a

` 3. APPROFONDISSEMENT DU SYSTEME

59

nont quasiment aucune incidence sur la vie quotidienne de lutilisateur de Maple. Exemple 45. Voici un exemple extrme : e f:=proc() local x,y; x:=y; y:=0; x end: f(); y Ici le dernier x nest valu qu` un niveau, et la procdure renvoie la varie e a e able y. (En revanche, si lon demande ensuite la valeur de y, on obtient 0.) Exemple 46. Le cas le plus raliste est celui des expressions dont larbre e nest pas parcouru ` chaque tape du calcul. Lexemple suivant met en a e vidence ce phnom`ne : e e e s:=0: t:=proc(x) global s; s:=s+1; t(x) end: f:=subs(x=t(3),(x^2-1)/(x-1)): s; 1 f,1+f,sin(f+z): s; 7 normal(eval(f,1)); s; t(3) + 1 7 normal(f); s; t(3) + 1 9 ` A chaque appel de la procdure t, le compteur s est incrment. Lexpression f e e e est une fraction rationnelle en t(3). Sa cration exige une valuation de t e e lors de lvaluation du premier argument de subs. Ensuite, chaque fois que f e appara dans une expression au niveau interactif, son valuation totale est t e dclenche, ce qui incrmente s deux fois. Lvaluation ` un niveau de f e e e e a ne lance pas lvaluation de t, pas plus que normal, puisqu` lintrieur e a e de normal, toutes les valuations ont lieu ` un seul niveau. Le dernier e a test provoque lvaluation de t puisque normal, comme presque toutes les e procdures Maple, value totalement ses arguments. En revanche, si linstruce e tion normal(f) est utilise ` lintrieur dune procdure, elle ne dclenche pas e a e e e lvaluation de t, car la variable f nest value qu` un seul niveau. e e e a 3.1.4. Tables et procdures e Trois particularits des tables et des procdures mritent dtre signales e e e e e : ces deux structures ne svaluent pas selon les mmes r`gles que les autres e e e objets du syst`me, elles sont toutes deux susceptibles de cration implicite et e e la commande op ne permet pas de les dcomposer compl`tement. e e

60

II. UTILISATION AVANCEE

Cration implicite. La cration implicite intervient lorsquune valeur de fonce e tion ou une variable indexe apparaissent en membre gauche dune aectation. e Exemple 47. Les deux aectations a[3]:=0: f(0):=1: crent respectivement une table et une procdure. e e La plupart des objets Maple ne peuvent pas tre modis. Les oprations e e e courantes crent une copie modie de leur argument. Il ny a quune excepe e tion ` cette r`gle : les tables. Laectation ` une variable indexe comme a[3] a e a e na de sens que si a est une table. Lorsque la variable a na pas t dclare ee e e explicitement par a:=table(), le syst`me, au lieu de protester en rencone trant laectation a[3]:=0, dcide de crer une table et dassocier la valeur 0 e e a ` lentre 3. e Le cas des procdures est li ` lutilisation de laectation pour remplir la e ea table de remember (voir 1.3). Le syst`me cre dans ce cas automatiquement e e une table de remember et une procdure qui ne fait rien sauf pour la valeur e particuli`re qui a t dnie. e ee e print(f); proc() options remember; procname(args) end R`gle dvaluation. La deuxi`me particularit des tables (donc des matrices e e e e qui sont des tables particuli`res) et des procdures est leur r`gle dvaluation e e e e : lorsquune table ou une procdure a t aecte ` une variable, lvaluation e ee e a e de celle-ci produit son nom. Pour accder au contenu de la table ou de la e procdure, il faut explicitement faire appel ` eval. En termes de `ches, e a e lvaluateur sarrte de suivre les `ches lorsquil dtecte un de ces objets. e e e e Voici un exemple qui illustre une des consquences de cette r`gle pour e e lutilisateur a:=3: b:=a: a:=2: f:=proc() 0 end: g:=f: f:=2: b,g; 3, 2 Dans le premier cas, au moment de laectation b:=a, a est valu, et linterpr`e e e te aecte ` b la valeur 3. Le fait que a soit modi par la suite na aucune a e incidence sur b. Linterprtation en termes de `ches est donne en gure 4 e e e p. 61. Dans le second cas, au moment de laectation g:=f, f svalue en son e nom, et donc la valeur aecte ` g est, non pas la procdure, mais la variable e a e f. Si f est modi ensuite, la valeur de g lest aussi. Linterprtation en e e termes de `ches est donne en gure 5. e e Une autre consquence immdiate est que pour acher la procdure ou e e e la table, il faut appeler explicitement une des procdures print ou eval. e Exemple 48. print(a);

` 3. APPROFONDISSEMENT DU SYSTEME

61

a 3 a:=3: b:=a:

b 2

a 3 a:=2:

Figure 4 Evaluation des noms. f g proc() ... f:=...: g:=f: f 2 f:=2: g

Figure 5 Evaluation des procdures. e table([ 1=3 ]) Cette r`gle spciale dvaluation est motive par la possibilit de faire e e e e e rfrence ` des valeurs dune procdure ou des entres dune table qui ne sont ee a e e pas aectes. Ainsi f(x) ou t[x] sont aches ainsi, au lieu que le corps de e e la procdure ou de la table apparaisse. e Pour les procdures, lexemple que nous avons donn est extrme et la e e e r`gle dvaluation des procdures na pas dautre eet apparent pour lutilisae e e teur que la ncessit dutiliser print pour en acher le corps. Cette r`gle e e e est par ailleurs utile au bon fonctionnement du syst`me. Dune part loption e remember de la procdure readlib ne fonctionnerait pas sinon : il faut en e eet que largument de readlib soit le mme dun appel sur lautre, que la e procdure ait dj` t charge ou non. Dautre part cela permet dappeler la e eaee e commande trace sans protger largument. e Les tables sont les seuls objets Maple qui peuvent tre modis. Cette e e modication seectue par laectation dune valeur ` une de leurs entres. a e La commande map applique rcursivement une procdure aux entres dune e e e copie de la table qui lui est passe en argument. Ainsi la procdure copy e e est crite comme un map de lidentit. Par commodit, il nest pas ncessaire e e e e dutiliser map pour appliquer subs ou evalf ` une table. a Les deux consquences les plus importantes de cette r`gle concernent e e lalg`bre linaire, o` la plupart des programmes, comme llimination gaussie e u e enne, modient certains lments des matrices passes en argument. Voici un ee e prototype simpli dune telle procdure dalg`bre linaire : e e e e f:=proc(mat) local b; b:=mat;

62

II. UTILISATION AVANCEE

b[2,1]:=b[2,1]3*b[1,1]; b end: Lutilisation de cette procdure ne produit pas leet dsir : e e e a:=array([[1,2],[3,4]]); 1 2 3 4 f(a): print(a); 1 2 0 4 La matrice donne en argument a t modie, car la variable b dsigne e ee e e physiquement la mme matrice que mat, et donc que a. Il faut utiliser exe plicitement copy. La procdure scrit alors : e e g:=proc(mat) local b; b:=copy(mat); b[2,1]:=b[2,1]3*b[1,1]; b end: Mais lutilisation de cette procdure rserve encore une surprise : e e g(a); b Le rsultat de la procdure est la variable locale b. Pour viter les confusions e e e que peut entra ner cette variable locale dans les calculs, il vaudra mieux crire e la procdure ainsi : e h:=proc(mat) local b; b:=copy(mat); b[2,1]:=b[2,1]3*b[1,1]; eval(b) end: De cette faon, la procdure renvoie bien une matrice, et ne modie pas son c e argument. Champs des tables et des procdures. La derni`re particularit des tables et e e e des procdures concerne lemploi des commandes op, subsop et subs. Les e deux premi`res vont de pair : si un champ dune structure peut tre atteint e e par op, il est possible dutiliser subsop pour crer une copie de la structure e dont ce champ est modi. e Pour les tables, la commande op joue un rle dirent de son rle habituel o e o : elle construit une liste des correspondances (entre=sortie) de la table. Ceci e pourrait laisser croire que les tables sont stockes comme des listes, mais il e

` 3. APPROFONDISSEMENT DU SYSTEME

63

Table 2 Les champs dune procdure. e Instruction eval(f) op(0,eval(f)) op(1,eval(f)) op(2,eval(f)) op(3,eval(f)) op(4,eval(f)) op(5,eval(f)) op(6,eval(f)) valeur la procdure e le type procedure ses param`tres e ses variables locales ses options sa table de remember sa description (inexploite) e ses variables globales

nen est rien (voir 3.2). Les deux autres commandes dacc`s aux tables sont e indices qui construit la liste des entres (cls) de la table et entries qui e e construit la liste des valeurs. Les champs des procdures sont indiqus au tableau 2. Les remplacee e ments de param`tres ou de variables locales par subsop doivent maintenir e la cohrence entre les deux suites de noms. Il est par ailleurs impossible de e remplacer la table de remember par une autre table. Le seul remplacement possible est par NULL, ce qui revient ` vider la table. a Exemple 49. Une version simple de la procdure forget, qui vide une e table de remember, scrit ainsi : e easy forget:=proc(p:procedure) p:=subsop(4=NULL,op(p)) end: Une autre fonctionnalit de la procdure forget est la suppression dune e e entre particuli`re de la table. Bien que la commande subsop ne permette e e pas de remplacer la table de remember par une autre, cette suppression est rendue aise par le fait que les tables ne sont pas recopies : e e forget value:=proc(p:procedure,x) local t; t:=op(4,op(p)); t[x]:=t[x]; NULL end: Cette technique est en outre bien plus ecace, puisque contrairement a ` subsop elle nentra pas la cration dune copie de la procdure. La ne e e procdure forget du syst`me lemploie dailleurs mme pour vider toute la e e e table. Bien que la commande op ne permette pas davoir acc`s aux instructions e dune procdure, la commande subs sy applique. Applique aux tables, la e e commande subs naecte pas les indices mais uniquement les valeurs.

64

II. UTILISATION AVANCEE

Exemple 50. Nous crons une procdure : e e p:=proc() local a,b,c; global x,f; a:=3; x:=a; f:=sin(x+b) end: puis nous y eectuons une substitution : subs([a=s,x=t],sin=cos,eval(p)); proc() local s,b,c; global t,f; s := 3; t := s; f := cos(t+b) end Lopration de substitution dans les procdures sert principalement ` la e e a cration de procdures ` partir dun programme. e e a Exemple 51. La situation suivante se produit souvent : au cours dun calcul il devient souhaitable de crer une procdure qui tienne compte de e e valeurs obtenues. Lapproche na ne fonctionne pas : ve a:=exp(x)+x+x^3+1: b:=sin(x): f:= x->if x>1 then a*b*ln(x) else a*b^2*ln(x) fi; f(3); ex + x + x3 + 1 sin(x) ln(3) Ce rsultat o` x nest pas partout remplac par 3 sexplique par le moment e u e o` les variables a et b sont values. Elles ne le sont pas ` la cration de u e e a e la procdure, mais ` son excution. Pour obtenir le rsultat souhait, il faut e a e e e utiliser dans la procdure non pas les variables mais leur valeur. La commande e subs est alors ncessaire : e g:=subs(a=a,b=b,eval(f)): g(3); e3 + 31 sin(3) ln(3) Il est ` noter que dans le cas o` lon veut crer une procdure directement a u e e a ` partir dune expression, il est plus simple dutiliser la fonction unapply. Ce nest cependant pas possible dans lexemple prcdent ` cause du test if. e e a Ce mcanisme de substitution est utile pour crer des procdures simples e e e a ` lintrieur dun programme. Lorsque les procdures ` crer sont plus come e a e plexes, il devient malais de les produire par de simples substitutions. Cette e technique est alors remplace avantageusement par le mcanisme plus gnral e e e e fourni par la procdure procmake. e Options des procdures. Les options dune procdure ne modient pas sa fonce e tionnalit, mais elles inuent sur lachage ou lexcution des calculs. Toutes e e les options sont valides, mais seules certaines sont reconnues par le syst`me ; e celles-ci sont indiques au tableau 3. e

` 3. APPROFONDISSEMENT DU SYSTEME

65

Table 3 Options reconnues par le syst`me. e Nom builtin trace remember Copyright... system operator,arrow operator,angle package Rle o indique une procdure du noyau e le dtail de lexcution est ach e e e la table de remember est systmatiquement remplie e le corps de la procdure nest pas ach e e la table de remember est vide priodiquement e e la procdure utilise la notation a->f(a) e la procdure utilise la notation <f(a)|a> e reconnu par with

Loption builtin caractrise les procdures du noyau, crites en C. Par e e e exemple print(op); proc() options builtin; 118 end Environ 90 procdures font ainsi partie du noyau, le tableau 4 recense les e principales dentre elles. Plus un programme utilise des procdures du noyau ` la place de celles de e a la biblioth`que, plus il a des chances dtre ecace, cest pourquoi il est bon e e davoir cette liste en tte. La plupart des commandes qui y sont mentionnes e e sont dcrites dans ce livre, et toutes sont dcrites dans la documentation en e e ligne. Le reste du syst`me Maple (soit environ 800 procdures) est enti`rement e e e crit dans le langage Maple. Ces procdures sont protges par loption copye e e e right. Leur achage est rduit : e print(sin); proc(x) ... end Cette option est utilisable dans nimporte quelle procdure : e f := proc(n) option Copyright toto; n! end; f := proc(n) ... end Pour acher eectivement le code, il sut de changer un des param`tres e de linterface, en excutant linstruction magique : e interface(verboseproc=2); 3.1.5. Macros La commande macro permet de dnir une abrviation. Ses arguments e e ne sont pas valus. Nous avons vu que les variables utilises ` lintrieur des e e e a e procdures ne sont values qu` leur excution et non ` leur cration. Les e e e a e a e macros en revanche sont substitues dans les procdures au moment de leur e e cration. e Exemple 52.

66

II. UTILISATION AVANCEE

Table 4 Fonctions du noyau. Domaine dapplication lments du langage ee cha nes de caract`res e entiers, rationnels, ottants Nom des fonctions ERROR, RETURN, macro, map, seq, type, traperror cat, substring, lexorder abs , igcd, iquo, irem, isqrt, max, min, modp, modp1, mods, evalf/hypergeom, trunc coeff, coeffs, degree, denom, divide, icontent, lcoeff, ldegree, maxnorm, normal, numer, sign, sort, tcoeff diff, expand, series assigned, convert, eval, evalb, evalf, evalhf, evaln, frontend, has, hastype, indets, length, nops, op, subs, subsop, $ entries, indices, table intersect, member, minus, union addressof, assemble, disassemble, pointto alias, appendto, lprint, print, userinfo, writeto, time, system, readlib

polynmes, o fractions rationnelles

fonctions expressions

tables ensembles, listes package hackware interface

macro(f=nom de fonction/difficile a_taper); g:=proc() f(x)+2 end; g := proc() nom de fonction/difficile a_taper(x)+2 end 3.1.6. Linterpr`te e Outre le simplicateur et lvaluateur dont nous avons beaucoup parl e e dans cette section, linterpr`te comprend une interface et un analyseur syne taxique. Cet analyseur est accessible via les commandes parse et readline. Linterpr`te peut tre sommairement dcrit comme eectuant la boucle innie e e e do print(eval(parse(readline()))) od o` readline lit une cha de caract`res, parse y reconna une instruction u ne e t Maple, qui est value par eval, et le rsultat est nalement ach par print. e e e e La commande parse nous sera utile pour calculer des temps dexcution par e la procdure e duree:=proc(r) time(eval(parse(r,statement))) end:

` 3. APPROFONDISSEMENT DU SYSTEME

67

qui prend une cha de caract`res en argument. ne e Exemple 53. duree(for i to 50 do ifactor(2^i-1) od;); 1.033 Au niveau de linterface, on dispose de la commande alias qui permet dutiliser des abrviations. Contrairement ` macro, ces abrviations e a e naectent pas les expressions ou les procdures, mais uniquement leur afe chage. Au dmarrage du syst`me, le nombre imaginaire i est dni comme e e e un alias de (1)1/2 , ce qui permet la simplication automatique i2 = 1. 3.2. Structure interne des objets Maple. Une grande partie de lecacit du syst`me Maple lui vient dune caractristique spcique : les objets y e e e e sont uniques. Nous allons dcrire bri`vement dans cette section le procd e e e e utilis et surtout ses consquences pour lutilisateur en qute decacit. e e e e Hachage et simplication automatique. Le hachage est une technique informatique permettant de crer des tables (cl,valeur) auxquelles lacc`s seectue e e e en temps constant (contrairement aux listes par exemple, o` lacc`s demande u e un temps proportionnel au nombre dlments de la liste). ee Les tables en Maple sont des tables de hachage. Il sensuit en particulier que le temps de recherche dans la table de remember dune procdure est e indpendant du nombre dentres qui y ont t stockes. e e ee e Tous les objets utiliss au cours dune session Maple sont stocks dans e e une table de hachage particuli`re. Ceci sapplique non seulement aux obe jets nomms, mais aussi aux expressions et sous-expressions qui interviennent e durant le calcul. Lacc`s ` cette table est fait de telle mani`re que sommes e a e et produits sont rfrencs ` une entre qui ne dpend pas de lordre des ee e a e e ` oprandes. A la cration dune expression larbre reprsentant lexpression e e e est construit du bas vers le haut. Les feuilles sont les premiers objets reconnus, puis les expressions bties sur les feuilles,... Au fur et ` mesure de cette a a cration, les objets sont tous compars ` la table de hachage. Si le syst`me e e a e saperoit lors de cette comparaison que lobjet quil teste est nouveau, alors c lobjet est cr et devient nud de larbre. Si au contraire le syst`me reee e conna lobjet comme ayant dj` t utilis, lobjet nest pas cr et cest t ea ee e ee lancien objet qui devient nud de larbre. Ceci garantit lexistence dune seule copie de chaque expression en mmoire. e Grce ` cette table, le test dgalit de deux expressions est eectu en a a e e e temps constant et la simplication automatique des sommes, des produits ou des ensembles est eectue tr`s rapidement par tri des oprandes. e e e Graphes acycliques dirigs. Une consquence de lunicit des objets est que e e e les arbres que nous avons utiliss pour reprsenter les expressions sont stocks e e e comme des graphes acycliques dirigs (abrgs ` langlaise DAGs). Un exeme e e a ple de DAG est donn en gure 6 p. 68. e

68

II. UTILISATION AVANCEE

+ d d * i sin i i i i * i i ln i ^ i d ii + d 2 d d x 1 Figure 6 Le DAG reprsentant ln(x + 1) + 2 sin(x2 ln(x + 1)). e Les consquences de cette reprsentation sur lespace mmoire utilis sont e e e e normes. Par exemple, la taille de la drive dune expression de taille n est de e e e lordre de n3/2 dans la reprsentation arborescente et est abaisse ` lordre n e e a par lutilisation de DAGs. Il est plus dlicat dexploiter cette structure pour abaisser galement le e e temps de calcul. Loption remember rpond dans une certaine mesure ` cette e a attente, mais au prix dune consommation mmoire leve. Nous dcrivons e e e e une autre approche utilisant la commande optimize dans lexercice 6. Package hackware. Le package hackware est tr`s dlicat demploi et rserv e e e e au programmeur Maple conrm. Cependant, il permet de comprendre vraie ment comment fonctionne Maple et nous conseillons lusage des commandes disassemble et pointto pour explorer la structure des objets Maple. 3.3. Dveloppement dextensions du syst`me. Le langage de programe e mation permet dtendre le syst`me. Nous distinguons trois directions prine e cipales dans lesquelles lutilisateur peut tendre Maple. La premi`re est e e lintroduction dans le langage dune fonction (au sens mathmatique) qui e nest pas connue de Maple, la deuxi`me est lajout dune fonctionnalit (une e e opration sur les fonctions mathmatiques comme la drivation ou lvaluation e e e e numrique), et la troisi`me est lcriture dun ensemble de procdures fore e e e mant une application particuli`re. Il y a dans tous les cas une philosophie e gnrale de programmation quil faut conserver, et que nous allons dtailler e e e maintenant. Ajout dune fonctionnalit. Le petit programme de drivation ci-dessous illuse e tre une partie des points que nous avons prsents jusquici. Cette procdure e e e

` 3. APPROFONDISSEMENT DU SYSTEME

69

prend deux arguments, lexpression ` driver et la variable par rapport ` a e a laquelle on drive. e derive:=proc(f,x) local s, i; if not has(f,x) then 0 # expressions indpendantes de x e elif f=x then 1 # x lui-mme e elif type(f,+) then map(derive,f,x) # [ fi ] = fi elif type(f,*) then # le produit est n-aire # et [ fi ] = fi j=i fi convert([seq(subsop(i=derive(op(i,f),x),f), i=1..nops(f))],+) elif type(f,) then if not has(op(2,f),x) then # (f a ) = af f a1 op(2,f)*derive(op(1,f),x)*op(1,f)(op(2,f)1) else derive(exp(op(2,f)*ln(op(1,f))),x) # f g = exp(g ln f ) elif type(f,function) then if op(0,f)=exp then f*derive(op(f),x) # (ef ) = f ef elif op(0,f)=ln then derive(op(f),x)/op(f) # [ln(f )] = f /f else ERROR(Derivee non programmee)# on abandonne else ERROR(arguments invalides :.f,x) end; Ainsi nous avons ajout la fonctionnalit derive au syst`me. Ce proe e e gramme est simple, mais nest pas tr`s extensible : pour introduire une r`gle e e de drivation pour une autre fonction, par exemple la tangente, il faut mode ier la procdure. Dans la section suivante nous montrerons comment crire e e cette procdure pour grer de mani`re lgante de nouvelles fonctions. e e e ee Pour progresser en programmation Maple, nous suggrons au lecteur e dbutant de sinspirer des programmes Maple existants. Nous avons dj` e ea vu page 65 comment voir le contenu des fonctions de la biblioth`que. Pour e crire une procdure, une bonne mthode consiste ` tudier une fonction exise e e ae tante qui eectue une tche similaire. Le lecteur se forgera ensuite son propre a style de programmation, et naura plus ` regarder les fonctions du syst`me a e que pour chercher ` y reprer lorigine dun dysfonctionnement. a e Ajout dune fonction. Supposons par exemple que la fonction logarithme nexiste pas en Maple. Ajouter la fonction ln ne signie pas crire une e procdure ln. Ainsi, les fonctions dAiry Ai et Bi sont connues de Maple, e mais il nexiste pas de procdure correspondante. En eet, tant que les obe jets restent formels, la procdure ln se contente de renvoyer un rsultat non e e

70

II. UTILISATION AVANCEE

Table 5 Principales fonctions extensibles. abs conjugate convert di evalapply evalc evalf Re expand series Im signum latex simplify mod type print value

valu. Le seul rle dune telle procdure est deectuer quelques simplicae e o e tions triviales comme ln(1) 0. En revanche, il est ncessaire dtendre le e e syst`me pour quil puisse driver, simplier, valuer numriquement les exe e e e pressions contenant ln. Autrement dit, une fonction mathmatique nest pas e dnie par une procdure, mais par plusieurs procdures correspondant aux e e e proprits de la fonction qui sont intressantes pour les applications en vue. ee e Dans le cas du logarithme, on crira par exemple : e di/ln:=proc(y,x) di(y,x)/y end: ce qui traduit la relation habituelle : [ln(y)] = y . y

Cest rellement ainsi quest dnie la drive du logarithme en Maple. e e e e On crira de mme les autres procdures : expand/ln, simplify/ln, e e e evalf/ln,... Dans chacun des cas, il sut de se rfrer au help de la ee proprit que lon souhaite prciser (expand, simplify,...) pour conna le ee e tre format des entres et des sorties de la procdure que lon crit. Les principales e e e procdures Maple extensibles de cette mani`re sont indiques au tableau 5 e e e p. 70. Le fonctionnement de ce mcanisme est tr`s simple. Nous le dcrivons e e e sur la procdure derive crite plus haut, dont nous remplaons la branche e e c elif correspondant aux fonctions par elif type(f,function) then fct:=derive/ . op(0,f); if not type(fct,procedure) then traperror(readlib(fct)) ; if not type(fct,procedure) then ERROR(Derivee non programmee : . op(0,f)) else fct(op(f),x) Dans le cas dune fonction f, le programme commence par tester lexistence dune procdure derive/f. Si cette procdure nexiste pas, le programme e e tente alors de la trouver en biblioth`que. Si elle existe alors elle est appele, e e sinon derive renvoie un message derreur. Il sut dcrire les procdures e e derive/. pour tendre les connaissances de la procdure derive, sans e e changer le corps de celle-ci.

` 3. APPROFONDISSEMENT DU SYSTEME

71

Ajout dun package et organisation des chiers. Quelques r`gles sont ` ree a specter lorsque lon crit un ensemble de procdures en Maple pour viter e e e que celles-ci ninterf`rent avec le reste du syst`me. Ces r`gles visent essene e e tiellement ` viter que ne soient rednies par erreur des variables ou des a e e procdures. En gnral, il est impossible de rednir des procdures ou varie e e e e ables du syst`me, car celles-ci sont protges par protect, mais il faut viter e e e e le plus possible dintroduire de nouveaux noms (mme en les protgeant) que e e lutilisateur risque dutiliser comme variables (x, y, sys, solution, ...) Toutes les variables globales en Maple (sauf celles qui sont accessibles ` a lutilisateur comme D, E, I) sont prcdes du caract`re _. Ainsi, la variable e e e e globale _X est constamment utilise par la procdure solve, la variable _Z est e e utilise par la procdure RootOf, les variables _C1, _C2,... sont utilises par la e e e procdure dsolve et laectation de lune quelconque de ces variables perturbe e fortement le fonctionnement du syst`me. Lorsque des variables globales sont e ncessaires, il faut leur donner un nom susamment long, peu susceptible e dtre employ par lutilisateur. e e Quant aux procdures, nous distinguerons deux catgories : celles que e e lutilisateur doit appeler et celles qui ne sont utilises que par le programme. e Lorsque les premi`res sont en petit nombre, il sut de leur choisir un e nom susamment explicite, qui ne risque pas dtre dj` utilis pour autre e ea e chose. Si ce nest pas le cas, il faut crer un package, cest-`-dire une table de e a procdures. Ainsi, si lon a crit trois procdures proc1, proc2 et proc3, et e e e que lon dcide dappeler le package toto, on les renommera toto[proc1],... e par exemple en mettant la ligne macro(proc1=toto[proc1],proc2=toto[proc2],proc3=toto[proc3]); au dbut de chacun des chiers o` ces procdures sont utilises. Lutilisateur e u e e pourra ` son gr utiliser la forme longue des noms de procdures, ou faire a e e appel ` la commande with(toto). Cette commande aecte ` chaque nom a a court (par exemple toto1) la valeur correspondante de la table toto. Ensuite, si la procdure toto/init existe, with lexcute. Cette procdure peut e e e tre utilise pour aecter des variables globales ncessaires ` lutilisation du e e e a package. Quant aux procdures que lon ne souhaite pas rendre accessibles ` lutilie a sateur, on les nommera de prfrence toto/nom_de_procedure. Cette utilisaee tion ventuellement rpte du caract`re / permet ` la procdure readlib e e ee e a e daller rechercher le chier nom_de_procedure.m dans le rpertoire ou dossier e toto sur la plupart des syst`mes dexploitation (` condition que la varie a able libname soit correctement positionne). Les gros dveloppements sont e e donc structurs en plusieurs chiers rpartis dans des rpertoires dont les noms e e e sont ceux des procdures concernes. Dans ce cas, il peut galement tre utile e e e e de dnir des procdures qui ne seront charges quen cas de besoin, en utile e e isant un readlib protg comme nous lavons dj` vu. Enn, sur certaines e e ea architectures, un programme indpendant de Maple appel march permet de e e regrouper tous ces chiers en un seul (Maple archive), dont readlib charge des morceaux ` la demande. a

72

II. UTILISATION AVANCEE

Pour terminer de rendre le package utilisable, il faut crire un chier e de description, reprenant les rubriques des messages habituellement fournis par help. La procdure makehelp transforme ce chier en une procdure e e help/text/toto (ou help/toto/text/toto1) que la procdure help prend e en compte. Outils de dveloppement. Pour comprendre pourquoi une procdure Maple e e quelle fasse partie du syst`me ou quon en soit lauteur ne fait pas e ce que lon en attend, on dispose de trois outils principaux : la variable globale printlevel, la commande trace et la variable infolevel couple ` e a la procdure userinfo. e La procdure userinfo sutilise lors de lcriture de programmes. Elle e e permet dacher des messages durant lexcution du calcul. Par dfaut, aucun e e message nappara lachage tant contrl par la table infolevel. Une t, e oe partie des biblioth`ques Maple fait usage de cette possibilit et le syst`me e e e ache des messages apr`s lexcution de e e infolevel[all]:=5: La variable printlevel permet de suivre le droulement des calculs, mais e sans pouvoir spcier la fonction ou le groupe de fonctions ` observer. Sa e a valeur xe le niveau de dtail dachage de tous les calculs intermdiaires. e e Par exemple, apr`s avoir dni e e f:=proc(n) if n=1 then 1 elif n mod 2 = 0 then f(iquo(n,2)) else f(3*n+1) end: la commande f(7) ache uniquement le rsultat lorsque printlevel vaut 1. e En augmentant cette valeur, on verra les calculs intermdiaires avec de plus en e plus de dtails. En outre, si le programme sarrte avec une erreur (provoque e e e par ERROR et que printlevel vaut au moins 2, linstruction qui a provoqu e lerreur est ache, ainsi que la valeur de toutes les variables locales au moe ment de lerreur. Lorsque printlevel devient tr`s lev (de lordre de 100), il nest pas e e e toujours facile de traiter la masse norme dinformations aches. Quand e e cest possible, il est plus informatif de ne faire acher que ce qui concerne une ou deux procdures par la commande trace. e 3.4. Exercices. 1. Reprendre lexercice 3 de la page 44 en remplaant la liste par un array. c 2. Reprendre les questions de lexercice 1 p. 54 en utilisant des tables pour stocker les listes. Les tables contiennent le champ first et le champ suite qui est ` son tour une table ou NULL pour indiquer la n de liste. On a demande dcrire deux variantes des procdures append, cons, endcons, e e

` 3. APPROFONDISSEMENT DU SYSTEME

73

3.

4.

5.

6.

reverse et rest : une qui modie la liste passe en argument et une autre e qui renvoie une nouvelle liste. Etendre Maple par lajout dune fonction invGAMMA qui reprsente linverse e de la fonction pour la composition. Ecrire les procdures ncessaires ` e e a lvaluation numrique, ` la simplication et ` la drivation. [On pourra e e a a e utiliser solve]. Etendre le syst`me par lajout dune procdure lndiff qui calcule la e e drive logarithmique dune fonction (sans passer par diff). Cette proce e e dure devra savoir traiter les fractions rationnelles, les fonctions ln, exp. Poursuivre lexercice prcdent en dnissant lndiff de telle faon quelle e e e c puisse tre tendue par lajout de procdures lndiff/toto. Ecrire alors e e e lndiff/sin et lndiff/cos. De nombreux valuateurs (series, evalf, evala,..) tablissent un more e phisme entre deux types dexpressions : les sommes sont transformes e en sommes, les produits en produits,... Dans ces circonstances, un gain decacit important rsulte dune bonne utilisation des DAGs. Tous e e les valuateurs de Maple emploient loption remember ` cette n, mais e a cette utilisation a pour eet pervers de remplir inutilement la mmoire e et dempcher ainsi lexcution de gros calculs. Nous proposons dans cet e e exercice une autre approche plus ecace base sur la commande optimize. e (1) Utiliser la commande optimize/makeproc pour construire une proce dure valuant e 2x2 sin(x ln(1 + x)) + sin(x3 + x sin(x ln(1 + x))) ; (2) remplacer dans le rsultat de optimize les appels aux fonctions sin e et ln par des appels ` series/sin et series/ln avant dappeler a optimize/makeproc ; (3) en faisant series sur le rsultat de la procdure obtenue ` ltape e e a e prcdente vrier que le rsultat obtenu est le mme que celui que e e e e e lon obtient en appelant directement series ; (4) automatiser ce calcul de sries. e

Seconde partie Domaines dutilisation et applications

CHAPTER III

Courbes et surfaces
a ou de re facilite la perception de L visualisation deedonnees graphiquessultats identiquesemes dee `calcul phnom`nes mathmatiques ou physiques. Tous les syst` e e formel orent des fonctionnalits e de base : trac a par tir dune reprsentation paramtrique, dune quation ou dune liste de points, e e e utilisation de la souris pour changer le point de vue dun trac en trois dimene sions, pour modier laspect par des menus, pour eectuer des sorties en vue dune impression,... Cependant, contrairement aux domaines plus thoriques e o` les commandes sont contraintes par la pratique mathmatique, les appliu e cations graphiques ont des syntaxes tr`s direntes dun syst`me ` lautre. e e e a Ainsi, le contenu de ce chapitre est plus spciquement li au syst`me Maple e e e que les autres chapitres de cette partie. Les tracs graphiques de ce chapitre ont t obtenus en utilisant le mode e ee haute rsolution de Maple. Cest pratiquement toujours le mode par dfaut, e e sauf sur machine Unix quand on lance le syst`me par la commande maple : e il faut alors faire plotsetup(x11) pour avoir des tracs utilisant X Window. e On suppose dans certaines parties de ce chapitre que le package plots de Maple a t charg. ee e 1. Tracs en deux dimensions e Le trac le plus simple est celui dune courbe dans un espace ` deux dimene a sions. Cette courbe peut tre dnie sous au moins quatre formes direntes : e e e une fonction en coordonnes cartsiennes donne sous la forme y = f (x) ou e e e x = f (t), y = g(t), une fonction implicite f (x, y) = 0, ou une fonction en coordonnes polaires r = f (). e 1.1. Courbes y = f (x). Commenons par lexemple simple dune fonction c dnie et continue sur un intervalle born. En Maple, deux syntaxes sont e e possibles selon que la fonction ` tracer est une procdure ou une expression. a e Dans le premier cas, on crit plot(f,a..b) o` f est une procdure renvoyant e u e un nombre rel ; dans le second cas, on crit plot(e,x=a..b) o` e est une e e u expression dpendant uniquement de la variable x (g. 1). e 1.1.1. Reproduction dun graphique Lorsque Maple est utilis dans un syst`me de fentrage, la sauvegarde e e e et limpression de graphiques seectuent ` la souris. Pour sauvegarder un a
77

78

III. COURBES ET SURFACES

Figure 1 Deux tracs simples. e graphique en format postscript, on slectionne dans le menu intitul File le e e sous-menu Print, puis loption Postscript (g. 2).

Figure 2 Exemple de sortie postscript dun trac. A gauche e ` ` on slectionne Print puis Postscript dans le menu File. A e droite on choisit le nom du chier et on lance sa cration. e Pour inclure un graphique dans un worksheet Maple, comme en gure 1, on commence par le copier (option Copy du menu Edit), puis on se positionne a ` lendroit voulu du worksheet et on lins`re avec loption Paste. e

1. TRACES EN DEUX DIMENSIONS

79

40 50 20

-10

-5 0

10

-4 -50

-2

00

10

-20 -100 -40 -150

plot(x^4/(2-x-2*x^2+x^3), x=-10..10); Figure 3

plot(x^4/(2-x-2*x^2+x^3),x=-5 ..10,y=-50..50,discont=true); Figure 4

Dans la plupart des cas, la commande de trac (plot) appele directee e ment donne un rsultat satisfaisant. Cependant il est utile dapprendre ` e a reconna les mauvais tracs, et de savoir alors comment aider le syst`me. tre e e Exemple 1. Considrons la fonction f (x) = x4 /(2x2x2 +x3 ). Si lon e excute plot(x^4/(2-x-2*x^2+x^3),x=-10..10), on obtient le trac de la e e gure 3. Au vu de ce trac, on pourrait croire que la fonction f est continue, e et borne entre 150 et 100, alors quelle a en fait trois ples en 1, 1 et 2. e o Dautre part on distingue mal le comportement au voisinage de 0. Pour parer a ` ces probl`mes, il faut limiter lintervalle de variation des abscisses ` celui e a qui nous intresse, par exemple [5, 10], limiter lintervalle de variation des e ordonnes, par exemple [50, 50], et indiquer ` la commande plot par loption e a discont=true de chercher les discontinuits de la fonction. On obtient alors e le trac de la gure 4. e Fonctions ` variation rapide. Lorsque lon trace une fonction ` variation a a rapide, par exemple une fonction oscillante comme sin(1/x) au voisinage de zro, le syst`me calcule un plus grand nombre de points que par dfaut (49 en e e e Maple) an dobtenir un rendu lisse. Pour sen convaincre, il sut dajouter loption style=point qui trace les points calculs sans les relier. La gure 5 e p. 80 montre un tel trac contenant 69 points dans la premi`re moiti [0, 1/2] e e e et 24 dans la seconde [1/2, 1]. Ce mcanisme de ranement automatique est e tr`s volu en Maple et il est dicile de trouver une fonction non nulle et e e e continment drivable sur [0, 1] dont le trac (fait dun nombre ni de points) u e e se confond avec celui de la fonction nulle. Bornes innies. Dans le cas de bornes innies, Maple utilise une transformation ramenant ` lintervalle ni [1, 1] (x/8 pour |x| 4 et (|x| 2)/x a pour |x| > 4). Ceci autorise la visualisation de fonctions sur des intervalles

80

III. COURBES ET SURFACES

0.8

0.6

0.4

0.2

00 -0.2

0.2

0.4

0.6

0.8

infinity

Figure 5 plot(x*sin(1/x), x=0..1,style=point);

Figure 6 plot(arctan(x+1/x), x=0..infinity);

de largeur innie en donnant simplement infinity ou -infinity pour lune des bornes (g. 6). Recherche de zros. La commande fsolve a parfois du mal ` dtecter les e a e racines dquations du type f (x) = 0. On peut laider en dterminant ` laide e e a dun graphique un intervalle dans lequel se trouvent des racines. Exemple 2. Cherchons les racines de lquation sin2 xexp(x) cos x = 0 e dans lintervalle [0, 10]. Le graphe de la gure 7 montre une racine dans lintervalle [0.4, 0.8], une ou deux autres dans les intervalles [6, 6.4] et [9.2, 9.6]. Le trac de la fonction sur [6, 6.4] montre quil y a eectivement deux racines e dans cet intervalle ; par contre le trac sur [9.2, 9.6] ne permet pas de conclure. e Il faut restreindre le trac ` lintervalle [9.41, 9.44] pour pouvoir conclure quil ea ny a pas de racine entre 9 et 10 (g. 8). 1.2. Courbes paramtriques et polaires. Les tracs de courbes parame e e triques x = f (t), y = g(t) sont raliss par plot([f(t),g(t),t=a..b]) o` e e u [a, b] est lintervalle de variation du param`tre (g. 9). Les tracs de courbes e e
1 0.0003

0.5

0.00025

00

0.0002 2 4 x 6 8 10

0.00015 -0.5 0.0001 -1 9.41 9.415 9.42 9.425 9.43 9.435 9.44

Figure 7 plot(sin(x)^2exp(-x)*cos(x),x=0..10);

Figure 8 plot(sin(x)^2exp(-x)*cos(x),x=9.41..9.44);

1. TRACES EN DEUX DIMENSIONS

81

1 1 0.5 0.5

-1

-0.5

00

0.5

-2

-1.5

-1

-0.5

0 0 -0.5

-0.5 -1 -1

Figure 9 plot([sin(3*t), sin(4*t),t=0..2*Pi]);

Figure 10 polarplot(1-cos(t),t=0..2*Pi);

dnies en coordonnes polaires se font avec la commande polarplot du e e package plots, ` laquelle on peut donner une expression ou une fonction pour a une dnition de la forme r = f (), ou bien une liste [f(t),g(t),t=a..b] e pour r = f (t), = g(t) (g. 10). 1.3. Courbes implicites. Il est galement possible de tracer des courbes e dnies de faon implicite par une quation f (x, y) = 0, ` laide de la come c e a mande implicitplot (g. 11). On a cependant intrt ` trouver une reprsenee a e tation paramtrique (` laide de la commande solve ou dun changement de e a variable astucieux) pour obtenir un meilleur rendu, surtout au voisinage des points multiples comme (0, 0) dans notre exemple (comparer les gures 11 et 12).
1 1

y 0.5

0.5

-1

-0.5

00

0.5 x

-1

-0.5

00

0.5

-0.5

-0.5

-1

-1

Figure 11 implicitplot(x^6+ y^6+3*x^4*y^2+3*x^2*y^4-x^4+2* x^2*y^2-y^4,x=-1..1,y=-1..1);

Figure 12 polarplot(cos(2*t),t=0..2*Pi);

1.4. Trac de donnes. Pour tracer simplement une liste de points, en les e e reliant ou non, on utilise la commande plot(l) o` l est la liste en question u

82

III. COURBES ET SURFACES

(forme soit de couples [x,y], soit de nombres, les indices impairs correspone dant alors aux abscisses et les indices pairs aux ordonnes). e Exemple 3. Voici une marche alatoire dans le plan. Partant du point e (0, 0), un point mobile fait des pas nord, sud, est, ouest de faon quiprobable. c e x:=0: y:=0: dx:=[1,-1,0,0]: dy:=[0,0,1,-1]: die:=rand(1..4): for i to 10000 do l[i]:=x,y;r:=die();x:=x+dx[r];y:=y+dy[r] od: plot([seq(l[i],i=1..10000)]);

20

-20 0

20

40

60

80

100

120

140

-20

-40

-60

Trac de donnes issues dun chier. Lorsque les donnes ` visualiser sont e e e a obtenues en dehors du syst`me, par une exprience physique ou un autre e e programme, la solution la plus simple pour visualiser ces donnes en Maple e consiste ` passer par lintermdiaire dun chier. On peut alors soit formater a e ce chier ` lextrieur du syst`me, en ajoutant des virgules et des crochets a e e au bon endroit, soit utiliser la commande readdata de Maple (voir laide en ligne). Avec readdata, lutilisateur na plus ` modier le chier de rsultats, a e ce qui permet de renouveler le trac pour autant densembles de rsultats quil e e le dsire. e Exemple 4. Le programme C suivant calcule la somme partielle hi = 1 + 1/2 + + 1/i et log(i) pour i de 1 jusqu` 100. a main(){ double i=1.0,s=0.0; for (;i<=100;s+=1/i,i+=1) printf("%f %f %f\n",i,s,log(i)); } Lexcution de ce programme produit cent lignes comme e 74.000000 4.874509 4.304065 Si ces lignes sont envoyes dans le chier resultats, on fera comme suit pour e obtenir la liste des triplets [i, hi , log i].

1. TRACES EN DEUX DIMENSIONS

83

l:=readdata(resultats,3); On se sert alors de la commande seq pour extraire les quantits dsires, par e e e exemple pour faire un trac de hi en fonction de i e extrait:= (i,j) -> [seq([x[i],x[j]],x=l)]: plot(extrait(1,2)); ou un trac comparatif de hi et log i en fonction de i (les tracs simultans e e e sont raliss via des ensembles, comme on le verra au 3.1). e e plot({extrait(1,2),extrait(1,3)}); 1.5. Exercices. ` 1. A laide de la commande plot, rechercher graphiquement les racines relles e du polynme x5 + 3x4 + x2 + 8x + 3 ; vrier avec la commande fsolve. o e 2. Tracer la courbe r = 1 cos sin en coordonnes polaires. Inclure le e graphique dans la session Maple et limprimer en Postscript (si votre plateforme le permet). 3. Soit la courbe du plan dnie par x3 y + xy 4 3x2 y 2x2 y 3 + x3 + 3y 4 = 0. e Tracer cette courbe dans le domaine 1 x, y 3 [Indication : utiliser loption numpoints pour aner le trac.] e 4. Tracer en fonction de n le nombre de dcimales correctes de obtenues e en substituant 1/2 ` x dans le dveloppement limit de 6 arcsin x ` lordre a e e a 2n, pour n = 1 jusqu` 100. a 5. Lensemble de Mandelbrot (g. 13 p. 84). Etant donn un complexe e 2 c = a + ib, on dnit la suite (zn ) par z0 = 0 et zn+1 = zn + c pour n 0. e Lensemble de Mandelbrot est form par les points (a, b) du plan tels e que la suite associe (zn ) reste ` distance nie de lorigine. Une condition e a susante pour que c ne soit pas dans lensemble est quil existe n tel que |zn | < |zn |2 |c|. (1) Ecrire une procdure prenant comme argument n et calculant la e valeur de |zn |2 |zn | |c| en fonction de a et b. ` (2) A laide dune procdure de trac de fonctions implicites, dessiner e e les courbes obtenues pour n = 1, 2, 3, 4. En les superposant, on doit obtenir le graphique de la gure 13 p. 84. Poursuivre en augmentant les valeurs de n. 6. Le pavage de Rice. On consid`re le pavage du plan par des pentagones e dont une partie est dessine en gure 14 p. 84. Ce pavage a t dcouvert e ee e par Marjorie Rice en 1976. (1) Ecrire les quations reliant les cinq angles et les cinq longueurs. e (2) Les rsoudre ` laide dun syst`me de calcul formel. e a e (3) Montrer que le syst`me poss`de un degr de libert, plus prcisment e e e e e e que pour chaque valeur de langle aigu du pentagone telle que 31 13 1 2 arcsin 2 arcsin 2 4 il existe une solution. Les valeurs extrmes correspondent ` des e a pavages par des quadrilat`res. e

84

III. COURBES ET SURFACES

(4) Reproduire le trac de la gure 14 obtenu avec = 0.9. e (5) Observer la dformation du pavage lorsque varie. Pour cela on e pourra utiliser loption insequence=true de la commande display avec une squence de tracs obtenus pour direntes valeurs de e e e (voir 3.5).
2

b1

-2

-1

00

1 a

-1

-2

Figure 13 Ensemble de Mandelbrot.

Figure 14 Pavage de Rice.

2. Tracs en trois dimensions e Les possibilits oertes par les syst`mes sont les mmes quen dimension e e e deux, avec la dirence quil y a maintenant deux types dobjets : les courbes e et les surfaces. Les courbes sont rendues comme en dimension deux par des points relis ou non ; les surfaces sont rendues par des maillages rectangulaires e ou triangulaires avec limination des parties caches. e e 2.1. Surfaces z = f (x, y). Lcran ou la feuille de papier norant que deux e dimensions, les syst`mes projettent la sc`ne en considrant que lobservateur e e e est plac en un point prcis de lespace appel point de vue, ventuellement e e e e inniment loign, ce qui revient ` faire une projection orthogonale. La die e a rection du point de vue est donne en coordonnes sphriques et en degrs e e e e par loption orientation=[,], avec par dfaut [45, 45] (g. 15). On peut e aussi changer le point de vue avec la souris en cliquant sur le trac et en e le faisant tourner, ou encore obtenir un aspect de perspective avec loption projection=r o` r est compris entre 0 et 1, la valeur par dfaut 1 corresponu e dant ` la projection orthogonale. a 2.2. Courbes et surfaces paramtres. Les courbes paramtres e e e e x = f (t), y = g(t), z = h(t) sont traces par la commande spacecurve (g. 16 e p. 85). Les surfaces paramtres x = f (t, u), y = g(t, u), z = h(t, u) sont e e dessines par plot3d([f(t,u),g(t,u),h(t,u)],t=a..b,u=c..d). e Deux cas particuliers sont les surfaces dnies en coordonnes cylindriques e e

2. TRACES EN TROIS DIMENSIONS

85

Figure 15 plot3d(cos(sqrt(x^2+y^2)),x=-5..5,y=-5..5,orientation=[55,20]);

spacecurve([cos(t)/t,sin(t)/t, t,t=1..100],numpoints=1000); Figure 16

sphereplot(1-cos(t)*sin(p), t=0..2*Pi,p=0..Pi); Figure 17

x = r cos , y = r sin , z = z avec r = f (, z) et sphriques e x = r cos sin , y = r sin sin , z = r cos avec r = f (, ) qui sont dessines respectivement par cylinderplot et sphereplot (g. 17). e 2.3. Surfaces implicites. Comme pour les courbes en dimension deux, il est possible de tracer des surfaces dnies par une quation f (x, y, z) = 0 ` e e a

86

III. COURBES ET SURFACES

Figure 18 implicitplot3d(x^4+ (y^2-x^2)*z^2,x=-1..1,y=-1..1, z=-1..1,grid=[20,20,20]);

Figure 19 plot3d([z*sin(t), z*cos(t)*sin(t),z],z=-1..1, t=0..2*Pi,grid=[50,50]);

laide de la commande implicitplot3d. Un tel trac est visible en gure 18 e pour lquation x4 + (y 2 x2 )z 2 = 0 dans la rgion |x| 1, |y| 1, |z| 1. e e Comme en dimension deux, pour obtenir un meilleur rendu, il faut essayer de trouver une paramtrisation de la surface. Dans le cas dune fonction e homog`ne comme x4 + (y 2 x2 )z 2 , on peut prendre lune des coordonnes e e comme param`tre, soit z, et exprimer les autres ` partir de celle-ci : x = uz et e a y = vz. Ceci conduit ` lquation u4 + v 2 u2 = 0, qui admet comme solution a e u = sin t, v = cos t sin t. Cest ainsi quest obtenu le trac de la gure 19, qui e est bien meilleur, cinq fois moins coteux en temps et quatre fois en mmoire. u e

2.4. Trac de donnes. Pour tracer un ensemble de points en trois dimene e sions, on utilise la commande pointplot (si lon veut que les points soient relis entre eux, on aura recours ` spacecurve). Reprenons lexemple des e a marches alatoires, qui peuvent modliser la trajectoire dune particule en die e mension trois. Une telle marche est produite et dessine de la faon suivante. e c (Sur un cran couleur, la troisi`me dimension est visualise par la couleur, qui e e e appara ici en niveaux de gris.) t x:=0: y:=0: z:=0: die:=rand(1..6): dx:=[1,-1,0,0,0,0]: dy:=[0,0,1,-1,0,0]: dz:=[0,0,0,0,1,-1]: for i to 1000 do l[i]:=x,y,z;r:=die();x:=x+dx[r];y:=y+dy[r]:z:=z+dz[r] od: pointplot([seq([l[i]],i=1..1000)]);

3. AUTRES TYPES DE TRACES

87

Pour tracer un ensemble de points issus dun chier, on aura recours ` la a commande readdata (voir 1.4). 2.5. Trac dintersection. Pour tracer lintersection de deux surfaces dont e les quations sont f (x, y, z) = 0 et g(x, y, z) = 0 (ce qui revient ` tracer une e a courbe dnie de faon implicite en trois dimensions), on pourra utiliser la e c commande intersectplot de la share library, que lon charge par with(share); readshare(intplot, plots); La gure 20 p. 88 montre le trac simultan dun cylindre, dune sph`re et de e e e leur intersection. 2.6. Exercices. 1. Vrier graphiquement que les surfaces e z = y 2 x2 et z = 2/3 + cos x cos y

nont pas dintersection sur 1 x, y 1, en modiant le point de vue avec la souris, puis le prouver formellement. 2. Dessiner la surface paramtre dnie par e e e x = (2 v sin(u/2)) sin u, y = (2 v sin(u/2)) cos u, z = v cos(u/2)

sur le domaine 0 u 2, 1 v 1. 3. Dessiner la surface dnie par e 4x + x3 + xy 2 + 2x2 z 4zy + 2zy 2 + z 2 x = 0 dans le domaine 3 x 3, 3 y 3, 1 z 1. 3. Autres types de tracs e 3.1. Tracs simultans. Les tracs simultans dobjets de mme type sont e e e e e raliss en donnant un ensemble de fonctions ou dexpressions ` la commande e e a graphique (g. 21). En revanche, lorsque les objets sont de types dirents e (une surface et une courbe, ou une surface en coordonnes cylindriques et une e autre en coordonnes sphriques), il faut procder de la mani`re suivante. On e e e e commence par calculer les dirents tracs et on aecte les rsultats ` des e e e a variables intermdiaires. On utilise ensuite une des commandes display ou e display3d selon que les objets sont bi ou tri-dimensionnels (g. 20).

88

III. COURBES ET SURFACES

c:=implicitplot3d(x^2+y^2-x,x=-1..1,y=-1..1,z=-1.5..1.5): s:=implicitplot3d(x^2+y^2+z^2-1,x=-1..1,y=-1..1,z=-1..1): i:=intersectplot(x^2+y^2+z^2-1,x^2+y^2-x,[x,y,z],color=black): display3d({c,s,i},style=patchnogrid,scaling=constrained); Figure 20 Intersection dune sph`re et dun cylindre. e 3.2. Lignes de niveau. Une fois trace une surface, on peut ajouter les e lignes de niveau ` la souris, avec le menu Style. Il est galement possible de a e les obtenir en vue de dessus avec la commande contourplot (g. 22). On obtient le mme rsultat avec la commande plot3d et les options e e style=contour et orientation=[-90,0]. On peut aussi avoir ` la fois les a lignes de niveau et un rendu de la surface avec loption style=patchcontour, comme reprsent sur la gure 23 pour la fonction e e f = exp(x2 y 2 ) + 2 exp((x 3)2 y 2 ) + 3 exp((x 1)2 (y 2)2 ). 3.3. Trac point par point. Pour certaines applications, le trac de points e e non relis apporte une information supplmentaire. Par exemple cela permet e e de visualiser lacclration dun point mobile. En Maple on utilise pour ce ee faire loption style=point avec la commande plot en dimension deux ou spacecurve en dimension trois (g. 24).

Figure 21 cylinderplot({2*cos(t),1-z},t=0..2*Pi,z=-1..1,numpoints=2000);

3. AUTRES TYPES DE TRACES

89

Figure 22 contourplot(f, x=-1/2..7/2,y=-1..3, numpoints=4000);

Figure 23 plot3d(f, x=-1/2..7/2,y=-1..3,numpoints= 4000,style=patchcontour);

2 1 0 0 2 4 6 8 10 12

2 1 0 0 2 4 6 8 10 12

plot(l,axes=framed);

plot(l,axes=framed,style=point);

Figure 24 Trac continu et trac de points. e e l=[seq([t/8-sin(t/4),1-cos(t/4)],t=0..100)],scaling=constrained 3.4. Tracs en couleur. La couleur apporte galement une dimension de e e plus, ce qui permet de visualiser des objets en quatre dimensions. Une application typique est le trac dune fonction du plan complexe dans lui-mme. e e Une telle fonction a pour argument un nombre complexe z = x + iy, et retourne un autre nombre complexe z = x + iy . On peut alors reprsenter en e trois dimensions x en fonction de x et y, la couleur caractrisant y . Si f est e lexpression de la fonction ` tracer, on fait comme suit : a plot(Re(f),x=a..b,y=c..d,color=Im(f)); Pour visualiser le module de z en fonction de x et y, la couleur reprsentant e largument de z , on remplace Re(f) par abs(f) et Im(f) par argument(f) (g. 25). 3.5. Animation. Lanimation permet galement de visualiser une quatri`me e e dimension, de nature plutt temporelle. Elle consiste en lachage squentiel o e de plusieurs tracs. e Exemple 5. Linstruction animate([t/4-r*sin(t/4),1-r*cos(t/4),r=0..1],t=1..100); visualise la trajectoire dun rayon de bicyclette.

90

III. COURBES ET SURFACES

g:=subs(z=x+I*y,1/(1-z^3)*log(1/(1-z))^2): plot3d(abs(g),x=-2..2,y=-2..2,view=0..8, color=argument(g),grid=[50,50]); Figure 25 Reprsentation du module dune fonction analye tique avec largument en couleur (ici en niveaux de gris). Le trac ne sexprime pas ncessairement par une fonction. Lachage e e sobtient alors par les commandes display et display3d avec une liste de tracs graphiques et loption insequence=true. e La suite dinstructions ci-dessous montre lvolution dun groupe de dix e particules partant dun mme point et se dplaant alatoirement au nord, au e e c e sud, ` lest ou ` louest, jusqu` une centaine de dplacements. a a a e N:=10: T:=100: x:=array(1..N,0..T): y:=array(1..N,0..T): for i to N do x[i,0]:=0; y[i,0]:=0 od: die:=rand(1..4): dx:=[1,-1,0,0]: dy:=[0,0,1,-1]: for j to T do for i to N do r:=die(); x[i,j]:=x[i,j-1]+dx[r]; y[i,j]:=y[i,j-1]+dy[r] od od: for j from 0 to T do p[j]:=plot([seq([x[i,j],y[i,j]],i=1..N)],style=point) od: display([seq(p[j],j=0..T)],insequence=true,symbol=circle); Maple ouvre alors une fentre (g. 26) avec plusieurs boutons : le premier e stoppe une animation en cours, le second lance une animation, le troisi`me | avance dun pas, les deux boutons suivants e et augmentent fait passer et diminuent respectivement la vitesse danimation, le bouton en mode auto-reverse et le bouton contrle le sens de parcours. o

3. AUTRES TYPES DE TRACES

91

Figure 26 Animation en Maple.

CHAPTER IV

Arithmtique et combinatoire e
es mathematiques discre un syst`me de calL cul formel. De facondunetes sont omnipresentesodans le syst`eeme manipapparente lors du calcul dun pgcd dentiers, ou ` a linsu de lutilisateur lors factorisation de polynme, ` ule des nombres entiers. En Maple, cest galement le cas lors des calculs en e nombres ottants, qui sont cods ` partir des entiers. Il est donc important e a pour lutilisateur dapprcier le cot des principales oprations eectues sur e u e e les entiers. Ces questions sont abordes en 1, ainsi que des techniques sime ples pour acclrer certains calculs. Nous montrons aussi dans cette section ee les quations dont un syst`me de calcul formel sait ou devrait savoir troue e ver les solutions enti`res. La seconde partie de ce chapitre est consacre ` la e e a combinatoire et plus prcisment au dnombrement. Dans ce domaine, cest e e e laptitude des syst`mes ` manipuler des grands entiers de mani`re exacte qui e a e est la plus utile, mais nous insisterons galement sur lutilisation de sries e e gnratrices. e e 1. Arithmtique e 1.1. Calculs entiers et rationnels. Dans un syst`me de calcul formel, e lutilisateur na pas ` se soucier des calculs entiers ou rationnels. Ils sont a eectus automatiquement par le syst`me, quelle que soit la taille des nombres e e manipuls. Toutefois, la connaissance de quelques principes de base permet e dacclrer les calculs. ee Ainsi, il faut savoir quajouter deux nombres de n chires prend un temps proportionnel ` n ; les multiplier prend un temps plus long, proportionnel ` a a n2 sur la plupart des syst`mes. e Exemple 1. La commande duree introduite au chapitre II permet de vrier ces assertions : e a:=3^20959: b:=7^11832: aa:=a*a: bb:=b*b: duree(to 1000 do a+b od),duree(to 1000 do aa+bb od); 0.683, 1.067 duree(a*b),duree(aa*bb); 0.367, 1.500 Ici a et b sont deux entiers de 10 000 chires, leurs carrs ont 20 000 chires ; e le temps de calcul sur les carrs est le double pour laddition et le quadruple e pour le produit.
93

94

IV. ARITHMETIQUE ET COMBINATOIRE

Dans la mesure du possible, il faut donc supprimer les produits au prot des additions, mme si le nombre dadditions devient lev. e e e Une autre faon de rduire la longueur des calculs consiste ` viter autant c e ae que possible davoir recours a des nombres rationnels. Dans les principaux ` syst`mes de calcul formel, les nombres rationnels sont en eet automatiquee ment rduits : 6/4 devient 3/2 et 1/2 + 1/3 devient 5/6. Ces simplications e peuvent inuer de faon notable sur le temps de calcul, notamment lorsque c numrateur et dnominateur sont de grands entiers. e e Exemple 2. Pour calculer la somme 1 , n! n=0 la mthode naturelle consiste ` oprer directement en ajoutant ` chaque e a e a itration le rationnel 1/n! : e s:=1: t:=1: for n to 499 do t:=t/n; s:=s+t od: mais il vaut mieux ajouter lentier 500!/n! ` chaque tape et diviser par 500! a e a ` la n : u:=0: t:=1: for n from 500 by -1 to 1 do t:=t*n; u:=u+t od: u:=u/500!: evalb(s=u); true La premi`re mthode est environ 60 fois plus lente que la seconde : ` chaque e e a itration, le syst`me eectue une rduction au mme dnominateur alors quil e e e e e nen fait quune seule dans le second cas. 1.1.1. Exponentiation Quil sagisse dentiers, de rsidus dentiers modulo p, de polynmes ou de e o matrices, la multiplication est une opration relativement coteuse. Lexponene u tiation le calcul de an o` n est un entier est un cas important o` le u u nombre de multiplications peut tre rduit. e e La mthode lmentaire consiste ` multiplier par a jusqu` obtenir la e ee a a puissance voulue. Elle ncessite n 1 multiplications. Il est facile de faire e beaucoup mieux ; par exemple a32 = ((((a2 )2 )2 )2 )2 et cette expression nutilise que cinq multiplications. De faon gnrale, lalgorithme dexponentiation c e e binaire est le suivant : a si n = 1, n n1 (1) a = aa si n > 1 est impair, n/2 2 (a ) si n > 1 est pair. Cet algorithme neectue que des carrs et des multiplications par a. Si la e reprsentation binaire de n est (bk . . . b1 b0 ), le nombre de carrs est k et le e e nombre de multiplications gale le nombre de bi gaux ` 1 (sans compter bk e e a qui vaut toujours 1). Autrement dit, le nombre doprations gale la longueur e e plus le nombre de 1 de la reprsentation binaire de n apr`s avoir enlev le 1 e e e
499

1. ARITHMETIQUE

95

de tte. Dans tous les cas, il est major par 2 log2 n, o` log2 reprsente le e e u e logarithme en base 2. Voici le programme rcursif correspondant : e expo:=proc(a,n:posint) if n = 1 then a elif irem(n,2)=1 then a*expo(a,n1) else expo(a,iquo(n,2))2 end: et en voici une version itrative : e expo:=proc(a,n:posint) local l, res, f, i; f:=a; l:=convert(n,base,2); if l[1]=1 then res:=a else res:=1 ; for i in subsop(1=NULL,l) do f:=f*f; if i=1 then res:=res*f od; res end: 1.2. Divisibilit et primalit. Une grande partie de la richesse de larie e e e th mtique provient de la possibilit deectuer des divisions euclidiennes. Le calcul de pgcd en dcoule, do` une forme rduite pour les fractions. Nous e u e commencerons par ces questions avant de passer ` une autre consquence a e importante de la division euclidienne : lexistence dune dcomposition en e facteurs premiers. 1.2.1. Division euclidienne et pgcd Dans la plupart des syst`mes de calcul formel, les rationnels sont automae tiquement rduits. La rduction des rationnels seectue par des calculs de e e pgcd : a/b est simpli en a /b avec a = a/pgcd(a, b) et b = b/pgcd(a, b). e Le temps de calcul de cette rduction est domin par celui du pgcd. Pour e e sen convaincre, il sut de comparer les temps de calcul du pgcd et du quotient de deux grands entiers. Exemple 3. Avec a et b les entiers de 10 000 chires dnis p. 93, e duree(igcd(a,b)), duree(a/b); 7.866, 7.867 Un calcul de pgcd (igcd) a le mme ordre de complexit quune multie e plication, alors quune division dentiers (iquo donne le quotient et irem le reste) a le mme ordre de complexit quune addition. e e Exemple 4. Toujours sur les mmes nombres : e

96

IV. ARITHMETIQUE ET COMBINATOIRE

duree(to 1000 do iquo(a,b) od); 1.217 Du fait de la frquence de ces oprations dans un syst`me de calcul formel, e e e les fonctions eectuant la division euclidienne de deux entiers ou calculant le pgcd dentiers font partie du noyau et sont donc tr`s rapides. e Le pgcd dentiers nest pas calcul par lalgorithme dEuclide, qui est e relativement lent. En revanche, lalgorithme dEuclide tendu (igcdex en e Maple) permet de calculer une combinaison linaire donnant le pgcd : e g:=igcdex(9407449,4284179,u,v): g,u,v; 541, 1690, 3711 Ceci donne une identit de Bezout : 541 = 1690940744937114284179. e En particulier, une telle identit permet de rsoudre lquation e e e ax b mod n. Si ua + vn = g o` g est le pgcd de a et n, alors soit b est un multiple de g et u la solution est donne par x = bu/g mod n, soit il ny a pas de solution. e 1.2.2. Thor`me des restes chinois e e Le thor`me des restes chinois permet de calculer un (grand) entier dont e e on conna une majoration, et dont on sait calculer les rsidus modulo dautres t e nombres plus petits. Les calculs mens modulo des petits entiers sont bien e sr plus rapides que ceux sur des grands entiers. Les oprations sur les u e grands nombres sont ainsi limites ` la premi`re tape, o` le probl`me est e a e e u e cod modulo des petits entiers, et ` la derni`re, o` le rsultat est reconstruit e a e u e (par chrem). Le principe consiste ` calculer susamment de rsidus modulo a e des nombres bien choisis pour reconstruire lentier cherch. e Exemple 5. Pour calculer le produit de a = 143563 par b = 718976, prenons par exemple p1 = 9999, p2 = 9998 et p3 = 9997, qui sont deux ` a deux premiers entre eux. Le produit ab tant infrieur au produit des pi , e e il peut tre reconstruit ` partir de ses restes modulo les pi . Chacun de ces e a restes se calcule avec des entiers de mme taille que pi , en remarquant que e ab mod pi = (a mod pi )(b mod pi ) mod pi . a:=143563: b:=718976: l:=[9999,9998,9997]: m := [seq((a mod p)*(b mod p) mod p,p=l)]; m := [4355, 9286, 6284] chrem(m,l), a*b; 103218351488, 103218351488 Une application plus raliste est le calcul dun dterminant. La preuve e e de la nullit du dterminant dune grande matrice par calcul direct peut faire e e appara tre des entiers intermdiaires tr`s grands. Cette explosion des ene e tiers intermdiaires est vite par un calcul modulaire. La taille du rsultat e e e e est facilement majore en fonction de la taille de la matrice et de la plus e

1. ARITHMETIQUE

97

grande des entres. Chaque calcul modulo p doit renvoyer 0, et le rsultat e e sen dduit apr`s avoir pris susamment dentiers p. Dans ce contexte, la e e fonction nextprime est tr`s utile. e 1.2.3. Primalit et factorisation e Dcider de la primalit dun entier ou calculer sa dcomposition en face e e teurs premiers sont des oprations bien plus coteuses que celles que nous e u avons vues jusquici. Exemple 6. Soit p le produit des nombres premiers dindice 1 000 ` a 1 050. p:=convert([seq(ithprime(i),i=1000..1050)],*): time(isprime(p)), time(ifactor(p)); 0.633, 8.517 Ce nombre na que 200 chires. Pourtant sa dcomposition en facteurs e premiers est vingt fois plus coteuse que la multiplication de deux entiers de u 10 000 chires ! Le test de primalit de Maple, comme celui de la plupart des syst`mes e e de calcul formel, est probabiliste. Lorsquil rpond false, le nombre est ` e a coup sr compos ; par contre, lorsquil rpond true, le nombre nest que tr`s u e e e probablement premier. Ceci tant dit, aucun contre-exemple nest connu ` ce e a jour (pour la version V.3). La mthode probabiliste utilise est une combinaison du test de Fermat e e (si p est premier, alors ap = a mod p pour tout entier a) et du test de Lucas, dont lexplication sort du cadre de ce livre. Pour le test de Fermat avec a = 2, les contre-exemples infrieurs ` 2 000 e a sont 341, 561, 645, 1 105, 1 387, 1 729, 1 905. Un nouveau test avec a = 3 ne laisse subsister que 561, 1 105 et 1 729. Ces trois entiers passent le test de Fermat avec nimporte quelle base a : ce sont des nombres de Carmichael ; on sait depuis 1993 quil en existe une innit. Par contre, on ne sait pas e a ` lheure actuelle sil existe des entiers mettant en dfaut ` la fois le test de e a Fermat et celui de Lucas. Le test de primalit probabiliste est tr`s rapide. Il existe aussi des tests e e de primalit garantis, qui sont plus lents, mais ils ne sont pas disponibles en e Maple. La factorisation dentiers est une opration beaucoup plus coteuse. Sur e u les ordinateurs actuels, des programmes prouvent la primalit dentiers dun e millier de chires. Pour la factorisation, la limite se situe vers une centaine de chires. Par exemple, la revue Scientic American publia en 1977 lentier de 129 chires 11438162575788886766923577997614661201021829672124236256256184293 5706935245733897830597123563958705058989075147599290026879543541. Sa factorisation na t trouve quen 1994. Le dixi`me nombre de Fermat ee e e 10 F10 = 22 + 1 fournit un autre exemple : il se dcompose en 45592577 e

98

IV. ARITHMETIQUE ET COMBINATOIRE

6487031809 N o` N est un entier de 291 chires. Cet entier est composite, u puisquil ne passe pas le test de Fermat en base 3 : N := (2^(2^10)+1)/45592577/6487031809: evalb(Power(3,N) mod N = 3); false isprime(N); false mais on ne conna toujours pas sa dcomposition en facteurs premiers. t e Il faut donc tre tr`s prudent avec les commandes ifactor et ifactors e e et viter de les utiliser dans un programme si une autre solution est possible. e

Primalit et codes secrets. La facilit relative avec laquelle on peut crer des e e e nombres premiers, compare ` la dicult de la factorisation dun nombre e a e composite, a donn lieu au syst`me de code secret ` cl publique RSA, du e e a e nom de ses inventeurs Rivest, Shamir et Adleman. Le principe est le suivant : le destinataire du message choisit deux grands nombres premiers p et q. Il calcule trois entiers : le produit n = pq, un entier e premier avec p1 et q 1, et linverse d de e modulo le produit (p1)(q 1) (lalgorithme dEuclide tendu appliqu ` e et (p1)(q 1) donne un moyen e ea de calculer d, voir 1.2.1). Il donne alors n et e ` lexpditeur du message, en a e gardant p, q et d secrets. Pour transmettre son message, lexpditeur commence par le coder en e entiers de {0, . . . , n 1} (par exemple en lcrivant en binaire, puis en le e coupant en morceaux). Pour communiquer un entier a {0, . . . , n 1}, lexpditeur transmet b = ae mod n. Le destinataire retrouve le nombre a car e a = bd mod n. Seuls doivent tre tenus secrets les entiers p, q et d. Le nombre n peut tre e e rendu public, car sa seule connaissance ne permet pas le dcodage. En eet, e pour trouver d, il faut dabord trouver p 1 et q 1, cest-`-dire factoriser n. a Pour coder un texte, il faut commencer par le transformer en un entier : Alphabet:= abcdefghijklmnopqrstuvwxyz: nb lettres:=length(Alphabet): for i to nb lettres do lettre[i1]:=substring(Alphabet,i..i) od: for i to nb lettres do codage[eval(lettre[i1],1)]:=i1 od: transforme := proc(s:string) local i; convert([seq(codage[substring(s,i..i)]*nb lettres(i1), i=1..length(s))],+) end: detransforme := proc(l:posint) local i;
Noter lutilisation de eval pour viter les probl`mes qui surgiraient si lune des lettres e e tait utilise comme variable. e e

1. ARITHMETIQUE

99

cat(seq(eval(lettre[i],1),i=convert(l,base,nb lettres))) end: et voici les fonctions de codage proprement dites : encode := proc(a,e,n) local i; [seq(Power(i,e) mod n,i=convert(transforme(a),base,n))] end: decode := proc(b,d,n) local mess, i; mess:=map(Power,b,d) mod n; detransforme(convert([seq(mess[i]*n(i1),i=1..nops(mess))],+)) end: Lutilisation de RSA est extrmement simple. Par exemple avec e p = 2324923849189, q = 433110035200049

et e = 214667603857539706477080013, qui est bien premier avec (p1)(q 1), Maple trouve facilement la valeur de d lorsque p et q sont connus : p := 2324923849189: q := 433110035200049: n := p*q: e := 214667603857539706477080013: d := 1/e mod (p-1)*(q-1); d := 469647703172663287561246405 Les entiers e et n sont alors transmis ` un ami. Il sen servira pour encoder a son message ainsi : code := encode(rendez vous ce soir,e,n); code := [3056414258810826698991580, 1] Connaissant d, le dcodage est ais : e e decode(code,d,n); rendez vous ce soir Le grand avantage du syst`me RSA est que tout ce que lexpditeur e e conna (sauf le message) peut tre divulgu, y compris les fonctions de transt e e formation entre texte et entiers, et mme le codage utilis, do` le nom de e e u code ` cl publique. a e 1.3. Fractions continues. Les fractions continues fournissent de bonnes approximations des nombres rels par des rationnels. Etant donns un entier q e e et un rel positif r, lentier p le plus proche de qr fournit une approximation e p/q dirant dau plus 1/(2q) de r. Si le choix de q est libre, il existe des paires e dentiers (p, q) pour lesquelles lapproximation est bien meilleure : |r p/q| 1/q 2 . Le dveloppement en fraction continue de r donne une suite de telles e approximations. Ce dveloppement scrit e e r = a0 + a1 + a2 + 1 1 1 a3 + .

100

IV. ARITHMETIQUE ET COMBINATOIRE

Dans ce dveloppement, a0 est la partie enti`re de r, puis a1 est la partie e e enti`re de 1/(r a0 ),... Les approximations rationnelles sont les rduites du e e dveloppement, qui sobtiennent en normalisant les rsultats intermdiaires : e e e 1 1 a0 , a0 + , a0 + ,... a1 1 a1 + a2 Dans cette suite, les dnominateurs q sont croissants. Cette suite est nie e lorsque r est rationnel et innie sinon. La suite des ai est priodique si et e seulement si r est algbrique de degr 2 (racine dun polynme du second e e o degr ` coecients entiers). ea Exemple 7. En Maple, le dveloppement en fraction continue de r est e donn par la commande convert(r,confrac). Cette commande renvoie la e liste des quotients partiels (les ai ) et met la liste des rduites dans un troisi`me e e argument optionnel. convert(evalf(Pi,11),confrac,l): l; 22 333 355 103993 104348 208341 312689 1459097 , , , , , , 3, , 7 106 113 33102 33215 66317 99532 464445 Il est ` noter que la derni`re rduite donne par Maple ne doit pas tre a e e e e prise en compte ; elle est souvent fausse du fait de lerreur numrique introe duite par evalf. Il existe aussi des fractions continues ` termes polynomiaux. La fraction a continue associe au dveloppement limit a0 + a1 x + est F0 = a0 + x/F1 e e e o` F1 est celle associe ` 1/(a1 + a2 x + ). Les rduites sappellent des u e a e approximants de Pade diagonaux et sont utiles pour le calcul numrique. e Exemple 8. Voici le dbut du dveloppement de exp(x) : e e convert(exp(x),confrac,x); x 1+ x 1+ x 2 + x 3 + 1 2+ x 5 Lordre du dveloppement est rgl par la variable Order. e e e 1.4. Equations en nombres entiers. Ces quations sont aussi appeles e e quations diophantiennes. Nous indiquons pour chacune des classes suivantes e ce que le calcul formel peut apporter. 1.4.1. Equations linaires e Dans le cas de deux variables, ce sont les quations de la forme e ax + by = c o` a, b et c sont des entiers, ainsi que les inconnues x et y. Deux cas sont u possibles : si c nest pas multiple du pgcd de a et b, il ny a aucune solution,

1. ARITHMETIQUE

101

isolve(2*x+4*y=5); sinon lalgorithme dEuclide tendu (voir p. 96) appliqu ` a et b garantit e ea lexistence dune solution (x0 , y0 ). Il existe alors une innit de solutions e (x0 + kb, y0 ka) avec k entier quelconque. isolve(15*x-28*y=9); {y = 15 N1 63, x = 28 N1 117} Dans le cas dune quation linaire ` trois variables ou plus, le mme e e a e principe sapplique, et il y a soit zro, soit une innit de solutions. e e isolve(7*x+3*y+13*z=1); {z = N1 3 N2 + 1, x = N1 , y = 2 N1 + 13 N2 4} Dans le cas de plusieurs quations linaires, il existe un changement de e e variables qui ram`ne le syst`me sous forme triangulaire ou diagonale. Sans e e rentrer dans les dtails, car tout cela est transparent ` lutilisateur via la e a procdure isolve, Maple sait rsoudre tous les syst`mes linaires dinconnues e e e e enti`res. e isolve({7*x+6*y+13*z=2,6*x+8*y+12*z=2}); {y = 1 3 N1 , z = 3 + 10 N1 , x = 5 16 N1 } Application au calcul de frquences. Les interfrences entre des missions rae e e diophoniques se produisent quand leurs frquences f1 , . . . , fn vrient une e e relation de la forme (2) 1 f1 + 2 f2 + + n fn = 0

o` les i sont des petits entiers non tous nuls. Les frquences peuvent tre u e e considres comme des entiers car elles sont toutes multiples dune certaine ee frquence de base. e Etant donnes les frquences f1 , . . . , fn , lquation (2) a une innit de e e e e solutions. Lindice dinterfrence dune solution (1 , . . . , n ) est dni comme e e la somme des carrs des coecients i . Plus lindice est petit, plus il y a e interfrence entre les direntes missions. e e e Puisque lquation est linaire, isolve sapplique : e e f1:=344: f2:=591: f3:=872: s := isolve(a*f1+b*f2+c*f3=0); s := {a = 4 N1 145 N3 , b = 8 N1 72 N3 , c = 7 N1 + 106 N3 } La somme des carrs des coecients est par consquent e e e := expand(subs(s,a^2+b^2+c^2)); e := 129 N1 2 + 3796 N1 N3 + 37445 N3 2 Quelles que soient les valeurs des fi , lindice dinterfrence obtenu est une e forme quadratique homog`ne en N1 , N3 , . . . Par consquent, son minimum est e e atteint en N1 = N3 = = 0. Comme ce point est exclu, il faut chercher le second minimum, atteint en un point voisin. seq(subs(i,e),i=[seq(seq([_N1=j,_N3=k],j=-1..1),k=-1..1)]);

102

IV. ARITHMETIQUE ET COMBINATOIRE

41370, 37445, 33778, 129, 0, 129, 33778, 37445, 41370 Lindice non nul minimal vaut donc 129. Ce calcul se gnralise aisment e e e en une procdure. Cette procdure peut ensuite tre utilise pour choisir des e e e e frquences avec une interfrence minimale. e e 1.4.2. Equations quadratiques Ce sont les quations de degr total deux. Dans le cas de deux variables, e e Maple les rsout de faon exacte. Dans certains cas, comme pour les quations e c e de la forme x2 + y 2 = n, il ny a quun nombre ni de solutions. Exemple 9. isolve(x^2+y^2=97); {x = 4, y = 9}, {y = 9, x = 4}, {y = 9, x = 4}, {y = 4, x = 9}, {x = 4, y = 9}, {x = 9, y = 4}, {y = 4, x = 9}, {x = 9, y = 4} En revanche, les quation du type x2 Dy 2 = 1, appeles quations de e e e Pell, ont une innit de solutions en gnral. e e e Exemple 10. s:=isolve(x^2-2*y^2=1): s[1]; N1 N1 1 2 3+2 2 32 2 , y= 4 N1 1 N1 1 3+2 2 32 2 + x= 2 2 Ici isolve retourne quatre solutions, correspondant aux deux signes possibles pour x et pour y ; nous avons slectionn la premi`re. Voici les six e e e premi`res valeurs de cette solution : e seq(simplify(s[1]),_N1=0..5); {y = 0, x = 1}, {x = 3, y = 2}, {y = 12, x = 17}, {y = 70, x = 99}, {y = 408, x = 577}, {y = 2378, x = 3363} Dans le cas de trois variables ou plus, il ny a pas de mthode gnrale. e e e Maple sait traiter quelques quations particuli`res, comme lquation de Pye e e thagore, qui correspond aux triangles rectangles ` cts entiers (essayer a oe isolve sur lquation x2 + y 2 = z 2 ). La commande isolve sait dnicher des e e solutions particuli`res, e isolve(x^2+y^2+z^2=0); {y = 0, x = 0, z = 0} mais la plupart du temps ne trouve aucune solution, isolve(x^2+y^2+z^2=97); ce qui ne signie pas pour autant quil ny en a pas (ici les triplets (9, 4, 0) et (6, 6, 5) sont des solutions). Il est dommage que le syst`me ne fasse pas e de dirence entre il ny a pas de solution et je ne sais pas trouver les e solutions.

1. ARITHMETIQUE

103

Dcompositions de Lagrange. Un thor`me cl`bre de Lagrange arme que e e e ee tout entier scrit comme somme de quatre carrs. Lquation x2 + y 2 + z 2 + e e e t2 = n a donc au moins une solution pour toute valeur de n. Comme pour x2 + y 2 = n, le nombre de solutions est ni. Pour les trouver, la fonction isolve ne sapplique pas puisquil y a quatre variables. Cependant il nest pas dicile dcrire un programme les numrant. Le nombre de solutions e e e peut tre dtermin sans passer par lnumration, nous y reviendrons au e e e e e 2.2.2. 1.4.3. Equations elliptiques et congruences Les quations diophantiennes elliptiques sont de la forme y 2 = P (x) o` e u P est un polynme de degr trois. Maple na pas de mthode gnrale pour o e e e e traiter ces quations : e isolve(y^2=x^3-2); Dans de tels cas o` le syst`me choue, il est souvent fructueux dtudier u e e e lquation modulo un entier p avec la commande msolve : e msolve(y^2=x^3-2,8); {y = 1, x = 3}, {y = 3, x = 3}, {y = 5, x = 3}, {y = 7, x = 3} On en dduit que y doit tre impair et x congru ` 3 modulo 8. La e e a commande isolve fournit alors des solutions particuli`res : e seq(isolve({y^2=x^3-2,x=8*k+3}),k=0..10); {y = 5, x = 3}, {y = 5, x = 3} Les nombres tricolores. Les nombres tricolores sont les entiers dont le carr e scrit uniquement avec des chires qui sont eux-mmes des carrs, cest-`e e e a dire 1, 4 et 9. Par exemple 107 est tricolore car son carr vaut 11 449. Soit e n un entier tricolore, et n = 10q + r sa division euclidienne par 10. Alors n2 mod 10 = r2 mod 10, donc r2 mod 10 {1, 4, 9} : seq(msolve(r^2=d,10),d={1,4,9}); {r = 1}, {r = 9}, {r = 2}, {r = 8}, {r = 3}, {r = 7} do` le programme suivant qui calcule les N premiers nombres tricolores : u tricol:=proc(N) local k, res, q, r, n, i; k:=0; for q from 0 by 10 while k<N do for r in [1,2,3,7,8,9] do if is149((q+r)2) then k:=k+1; res[k]:=q+r od od; [seq(res[i],i=1..N)] end: La fonction is149 dtermine si un entier donn scrit uniquement avec les e e e chires 1, 4 et 9 : is149:=proc(n:posint) local r;

104

IV. ARITHMETIQUE ET COMBINATOIRE

r:=n; while r<>0 do if not member(irem(r,10,r),{1,4,9}) then RETURN(false) od; true end: Voici les dix premiers nombres tricolores : tricol(10); [ 1, 2, 3, 7, 12, 21, 38, 107, 212, 31488 ] seq(x^2,x="); 1, 4, 9, 49, 144, 441, 1444, 11449, 44944, 991494144 1.5. Exercices. 1. On cherche ` calculer le nombre de zros naux dans lcriture de n! en a e e base 10. Ecrire une procdure (prenant n en argument) qui fait le calcul e (en vitant de calculer n!). La tester sur diverses valeurs de (10i )!. e 2. Le calcul de an peut tre rendu encore plus rapide que par la mthode e e dexponentiation binaire dcrite en 1.1.1 si les divisions sont permises e et rapides. Par exemple pour calculer a31 , la mthode dexponentiation e binaire eectue a(a(a(aa2 )2 )2 )2 , soit 4 produits et 4 carrs. Mais a31 = e a32 /a, ce qui conduit au calcul ((((a2 )2 )2 )2 )2 /a, soit 5 carrs et une division e et un gain de 2 oprations. Ecrire une procdure expodiv utilisant la e e division et comparer son ecacit avec expo. e 3. Pour certaines valeurs de lexposant n, le calcul de an par la mthode e dexponentiation binaire nest pas optimal. Par exemple, a23 = s((st)2 )2 , o` s = at et t = a2 . Le calcul de a23 ncessite donc 6 multiplications, au u e lieu de 7 par la mthode dexponentiation binaire. Ecrire un programme e prenant en entre n et renvoyant le nombre de multiplications minimal e pour calculer an . Vrier que lon obtient 5 multiplications pour n = 15, e 6 pour n = 23 et 8 pour n = 63. [Indication : commencer par gnraliser le e e probl`me au calcul simultan dun ensemble {an1 , . . . , ank } de puissances, e e puis dcomposer en fonction de la plus grande puissance.] e 4. Trouver la signication du message cod e [ 96639780379700812966, 64982459586574831935 ] fabriqu avec le produit n = 289589985965965651459 et lexposant e = e 324803928042397. Le code utilis est RSA avec la transformation textee entier de la page 98. 5. Pour calculer une fonction lmentaire (sin, cos, exp, log) en prcision xe, ee e les calculettes de poche utilisent une fonction approche dont lcart maxe e imal avec la fonction sur lintervalle donn est assez petit. Ecrire une e procdure calculant le sinus avec 10 dcimales exactes. Il faut commencer e e par utiliser priodicit et symtrie pour se ramener au probl`me dans e e e e

1. ARITHMETIQUE

105

[0, /2]. Ensuite, il faut dterminer un approximant de Pade diagonal sue isamment bon sur lintervalle. Enn, optimiser le calcul par convert[horner]. 6. Spirale dUlam. Cette fameuse spirale est une reprsentation visuelle des e nombres premiers. Pour la tracer, il faut se placer sur une feuille quadrille. e On part dun carr, qui va tre le centre de la spirale, et qui correspond ` e e a lentier 1. Puis on se dplace vers lun des quatre carrs adjacents, qui va e e reprsenter lentier 2, et on continue ainsi en tournant autour des carrs e e dj` visits, en coloriant chaque carr correspondant ` un nombre premier. ea e e a Ecrire un programme Maple traant la partie de la spirale correspondant c aux entiers infrieurs ` (2n + 1)2 . Il pourra savrer avantageux dutiliser e a e ` le crible dEratosthene. La gure 1 montre le rsultat obtenu avec e n = 128.

Figure 1 plot(ulam(128),style=POINT,axes=NONE).

106

IV. ARITHMETIQUE ET COMBINATOIRE

` ` a 7. Les bovins dArchimede Ce probl`me fut pos par Archimede ` Eratose e ` thene vers 200 av. J.-C. Il se rduit ` la rsolution du syst`me e a e e 1 1 1 1 1 1 W = ( + )X + Z, X = ( + )Y + Z, Y = ( + )W + Z, 2 3 4 5 6 7 1 1 1 1 1 1 w = ( + )(X + x), x = ( + )(Y + y), y = ( + )(Z + z), 3 4 4 5 5 6 1 1 m2 = W + X, Y + Z = n(n + 1)/2, z = ( + )(W + w), 6 7 o` n, m sont des entiers, W, X, Y, Z sont respectivement le nombre de u taureaux blancs, noirs, tachets, jaunes, et w, x, y, z le nombre de vaches e de ces couleurs. ` A partir des sept quations linaires, montrer quil existe un entier k e e tel que W = a1 k, . . . , z = a8 k o` a1 , . . . , a8 sont des entiers (de sept ou u huit chires). En substituant dans lquation W + X = m2 , montrer que k e est de la forme 4456749p2 ; puis en remplaant dans Y + Z = n(n + 1)/2, c obtenir lquation de Pell N 2 = 4729494P + 1 o` N = 2n + 1 et P = e u 9314p, et la rsoudre. e 8. Pour rendre la recherche des nombres tricolores plus rapide, considrer les e deux derniers chires des nombres. Vrier que le programme obtenu est e environ deux fois plus rapide que le premier. 9. Trouver les seize premiers nombres tricolores. 2. Combinatoire La combinatoire sintresse ` ltude dobjets de taille nie. Ces objets e a e sont gnralement dnis par un certain nombre de r`gles de construction. e e e e Ltude du nombre dobjets de taille donne, ou de la valeur moyenne dun e e param`tre de ces objets peut tre grandement assiste par le calcul formel e e e dans plusieurs directions. Dabord larithmtique en prcision arbitraire fae e cilite lexprimentation. Ensuite le syst`me conna quelques objets de base de e e t la combinatoire (permutations, partitions, compositions,...) dans son package combinat, que nous naborderons pas ici. Enn, les capacits des syst`mes e e a manipuler formellement des fonctions et sries peuvent tre mises ` contri` e e a bution par le biais de sries gnratrices. Cest sur cette approche que nous e e e insisterons davantage. 2.1. Approche empirique. Lexemple des dnumrants permet de come e parer lapproche empirique et lutilisation de sries gnratrices. Le probl`me e e e e est de compter le nombre dn de faons de totaliser n francs avec des pi`ces de c e 1, 2, 5, 10 et 20 francs. Le nombre n20 de pi`ces de 20 francs peut varier de 0 ` la partie enti`re de e a e n/20, note n/20 . Une fois ce nombre x, il reste ` raliser p = n 20n20 e e a e en pi`ces de 1, 2, 5 et 10 francs. Le probl`me est ainsi rduit ` un probl`me e e e a e plus simple. Ce procd se rit`re jusqu` ce quil ne reste plus que des pi`ces e e e e a e de 1 franc. Le programme scrit donc e denumerants:=proc (n:nonnegint)

2. COMBINATOIRE

107

local n5, n10, n20, nb, p, q; nb:=0; for n20 from 0 to iquo(n,20) do p:=n20*n20; for n10 from 0 to iquo(p,10) do q:=p10*n10; for n5 from 0 to iquo(q,5) do nb:=nb+iquo(q5*n5,2)+1 od od od; nb end: Avec ce programme, voici le dnumrant de 1 000 et le temps de calcul e e ncessaire : e st:=time(): denumerants(1000),time()-st; 22457476, 18.850 2.2. Structures dcomposables. Les techniques prsentes dans cette sece e e tion permettent de calculer le dnumrant dn comme coecient de z n dans le e e dveloppement de Taylor ` lorigine de la fraction rationnelle e a 1 1 1 1 1 . (3) f= 2 1 z 5 1 z 10 1 z 20 1z 1z La procdure devient e denumerants2:=proc (n:nonnegint) local f,z; f:=1/(1z)/(1z2)/(1z5)/(1z10)/(1z20); coe(series(f,z,n+1),z,n) end: Et le temps de calcul est nettement plus faible : st:=time(): denumerants2(1000),time()-st; 22457476, 5.116 De plus, alors que denumerants ne calcule quun seul dn ` la fois, la a procdure denumerants2, en faisant le dveloppement limit de f , les calcule e e e tous jusqu` lordre n. a Pour comprendre pourquoi le rsultat de denumerants2 vaut dn , il sut e de dtailler le dveloppement de chacun des termes de f : e e (1 + z + z 2 + )(1 + z 2 + z 4 + )(1 + z 5 + )(1 + z 10 + )(1 + z 20 + ). Lors du dveloppement du produit, la puissance n1 de z, la puissance n2 e de z 2 ,..., la puissance n20 de z 20 donnent z lev ` la puissance n1 + 2n2 + e ea 5n5 + 10n10 + 20n20 . Toutes les dn faons dobtenir lexposant n vont ainsi c contribuer dune unit au coecient de z n . e La raison pour laquelle ce programme est plus rapide que le prcdent est e e double. Dune part la commande series fait partie du noyau de Maple, et est donc dexcution tr`s rapide. Dautre part, les produits intermdiaires e e e

Une liste des procdures du noyau est donne au chapitre II, 3.3. e e

108

IV. ARITHMETIQUE ET COMBINATOIRE

fournissent des dnumrants partiels qui ne sont ainsi calculs quune fois. Le e e e calcul eectu par series est ainsi le mme que celui queectue le programme e e suivant, lg`rement plus rapide que denumerants, auquel on donne la liste de e e pi`ces en second argument : e denumerants1:=proc(n:nonnegint,l:list(posint)) option remember; local res, p, k, i, newl; if l=[1] then RETURN(1) ; k:=l[nops(l)]; newl:=subsop(nops(l)=NULL,l); p:=iquo(n,k); for i from 0 to p do res[i]:=denumerants1(nk*i,newl) od; convert([seq(res[i],i=0..p)],+) end: 2.2.1. Structures dcomposables e Lexemple des dnumrants peut tre reformul dans un cadre plus gnral, e e e e e e celui des classes de structures dcomposables. Une structure est dite dcompoe e sable si elle est forme ` partir datomes par un nombre ni de constructions e a combinatoires. Les constructions combinatoires les plus couramment utilises e sont lunion, le produit cartsien et la construction squence, qui forme e e des suites dobjets. Lexemple des dnumrants se dcompose en le produit e e e cartsien dune squence (ventuellement vide) de pi`ces de 1 franc, dune e e e e squence de pi`ces de 2 francs,..., et dune squence de pi`ces de 20 francs, ce e e e e que lon note (4) D = Seq(F1 ) Seq(F2 ) Seq(F5 ) Seq(F10 ) Seq(F20 )

o` Fk est latome pi`ce de k francs. u e Lintrt dune telle formulation est quelle se traduit directement en teree mes de sries gnratrices. La srie gnratrice de la suite un est par dnition e e e e e e e

U (z) =
n=0

un z n .

Si A est une classe de structures dcomposables, an reprsente le nombre de e e structures de taille n dans cette classe, et A(z) la fonction gnratrice de cette e e suite. Les r`gles donnes au tableau 1 permettent alors de calculer facilement e e les sries gnratrices. e e e Ainsi lquation (4) se traduit en e D(z) = 1 1 1 1 1 . 1 F1 (z) 1 F2 (z) 1 F5 (z) 1 F10 (z) 1 F20 (z)

La taille dune pi`ce tant prise gale ` sa valeur, Fk (z) = z k , ce qui donne bien e e e a la forme indique en (3). Le coecient de z n dans la srie D(z) est le nombre e e de structures de taille n, cest-`-dire ici le nombre de combinaisons de valeur n a

2. COMBINATOIRE

109

Table 1 Correspondance entre constructions combinatoires et sries gnratrices. e e e Structure AB AB Seq(A) Srie gnratrice e e e A(z) + B(z) A(z) B(z) 1/(1 A(z))

francs. Si la taille dune pi`ce est prise gale ` 1, cest-`-dire Fk (z) = z, le e e a a ne coecient de D(z) devient le nombre de faons de faire n pi`ces avec des c e pi`ces de cinq types dirents. e e Les r`gles du tableau 1 p. 109 peuvent tre appliques ` des structures e e e a dnies rcursivement. Par exemple, les arbres binaires se dcomposent en e e e B = Feuille (B B). Autrement dit, un arbre binaire est soit une feuille, soit un nud dont partent deux arbres binaires. En prenant comme notion de taille le nombre de feuilles, lapplication des r`gles du tableau 1 p. 109 donne pour les sries gnratrices e e e e B(z) = z + B 2 (z). Cette quation se rsout : e e solve(B=z+B^2,B); 1 1 1 4 z, 2 2 map(series,["],z); [z + z 2 + 2z 3 + 5z 4 + 14z 5 + O(z 6 ), 1 z z 2 2z 3 5z 4 14z 5 + O(z 6 )] Seule la premi`re solution na que des coecients positifs et est donc la srie e e cherche. La commande series permet alors de calculer rapidement de nome breux coecients. Nous avons prsent ici une version tr`s simplie de la thorie des struce e e e e tures dcomposables. Dautres constructions sont utilises, en particulier la e e formation densembles et de cycles, ce qui produit des fonctions exp et log pour les sries gnratrices. On peut aussi crer des sries gnratrices ` e e e e e e e a plusieurs variables, o` chaque variable compte un param`tre donn. Ainsi le u e e remplacement de Fk (z) par uz k dans D(z) donne une srie gnratrice dans e e e laquelle le coecient de up z n est le nombre de faons de faire n francs avec p c pi`ces de valeur 1, 2, 5, 10 ou 20 francs. e Le calcul formel est utile dans la phase de rsolution des quations de e e sries gnratrices, mais surtout dans la phase de calcul des coecients. Il e e e permet aussi dtudier le comportement asymptotique des coecients ; nous e y reviendrons au chapitre VIII. 1 1 + 1 4z 2 2

110

IV. ARITHMETIQUE ET COMBINATOIRE

2.2.2. Exemple : les dcompositions de Lagrange e Etant donn un entier n, il sagit de trouver le nombre qn de quadruplets e (a, b, c, d) dentiers positifs ou nuls tels que a2 + b2 + c2 + d2 = n. La mthode e des sries gnratrices sapplique : la classe Q des quadruplets est le produit e e e cartsien C C C C, o` lensemble C des carrs est la runion des Ck e u e e et Ck dsigne le carr de lentier k. Lapplication des r`gles du tableau 1 e e e p. 109 donne pour les sries gnratrices Q(z) = C 4 (z) et C(z) = e e e Ck (z). 2 La taille dun entier est ici sa valeur, soit Ck (z) = z k . Le nombre qn de dcompositions de Lagrange de n est donc le coecient de z n dans e
4

z
k=0

k2

En pratique, pour calculer un qn donn, par exemple pour n = 1 000, il e faut tronquer explicitement C(z) ` lindice n. a n:=1000: C:=convert([seq(z^(k^2),k=0..isqrt(n))],+): coeff(series(C^4,z,n+1),z,n); 276 2.2.3. Le probl`me des reines e Lexemple prcdent nutilisait quune variable. Voici un exemple plus e e compliqu o` le nombre de variables dpend de la taille du probl`me. e u e e Combien y a-t-il de faons de placer n reines sur un chiquier nn, de c e faon quelles soient toutes sur des lignes, colonnes et diagonales direntes ? c e Pour n = 8, il y a 92 solutions, dont une est reprsente gure 2. e e d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15

l1 E l2 E l3 E l4 E l5 E l6 E l7 E l8 E

T T TT T TT T c1 c2 c3 c4 c5 c6 c7 c8 Figure 2 Lune des 92 solutions au probl`me des 8 reines. e ` A cause du nombre de contraintes, la solution ` ce probl`me nest pas a e immdiate en termes de sries gnratrices. En revanche, la srie gnratrice e e e e e e e de toutes les dispositions possibles de reines sur lchiquier sobtient facilee ment. Il ne reste plus alors qu` lui enlever les termes indsirables. a e

2. COMBINATOIRE

111

Comme lchiquier comporte n2 cases, une disposition de reines est le e produit cartsien de n2 tats individuels. La case (i, j) est soit vide, soit e e occupe par une reine. Cela donne pour la srie gnratrice des dispositions e e e e P =
1i,jn

(1 + Di,j ) ,

o` le terme 1 reprsente une case vide, et Di,j code loccupation de la case u e (i, j). Pour pouvoir liminer les mauvaises dispositions, on remplace Di,j par e li cj di+j1 eij+n : la variable li code loccupation de la ligne i, cj celle de la colonne j, di+j1 celle de la diagonale montante et eij+n celle de la diagonale descendante passant par la case (i, j). Chaque terme du dveloppement du e polynme P devient alors un monme form de variables li , cj , dk , el . La o o e conguration de la gure 2 correspond ainsi au monme o l4 c1 d4 e11 l1 c2 d2 e7 l5 c3 d7 e10 l8 c4 d11 e12 l2 c5 d6 e5 l7 c6 d12 e9 l3 c7 d9 e4 l6 c8 d13 e6 . Cette correspondance nest pas bijective : par exemple pour n = 4, le monme o l1 l2 l3 l4 c1 c2 c3 c4 d2 d3 d5 d6 e2 e3 e5 e6 correspond ` deux congurations direntes. a e Les bons monmes sont ceux sans carr (sinon une ligne, colonne ou diago e onale contient plusieurs reines) et contenant chacune des variables l1 , . . . , ln , c1 , . . . , cn (ce qui xe le nombre de reines ` n). Le nombre de solutions a est donc la somme des coecients des monmes sans carr du coecient de o e l1 ln , c1 cn dans
n n

(5)

Pn =
i=1 j=1

(1 + li cj di+j1 eij+n ) .

Le dveloppement brutal de ce produit m`ne ` une explosion combinatoire : e e a n2 Pn comporte 2 termes, soit dj` 33 554 432 pour n = 5 ! ea Lextraction directe du coecient de li dans (5) limite cette explosion : le calcul est rduit ` la recherche du coecient de c1 cn dans e a
n n

Pn =
i=1 j=1

cj di+j1 eij+n .
2

Le nombre de termes est pass de 2n ` nn . Symboliquement, on rduit e a e encore cette explosion en dveloppant successivement par rapport ` chacune e a des variables ci et en limitant la suite du calcul au coecient de ci . Cest ce que fait la procdure suivante : e reines := proc(n) local i, j, P, c, d, e, L; P:=convert([seq(convert( [seq(c[j]*d[i+j1]*e[ij+n],j=1..n)],+),i=1..n)],*); for i to n do P:=coe(series(P,c[i],2),c[i],1) od; L:=[seq(e[i]2=0,i=1..2*n1),seq(d[i]2=0,i=1..2*n1)]; P:=expand(subs(L,P)); P:=Pselect(hastype,P,);

112

IV. ARITHMETIQUE ET COMBINATOIRE

subs([seq(e[i]=1,i=1..2*n1),seq(d[j]=1,j=1..2*n1)],P) end: seq(reines(n),n=4..8); 2, 10, 4, 40, 92 La valeur 92 fut trouve il y a pr`s dun si`cle et demi. Le programme e e e peut tre encore un peu amlior en liminant les carrs au fur et ` mesure e e e e e a du calcul, mais cela ne permet gu`re daller plus loin que n = 8. e Cet exemple montre ` la fois la puissance du calcul formel le probl`me a e des reines se rsout par un programme Maple de six lignes et une de ses e limitations la taille des expressions rend rapidement les calculs infaisables. 2.2.4. Rcurrences linaires e e Les dnumrants peuvent se calculer de mani`re encore plus rapide que e e e par le dveloppement de leur srie gnratrice. En eet, les coecients de e e e e fractions rationnelles satisfont des rcurrences linaires ` coecients cone e a stants. Connaissant la srie gnratrice f (z) = p(z)/q(z), o` p et q sont e e e u deux polynmes, la rcurrence scrit directement ` laide des coecients de p o e e a et q : il sut dcrire la nullit du coecient de z n dans qf p, soit : e e q0 fn + q1 fn1 + qk fnk = 0, en notant q(z) = q0 + q1 z + + qk z k . Il sensuit une procdure tr`s gnrale pour calculer le dveloppement de frace e e e e tions rationnelles : series ratpoly:=proc(f,z:name,n:posint) local g, p, q, dp, i, u, k, j, uj; if not type(f,ratpoly(anything,z)) then ERROR(invalid argument,f) ; g:=normal(f); p:=collect(numer(g),z); q:=collect(denom(g),z); if subs(z=0,q)=0 then ERROR(invalid argument,f) ; # rcurrence : e uj:=convert([seq(coe(q,z,i)/coe(q,z,0)*u[ji], i=1..degree(q,z))],+); # premiers termes : dp:=max(degree(p,z),degree(q,z)-1); g:=series(f,z,dp+1); for i from 0 to dp do u[i]:=coe(g,z,i) od; # n du dveloppement : e for j from dp+1 to n do u[j]:=eval(uj) od; # et on construit le rsultat : e series(convert([seq(u[j]*zj,j=0..n),O(z(n+1))],+),z,n+1)
Noter lutilisation subtile de eval pour nvaluer quune fois les coecients de la e rcurrence sans crer de procdure. e e e

n > max(deg p, deg q 1),

2. COMBINATOIRE

113

end: Lorsquelle est applique ` la srie gnratrice des dnumrants, cette e a e e e e e procdure donne un temps de calcul encore meilleur que le prcdent : e e e f:=1/(1-z)/(1-z^2)/(1-z^5)/(1-z^10)/(1-z^20): st:=time(): coeff(series_ratpoly(f,z,1000),z,1000),time()-st; 22457476, 1.750 Cela signie que la procdure du noyau Maple qui calcule des dveloppee e ments en srie na pas de cas particulier pour les fractions rationnelles, dont e elle calcule le dveloppement en faisant une division de dveloppements, ope e e ration dont la complexit est plus leve. e e e Cette mthode est la meilleure pour obtenir toutes les valeurs de la suite e jusqu` la ne . Pour obtenir uniquement la ne valeur, il existe une mthode plus a e rapide qui est dcrite au chapitre VII. La correspondance entre les fractions e rationnelles et les rcurrences linaires ` coecients constants y est galement e e a e exploite pour ltude asymptotique des suites solutions de ces rcurrences. e e e La transformation de srie gnratrice en rcurrence linaire prsente ici e e e e e e e se gnralise. Les coecients de fonctions algbriques, et plus gnralement e e e e e de solutions dquations direntielles linaires ` coecients polynomiaux, e e e a vrient aussi des rcurrences linaires ` coecients qui sont polynomiaux e e e a en n alors quils sont constants dans le cas des fractions rationnelles. Les proprits analytiques des solutions de ces quations direntielles peuvent ee e e tre exploites pour ltude notamment asymptotique des suites. e e e En conclusion, dans le cas de structures dcomposables, la srie gnrae e e e trice, quelle soit donne sous forme explicite ou implicite, permet de calculer e le nombre fn de solutions pour n donn. Dans certains cas le comportement e asymptotique de fn lorsque n tend vers linni peut galement sen dduire e e (voir VII1.1.3 et VIII3). 2.3. Le probl`me des ob`ses. Nous dtaillons la rsolution dun probl`me e e e e e qui ne repose pas sur une structure dcomposable, mais o`, comme dans le e u probl`me des reines, le cot de ltude est rduit grce ` un codage par des e u e e a a polynmes. o Des hommes tr`s corpulents viennent sasseoir tour ` tour sur une range e a e de n chaises initialement toutes libres. Chacun a besoin de deux places contigus, et choisit ces places de faon alatoire et uniforme parmi les paires e c e de places libres adjacentes. Combien de chaises libres reste-t-il lorsquaucun homme ne peut plus sasseoir ? Ce probl`me nest pas dcomposable. En eet, loccupation dune chaise e e nest pas indpendante de celle des chaises adjacentes, et par consquent il e e nest pas possible de dcomposer une conguration. Cependant, comme pour e le probl`me des reines, il sagit dun probl`me doccupation avec contraintes e e qui se code par des polynmes. o
Ces transformations ne sont pas encore implantes de faon standard dans les syst`mes e c e de calcul formel actuels. On peut les trouver dans le package gfun de Maple.

114

IV. ARITHMETIQUE ET COMBINATOIRE

Lensemble des congurations possibles est reprsent par un arbre. La e e racine reprsente la conguration initiale o` toutes les chaises sont vides (voir e u g. 3). Chaque chemin depuis la racine jusqu` un nud a une certaine a probabilit doccurrence, qui est indique ` ct de la conguration. La somme e e a oe des probabilits ` chaque niveau de larbre (cest-`-dire dans chaque colonne e a a de la gure 3) vaut 1. Les feuilles de larbre sont les congurations terminales, telles quil ne reste pas deux places adjacentes. Cet arbre se traduit ensuite
1 4 1 4 1 8 1 8 1 4 1 4

1 4

1 4

1 8 1 8

Figure 3 Larbre des congurations pour n = 5. en un polynme : chaque chaise occupe est associe ` une variable xk ; o e e a une conguration devient un monme, par exemple x1 x2 x4 x5 indique que o les chaises 1 et 2 sont occupes ainsi que les chaises 4 et 5. La somme des e monmes correspondants aux nuds du niveau j de larbre multiplis par o e les probabilits associes donne un polynme codant toutes les congurations e e o possibles apr`s que j hommes se sont assis. Au niveau 1 et pour n = 5 ce e polynme vaut o 1 1 1 1 x1 x2 + x2 x3 + x3 x4 + x4 x5 4 4 4 4 et au niveau 2 : 3 1 3 (6) x1 x2 x3 x4 + x1 x2 x4 x5 + x2 x3 x4 x5 . 8 4 8 Lutilisation de polynmes permet ainsi de regrouper les congurations ideno tiques obtenues par des chemins dirents dans larbre, tout en sommant e leurs probabilits respectives. Les six feuilles de larbre de la gure 3 sont e reprsentes par 3 monmes dans (6), qui correspondent aux trois congurae e o tions terminales possibles. Pour n = 10, larbre comporte 366 feuilles pour seulement 12 congurations nales. En termes informatiques, la mthode prsente ici revient ` faire un pare e e a cours en largeur de larbre, avec factorisation des congurations semblables ; la mme technique fut dj` employe pour le probl`me des reines. e ea e e Limplantation en Maple seectue en deux temps. Une premi`re procdue e re calcule, ` partir dune conguration donne sous la forme dun monme m, a e o

2. COMBINATOIRE

115

les nouvelles congurations possibles et leurs probabilits. Ces congurations e sont obtenues en recherchant les paires de variables (xi1 , xi ) absentes du monme. Sil ne reste pas de places adjacentes, le monme correspond ` une o o a feuille et contribue ` lesprance cherche : son coecient est la probabilit a e e e de la feuille et le nombre de places vides est n moins son degr. Les feuilles e sont quant ` elles codes comme des monmes en la variable z. a e o iteration := proc(m,x,n,z) # x est la liste des x[i] local i,j,s; if has(m,z) then RETURN(m) ; j:=0; s:=0; for i from 2 to n do if not has(m,{x[i1],x[i]}) then j:=j+1; s:=s+m*x[i1]*x[i] od; if j<>0 then s/j else z*(ndegree(m,x))*subs([seq(x[i]=1,i=1..n)],m) end: Le programme principal prend en entre le nombre n de chaises, et calcule e le nombre moyen de chaises restant ` la n. Il sut de partir du monme 1 a o reprsentant la conguration initiale et dappliquer la procdure iteration ` e e a chaque monme. Le programme sarrte lorsque tout larbre a t parcouru. o e ee fatmen:=proc(n) local l, x, i, vars, z; l:=1; vars:=[seq(x[i],i=1..n)]; while subs(z=0,l)<>0 do l:=map(iteration,l,vars,n,z) od; subs(z=1,l) end: seq(fatmen(n),n=3..10); 16 11 142 67 4604 2 , , 1, , 1, , , 3 15 9 105 45 2835 Pour une range de 10 chaises, le nombre moyen de places vides est donc e a ` peu pr`s 1,62 lorsque plus aucun homme ne peut sasseoir. On peut montrer e (mais cela dpasse le cadre de cet ouvrage) que la srie gnratrice associe e e e e e aux nombres fatmen(n) est x exp(2x)/(1 x)2 . On en dduit que lorsque e n tend vers linni, la proportion de places libres tend vers exp(2) 0,135. 2.4. Exercices. 1. Modier le programme denumerant pour quil ache les direntes dcome e positions de n. 2. Utiliser la mthode du 2.1 pour dterminer le nombre de faons de toe e c taliser un kilogramme avec des poids de 50, 100, 200 et 500 grammes. Que devient la rponse si le nombre de poids de chaque sorte est limit, par e e exemple ` 3 ? a 3. Les entiers bicarrs sont ceux qui sont de la forme a2 + b2 avec a et b e entiers positifs ou nuls. En utilisant la mthode dcrite en 2.2.2, crire e e e

116

IV. ARITHMETIQUE ET COMBINATOIRE

4.

5.

6.

7.

un programme donnant le nombre N (x) dentiers bicarrs infrieurs ` x. e e a Vrier empiriquement que N (x) se comporte asymptotiquement comme e Cx/ log x o` C 0,764. u Boules dans des urnes. Utiliser la thorie des structures dcomposables e e pour calculer le nombre de faons de mettre n boules : c (1) dans 5 urnes pour n = 3, 10, 100 ; (2) dans 10 urnes pour n = 3, 10, 100 ; (3) dans k urnes pour n = 3, 10, 100 et k = 5, 10, 15, 20 [Utiliser une fonction gnratrice a deux variables.] ; e e ` (4) dans k urnes lorsque chacune contient au plus 10 boules, pour n = 3, 10, 100 et k = 5, 10, 15, 20 ; (5) dans k urnes lorsque chacune contient au plus r boules, pour les mmes valeurs de n et k, et pour r = 1, 2, 5, 10, 20. [Utiliser une e fonction gnratrice ` trois variables.] e e a Composition dentiers. Utiliser la thorie des structures dcomposables e e pour calculer le nombre de faons dcrire lentier n comme : c e (1) somme de deux entiers (positifs), pour n 1 000 (on tient compte de lordre des sommants, ainsi 1+2 et 2+1 sont deux sommes direntes) e ; (2) somme de k entiers, pour n 1 000 et k = 2, 3, 5, 10 [Utiliser une fonction gnratrice a deux variables.] ; e e ` (3) somme de k entiers impairs, pour les mmes valeurs de n et k ; e (4) somme de k entiers congrus ` 1 modulo p, pour les mmes valeurs a e de n et k, et pour p = 2, 3, 5, 10 [Utiliser une fonction gnratrice ` e e a trois variables.] Suites de pile ou face. Utiliser la thorie des structures dcomposables e e pour calculer le nombre de suites de pile ou face de longueur n : (1) sans contrainte, pour n 100 ; (2) lorsque pile narrive jamais deux fois conscutives, pour n 100 ; e (3) lorsque pile narrive jamais k fois conscutives, pour n 100 et k = e 2, 5, 10. Arbres. Reprendre le calcul de la srie gnratrice des arbres binaires pour e e e calculer le nombre darbres binaires de taille n, pour n 100 : (1) lorsque la taille est le nombre de feuilles ; (2) lorsque la taille est le nombre de nuds ; (3) lorsque la taille est la somme du nombre de feuilles et du nombre de nuds. Mmes questions pour des arbres ternaires (les nuds ont trois descene dants), les arbres unaires-binaires (les nuds ont un ou deux descendants), et les arbres ` arit quelconque (les nuds ont un nombre quelconque de a e descendants).

CHAPTER V

Calcul matriciel
e matriciel au sens large o` un syst`me de calcul u e L calculpeutdeapporter beaucoup. estlaun domainecomplexite de ces3 calculs formel En eet, au del` de matrices 3, il a devient dicile raliser des calculs ` main. La e a nest pourtant pas tr`s leve, ce qui permet aux syst`mes de calcul formel e e e e de rsoudre des probl`mes de taille assez importante. e e 1. Matrices et vecteurs Tous les syst`mes de calcul formel savent manipuler des matrices et des e vecteurs, seule la syntaxe est dirente selon les syst`mes. e e En Maple, tout ce qui a trait ` lalg`bre linaire se trouve dans le package a e e linalg ; pour allger les notations, nous supposerons dans la suite du chapitre e quil a t charg, ce qui seectue par with(linalg). ee e Les fonctions du package linalg sappliquent principalement ` des matria ces dont les lments sont des fractions rationnelles. Par ailleurs les matrices ee considres doivent avoir une dimension bien dnie : les syst`mes de calee e e cul formel ne savent pas travailler sur des matrices dont la dimension est un param`tre. e 1.1. Les objets vecteur et matrice en Maple. Un vecteur est un tableau a ` une dimension dont les indices commencent ` 1 et une matrice est un tableau a a ` deux dimensions dont les indices commencent ` 1. a La fonction array permet de crer des matrices et des vecteurs, mais il e vaut mieux utiliser les deux fonctions vector et matrix dont la syntaxe est plus souple. Exemple 1. Voici deux vecteurs, le premier dni par ses coordonnes, e e le second par une fonction permettant de les calculer : vector([1,2]), vector(3,i->x*i); 1 2 , x 2x 3x Exemple 2. Les matrices sont cres de la mme faon : ee e c matrix([[1,2],[3,4]]), matrix(2,3,(i,j)->x^(i+j-1));
Deux fonctions de Maple sont alors crases et remplaces par celles du package : e e e ce sont norm qui calcule la norme dun polynme et surtout trace qui ache les tapes suco e cessives de lexcution dune fonction. Il est possible dy accder tout de mme (voir II3.3). e e e

117

118

V. CALCUL MATRICIEL

Table 1 Vecteurs et matrices. dnition e vector(n,. . . ) types table array vector table array matrix 2 , 4 x x2 reprsentation interne e array(1..n,. . . )

matrix(m,n,. . . )

array(1..m,1..n,. . . )

1 3

x2 x3

x3 x4

Un vecteur en Maple est un tableau unidimensionnel. Il est considr ee dans les calculs matriciels comme un vecteur colonne, cest-`-dire comme une a matrice ` n lignes et une colonne. Mais ce nest pas une matrice (qui est un a tableau bidimensionnel). Cela implique en particulier quil nest pas du type matrix. En outre, lachage dun vecteur se fait sous forme dune ligne, ce qui peut entra ner des confusions. Enn, lapplication de la fonction transpose ` a un vecteur ne donne pas un vecteur ligne, qui nexiste pas en tant que tel en Maple. Un vecteur ligne ne peut tre en eet quune matrice ` une ligne et n e a colonnes. Le transpos du vecteur v sutilise sous la forme transpose(v) qui e est reconnue dans les calculs matriciels. Le tableau 1 rsume ces dirences e e entre vecteurs et matrices. Exemple 3. Nous dnissons un vecteur de dimension 2 et une matrice e 22 : v:=vector([1,2]): m:=matrix(2,2,[[1,2],[3,4]]): multiply(m,v); 5 11 transpose(v), multiply(v,transpose(v)); 1 2 transpose(v), 2 4 Maple ralise bien le produit de m par v et le rsultat est un vecteur ; le terme e e transpose(v) est laiss tel quel, mais est reconnu comme un vecteur ligne e dans v tv. Une autre dicult que lon rencontre lors de la manipulation de vecteurs e et de matrices est lie ` la r`gle dvaluation de ces objets (voir II3.1). En e a e e particulier, il faut parfois faire explicitement appel ` op ou eval pour accder a e a ` leur contenu. Exemple 4. a:=matrix([[b,2],[3,4]]): a; a print(a);

1. MATRICES ET VECTEURS

119

b 3 subs(b=1,a), subs(b=1,op(a)); a, transpose(a), transpose(op(a)); b 3 , 2 4

2 4 1 3 2 4 b 2 3 4

1.2. Manipulation des matrices. Dans tous les syst`mes de calcul formel, e il existe une panoplie de fonctions pour raliser les oprations matricielles de e e base. En Maple les principales fonctions de manipulation (cest-`-dire qui a neectuent pas de calcul) proposes par le package linalg sont rsumes au e e e tableau 2. Table 2 Principales manipulations de matrices. Fonction Transposition Cration dune matrice bloc-diagonale e Cration dune matrice bande e Cration dune matrice compagnon e Extraction dune sous-matrice Extraction de colonnes Extraction de lignes Adjonction de colonnes Adjonction de lignes Suppression de colonnes Suppression de lignes Commande transpose diag band companion submatrix col row augment stack delcols delrows

Les fonctions map et zip, qui sappliquent ` dautres objets que les maa trices et les vecteurs peuvent galement savrer utiles. e e Exemple 5. La commande map applique une fonction aux lments dun ee vecteur ou dune matrice. m:=matrix(2,2,(i,j)->x^(i+j)); x2 x3 m := 3 x x4 map(diff,m,x), diff(m,x); 2x 3x2 3x2 , 4x3 0

Si map nest pas utilis, m a pour valeur son nom m, variable indpendante e e de x dont la drive par rapport ` x vaut 0. En revanche, diff(eval(m),x) e e a produit un message derreur explicite.

120

V. CALCUL MATRICIEL

Exemple 6. La fonction zip applique une fonction binaire ` deux vecteurs. a Pour calculer un vecteur dont chaque lment est le pgcd des lments de deux ee ee vecteurs, il sut deectuer : v1:=vector([x^2,-x^3+1,x^2-1]); v2:=vector([x,x-1,x^2+3*x+2]); v1 := x2 x3 + 1 x2 1 v2 := x x1 x2 + 3x + 2 , 1 zip(gcd,v1,v2), gcd(v1,v2); x x1

x+1

L` encore la fonction gcd applique ` v1 et v2 donne 1 car lvaluation de v1 a e a e et v2 produit leur nom, ` moins dutiliser explicitement eval ou op. a 1.3. Calculs matriciels de base. Les oprations de base sur les matrices e (addition, produit, produit par un vecteur,...) sont fournies par le package linalg comme nous lavons dit. Cependant leur notation fonctionnelle rend lcriture des expressions matricielles assez malaise. Par exemple, lexpression e e t x(Ax + 2y) peut scrire : e multiply(transpose(x),add(multiply(A,x),scalarmul(y,2))). Lvaluateur evalm, qui ne fait pas partie du package linalg et est disponible e en standard, autorise une syntaxe plus simple. Lexpression prcdente scrit e e e alors : evalm(transpose(x) &* (A &* x + 2 * y)) Le tableau 3 dcrit les direntes oprations de base, aussi bien en utilisant e e e evalm que le package linalg. Table 3 Oprations sur des matrices. e evalm package linalg

addition A + B add(A,B) multiplication par un scalaire n * A scalarmul(A,n) multiplication matricielle A &* B multiply(A,B) inverse A^(-1) inverse(A) puissance enti`re e A^n multiply(A,. . . ,A) identit e &*() band([1],n) matrice diagonale constante k band([k],n) Il est ` noter que &*() reprsente pour evalm llment neutre de la a e ee multiplication des matrices, donc la matrice identit. Il nest pas ncessaire e e de dnir sa taille. Il en est de mme lors de evalm(k + A), o` lexpression e e u k est interprte comme k fois la matrice identit. ee e 1.4. Exercices. 1. Crer les trois objets suivants : une liste l ayant pour lments 1, 2, 3, un e ee vecteur v ayant les mmes lments et une matrice ligne m ayant aussi les e ee mmes lments. Comparez lachage de ces dirents objets. e ee e

` 2. ALGEBRE LINEAIRE

121

2. Trouver une condition ncessaire et susante pour que deux matrices 22 e symtriques commutent. e 3. Crer une matrice R de rotation autour de lorigine. Multiplier R par ellee mme, et vrier que le rsultat correspond ` la rotation dangle double. e e e a 2. Alg`bre linaire e e Un grand nombre dapplications dalg`bre linaire se ram`nent ` des cale e e a culs matriciels, en particulier a la rsolution de syst`mes dquations linaires, ` e e e e dont seule la taille empche le traitement ` la main. e a 2.1. Rsolution de syst`mes linaires. Pour de gros syst`mes, cest-`e e e e a dire ` lheure actuelle ceux dont la taille dpasse 25 quations ` 25 inconnues, a e e a il nexiste pas dautre recours que les techniques du calcul numrique qui e permettent de traiter des syst`mes denses de taille 100 100 et des syst`mes e e creux de taille 1000 1000. Les syst`mes de calcul formel ont peu ` proposer e a pour des probl`mes de cette taille. Cependant les techniques numriques sont e e souvent sensibles aux instabilits, dfaut dont ne sourent pas les mthodes e e e symboliques. En outre, ces mthodes ne sont pas limites ` des syst`mes ` e e a e a coecients numriques. e Maple propose plusieurs mthodes de rsolution ` lutilisateur. Le choix e e a de la mthode dpend de la forme du syst`me et du nombre de rsolutions ` e e e e a eectuer. La mthode la plus simple consiste ` utiliser la fonction solve/linear, e a qui choisit une stratgie de rsolution selon le type des coecients du syst`me. e e e Cest aussi cette fonction quexcute solve lorsquelle est appele avec un e e syst`me linaire. e e Exemple 7. Voici un petit exemple ` trois quations et trois inconnues : a e sys:={x+3*a*z=3,b*y+c*z=2,a*x+3*y=c}: readlib(solve/linear)(sys,{x,y,z}); 6a2 3ac + c2 6a + 3c + abc bc + 6 + 3ba ,y = ,x = z= 2) 3 (c + ba 3 (c + ba2 ) c + ba2 Lorsque le syst`me est donn sous forme matricielle, on appelle la fonce e tion linsolve qui ` son tour va appeler solve/linear. a Exemple 8. Voici un syst`me 4 4 donn directement sous forme mae e tricielle : A:=matrix([[-6,-2*t-6,-t-3,-t-3],[-2*t-6,-6,-t-3,-t-3], [t+3,t+3,-3,2*t+6],[t+3,t+3,2*t+6,-3]]); 6 2t 6 t 3 t 3 2t 6 6 t 3 t 3 A := t+3 t+3 3 2t + 6 t+3 t+3 2t + 6 3 b:=vector([t,-t,1,4]); b := t t 1 4 linsolve(A,b);

122

V. CALCUL MATRICIEL

Table 4 Principaux calculs sur les matrices. Fonction Trace Rang Noyau Dterminant e Mineur Inverse Polynme caractristique o e Polynme minimal o Valeurs propres Vecteurs propres Forme de Jordan Exponentielle Commande trace rank kernel det minor inverse charpoly minpoly eigenvals eigenvects jordan exponential

2t + 15 8t + 15 5t2 + 57t + 135 5t2 + 48t + 135 , , , 6t 6t 3(9 + 2t)t 3(9 + 2t)t

Une troisi`me mthode, que lon nemploie jamais en calcul numrique, e e e consiste ` calculer linverse de la matrice A avant de raliser le produit A1 b. a e L` encore, la procdure de calcul dinverse dtermine dabord le type des a e e lments de la matrice avant de dcider de la mthode ` appliquer. Le prinee e e a cipal intrt de ce calcul relativement coteux est quil rduit les rsolutions ee u e e ultrieures ` un simple produit de matrices. Cette mthode est donc prfrable e a e ee dans le cas de nombreuses rsolutions correspondant ` dirents vecteurs b. e a e Exemple 9. Sur le mme syst`me que prcdemment, le calcul seectue e e e e ainsi : IA:=evalm(A^(-1)); 1 6 t+3 t+3 t+3 6t 6t 6t t+3 1 t+3 t+3 6 6t 6t 6t IA := t+3 t+3 9t+27+t2 12t+27+t2 6t 6t 3t(9+2t) 3t(9+2t)
t+3 6t t+3 6t 12t+27+t2 3t(9+2t) 9t+27+t2 3t(9+2t)

evalm(IA &* b); 2t + 15 8t + 15 5t2 + 57t + 135 5t2 + 48t + 135 , , , 6t 6t 3(9 + 2t)t 3(9 + 2t)t 2.2. Calculs sur des matrices. La plupart des oprations classiques sur e les matrices sont disponibles dans les syst`mes de calcul formel. Le tableau 4 e montre le nom des commandes Maple correspondantes. Dans ce tableau, les oprations sont regroupes en deux catgories. Les oprations de la premi`re e e e e e catgorie neectuent que des calculs dans le corps auquel appartiennent les e coecients de la matrice, et sont donc gnralement peu coteuses. La sece e u onde catgorie peut ncessiter des calculs dans des extensions algbriques du e e e

` 2. ALGEBRE LINEAIRE

123

corps de base, dtermines par le polynme caractristique. Sauf cas partie e o e culier, ceci limite lutilisation de ces derni`res commandes ` des matrices de e a petite taille. Nous allons maintenant montrer quelques exemples dutilisation de certaines de ces fonctions, et ventuellement dtailler leurs limitations. e e 2.2.1. Noyau La dtermination du noyau dune matrice consiste ` rsoudre un syst`me e a e e linaire homog`ne. Il ny a donc l` rien de plus que ce que nous avons dj` e e a ea vu. Exemple 10. Pour dterminer une relation de dpendance entre vecteurs, e e il sut de calculer le noyau de la matrice ayant ces vecteurs pour colonnes. Sachant que les trois vecteurs v1:=vector([-86,30,80,72]):v2:=vector([66,-29,-91,-53]): v3:=vector([-103,18,7,93]): print(v1,v2,v3); 103 66 86 30 29 18 80 , 91 , 7 93 53 72 sont lis, la relation de liaison sobtient par : e kernel(augment(v1,v2,v3)); {[7/6, 1, 1/3]} Autrement dit 7v1 + 6v2 2v3 = 0. Dans le cas gnral, cette mthode fournit une base des relations de liaison. e e e 2.2.2. Dterminant e Un syst`me de calcul formel peut calculer le dterminant de matrices e e symboliques jusqu` lordre vingt environ, et de matrices numriques jusqu` a e a lordre cent. Exemple 11. Pour le calcul de dterminants de matrices dont la dimene sion est variable, le calcul formel ne peut servir qu` faire des expriences. a e Pour calculer les dterminants de matrices tridiagonales de la forme e 1 + x2 x 0 0 x 1 + x2 x 0 0 x 1 + x2 x 0 0 x 1 + x2

nous dnissons une procdure qui produit la matrice dordre n et nous cale e culons le dterminant pour diverses valeurs de n. e genm:=n->band([-x,1+x^2,-x],n): det(genm(9)), det(genm(10));

124

V. CALCUL MATRICIEL

1 + x2 + x4 + x6 + x8 + x10 + x12 + x14 + x16 + x18 , 1 + x2 + x4 + x6 + x8 + x10 + x12 + x14 + x16 + x18 + x20 Les valeurs pour n = 9 et n = 10 nous permettent de deviner la formule n 2i e e i=0 x . Pour prouver cette formule, il sut de dvelopper le dterminant par rapport ` la derni`re colonne ce qui fournit une rcurrence. Pour le a e e dveloppement Maple ne nous est daucun secours car il ne sait pas manipuler e des matrices dont la dimension est un param`tre ; en revanche il saura rsoudre e e la rcurrence linaire obtenue (voir exercice 2 p. 132). e e 2.2.3. Polynme caractristique o e Le calcul de dterminants symboliques permet celui de polynmes care o actristiques. La connaissance de ce polynme fournit de nombreuses infore o mations sur la matrice. Exemple 12. Nous reprenons la matrice A de lexemple 8 p. 121. Le calcul de son polynme caractristique est tr`s facile (avec un syst`me de o e e e calcul formel !) : charpoly(A,lambda); 4 + 183 242 t 36t2 + 812 216t + 108t2 42 t2 + 24t3 Nous calculons alors le discriminant de ce polynme, et mme sa dcomposition o e e sans carrs, ce qui est peu coteux (voir chap. VI) : e u convert(discrim(",lambda),sqrfree); 768(8t + 27)(4t + 9)2 t2 + 3t
4

De cela il dcoule que pour t {27/8, 9/4, 0, 3} le polynme caractristie o e que na que des racines simples ventuellement dans une extension algbrique e e de Q(t), et donc que la matrice est diagonalisable pour toutes ces valeurs de t. 2.2.4. Valeurs propres Le calcul des valeurs et vecteurs propres dune matrice, ` coecients a symboliques ou non, revient ` trouver les racines du polynme caractristique a o e puis ` rsoudre un syst`me linaire. Les syst`mes de calcul formel sont donc a e e e e restreints dans ce domaine ` leur capacit ` rsoudre de telles quations (voir a ea e e chap. VI). Exemple 13. Toujours sur la mme matrice, le calcul ne pose pas de e probl`me : e eigenvals(A); 2t, 9/2 81 + 24t 81 + 24t , 9/2 + , 9 2t 2 2

Lorsque les valeurs propres ne sont pas connues explicitement, il est parfois possible de poursuivre le calcul avec des nombres ou fonctions algbriques e grce ` la notation RootOf (voir chap. VI). a a

` 2. ALGEBRE LINEAIRE

125

Exemple 14. Voici ce qui se produit le plus souvent (randmatrix produit une matrice alatoire) : e B:=randmatrix(5,5); 17 98 36 40 22 5 88 43 73 25 4 59 62 55 25 9 40 61 40 78 62 11 88 1 30 eigenvals(B); RootOf 4512860849 + 39920068 Z 74744 Z 2 6573 Z 3 27 Z 4 + Z 5 Sil nest pas ncessaire de distinguer entre les direntes racines de ce e e polynme, alors le calcul se poursuit gnralement sans trop de dicult, o e e e sinon il sagit dun probl`me qui est ` la limite des possibilits actuelles du e a e calcul formel. 2.2.5. Vecteurs propres Connaissant les valeurs propres, les vecteurs propres sobtiennent par rsolution dun syst`me linaire. La dicult supplmentaire est que cette e e e e e rsolution seectue avec des matrices dans le corps engendr par les entres e e e de la matrice de dpart et par les valeurs propres, ce qui peut tre coteux. e e u Exemple 15. Pour la premi`re matrice (p. 121) nous obtenons : e eigenvects(A); 2t + 3 %1 2t + 3 %1 , , 1, 1 , %1 , 1, 2(t + 3) 2(t + 3) [2t 9, 1, {[0, 0, 1, 1]}] , [2t, 1, {[1, 1, 0, 0]}] %1 = RootOf 6t + Z 2 + 9 Z Ce rsultat doit sinterprter ainsi : il sagit dune suite de listes, chaque liste e e comprenant une valeur propre, sa multiplicit, et une base de vecteurs propres e correspondant ` cette valeur propre. Dans le cas des deux derni`res valeurs a e propres, ce rsultat est assez clair. Dans le cas de la premi`re cependant, il e e faut interprter le rsultat en faisant prendre ` cette valeur propre chacune e e a des racines du polynme z 2 + 9z 6t comme valeur, ce qui donne bien tous o les vecteurs propres. Dans ce cas simple, comme nous savons que le polynme o caractristique se rsout explicitement, la solution sobtient par e e eigenvects(A,radical); et est trop longue pour tre reproduite ici. e Exemple 16. Pour la seconde matrice, eigenvects(B); renvoie un rsule tat trop long pour tre reproduit ici qui consiste en une valeur propre (celle e de lexemple 14) de multiplicit 1 et une base constitue dun vecteur propre e e dont les coordonnes sont exprimes en termes de cette valeur propre. Ce e e rsultat sinterpr`te comme prcdemment. e e e e

126

V. CALCUL MATRICIEL

2.2.6. Forme de Jordan Il est parfois utile de diagonaliser une matrice. Cela fournit une base dans laquelle lendomorphisme associ se comporte dune faon agrable. La e c e diagonalisation nest pas toujours possible (il faut quil existe une base de vecteurs propres). La forme de Jordan dune matrice ` coecients complexes a existe toujours et est diagonale quand la matrice est diagonalisable. Le calcul de cette forme requiert la dtermination des vecteurs propres et rencontre e donc les dicults mentionnes ci-dessus. e e Exemple 17. Notre premi`re matrice ne pose pas de probl`me : e e jordan(A); 9 1 0 0 0 2 2 81 + 24t 1 0 9 + 2 81 + 24t 0 0 2 0 0 2t 0 0 0 0 2t 9 En revanche, le calcul de la matrice de passage ne parvient pas ` son terme : a jordan(A,P); Error, (in linalg/frobenius/constpas) unable to execute for statement Il sagit l` dune faiblesse de la version actuelle de Maple. a Exemple 18. Sur la seconde matrice jordan renvoie une matrice diagonale qui semble multiple de lidentit. Il faut cependant interprter les e e lments de la diagonale comme tous dirents. De mani`re surprenante, le ee e e calcul de la matrice de changement de base seectue sans probl`me. e 2.2.7. Polynmes et sries de matrices o e Pour calculer un polynme en une matrice, il sut dutiliser evalm comme o nous lavons dj` vu. En particulier le calcul dune puissance k e dune matrice ea est assez rapide car la mthode dexponentiation binaire (voir IV1.1.1) est e employe. e Il est parfois ncessaire de calculer non pas des polynmes en une matrice, e o mais des sries. Ce calcul est possible, et fournit une application importante e de la diagonalisation et de la rduction en forme de Jordan. e Nous allons maintenant en donner deux applications. Itrs fractionnaires. Si A est la matrice associe ` un endomorphisme f , la e e e a matrice A2 est associe ` f f . Inversement on peut se poser la question de e a trouver un endomorphisme g tel que g g = f . Si B est la matrice associe, e on doit alors avoir A = B 2 ou autrement dit B = A1/2 . Pour calculer cette racine carre, on a recours au dveloppement en srie e e e de 1 + z : si |z| < 1 alors z z2 1+z =1 + 2 8

` 2. ALGEBRE LINEAIRE

127

Il nous sut dcrire la matrice A sous la forme I + (A I) et dappliquer e formellement le dveloppement prcdent. La condition |z| < 1 est remplace e e e e par la mme condition sur le rayon spectral de la matrice, cest-`-dire le maxe a imum des modules des valeurs propres. Le calcul de la racine carre est ainsi rduit ` des calculs dadditions et de e e a puissances enti`res de matrices. Si la matrice A est diagonale, tout se passe e bien : chaque lment de la diagonale peut tre trait indpendamment des ee e e e autres. Il sensuit que B est simplement la matrice dont la diagonale contient les racines carres des lments de A. Si A est diagonalisable, cest-`-dire quil e ee a existe une matrice de changement de base P telle que A = P DP 1 , o` D est u diagonale alors il sut deectuer le calcul ci-dessus sur D et deectuer ` la a n le produit (facile) P 1 (I + (D I))1/2 P . Reste le cas o` la matrice nest pas diagonalisable. Alors la mme techu e nique sapplique ` la forme de Jordan, forme dans laquelle le calcul des puisa sances permet de traiter les direntes entres de la matrice indpendamment e e e les unes des autres. Les probl`mes que nous avions mentionns plus haut pour la dtermination e e e des vecteurs propres se posent bien entendu aussi ici, puisque nous passons par le calcul de la forme de Jordan. Exemple 19. La matrice suivante nest pas diagonalisable : A:=matrix([[0,3,-1],[1,-1,2],[1,0,1]]); 0 3 1 A := 1 1 2 1 0 1 Voici sa forme de Jordan et la matrice de changement de base correspondante : d:=jordan(A,P): print(d,P); 2 0 0 0 1 1 , 0 0 1 1/2 1/3 0 1/2 0 1 1/2 1/3 1

Pour calculer la racine carre il nous faut les puissances de (d I). Les e premi`res puissances permettent de deviner la forme gnrale, qui nest pas e e e dicile ` tablir par rcurrence : ae e evalm(d-1),evalm((d-1)^2),evalm((d-1)^3),evalm((d-1)^4); 1 0 0 1 0 0 1 0 0 1 0 0 0 2 1 , 0 4 4 , 0 8 12 , 0 16 32 0 0 2 0 0 4 0 0 8 0 0 16 Do` u 1 0 (d I)p = 0 (2)p 0 0 0 p(2)p1 . (2)p

128

V. CALCUL MATRICIEL

Donc pour toute srie f dont le rayon de convergence est suprieur ` 2, e e a f (1) 0 0 f (2) f (2) . f (d I) = 0 0 0 f (2) Lapplication de cette formule ` f = 1 + z (dont la srie a pourtant un a e rayon de convergence infrieur ` 2) nous fournit une matrice : e a 2 0 0 B = 0 i i/2 0 0 i dont nous vrions que le carr redonne d : e e B:=matrix([[sqrt(2),0,0],[0,I,-I/2],[0,0,I]]):evalm(B^2); 2 0 0 0 1 1 0 0 1 Il ne reste plus qu` revenir dans la base de dpart o` lidentit cherche est a e u e e bien sr vrie : u e e F:=evalm(P^(-1) &* B &* P):print(F,evalm(F^2)); 2+2i 24i 2+2i 0 3 1 3 3 3 2i 2 2+7i 2 25i 3 , 1 1 2 6 6 2i 2 2+i 2 2+i 1 0 1
3 6 6

Exponentielle dune matrice. Cette seconde application des sries de matrie ces est tr`s importante : cest ainsi que lon rsout les syst`mes direntiels e e e e linaires ` coecients constants. En eet, un tel syst`me scrit e a e e dX(t) = AX(t), X(0) donn, e dt o` X(t) est un vecteur (x1 (t), . . . , xn (t)) dordre n et A est une matrice n n u indpendante de t. Lunique solution de ce syst`me est donne par e e e X(t) = etA X(0). Comme ci-dessus, lexponentielle de la matrice est dnie par son dveloppee e ment en srie : e Ak exp(A) = k!
k=0

avec A0 = I la matrice identit. e : Exemple 20. La matrice de lexemple prcdent correspond au syst`me e e e x (t) = 3y(t) z(t), y (t) = x(t) y(t) + 2z(t), z (t) = x(t) + z(t).

` 2. ALGEBRE LINEAIRE

129

Dapr`s ce que nous avons vu dans lexemple prcdent, pour toute srie f de e e e e rayon de convergence suprieur ` t, e a f (2t) 0 0 f (t) tf (t) . f (td) = 0 0 0 f (t) Il ne nous reste plus qu` faire le changement de base inverse : a B:=matrix([[exp(2*t),0,0],[0,exp(-t),t*exp(-t)],[0,0,exp(-t)]]): F:=evalm(P^(-1) &* B &* P); 2t e /3 + 2et /3 e2t /3 + 2tet et /3 e2t /3 et /3 2tet F := e2t /3 et /3 e2t /3 tet + 2et /3 e2t /3 et /3 + tet e2t /3 et /3 e2t /3 tet et /3 e2t /3 + 2et /3 + tet matrice qui donne la solution du syst`me direntiel. e e Pour le cas de lexponentielle, il nest pas ncessaire deectuer soi-mme e e toutes les tapes intermdiaires : Maple fournit la commande exponential e e qui se charge de tout. 2.3. Optimisation linaire. Un probl`me doptimisation linaire consiste e e e a ` minimiser (ou maximiser) une fonction linaire sous contraintes linaires. e e Un tel probl`me peut toujours se mettre sous la forme standard suivante : e min z = tcx, Ax = b, (P) x 0, o` z est la fonction ` minimiser (fonction objectif ou fonction conomique), c u a e est le vecteur des cots, de dimension n, n est le nombre de variables, m est u le nombre de contraintes (plus petit que n), A est une matrice relle m n e de rang m (matrice des contraintes), et b est le vecteur des seconds membres, de dimension m. Lexpression min z = tcx signie que lon cherche le vecteur x qui minimise la forme linaire tcx, c tant donn. Nombreux sont les probl`mes pratiques e e e e qui se ram`nent ` cette forme. e a La mthode classique pour rsoudre ce probl`me est la mthode du sime e e e plexe dont le principe est assez simple. En gros le probl`me est rduit ` e e a parcourir des sommets dun poly`dre convexe (dans un espace dont la die mension peut-tre leve) en suivant ses artes. Une description compl`te et e e e e e dtaille de lalgorithme du simplexe dpasse le cadre de cet ouvrage. En e e e particulier, il est parfois dicile de trouver un premier sommet o` dmarrer u e lalgorithme, et des cas de dgnrescence se produisent lorsque lune des face e e e du poly`dre est parall`le ` lhyperplan noyau de la forme ` minimiser. e e a a Il existe en Maple un package appel simplex qui donne directement les e solutions dun tel probl`me. e

130

V. CALCUL MATRICIEL

Exemple 21. Comme illustration, nous allons utiliser lexemple suivant min z = x1 2x2 , 3x1 + 2x2 + x3 = 2, x1 + 2x2 + x4 = 4, x1 + x2 + x5 = 5, x1 , x2 , x3 , x4 , x5 0.

La rsolution est immdiate : e e constr:={-3*x[1]+2*x[2]+x[3]=2, -x[1]+2*x[2]+x[4]=4,x[1]+x[2]+x[5]=5}: simplex[minimize](-x[1]-2*x[2],constr,NONNEGATIVE); {x1 = 2, x2 = 3, x4 = 0, x5 = 0, x3 = 2} Le package simplex comprend en plus des fonctions excutant les tapes e e de lalgorithme, permettant ainsi lapprentissage, lexprimentation et loriene tation de la mthode du simplexe. e 2.4. Automatique. Les applications du calcul formel sont importantes dans le domaine de lautomatique comme nous le verrons plus en dtail dans le e chapitre XII. Un grand nombre de syst`mes dynamiques en automatique sont e dcrits par : e X = f (X, U ), Y = g(X, U ), o` X, Y et U sont des vecteurs reprsentant ltat, la sortie et la commande u e e du syst`me. X reprsente la drive de X par rapport au temps. Lorsque f et e e e e g ne sont pas linaires, il est souvent utile dobtenir le syst`me correspondant e e linaris autour dun point de fonctionnement (X0 , U0 ) : e e X = AX + BU, Y = CX + DU, o` A, B, C et D sont les matrices jacobiennes de f et g par rapport ` X u a et U en (X0 , U0 ). (La matrice jacobienne du vecteur (f1 (X), . . . , fm (X)) par rapport ` (X1 , . . . , Xn ) est la matrice dont llment (i, j) est fi /Xj .) a ee Pour xer les ides voici les calculs mis en jeu pour le syst`me consistant e e en un pendule invers sur un chariot mobile (g. 1 p. 131). Les quations du e e pendule sont les suivantes : x1 = x2 y1 = x1 x2 = [u1 + mb (sin(x3 )x2 cos(x3 )D4 )]/(mb + mc ) 4 y2 = x3 x3 = x4 x4 = D 4 avec 1 2 D4 = d [sin(x3 ) cos(x3 )qm x2 + dmb l sin(x3 )mb g qm cos(x3 )u1 ] 4 q = mb /(mb + mc ) m d = 4/3 qm cos(x3 )2

` 2. ALGEBRE LINEAIRE

131

i 6 O

x -

Figure 1 Le pendule invers sur un chariot mobile. e o` x1 , x2 , x3 et x4 correspondent respectivement ` la position du chariot, ` u a a sa vitesse, ` langle du pendule avec la verticale et ` sa vitesse angulaire, a a mb et mc sont respectivement les masses du pendule et du chariot et l est la longueur du pendule. La commande u1 reprsente la force avec laquelle le e chariot est pouss ou tir. e e Le calcul en Maple donne : x:=vector(4): u:=vector(1): qm:=mb/(mb+mc): c3:=cos(x[3]): s3:=sin(x[3]): d:=4/3-qm*c3^2: D4:=(-s3*c3*qm*x[4]^2+2/(mb*l)*(s3*mb*g-qm*c3*u[1]))/d: f:=vector([x[2],(u[1]+mb^(1/2)*(s3*x[4]^2-c3*D4))/(mb+mc), x[4],D4]): g:=vector([x[1],x[3]]):ini:=[seq(x[i]=0,i=1..4),u[1]=0]: seq(map(simplify,i), i=subs(ini,zip(jacobian,[f,f,g,g],[x,u,x,u]))); 0 1 0 0 0 gmb 1 0 0 3 0 4 mb + 4mc mb + 4mc , 1 0 0 0 , 0 0 0 , 0 1 [2ex]0 0 0 0 1 0 1 g(mb + mc) 6 0 0 6 0 l(mb + 4mc) l(mb + 4mc) Le calcul est tr`s rapidement ralis et les matrices peuvent tre maine e e e tenant utilises pour dautres oprations, en particulier pour la commande du e e chariot, par exemple pour que le pendule reste vertical.

132

V. CALCUL MATRICIEL

2.5. Exercices. 1. Ecrire une procdure prenant en entre une matrice M et un numro de e e e colonne j, et calculant le dterminant de M par la formule des cofacteurs. e Vrier le rsultat sur une matrice gnrique dordre 6. e e e e 2. On cherche ` calculer une formule gnrale pour le dterminant de taille n a e e e x 1 0 . . . 0 1 x 1 .. . 0 1 .. . .. . 0 .. . .. . x 1 0 . . . 0 . 1 x

Trouver une formule de rcurrence, la rsoudre avec rsolve, simplier la e e formule obtenue, puis vrier le rsultat pour n = 6. e e 3. Dterminer les puissances et la racine carre de e e 1 2 3 0 1 2 . 0 0 1 4. La matrice A et les vecteurs b et c du 2.3 sobtiennent directement ` a partir de lexpression de z et des contraintes. Ecrire une procdure Maple e qui ralise ce travail. e 3. Espaces vectoriels euclidiens Lespace ambiant est euclidien. Les solides sont rigides et leur mouvement est rgi par des isomtries. Outre les oprations gnrales de lalg`bre linaire e e e e e e e que nous avons dj` vues, on y dispose dun produit scalaire (dotprod), ea ce qui permet de calculer des angles ou de dterminer des bases orthogoe nales (GramSchmidt). L` encore, les calculs manuels sont rapidement infaisa ables mais restent ` la porte des syst`mes de calcul formel. a e e 3.1. Isomtries. Pour illustrer quelques calculs dans lespace euclidien, nous e allons calculer la matrice dune rotation de lespace ` trois dimensions donne a e par un vecteur directeur u unitaire de son axe et son angle mesur en e utilisant lorientation dnie par u. Un vecteur quelconque v est transform e e par cette rotation en cos v + sin (u v) + (1 cos )(u v)u o` reprsente le produit vectoriel et le produit scalaire. u e En Maple cela donne : u:=vector([p,q,r]): basis:=vector([1,0,0]),vector([0,1,0]),vector([0,0,1]): R:=augment(seq(evalm(cos(alpha)*v+sin(alpha)*crossprod(u,v) +(1-cos(alpha))*dotprod(u,v)*u),v=basis)):

3. ESPACES VECTORIELS EUCLIDIENS

133

Nous ne montrons que la premi`re colonne : e cos() + (1 cos())p2 sin()r + (1 cos())pq . sin()q + (1 cos())pr Inversement, si lon conna la matrice de rotation, son axe et son angle t peuvent se retrouver grce ` deux proprits que nous allons dmontrer ` a a ee e a laide de Maple. La premi`re proprit concerne la trace, qui est gale ` 2 cos + 1. Nous e ee e a commenons par crer une r`gle de simplication qui prcise que le vecteur u c e e e ci-dessus tait unitaire : e eq:={p^2+q^2+r^2=1}: simplify(trace(R),eq); 2 cos + 1 La seconde proprit utile sobtient en calculant R tR : cette matrice ee est antisymtrique de la forme e 0 r q 0 p . 2 sin r q p 0 Nous le prouvons avec Maple : evalm(R-transpose(R)); 0 2 sin()r 2 sin()q 2 sin()r 0 2 sin()p 2 sin()q 2 sin()p 0 En dimension 3, on utilise souvent les coordonnes sphriques. Le vecteur e e unitaire u scrira alors plutt (sin cos , sin sin , cos ). Les calculs devie o ennent rapidement infaisables ` la main comme le montre la premi`re colonne a e de la matrice R : sph:=[p=sin(phi)*cos(theta),q=sin(phi)*sin(theta),r=cos(phi)]: col(subs(sph,op(R)),1); cos + (1 cos ) sin2 cos2 sin cos + (1 cos ) sin2 cos sin . (1 cos ) sin cos cos sin sin sin Mme si lon conna laxe et que la seule inconnue est langle , lexpression e t reste complique, surtout si lon se met ` composer des rotations daxes e a dirents. e 3.2. Rduction dune forme quadratique. Un polynme du second degr e o e en n variables relles peut scrire e e : v Rn tvAv + tbv + c R o` A est une matrice symtrique n n, b est un vecteur de Rn et c est un u e rel. La partie homog`ne du second degr tvAv est une forme quadratique. Sa e e e rduction consiste ` trouver une base orthonorme dans laquelle la matrice A e a e est diagonale. Cest toujours possible puisque A est symtrique. e

134

V. CALCUL MATRICIEL

4 y 2

-4

-2

00 -2

2x

-4

-6

Figure 2 La conique 7 x2 8

3 4 xy

+ 5 y 2 + 2x + 2 3y + 7 = 0. 8

Si lon se place en dimension 2, (x, y) = 0 est lquation dune conique e dans un rep`re orthonorm (Ox, Oy). Maple va nous permettre de visualiser e e ce que rduire la forme quadratique signie pour la conique associe. La e e conique considre (reprsente g. 2) est dnie par lquation : ee e e e e 7 2 3 5 x xy + y 2 + 2x + 2 3y + 7 = 0 8 4 8 ce qui correspond ` a A:=matrix([[7/8,-sqrt(3)/8],[-sqrt(3)/8,5/8]]): b:=vector([2,2*sqrt(3)]): c:=7: Le polynme tant quant ` lui dni par o e a e v:=vector(2): Phi:=transpose(v) &* A &* v +transpose(b) &* v + c: Nous allons dans un premier temps chercher une base orthonorme dans e laquelle la matrice A est diagonale. Il sut pour cela de calculer la forme de Jordan de la matrice A (qui est ici diagonale) et de normaliser les lignes de la matrice de changement de base : jordan(A,P); 1 0 0 1/2 P:=transpose(stack(seq(map(simplify,normalize(i)), i=row(P,1..2))));
3 2 1 2 1 2 3 2

Dans cette base, le polynme devient : o evalm(subs(v=evalm(P &* vector([x,y])),Phi)); 1 x2 + y 2 + 4y + 7 2 (voir g. 3). Les termes en xy ont bien disparu, et les coecients de x2 et y 2 sont les valeurs propres. Nous avons donc bien rduit la forme quadratique. Les e

3. ESPACES VECTORIELS EUCLIDIENS

135

4 y 2

-4

-2

00 -2

2x

-4

-6

Figure 3 La conique rduite x2 + 1 y 2 + 4y + 7 = 0. e 2


6

4 y 2

-4

-2

00 -2

2x

-4

-6

Figure 4 Rduction dune conique. e termes en x et y peuvent encore tre supprims par une translation qui ram`ne e e e le centre (4, 0) de la conique ` lorigine. a expand(subs([x=X,y=-4+Y],")); 1 X2 + Y 2 1 2 Pour conclure, nous donnons une interprtation gomtrique. La matrice e e e P est une matrice de rotation dangle /6 : P = cos(/6) sin(/6) sin(/6) . cos(/6)

Les axes principaux de la conique sont donc inclins de /6 par rapport e au rep`re (Ox, Oy). La transformation de matrice P permet de prendre pour e directions principales de la conique les axes du rep`re et la translation ram`ne e e ensuite le centre de la conique ` lorigine. Les trois coniques obtenues durant a la rduction sont rcapitules en gure 4. e e e Les mmes calculs sappliquent bien sr pour un ordre plus lev. En e u e e dimension 3 on obtient des surfaces quadriques (ellipso des, parabolo des,...).

136

V. CALCUL MATRICIEL

60

50

40

30

20

10

0 -4 -2 0 2 4 -4 -2 0 2 4

Figure 5 Le parabolo de 7 2 5 3 z= x xy + y 2 + 2x + 2 3y + 7. 8 4 8

Pour les dimensions suprieures la visualisation des rsultats devient plus e e dicile. 3.3. Optimisation quadratique. Un probl`me reli au prcdent est celui e e e e de la minimisation dune forme quadratique. Il sagit de trouver un vecteur v qui minimise (v). Tout dabord, pour que ce minimum existe, il faut que les valeurs propres de la matrice A soient positives ou nulles, ce que nous supposerons par la suite. Le vecteur gradient de par rapport ` v est gal ` 2Av + b (car A a e a est symtrique). Le minimum de (v) est atteint lorsque le gradient est nul, e donc pour v = A1 b/2 ` condition que A soit inversible. a Exemple 22. La surface 3 5 7 2 xy + y 2 + 2x + 2 3y + 7 z= x 8 4 8 est un parabolo de rvolution (g. 5). Le minimum est facilement dtermin de e e e par la commande linsolve : linsolve(evalm(2*A),-b); 2 2 3 Ce point nest autre que le centre de la conique trouv dans la rduction e e de la forme quadratique du paragraphe prcdent. En eet, le minimum dune e e forme quadratique (lorsque les valeurs propres sont positives) est atteint au centre de la conique associe. La valeur en ce point est celle du terme constant e dans lquation de la quadratique rduite (ici 1). e e L` encore les mmes calculs sappliquent ` un ordre plus lev. Lavantage a e a e e dun syst`me de calcul formel est que pour toutes ces questions, il sut de e recommencer les calculs dj` raliss en changeant les donnes (ici A, b et c). ea e e e

3. ESPACES VECTORIELS EUCLIDIENS

137

3.4. Exercices. 1. Une condition pour que trois vecteurs u, v et w soient coplanaires est que le dterminant dordre 3 form par leurs coordonnes soit nul. Ecrire une e e e procdure Maple qui dtermine par cette mthode si quatre points P1 , P2 , e e e P3 et P4 , donns par leurs coordonnes, sont coplanaires. Vrier que cela e e e revient ` calculer le produit mixte (u v) w. a 2. La matrice A, le vecteur b et la constante c du 3.2 sobtiennent directe ment ` partir de lexpression du polynme tvAv + tbv + c. Ecrire une a o procdure qui ralise ce travail. e e 3. Raliser la rduction du polynme dni par e e o e A=
7 8

3 4 5 8

b=

2 2 3

c = 7.

4. Il est possible de calculer la valeur du minimum du polynme du second o degr puisque lon sait que v = A1 b/2. On trouve c tbA1 b/4. Que e devient cette valeur si A nest pas symtrique ? e 5. Rduire lellipso e de 3 23 2 3 3 29 7 2 3 x xy + xz + y + yz + z 2 2 3x + 3y z + 3 = 0. 8 8 8 32 16 32 Visualiser le rsultat. Trouver de deux faons direntes x, y et z pour e c e lesquels la valeur de la forme quadratique associe ` lellipso est minie a de mum. 6. Etudier lexistence dun minimum de
+

f (a, b, c) =
0

(x3 + ax2 + bx + c)2 e2x dx

sur R3 . [Indication : considrer le produit scalaire e


+

(P, Q)
0

P (x)Q(x)e2x dx.]

7. Soit f un endomorphisme dun espace vectoriel euclidien de dimension 3. Sa matrice dans une base orthonorme est e 1 v w 2 u u 2 w M = u 1 , (u, v, w) R 3 . v 2 v 3 u v 1 w w 2 (1) Diagonaliser f . Interprter gomtriquement. e e e (2) Donner une condition sur u, v, w pour que f soit une isomtrie. e

CHAPTER VI

Polynmes et fractions rationnelles o


es omes sont constituants fondamentaux du calcul formel : cest L lapolynpolynmes ladesune simple o`sur Q on peut construireUne corpsconclasse dobjets plus u intervient une variable. fois struits les o en variable les de nombres algbriques (cf. 1.3.8) et le corps des fractions rationnelles en une e variable. Ensuite, on peut construire les polynmes ` coecients dans ces o a corps, et ainsi obtenir des polynmes et des fractions rationnelles ` plusieurs o a variables. Du point de vue du calcul formel, ces constructions prsentent e lavantage qu` tout moment une forme normale des expressions est calcua lable, forme sous laquelle la nullit dune expression et lgalit de deux exe e e pressions sont apparentes. Cette proprit stend en acceptant des nombres ee e transcendants (qui ne sont racine daucun polynme ` coecients rationnels) o a a ` la place des variables, ` condition que les nombres transcendants introa duits soient algbriquement indpendants (aucun polynme non nul ` coee e o a cients rationnels ne sannule lorsquon remplace les variables par ces nombres). Ce sont ces expressions, construites uniquement par les quatre oprations e lmentaires de corps +, , , ` partir dune ou plusieurs variables ou ee a nombres transcendants et du corps des rationnels ou dun corps de nombres algbriques, que lon appelle fractions rationnelles dans ce chapitre. e Ainsi, t3 log 2 + 1/y + z n z 3 est un polynme en t et une fraction rao tionnelle en t et y, mais ce nest pas un polynme en z du point de vue du o calcul formel tant quon na pas prcis une valeur enti`re pour n ; en eet n e e e peut encore prendre nimporte quelle valeur symbolique comme par exemple y log t. On distinguera deux cas. En 1 les polynmes et fractions rationnelles o sont univaris, cest-`-dire que lon travaille dans K[x], o` K peut ventuellee a u e ment tre Q(x1 , . . . , xn ), mais les variables ninterf`rent pas. Puis en 2, on e e sintresse aux syst`mes dquations polynomiales en plusieurs variables et e e e aux probl`mes gomtriques associs. e e e e 1. Oprations de base et polynmes en une variable e o Le tableau 1 prsente les principales oprations que lon peut eectuer sur e e les polynmes et les fractions rationnelles. On dispose ainsi dune bo ` outils o te a dusage tr`s gnral, puisque nombreuses sont les expressions que lon peut e e e

Plus rigoureusement, les idaux sont tous principaux. e


139

140

VI. POLYNOMES ET FRACTIONS RATIONNELLES

Table 1 Principales oprations sur les polynmes et frace o tions rationnelles. Type Extraction dinformation syntaxique Fonction Commande degree ldegree coeff lcoeff tcoeff coeffs expand collect sort quo rem divide prem sprem gcdex gcd lcm normal numer denom resultant factor convert(.,sqrfree) convert(.,parfrac) compoly solve fsolve sturmseq sturm evala

Degr dun polynme e o Valuation dun polynme o Coecient Coecient de tte e Coecient de queue Coecients Dvelopper e Rcriture Dvelopper par rapport ` une variable e e a Ordonner Quotient de la division euclidienne Reste de la division euclidienne Test de divisibilit, division exacte e Pseudo-reste Pseudo-reste creux Pgcd et pgcd tendu e Pgcd multivari e Plus petit commun multiple Normalisation des fractions Numrateur e Calcul Dnominateur e Rsultant e Factorisation Factorisation sans carrs e Dcomposition en lments simples e ee Dcomposition de polynmes e o Rsolution exacte e Rsolution numrique e e Suites de Sturm Localisation de racines relles e Manipulation de nombres algbriques e

considrer comme des polynmes. Ce dernier point est particuli`rement vrai e o e en Maple, qui ne propose pas de type de donne spcialis pour les polynmes. e e e o Ces oprations sont groupes en trois catgories : les oprations puree e e e ment syntaxiques, qui extraient de linformation directement accessible sur le polynme, les oprations de rcriture, qui peuvent dvelopper des produits o e e e pour rorganiser le polynme, et les oprations impliquant un calcul, ceste o e a `-dire la division euclidienne et les oprations drives pgcd, rsultant e e e e et suites de Sturm, normalisation de fractions rationnelles ainsi que les commandes de factorisation et de rsolution qui reposent sur des algorithmes e

1. OPERATIONS DE BASE ET POLYNOMES EN UNE VARIABLE

141

spcialiss. Dans ce tableau, sont marques dune toile les oprations pour e e e e e lesquelles on ne spcie pas de variable privilgie ; ces oprations traitent e e e e toutes les variables sur le mme plan. e Nous allons maintenant reprendre un peu plus en dtail les trois catgories e e de ce tableau. Notre but nest pas de prsenter la syntaxe de chacune de ces e commandes, pour laquelle nous renvoyons le lecteur ` laide en ligne (help), a mais de prciser ou illustrer leur utilisation. e 1.1. Oprations purement syntaxiques. Ces commandes ne font que e parcourir lexpression pour en extraire linformation cherche. Comme elles e neectuent absolument aucun calcul, il faut que les polynmes soient dvelopo e ps par rapport ` la variable dintrt, et que 0 ne soit pas cach dans un des e a ee e coecients utiliss. e Exemple 1. Il ne faut donc pas faire : degree((x-1)*x-x^2,x), degree((exp(a)*exp(-a)-1)*x+1,x); qui renvoie les rsultats faux : e 2, 1 Pour viter la situation du premier calcul, on utilisera systmatiquement e e la commande collect avant de calculer le degr ou la valuation. Quant au e second rsultat, il provient de ce que deux expressions transcendantes (exp(a) e et exp(a)), mais algbriquement dpendantes, sont simultanment prsentes e e e e dans lexpression, ce quil faut corriger d`s dtection (par exemple en utilisant e e combine). 1.2. Rcriture et simplication. Un syst`me ne peut pas dcider a priori e e e quune forme dun polynme est plus simple que les autres. Par exemple, o (1 + x)100 peut tre considre comme une forme plus simple que la forme e ee dveloppe du mme polynme, alors que la forme factorise de 1 + x100 est e e e o e plus complique que la forme dveloppe si le crit`re retenu est la taille de e e e e lexpression. En outre, pour certains calculs comme la division euclidienne, la forme dveloppe est plus commode, alors que pour dautres calculs comme e e la recherche de pgcd, la forme factorise permet des calculs plus rapides. En e consquence, cest ` lutilisateur de dcider de la forme la plus adapte ` e a e e a ses besoins et Maple lui propose un certain nombre de commandes pour y parvenir. 1.2.1. Dvelopper e La commande expand, prsente au chapitre I, dveloppe tous les produits e e e des polynmes, mais aussi toutes les sous-expressions pour lesquelles une des o procdures expand/. sapplique (voir II.3.3). Pour conner la commande e expand au dveloppement de polynmes, on peut avoir recours ` la commande e o a frontend : Exemple 2.

142

VI. POLYNOMES ET FRACTIONS RATIONNELLES

P:=(sin(2*x)*t+1)^2: expand(P), frontend(expand,[P]); 4t2 sin(x)2 cos(x)2 + 4t sin(x) cos(x) + 1,

sin(2x)2 t2 + 2 sin(2x)t + 1

Dans le cas dexpressions ` plusieurs variables, ou dont les coecients a sont des fonctions de param`tres, expand prsente linconvnient de trop e e e dvelopper. Cela prend du temps et produit des expressions tr`s grosses e e o` une partie de linformation peut tre perdue. On aura souvent intrt ` u e ee a utiliser la commande collect qui dveloppe lexpression par rapport ` une e a variable, sans modier le reste. En outre, on peut donner un argument optionnel qui est une procdure ` appliquer aux coecients. Le plus souvent, e a on utilisera normal. Exemple 3. f:=(1+x*(1+y))^2/(1-y^2): f=collect(f,x,normal); 2 (1 + y)x2 x 1 (1 + x(1 + y)) = +2 + 2 1y 1y 1 y 1 y2 Pour dvelopper des polynmes simultanment par rapport ` plusieurs e o e a variables, on utilisera soit collect(p,[x,y]) qui dveloppe par rapport ` e a x puis les coecients par rapport ` y, soit collect(p,[x,y],distributed) a qui dveloppe ` platpar rapport ` x et y. e a a p:=1+x*y+x*z+x*y*z: collect(p,[x,y]), collect(p,[x,y],distributed); ((1 + z)y + z)x + 1, 1 + xz + (1 + z)xy 1.2.2. Ordonner les polynmes o Du fait de la reprsentation des polynmes comme des sommes, Maple e o nordonne pas systmatiquement les polynmes. Il faut explicitement le dee o mander. Deux commandes permettent de raliser cette opration. La come e mande sort modie le polynme an de lordonner par puissances dcroiso e santes de la ou des variables spcies (dans le cas de plusieurs variables on e e peut spcier la relation dordre entre les monmes). La commande series e o ordonne un polynme par puissances croissantes, il sut de spcier comme o e ordre du dveloppement infinity. Dans ce dernier cas, lobjet renvoy nest e e plus un polynme, mais un objet de type series (voir chap. II). o Cependant, pour lcriture de programmes, il est gnralement inutile e e e dordonner les termes. On aura plutt recours ` la boucle for ... in et o a ventuellement aux commandes degree et coeff. La commande sort ne sert e ainsi qu` faire joli. a 1.3. Calculs en une variable. Les coecients dun polynme sont a priori o des expressions quelconques, mais les oprations de cette section ncessitent e e souvent que ces coecients soient des polynmes ou des fractions rationnelles o (en dautres variables) dont les coecients sont eux-mmes rationnels. Par e exemple le polynme p = x2 + 2 sinh(y)x 1 est un multiple de x ey , o

1. OPERATIONS DE BASE ET POLYNOMES EN UNE VARIABLE

143

mais pour le dterminer, il faut rcrire sinh(y) en termes de z = ey et faire e e les calculs sur des fractions rationnelles en x et z. On peut esprer que les e versions suivantes du syst`me fonctionneront pour nimporte quelle extension e algbrique, voire transcendante. e 1.3.1. Division euclidienne Etant donns deux polynmes A et B en la variable x, il y a plusieurs e o faons en Maple dobtenir les polynmes Q et R tels que A = BQ + R c o et degx R < degx B. Les commandes principales sont quo et rem, qui renvoient respectivement le quotient Q et le reste R de la division. Exemple 4. Pour obtenir le reste de la division de A = x10 + ux + 1 par B = 2x3 + vx2 1 en la variable x, on fait : A:=x^10+u*x+1: B:=2*x^3+v*x^2-1: R:=rem(A,B,x); 3v 5 3v 2 v6 1 v3 3v v7 5v 4 v8 + x2 + u + + x+1 + R := 256 32 8 128 8 8 16 256 64 Si les coecients de A et B sont rationnels, la fonction divide dtermine e si B divise A. Cette fonction donne le quotient de mani`re plus rapide que e quo lorsque la division est exacte. Enn, les fonctions prem et sprem calculent un pseudo-reste, cest-`-dire un polynme R multiple par un scalaire du a o polynme R. Lavantage de ces fonctions est quelles vitent les divisions de o e coecients et donc sont souvent plus rapides sur de gros calculs. Exemple 5. On reprend les deux polynmes de lexemple 4 : o prem(A,B,x); 256ux + 256 + 96v 2 x2 24v 5 x2 + 32x 32xv 3 + 2xv 6 + v 8 x2 48v + 20v 4 v 7 Ce polynme vaut 256 fois celui obtenu par rem dans lexemple 4, et on na o pas eu ` rduire toutes les fractions coecients. La fonction sprem di`re de a e e prem par le seul fait quelle cherche le plus petit facteur scalaire tel que R ne comporte pas de fraction. 1.3.2. Pgcd Une fois que lon sait eectuer une division euclidienne, on sait calculer le pgcd par lalgorithme dEuclide. Le pgcd A B de deux polynmes A et B o en une variable sobtient par la commande gcdex qui prend en argument les polynmes et la variable. o Exemple 6. Pour montrer quil nexiste pas de valeur de (u, v) telle que les deux polynmes A et B de lexemple 4 aient plus de deux racines o communes, il sut de faire : gcdex(coeff(R,x,2),coeff(R,x,0),v);

144

VI. POLYNOMES ET FRACTIONS RATIONNELLES

1 Ceci montre que le reste de la division nest jamais le polynme nul, et par o consquent il y a au plus deux valeurs de x pour lesquelles il sannule. e Si lon souhaite obtenir galement les polynmes U et V tels que AU + e o BV = A B, on donne deux variables en arguments optionnels ` gcdex. Une a utilisation de ces polynmes est la manipulation symbolique de racines de o polynmes sans en conna lexpression formelle ou mme la valeur numrique. o tre e e Nous reviendrons en dtail sur ce point en 1.3.8. Voici un premier cas pare ticulier important. Si est racine dun polynme H, et F une fraction rationnelle nayant o pas de ple en , on peut exprimer facilement F () comme un polynme en o o de degr infrieur ` celui de H. Ceci fournit une forme normale qui permet e e a de dtecter syntaxiquement lgalit de deux fractions rationnelles en . e e e Exemple 7. Par exemple si est racine du polynme B = 2x3 + vx2 1 o des exemples prcdents et F = (x2 + 1)/(x + 1), on fait e e F:=(x^2+1)/(x+1): gcdex(denom(F),B,x,U): subs(x=alpha,F=rem(U*numer(F),B,x)); v 1 (v 1) 2 2 + 1 = 4 +1 v3 v3 v3 On obtient ainsi le polynme de plus petit degr en gal ` F (). o e e a Il existe aussi en Maple une commande gcd qui donne le plus grand commun diviseur de deux polynmes multivaris ` coecients rationnels. o e a A:=x*(y-1)*(z-2): B:=x*(y-1)*(z-3): gcd(A,B); xy x

1.3.3. Rsultants e Etant donns deux polynmes unitaires A et B ` coecients dans un e o a anneau int`gre, le rsultant de A et B est un polynme ` coecients dans e e o a le mme anneau qui sannule si et seulement si les deux polynmes ont une e o racine commune. Lorsque les polynmes ne sont pas unitaires, le rsultant o e de A et B vaut adeg(B) bdeg(A) Resultant(A/a, B/b) o` a et b sont les coecients u dominants de A et B. Il ny a toutefois plus quivalence entre lannulation e du rsultant et lexistence dune racine commune. Cette annulation peut en e eet se produire galement si lun des deux polynmes devient nul ou si les e o coecients de tte des deux polynmes sannulent simultanment. e o e Exemple 8. La condition pour quun polynme nait pas de racine mulo tiple est quil nait pas de racine commune avec sa drive. Le rsultant de P e e e et P sappelle le discriminant, et on le trouve facilement :

1. OPERATIONS DE BASE ET POLYNOMES EN UNE VARIABLE

145

-2

-1

00

-1

-2

Figure 1 P:=a*x^2+b*x+c: Q:=x^3+p*x+q: resultant(P,diff(P,x),x), resultant(Q,diff(Q,x),x); 4a2 c b2 a, 4p3 + 27q 2 Dans le premier exemple, on trouve un facteur a en plus du discriminant habituel b2 4ac, qui re`te lannulation simultane des coecients de tte e e e des deux polynmes lorsque a = 0. o Exemple 9. Si est racine dun polynme P (x), et est racine dun o polynme Q(x), on peut obtenir un polynme qui sannule en + par o o resultant(P,subs(x=y-x,Q),x); Exemple 10. Les deux courbes dnies par e (x2 + y 2 )3 4x2 y 2 = 0 et y 2 (1 + x) (1 x)3 = 0

sont traces en gure 1 p. 145. Le dessin montre que les courbes ont quatre e points dintersection. La dtermination prcise des coordonnes de ces points e e e sobtient en utilisant les rsultants qui fournissent les quations aux abscisses e e et aux ordonnes des points dintersection. e f:=(x^2+y^2)^3-4*x^2*y^2: g:=y^2*(1+x)-(1-x)^3: resultant(f,g,y), resultant(f,g,x); (60x6 4x7 1 + 9x + 95x3 35x2 164x4 + 152x5 )2 , 16y 14 + 6032y 12 1624y 10 + 4192y 8 815y 6 301y 4 9y 2 + 1 Le premier polynme est un carr alors que le second est bicarr. Cela o e e sexplique par la symtrie de la gure par rapport ` laxe des abscisses. On e a note galement que les degrs sont plus grands que le nombre de racines ate e tendu. En les valeurs de x ou de y racines de ces rsultants, ni f ni g, ni leurs e coecients de tte ne sannulent. Les racines des rsultants qui ne sont pas e e des coordonnes des points dintersections de la gure 1 correspondent donc ` e a dautres intersections de ces deux courbes, non plus dans R2 , mais dans C 2 . Nous reviendrons sur cet exemple p. 148.

146

VI. POLYNOMES ET FRACTIONS RATIONNELLES

1.3.4. Factorisation Bien que performantes, les mthodes de factorisation formelle de polyne o mes sont invitablement tr`s coteuses en temps. Cela provient de lexistence e e u de polynmes tr`s simples avec un grand nombre de facteurs comme x1000 1. o e Il est donc avis dviter toute factorisation dans un programme, dautant e e plus que lon peut souvent sen passer, car nombreuses sont les oprations qui e donnent le mme rsultat symbolique pour toutes les racines dun polynme. e e o Cependant, au cours dune session interactive, lorsque lon fait des exprimene tations autour dun probl`me, il peut se produire que la factorisation dun e polynme apporte un clairage intressant. La commande ` utiliser pour o e e a cela est factor qui factorise aussi bien des polynmes en une quen plusieurs o variables. Lorsque factor renvoie le polynme de dpart, cela signie que o e celui-ci est irrductible sur Q. e Exemple 11. Dans lexemple 10, les deux rsultants restent inchangs e e par factor. Il sagit donc des polynmes ` coecients dans Q de plus bas o a degr sannulant aux coordonnes des intersections. e e La commande factor sapplique aussi aux fractions rationnelles. Dans ce cas, numrateur et dnominateur sont factoriss. e e e 1.3.5. Factorisation sans carrs e Cette opration ralise uniquement ` laide de pgcds nest pas coteuse. e e e a u u Elle permet de rcrire un polynme P sous la forme Q1 Q2 Qp , o` les e o p 2 polynmes Qi sont premiers entre eux et nont pas de facteurs multiples. o Exemple 12. On prend P = x14 + 3x13 + 3x12 + x11 x3 3x2 3x 1, la factorisation sans carrs sobtient par : e convert(x^14+3*x^13+3*x^12+x^11-x^3-3*x^2-3*x-1,sqrfree,x); (x11 1)(x + 1)3 Outre son faible cot, cette opration prsente deux avantages : elle peru e e met dextraire la partie sans carrs du polynme (le produit des Qi ), ceste o a `-dire un polynme de degr minimal sannulant aux mmes points ; elle o e e spare galement les racines par multiplicit, groupant ainsi celles qui se come e e portent de la mme faon pour les oprations algbriques (par exemple la e c e e dcomposition en lments simples). e ee 1.3.6. Dcomposition e La dcomposition de polynmes est une autre opration bien moins coe o e u teuse que la factorisation et qui peut rendre service. Etant donn un polynme e o P , il sagit de dterminer lexistence de polynmes Q et R de degr au moins 2 e o e tels que P = Q(R). La commande Maple qui ralise ce calcul sappelle e compoly. Lorsque le syst`me renvoie FAIL, cela signie non pas quil na pas e russi ` trouver de dcomposition, mais quune telle dcomposition nexiste e a e e pas.

1. OPERATIONS DE BASE ET POLYNOMES EN UNE VARIABLE

147

1.3.7. Rsolution dquations polynomiales e e La recherche de racines est un probl`me important en sciences appliques. e e Lorsquelle est possible de mani`re exacte, elle sera obtenue par la commande e solve. Exemple 13. On rsout aisment lquation du second degr : e e e e solve(a*x^2+b*x+c,x); b + b2 4ac b b2 4ac , 2a 2a On peut poursuivre ainsi jusquau degr 4. On sait quil nexiste pas de e formule gnrale ` laide de radicaux pour la rsolution de polynmes de degr e e a e o e suprieur ou gal ` 5. Il est parfois possible dobtenir une telle formule par la e e a thorie de Galois, mais Maple na pas de programme pour cela. Cependant, e Maple essaye factor et compoly, ce qui lui permet parfois des rsolutions e spectaculaires. Exemple 14. Le polynme o 4x8 + 48x7 + 256x6 + 792x5 + 1590x4 + 2196x3 + 2104x2 + 1290x + 459, est irrductible (dapr`s factor), et de degr 8. Cependant la rsolution est e e e e aise : e solve(4*x^8+48*x^7+256*x^6+792*x^5+1590*x^4+2196*x^3+ 2104*x^2+1290*x+459,x); 3/2 + 3/2 + 3/2 + 1 + 2 1 2 1 + 2 1 2 18 + 2 18 + 2 18 2 13 13 13 , , , 3/2 3/2 3/2 1 + 2 1 2 1 + 2 18 + 2 18 + 2 18 2 13 13 13 , , ,

18 13 1 2 18 13 3/2 + , 3/2 2 2 En r`gle gnrale, les solutions exactes de polynmes de degr suprieur e e e o e e a ` deux ne prsentent pas dintrt. Il vaut mieux se demander ce que lon e ee cherche ` faire avec ces solutions, et un calcul de rsultant, une rsolution a e e numrique ou des manipulations de nombres algbriques que nous verrons en e e 1.3.8 permettent souvent daboutir au rsultat. e La rsolution numrique seectue avec la commande fsolve. Si lon e e veut toutes les racines, il faut spcier loption complex, mais les algorithmes e peuvent toujours tre mis en dfaut. Il se peut ainsi que fsolve renvoie e e des valeurs complexes alors que les racines sont relles. On peut cependant e compter le nombre de racines relles de mani`re exacte (sans les calculer) par e e les commandes sturmseq et sturm. La premi`re calcule la suite de Sturm e

148

VI. POLYNOMES ET FRACTIONS RATIONNELLES

associe au polynme, qui est une suite de polynmes de degrs dcroissants, et e o o e e la seconde utilise cette suite pour calculer le nombre de racines dans nimporte quel intervalle rel. e Exemple 15. On reprend lexemple 10 de lintersection de deux courbes. readlib(sturm): sturm(sturmseq(resultant(f,g,y),x),x,-infinity,infinity), sturm(sturmseq(resultant(f,g,x),y),y,-infinity,infinity); 3, 4 Le second rsultat correspond bien ` ce que lon attend : on voit quatre intere a sections sur la gure, correspondant ` quatre ordonnes distinctes. Le premier a e rsultat est plus surprenant : on attendait 2, le nombre dabscisses de points e dintersection. La troisi`me racine relle, que lon trouve numriquement par e e e fsolve, correspond ` deux intersections dont labscisse est relle et lordonne a e e complexe : fsolve(resultant(f,g,y),x); 17.33341889, 17.33341889, 0.2277666333, 0.2277666333, 0.5905668901, 0.5905668901

(Les racines sont renvoyes avec leur multiplicit ici gale ` 2). e e e a a:="[1]: solve(subs(x=a,g),y); 19.42346209i, 19.42346209i solve(subs(x=a,f),y); 19.42346207i, 1.743900269 + 16.28118131i, 1.743900269 16.28118131i, 19.42346207i, 1.743900269 16.28118131i, 1.743900269 + 16.28118131i

Les deux premi`res racines sont bien communes aux deux polynmes, et e o correspondent ` lordonne des intersections. On remarque au passage que a e lorsquun coecient du polynme est numrique, solve se comporte comme o e fsolve. 1.3.8. Nombres et fonctions algbriques e Un nombre algbrique est un zro dun polynme en une variable ` coee e o a cients rationnels. De mme une fonction algbrique f (x1 , . . . , xn ) est une fonce e tion annulant un polynme en f et x1 , . . . , xn ` coecients rationnels. Alors o a quil est impossible de prouver des galits entre nombres algbriques par des e e e calculs numriques, il est possible de prouver de telles galits lorsquelles ne e e e font intervenir que des fractions rationnelles en des nombres algbriques, en e utilisant des calculs similaires ` celui de lexemple 7. En outre, ces calculs a m`nent toujours ` un rsultat indpendant de la racine considre. e a e e ee En Maple, les nombres algbriques sont reprsents ` laide de la fonction e e e a RootOf, et peuvent tre manipuls par la commande evala. Lopration de e e e

1. OPERATIONS DE BASE ET POLYNOMES EN UNE VARIABLE

149

normalisation mentionne en 1.3.2 seectue alors directement, et le rsultat e e de lexemple 7 sobtient simplement par : alias(alpha=RootOf(2*x^3+v*x^2-1,x)); evala((alpha^2+1)/(alpha+1)); Exemple 16. Le nombre dor vaut ( 5+1)/2. On remarque numriquee ment que 5 + 1 2 1 7, 472 135 953, 8 3 3 + 1 2 7, 472 135 963.

Pour prouver lgalit de ces deux nombres, il sut de ramener chacun deux e e en forme normale. alias(phi=RootOf(x^2-x-1)): evala((phi^5+1)/(phi^2-1)),evala(phi^8/(phi^3+1)-3/2); 4 + 1, 4 + 1 Si est un nombre algbrique racine dun polynme irrductible, on note e o e habituellement Q() le corps des fractions rationnelles en , qui est un espace vectoriel de dimension nie sur Q, avec pour base 1, , 2 , . . . Cette structure particuli`rement simple en fait un objet privilgi du calcul formel, auquel on e e e aura souvent intrt ` se ramener. Lorsque plusieurs nombres algbriques sont ee a e en jeu, on peut toujours se ramener ` des manipulations ne faisant intervenir a quun nombre algbrique, en oprant comme dans lexemple 9. Malheureusee e ment, ces manipulations font intervenir des polynmes dont le degr peut o e devenir tr`s grand, ce qui bloque parfois le calcul. e Il faut galement savoir que lon peut faire la plupart des oprations efe e fectues par evala sans que le polynme dnissant le nombre soit ncessaie o e e rement irrductible. Il faut simplement faire attention aux divisions qui peue vent ncessiter une discussion. Malheureusement, Maple est souvent rticent e e a ` ce genre de calcul et renvoie des messages derreur inopportuns : evala(subs(alpha=RootOf(x^2-4),1/alpha)); Error, (in evala) reducible RootOf detected. Substitutions are, {RootOf(_Z^2-4) = 2, RootOf(_Z^2-4) = -2} au lieu de /4 qui est le rsultat correct. e Il est galement important de se ramener ` des nombres algbriques pour e a e prouver des ingalits par le biais de suites de Sturm. En eet, le calcul e e numrique est e toujours entach derreurs darrondi. Si lon souhaite proue ver que = ( 5 + 1)/2 < 75025/46368, on ne peut pas se contenter dune valuation ` 10 dcimales : e a e (sqrt(5.)+1)/2-75025/46368; 0 On peut bien sr augmenter la prcision, mais il est impossible de savoir a u e priori quelle est la prcision ncessaire. On proc`dera donc plutt ainsi : e e e o sturm(sturmseq(x^2-x-1,x),x,0,75025/46368);

150

VI. POLYNOMES ET FRACTIONS RATIONNELLES

1 Cette rponse prouve que le polynme x2 x 1 a une racine dans lintervalle e o ]0, 75025/46368]. Comme dautre part le produit des racines vaut -1, est bien la seule racine positive et on vient donc de prouver quil est infrieur e a ` 75025/46368. On sait par ailleurs quil ny a pas galit, car evala aurait e e alors renvoy des formes normales rationnelles dans lexemple 16. e 1.3.9. Fonctions symtriques des racines e La fonction sum permet de calculer directement certaines fonctions symtrie ques des racines. Exemple 17. Si x1 , x2 , x3 , x4 sont les racines de x4 + px + q, la somme des x10 est obtenue par i sum(x^10,x=RootOf(x^4+p*x+q,x)); 10qp2 Ce procd sapplique ` toutes les expressions e e a fraction rationnelle en x.
i

F (xi ) o` F (x) est une u

1.4. Exercices. 1. Lorsque le degr dun polynme est une variable, les fonctions prsentes e o e e dans ce chapitre ne fonctionnent plus. Il faut alors assister les syst`mes de e ` calcul formel. A titre dexemple, calculer le reste de la division euclidienne n 2 de x par x 2 cos()x + 1 (n N). 2. Calculer la dcomposition en lments simples sur R de e ee 7 . 7 (x + 1) x7 1 3. Calculer un polynme dont les racines sont les numrateurs de la dcomo e e position en lments simples sur C de (x9 + 1)/(x10 1), sans calculer ee cette dcomposition. e ` 4. A laide des fonctions evalc, expand, et simplify(.,trig), montrer que lon a la dcomposition en lments simples suivante : e ee 1 1 = x2n 1 2n 1 1 x1 x+1 + 1 n
n1

k=1

cos(k/n)x 1 . x2 2 cos(k/n)x + 1

Indication : les ples sont en rk = exp(ik/n), et le rsidu y vaut o e 1 2n1 2nrk . 2. Polynmes et syst`mes multivaris o e e Ltude des polynmes et de leurs racines est un domaine tr`s riche, qui e o e fait le lien entre la gomtrie et lalg`bre. Les relations gomtriques entre e e e e e des points du plan ou de lespace peuvent souvent se traduire en syst`mes e dquations polynomiales satisfaites par leurs coordonnes, syst`mes dont on e e e

` 2. POLYNOMES ET SYSTEMES MULTIVARIES

151

veut dduire des informations comme la cohrence (existe-t-il une solution e e ?), la dimension de lespace des solutions (les solutions sont-elles en nombre ni ou inni ?), la simplication (une fois toutes les coordonnes contraintes e par le syst`me, combien vaut telle quantit ?), llimination (peut-on trouver e e e une relation entre les coordonnes de tel point qui ne fasse plus appara tel e tre param`tre ?),... e Les bases de Grobner (on dit aussi bases standard ) sont loutil fondamental pour toutes ces questions. Sans entrer dans la thorie, nous allons mone trer comment utiliser cet outil pour rsoudre un certain nombre de probl`mes e e lis aux syst`mes de polynmes et ` leur utilisation gomtrique. Il faut cepene e o a e e dant savoir que les calculs de bases de Grobner sont extrmement coteux, e u de par la nature mme du probl`me. On ne peut donc esprer sattaquer e e e de cette faon ` des syst`mes avec beaucoup de variables ou contenant des c a e quations de degr lev. e ee e Pour prciser le vocabulaire, dans la suite de ce chapitre on dira que lon e peut dduire un polynme dun syst`me de polynmes lorsquil est possible de e o e o lobtenir par combinaison linaire ` coecients polynomiaux des polynmes e a o du syst`me. e 2.1. Bases de Grbner. o 2.1.1. Introduction Nous avons vu dans la section prcdente le rle important que jouait e e o la division euclidienne pour fournir des formes normales : la forme normale dun polynme en un nombre algbrique est donne par le reste de la division o e e euclidienne du polynme par celui qui dnit le nombre. Lintrt des bases o e ee de Grobner est de fournir des formes normales lorsque lon part des solutions dun syst`me de polynmes en plusieurs variables au lieu de partir des e o solutions dun seul polynme en une seule variable. o Partant dun syst`me de polynmes comme e o x2 + 2y 2 yz 1, x + z 3 1, x2 + y 2 + z 2 + 1 , on peut trouver (dduire au sens introduit plus haut) dautres polynmes plus e o simples qui sannulent aux mmes points que ces polynmes. Par exemple, en e o multipliant le 3e polynme par y et en y ajoutant le 1er multipli par z, on o e en fait dcro le degr en z. Cette opration peut se rpter avec dautres e tre e e e e monmes dautres polynmes. On obtient ainsi un syst`me de polynmes o o e o plus simples, qui sannulent aux mmes points que les polynmes de dpart. e o e Chaque tape ressemble ` une tape de la division euclidienne, o` on annule e a e u un par un les monmes de plus haut degr du polynme ` diviser, et ce degr o e o a e dcro ` chaque tape. La dirence avec la division euclidienne rside en un e t a e e e choix ` raliser au dpart : en plusieurs variables, il y a gnralement plusieurs a e e e e monmes de chaque degr, et il faut choisir dans quel ordre on dcide de les o e e annuler. Plusieurs ordres sur les monmes sont utiliss en pratique. Si les o e

152

VI. POLYNOMES ET FRACTIONS RATIONNELLES

monmes ` ordonner sont A = xa1 xa2 xan et B = xb1 xb2 xbn , avec o a n n 1 2 1 2 = a1 + + an et = b1 + + bn , alors les ordres principaux sont : lordre lexicographique, o` A > B si et seulement si la premi`re cou e ordonne non nulle est positive dans le vecteur (a1 b1 , . . . , an bn ) ; e lordre du degr lexicographique, o` A > B si et seulement si > , e u ou = et A > B pour lordre lexicographique ; lordre du degr lexicographique inverse, o` A > B si et seulement e u si > , ou = et dans le vecteur (a1 b1 , . . . , an bn ), la derni`re coordonne non nulle est ngative. e e e Maple conna le premier et le troisi`me, sous les noms plex et tdeg t e respectivement. On spcie lordre sur les variables (laquelle est x1 , x2 ,...) en e donnant une liste en argument. Sans tre plus prcis, disons quune base de Grobner est un syst`me e e e dduit du syst`me de dpart, o` on ne peut plus eectuer aucune rduction e e e u e compte tenu de lordre choisi. Etant donn un syst`me de polynmes et un e e o ordre sur les monmes, il y a unicit de la base. Cependant, la base dpend o e e de lordre choisi. Exemple 18. Avec lexemple prcdent, nous obtenons ainsi trois bases e e : sys:={x^2+y^2+z^2+1,x^2+2*y^2-y*z-1,x+z^3-1}: grobner[gbasis](sys,[x,y,z],plex); [x + z 3 1, 5z 7 + 10z 4 5z 3 10z + 4z 8 8z 5 + 8z 2 z 11 + 4y, 12z 6 16z 3 + 18z 2 + 16 + 5z 8 10z 5 + 5z 4 4z 9 + z 12 ] grobner[gbasis](sys,[x,y,z],tdeg); [x + z 3 1, y 2 z 2 2 yz, x2 + yz + 3 + 2z 2 ]

grobner[gbasis](sys,[y,z,x],tdeg); [x + z 3 1, x2 z 2 + 3z 2 2zx + 2z xy + y, 3zx2 7z + yx2 + 3y + 5x 5, x2 + y 2 + z 2 + 1, x2 + yz + 3 + 2z 2 ] x4 2z 2 + 6x2 + 9 + 5zx 5z + 5xy 5y,

Nous insistons une fois encore sur lnorme cot des calculs de bases de e u Grobner. Ce cot dpend fortement de lordre choisi. Dans certains calculs, u e on a besoin dun ordre particulier pour le rsultat ` trouver, mais lorsque lon e a a le choix, alors il vaut mieux utiliser lordre tdeg qui donne en gnral une e e base plus rapidement. 2.1.2. Rsolution dquations e e Un certain nombre dinformations se lisent directement sur la base de Grobner. La plus simple est la cohrence du syst`me : un syst`me de e e e polynmes na pas de solution (sur C) si et seulement si la base est rduite o e au polynme 1. o

` 2. POLYNOMES ET SYSTEMES MULTIVARIES

153

Exemple 19. On consid`re le syst`me prcdent auquel on rajoute lquae e e e e tion x3 + 2xy = 2. Il ny a alors plus de solution : sys2:=sys union {x^3+2*x*y-2}: grobner[gbasis](sys2,[x,y,z],tdeg); [1] La commande solvable du package grobner permet de rpondre directee ment ` la question de la cohrence. a e Il est galement possible de dterminer si un syst`me a un nombre ni e e e de solutions (toujours sur C). Cela se produit si et seulement si chacune des variables appara seule, ventuellement leve ` une puissance et multiplie t e e e a e par une constante, comme monme de tte (pour lordre choisi) dun des o e lments de la base. Cette proprit est vraie pour tout ordre, et on a ` ee ee a nouveau intrt ` calculer la base pour lordre tdeg. ee a Exemple 20. Dans lexemple 18, le syst`me na quun nombre ni de e solutions : sur la premi`re base donne en exemple, les monmes de tte e e o e sont x, 4y et z 12 , sur la deuxi`me z 3 , y 2 et x2 , et sur la troisi`me z 3 , x2 z 2 , e e yx2 , y 2 , x4 et yz. La commande finite du package grobner permet de rpondre directee ment ` la question du nombre ni de solutions. a Pour la rsolution, on peut utiliser la base calcule par lordre lexicograe e phique, qui donne une forme triangulaire au syst`me : le nombre de variables e intervenant dans les quations va en dcroissant. Cette faon de faire nest e e c pas la plus ecace dans le cas gnral, et on aura intrt ` utiliser directement e e ee a solve, qui eectue un calcul bas sur des bases de Grobner en tenant compte e de factorisations intermdiaires. e Exemple 21. Sur notre exemple prcdent, on obtient les solutions : e e solve(sys,{x,y,z}); z = %1 , y= x = %1 + 1,
11 3

5 3 5 7 %1 5 8 5 2 %1 %1 + 2%1 2%1 + %1 + %1 + 2 4 4 4 8 5 2 4 %1 = RootOf 5 Z 10 Z + 18 Z + 5 Z

5 4 %1 2

+ Z 12 4 Z 9 + 12 Z 6 16 Z 3 + 16 On a donc 12 solutions : une pour chacune des valeurs de z. Parmi celles-ci aucune nest relle, ce que lon peut montrer ` laide des suites de Sturm. e a Comme dans le cas des polynmes ` une variable, la rsolution explicite o a e nest souvent utile quen derni`re phase dun calcul, car beaucoup dinformae tions peuvent sobtenir plus facilement ` partir du syst`me lui-mme qu` a e e a partir de lensemble de solutions.

154

VI. POLYNOMES ET FRACTIONS RATIONNELLES

2.1.3. Forme normale des polynmes o De mme que la division euclidienne fournit une forme normale pour les e polynmes et les fractions rationnelles en des nombres algbriques, on obtient o e grce aux bases de Grobner une forme normale pour les polynmes en des a o racines dun syst`me de polynmes. Cela permet de prouver des thor`mes e o e e de nature gomtrique de la forme on construit un point ayant telle et telle e e proprit, alors il a galement telle autre proprit. ee e ee Deux faons de procder existent en Maple : soit on calcule dabord une c e base et on applique la commande normalf du package grobner, qui rduit le e polynme par rapport ` cette base ; soit on utilise la commande simplify, o a en lui donnant en dernier argument lensemble de polynmes. o Exemple 22. Il nest pas vident a priori que lon puisse dduire le e e polynme o x2 y + 2xy 2 + 2y 3 + xz 2 2y 2 + yz 2z 2 + y z 1 du syst`me {x2 y + 2y 2 + z + 1, xy 2 z 2 }. Voici comment on peut prouver que e cest le cas : p1:=x^2*y+2*y^2+z+1: p2:=x*y^2-z^2: q:=-x^2*y+2*x*y^2+2*y^3+x*z^2-2*y^2+y*z-2*z^2+y-z-1: g:=grobner[gbasis]({p1,p2},[x,y,z],tdeg): grobner[normalf](q,g,[x,y,z],tdeg); 0 On obtient le mme rsultat plus simplement par e e simplify(q,{p1,p2}); qui appelle dailleurs grobner[gbasis] et grobner[normalf] (avec lordre lexicographique). On peut en plus se demander quelle est la combinaison de p1 et p2 qui donne q. Nous reviendrons sur cette question en 2.2.1. Exemple 23. Voici un exemple de nature gomtrique reprsent en ge e e e ure 2. On consid`re un cercle de rayon R centr ` lorigine, et deux points A e ea et B sur laxe des x, symtriques par rapport ` lorigine. Etant donn un e a e point P du cercle, les droites P A et P B coupent le cercle respectivement aux points C et D. La droite CD coupe laxe des abscisses en un point E. Soit Q le symtrique de P par rapport ` lorigine, il sagit de montrer que la tangente e a en Q au cercle passe par E. Pour rsoudre ce probl`me, on se contente de le mettre en quations, apr`s e e e e avoir pris R = 1, ce qui ne restreint pas la gnralit mais permet de rduire e e e e le nombre de variables. Les symtries et la position des points sur laxe des x donnent e xB = xA , xQ = xP , yQ = yP , yA = yB = yE = 0 ;

` 2. POLYNOMES ET SYSTEMES MULTIVARIES

155

E C

Figure 2 les alignements de points nous donnent (xC xP )(yA yP ) = (xA xP )(yC yP ), (xD xP )(yB yP ) = (xB xP )(yD yP ), (xE xC )(yC yD ) = (xC xD )(yE yC ) ; et les trois points sur le cercle nous donnent les quations : e
2 x2 + yP = 1, P 2 x2 + yC = 1, C 2 x2 + yD = 1. D

Il faut encore exprimer que C = P et D = P , et que les points C et D ne doivent pas avoir la mme ordonne, puisqualors la droite CD naurait pas e e dintersection avec laxe des abscisses. Pour cela on rajoute un param`tre t e et on prend lquation e (1) 1 t(xP xC )(xP xD )(yC yD ) = 0 qui ne peut avoir de solution que lorsque les inquations sont vries. On e e e veut prouver que la droite QE est perpendiculaire au rayon OQ, cest-`-dire a (2) xQ (xQ xE ) + yQ (yQ yE ) = 0. Il sut de poser la question : sys:={xb+xa,xq+xp,yp+yq,ya,yb,ye,xp^2+yp^2-1, xc^2+yc^2-1,(xc-xp)*(ya-yp)-(xa-xp)*(yc-yp), xd^2+yd^2-1,(xd-xp)*(yb-yp)-(xb-xp)*(yd-yp), (xe-xc)*(yc-yd)-(xc-xd)*(ye-yc),1-t*(xp-xc)*(xp-xd)*(yc-yd)}: vars:=[ya,yb,ye,xa,xb,xp,yp,xq,yq,xc,yc,xd,yd,xe,t]: g:=grobner[gbasis](sys,vars,tdeg): grobner[normalf](xq*(xq-xe)+yq*(yq-ye),g,vars,tdeg);

156

VI. POLYNOMES ET FRACTIONS RATIONNELLES

100 100 50 50 0 00 10 20 -50 -50 -100 -100 -10 -20

Figure 3 0 Ce qui prouve que lquation (2) dcoule des hypoth`ses et donc la proprit e e e ee est dmontre. e e 2.2. Applications. 2.2.1. Elimination Comme nous lavons dj` remarqu plus haut, les bases de Grobner ea e pour lordre lexicographique fournissent une forme triangulaire du syst`me. e ` la mani`re des rsultants dans le cas o` lon avait deux polynmes, ces bases A e e u o fournissent donc des polynmes o` lon a limin certaines des variables. o u e e Exemple 24. La surface reprsente en gure 3 a t trace grce ` la e e ee e a a reprsentation paramtrique e e x = uv, y = u + v, z = u2 v 2

par la commande plot3d([u*v,u+v,u^2-v^2],u=-10..10,v=-10..10); On peut obtenir une relation entre x, y et z ainsi : sys:={x-u*v,y-(u+v),z-(u^2-v^2)}: grobner[gbasis](sys,[u,v,x,y,z],plex); [y + u + v, 2v 2 + 2x + z y 2 , z y 2 + 2vy, z 2 y 4 + 4y 2 x] yz + y 3 4yx + 2vz,

Le dernier polynme de cette base (et lui seul) ne fait appara ni u, ni v, o tre et donne donc lquation cherche. e e Plus gnralement, tous les polynmes que lon peut dduire dun syst`me e e o e e et dans lesquels certaines des variables ont t limines peuvent galement eee e e tre dduits de la base calcule pour lordre lexicographique. Pour cela il e e e sut de mettre les variables ` liminer en premier. Quand, comme dans notre ae exemple, il ny a quun polynme dans la base pour lequel les variables ont o t limines, cela signie que seuls les multiples de ce polynme rpondent ` eee e o e a la question.

` 2. POLYNOMES ET SYSTEMES MULTIVARIES

157

Une autre utilisation de llimination est la recherche dune relation de e liaison entre des polynmes. o Exemple 25. Les polynmes p1 , p2 et q introduits dans lexemple 22 o sont lis. Pour trouver une relation entre eux, on ajoute une variable que lon e limine aussitt : e o grobner[gbasis]({u-t*p1,v-t*p2,w-t*q},[t,w,u,v,x,y,z],plex); [u + tx2 y + 2ty 2 + tz + t, v + txy 2 tz 2 , tz 2 x + 2ty 3 + tzy + ty yu + xv, 2y 5 t + y 3 tz + ty 3 + z 4 t uy 3 + z 2 v + xy 2 v, 2v + u + w yu + xv, v zv 2y 2 v z 2 u + xy 2 u x2 yv] Le premier des polynmes o` nappara pas t donne la relation de liaison o u t cherche : e q = (y 1)p1 + (2 x)p2 . Lordre que nous avons choisi sur les variables permet davoir une base assez petite, mais tout autre ordre convient, ` condition que t apparaisse en premier. a Remarque : lorsquon cherche une relation de la forme q = ap1 + bp2 entre trois polynmes q, p1 , p2 , une autre mthode consiste ` employer une o e a forme spciale de gcdex : e gcdex(p1,p2,q,x,a,b): a,b; y 1, 2 x Mais contrairement ` lapproche utilisant les bases de Grobner, cette mthoa e de ne fonctionne plus lorsquon ajoute dautres polynmes pi . o Il est un peu dommage de calculer toute la base de Grobner pour lordre lexicographique lorsque lon ne veut, comme dans lexemple ci-dessus, liminer e quune variable. Cest dautant plus gnant que les calculs de base pour e lordre lexicographique sont tr`s coteux, et on court le risque de ne pas e u parvenir au rsultat en un temps ou un espace mmoire raisonnable parce que e e lon calcule beaucoup plus que ncessaire. Il est possible de faire moins de e travail en utilisant des ordres sur les monmes spcialiss pour llimination. o e e e Malheureusement, ces ordres ne sont pas disponibles en Maple, et lutilisateur devra alors se tourner vers un syst`me spcialis sur les calculs de bases de e e e Grobner, comme les logiciels Macaulay ou Gb (voir Ann. C). Nous ninsistons pas ici sur les prcautions ` prendre lorsque lon utilise e a les syst`mes triangulaires obtenus pour lordre lexicographique pour remone ter de la derni`re quation ` la premi`re. Il faut en eet garder ` lesprit que e e a e a toutes les solutions de la derni`re quation ne correspondent pas ncessairement e e e a ` des solutions du syst`me au complet. Cependant le fait que les monmes e o de tte des quations ne sannulent pas en la solution garantit cette corree e spondance et cette condition susante est dapplication frquente. Cest en e particulier toujours le cas si les monmes de tte de la base sont le produit o e dune constante par une puissance dune variable.

158

VI. POLYNOMES ET FRACTIONS RATIONNELLES

10

00

10

-5

-10

Figure 4 Exemple 26. On cherche une droite qui soit ` la fois tangente et normale a a ` la courbe suivante, reprsente en g. 4 : e e x = 3t2 , y = 2t3 .

En un point de param`tre t0 , la pente de la tangente est (dy/dt)/(dx/dt) = e t0 . La tangente a donc pour quation paramtrique e e x = x0 + u, y = y0 + t0 u. Pour quelle soit normale ` la courbe, il faut quelle atteigne la courbe en un a point de param`tre t1 o` le vecteur tangent est orthogonal ` (1, t0 ). Autrement e u a dit 1 + t0 t1 = 0. On calcule donc sys:={x0-3*t0^2,y0-2*t0^3,x1-(x0+u),y1-(y0+t0*u),x1-3*t1^2, y1-2*t1^3,1+t0*t1}: grobner[gbasis](sys,[x0,y0,x1,y1,u,t1,t0],plex); [x0 3t0 2 , y0 2t0 3 , 2x1 3t0 4 + 9, 2y1 3t0 5 + 2t0 3 + 9t0 , 2 + t0 6 3t0 2 ] 2u 3t0 4 + 6t0 2 + 9, 2t1 + t0 5 3t0 ,

La derni`re quation donne les valeurs du param`tre t0 . La condition sue e e isante ci-dessus sapplique : comme tous les polynmes ont pour monme o o dominant une puissance dune variable multiplie par une constante, chaque e solution de la derni`re quation correspond ` une solution du syst`me. Pour e e a e y voir plus clair on factorise le dernier polynme : o factor("[nops(")]); (t2 2)(t2 + 1)2 0 0 Il ny a donc que deux racines relles : 2, et on en dduit les quations e e e des deux droites symtriques solutions du probl`me : e e x = 6 + u, y = 2(4 + u). La gure 4 a t obtenue par la commande ee plot({[3*t^2,2*t^3,t=-2..2],[6+u,sqrt(2)*(4+u),u=-6..4]},0..10, scaling=CONSTRAINED);

` 2. POLYNOMES ET SYSTEMES MULTIVARIES

159

Figure 5
1 1

0.5

0.5

00

0.2

0.4

0.6

0.8

-0.4 -0.2

00

0.2

0.4

-0.5

-0.5

-1

-1

Figure 6 Gomtriquement, llimination correspond ` une projection. On peut e e e a donc calculer assez facilement lquation de la projection dune courbe de e lespace sur un plan de coordonne. e Exemple 27. La courbe de Viviani est lintersection (g. 5 p. 159) de la sph`re x2 + y 2 + z 2 = 1 et du cylindre x2 + y 2 x = 0. Voici comment on e calcule les quations de ses projections sur Oxz et sur Oyz : e sys:={x^2+y^2+z^2-1,x^2+y^2-x}: grobner[gbasis](sys,[y,x,z],plex), grobner[gbasis](sys,[x,y,z],plex); [y 2 + z 4 z 2 , z 2 + x 1], [z 2 + x 1, y 2 + z 4 z 2 ] Dans chaque cas, la seconde quation est celle que lon cherchait. Ces courbes e sont traces en gure 6. La premi`re est une portion de parabole, et la seconde e e sappelle la lemniscate de Gerono. 2.2.2. Calcul denveloppes Les enveloppes de familles paramtres de courbes ou de surfaces algbrie e e ques sont elles-mmes algbriques. Pour calculer lenveloppe dune famille de e e courbes dquation f (x, y, ) = 0, on utilise le fait que les coordonnes des e e points de lenveloppe satisfont le syst`me : e f (x, y, ) = 0, f (x, y, ) = 0.

160

VI. POLYNOMES ET FRACTIONS RATIONNELLES

0.5

-1

-0.5

00

0.5

-0.5

-1

Figure 7 Lumi`re dans une tasse ` caf. e a e

Il ne reste plus alors qu` liminer de ces deux quations pour obtenir a e e lquation de lenveloppe. e Exemple 28. Lorsque la lumi`re arrive ` lintrieur dune tasse ` caf e a e a e a ` bord circulaire, elle est rchie par le cercle. Les rayons lumineux sont e e reprsents en gure 7. On voit distinctement leur enveloppe dans la tasse e e relle comme une courbe lumineuse. Cette courbe sappelle une nphro e e de ou une picyclo de Huygens, du nom de son dcouvreur. On se propose e de e de dterminer lquation de cette courbe sachant que les rayons de lumi`re e e e venant du soleil peuvent tre considrs comme parall`les. e ee e On prend le cercle de rayon 1 centr sur lorigine. On consid`re un point e e de coordonnes (x, y) du cercle. Si = arctan(y/x), un rayon horizontal e rchi en (x, y) a un vecteur directeur de coordonnes e e e normal(expand(subs(th=arctan(y/x),[cos(2*th),sin(2*th)]))); x2 y 2 , x2 + y 2 2xy . x2 + y 2

Donc les droites qui nous intressent ont pour quation e e 2xy(X x) (x2 y 2 )(Y y) = 0. Dans notre exemple, on prend = y, et voici lquation de la courbe : e cercle:=x(y)^2+y^2-1: dx:=solve(diff(cercle,y),diff(x(y),y)): eq:=2*x(y)*y*(X-x(y))-(x(y)^2-y^2)*(Y-y): eq2:=numer(subs(diff(x(y),y)=dx,diff(eq,y))): sys:=subs(x(y)=x,{cercle,eq,eq2}): grobner[gbasis](sys,[x,y,X,Y],plex);

` 2. POLYNOMES ET SYSTEMES MULTIVARIES

161

[3x2 + 4X 2 4 + 4Y 2 ,
4 2 2

xy + 2xY 2yX,

9Xx + 16X + 32Y X 14X 2 + 16Y 4 2 14Y 2 , 72xY 2 + 9x 128X 5 256X 3 Y 2 + 112X 3 128Y 4 X 38X + 112Y 2 X, 3y 2 4X 2 + 1 4Y 2 , 36yX 2 9y + 64Y X 4 23Y 32X 2 Y 32Y 3 + 128Y 3 X 2 + 64Y 5 , 9yY 32Y 2 X 2 + 8X 2 16X 4 16Y 4 1 + 8Y 2 , 1 15Y 2 + 12X 2 96Y 2 X 2 48Y 4 48X 4 + 64Y 6 + 192Y 4 X 2 + 192X 4 Y 2 + 64X 6 ] Le dernier polynme, o` ninterviennent que X et Y , donne lquation o u e cherche. On peut alors tracer la courbe par implicitplot du package plots, e mais on a plutt intrt pour obtenir un beau trac ` la paramtrer en prenant o ee ea e son intersection avec les droites Y = tX. 2.2.3. Prcautions gomtriques e e e Les calculs de bases de Grobner ont bien entendu un lien avec la gome e trie. Comme on la vu dans lexemple 23, on dnit des droites, des cercles, e des ellipses ou de nombreuses autres courbes ou surfaces par des quations e polynomiales, et diverses questions relatives ` leurs intersections peuvent tre a e rsolues ` laide de bases de Grobner. e a Il faut nanmoins faire une distinction entre les besoins que lon a lors du e calcul de forme normale de polynmes par exemple, et les besoins que lon o a lors de calculs gomtriques. Nous avons dit que les bases de Grobner e e permettaient de dterminer si un polynme pouvait se dduire dun autre e o e syst`me de polynmes, en dnissant la dduction comme une combinaison e o e e linaire ` coecient polynomiaux. La dduction gomtrique est dune autre e a e e e nature : lobjet dtude nest plus le polynme, mais lensemble de ses zros e o e la varit quil dnit. Les dductions que lon cherche ` faire sont du type ee e e a : est-ce que tel polynme est nul en lensemble des zros du syst`me ?. Or o e e un polynme peut tre nul en lensemble des zros dun syst`me sans que lon o e e e puisse pour autant le dduire au sens prcdent du syst`me. Par exemple, si e e e e lon part du syst`me rduit ` un polynme {x2 }, on ne peut pas dduire au e e a o e sens prcdent que x = 0. e e Pour les dductions gomtriques, il ne sut donc pas de tester si le e e e polynme se rduit ` 0 par une base de Grobner, il faut en ralit tester o e a e e si une puissance du polynme se rduit ` 0. Malheureusement, on na pas o e a connaissance a priori de la puissance ncessaire. e On peut quand mme faire le calcul ` laide de bases de Grobner, au prix e a de lajout dune variable. Si S = {f1 , . . . , fk } est le syst`me, et g le polynme e o dont on cherche ` prouver quil sannule sur la varit dnie par S, on calcule a ee e la base de Grobner du syst`me S {1 tg}, o` t est une variable annexe. e u Si g sannule en toutes les racines de S, alors le syst`me na pas de solution e et la base doit tre rduite ` {1}. e e a

162
D

VI. POLYNOMES ET FRACTIONS RATIONNELLES

Figure 8

Figure 9

Cependant les calculs deviennent bien plus coteux, et en gnral pour les u e e probl`mes bien poss on na pas ` faire intervenir cette variable supplmene e a e taire. La dicult en pratique vient plutt de ce quil faut penser ` rajouter e o a un certain nombre de conditions pour viter les cas de dgnrescence, comme e e e e lquation (1) de lexemple 23. e 2.3. Exercices. 1. Dterminer pour que les deux droites e x1= y2 =z+ 2 et 2x + y + 2z = 1 x+y+z = 3

se rencontrent. 2. Sur la gure 8, on conna les longueurs suivantes : t AB = 2, DC = 3, EH = 1.

Que vaut AC ? [Indication : il faut rajouter une condition qui est implicite sur le dessin pour quil ny ait que deux solutions relles. On e pourra utiliser la fonction solve pour voir si lon a bien spci le syst`me. e e e Numriquement on doit trouver deux valeurs proches de 1,23 et 1,87.] e 3. Dterminer les quations des projections sur les plans de coordonnes de e e e lintersection du cne x2 + y 2 = z/2 et du cylindre (y 1)2 + (z + 4)2 = 1 o reprsents en gure 9. e e 4. Dterminer les quations des projections sur les plans de coordonnes des e e e deux surfaces x2 + y 2 + z 2 = 1 et x2 y 2 + y 2 z 2 + z 2 x2 = 2xyz.

Factoriser les quations obtenues, en dduire lintersection. e e 5. Dun point P on m`ne les tangentes P A, P B ` un cercle de rayon R. e a Trouver la courbe parcourue par le centre de gravit du triangle P AB e lorsque le point P dcrit une droite situe ` distance d du centre du cercle. e e a

` 2. POLYNOMES ET SYSTEMES MULTIVARIES

163

C M B

Figure 10 Le mcanisme de Watt. e 6. On donne la cubique t3 t2 , y= . 2 1+t 1 + t2 Une droite quelconque D la rencontre en trois points A, B, et C. Les tangentes ` la courbe en ces points rencontrent ` nouveau la courbe en a a trois autres points , , . Dmontrer que les points , , sont aligns. e e [Cet exercice ne ncessite pas beaucoup de variables, mais le temps de e calcul est tr`s lev.] e e e 7. On consid`re la courbe de lespace dnie par les quations paramtriques e e e e x= x = t4 , y = t3 , z = t.

Dterminer une condition sur les param`tres pour que quatre points de la e e courbe soient coplanaires. Dterminer une condition pour que trois points e de la courbe soient aligns. e ` 8. La courbe de Watt. A la n du xviiie si`cle, on recherchait des moyens e de transformer un mouvement circulaire (produit par un moteur ` vapeur) a en un mouvement longitudinal. Le mcanisme reprsent en gure 10 fut e e e considr par J. Watt. Il sagit dun quadrilat`re articul ABCD. Le ct ee e e oe AD est xe et on cherche dans ces conditions la courbe parcourue par le point M milieu de BC. Pour simplier on suppose ici AB = CD = l, on prend lorigine au milieu de AD sur lequel on prend laxe des x et on pose BM = r. Une fois lquation de la courbe trouve, la tracer e e pour l = 1, AD = 4, et r = 3/2. 9. On consid`re la courbe dquation e e (x2 + y 2 )(ax + by) + xy = 0. (1) Trouver une paramtrisation ; e (2) trouver une relation entre les param`tres de trois points aligns ; e e (3) dterminer les points dinexion. e 10. La normale en M ` une parabole y 2 2px = 0 rencontre laxe de la a parabole en N et la tangente au sommet de la parabole en P . Dterminer e la courbe parcourue par le milieu de P N . [Indication : le vecteur directeur de la normale en (x, y) ` une courbe f (x, y) = 0 est (fx , fy ).] a 11. Dterminer les droites situes sur la surface e e 1 1 z = u2 + v 2 . x = u + v, y= + , u v

164

VI. POLYNOMES ET FRACTIONS RATIONNELLES

1 2

0.8 1

0.6

-3

-2

-1

00

0.4

-1 0.2

-2 00 0.2 0.4 0.6 0.8 1

Figure 11

Figure 12

12. Calculer lenveloppe de la famille de cercles dont le centre est situ sur la e parabole y 2 = 2px et qui sont tangents ` laxe de la parabole. [On peut a simplier le probl`me en commenant par paramtrer la parabole.] e c e 13. On consid`re les plans variables Q dquation 32 x + 3y + z + 3 = 0 e e et P celui de ces plans qui correspond ` = a. Dterminer lenveloppe de a e la droite dintersection de P et de Q . 14. On consid`re la glissade dune chelle contre un mur perpendiculaire au sol e e (g. 11). Dterminer lquation de lenveloppe des positions de lchelle. e e e Cette courbe sappelle une astro de. 15. Dterminer lenveloppe des droites perpendiculaires aux diam`tres dune e e ellipse aux extrmits de ceux-ci (g. 12). Par diam`tre on entend toute e e e corde qui passe par le centre.

CHAPTER VII

Suites relles e
es lesquelles le calcul a le plus ` orir sont les a Lensuites pourleune redes coecientsformelNous considerecurrence peutsuites qui satisfont currence linaire. e rons dabord cellesci, dtaillant e cas constants o` la u tre e rsolue, bien que ce soit rarement la chose ` faire. Nous poursuivons par les e a rcurrences dordre un, en montrant sur quelques exemples dtaills comment e e e une approche purement empirique permet dans certains cas dobtenir toute linformation dsirable sur une suite. Un cas particulier important de solutions e de rcurrences dordre un est fourni par les sommes et les produits que nous e abordons ensuite, et nous concluons le chapitre par des indications sur la faon de mener le calcul de valeurs dune suite, ou dvaluer numriquement c e e la limite dune suite, car lapproche numrique est bien souvent la seule dont e on dispose. 1. Rcurrences linaires e e Les rcurrences linaires se prtent ` des calculs qui sont impossibles sur e e e a des rcurrences plus gnrales. Nous dtaillons une partie de ces oprations e e e e e dans cette section, lorsque les coecients sont constants ou polynomiaux . 1.1. Coecients constants. Les rcurrences linaires avec des coecients e e qui ne dpendent pas de lindice ont le double avantage dtre faciles ` rsoudre e e a e et ` manipuler et dtre tr`s frquentes en pratique. a e e e 1.1.1. Rsolution e Il est possible de rsoudre ces rcurrences en utilisant le polynme care e o actristique. La commande rsolve eectue cette rsolution ; en voici la syne e taxe : rsolve(u(n+2)-3*u(n+1)+u(n)=0,u(n)); n 5 2 (3u1 + 7u0 5u1 + 3 5u0 ) 5(3 + 5) 3+ 5 n 5 2 (3u1 7u0 5u1 + 3 5u0 ) 5(3 + 5) 3 + 5
Pour se faire une ide dautres oprations sur ces rcurrences et comprendre pourquoi e e e elles sont si importantes pour le calcul formel, le lecteur peut jouer avec le package gfun.

165

166

VII. SUITES REELLES

Lorsque les valeurs initiales ne sont pas prcises, le syst`me les exprime de e e e faon symbolique (ici u0 , u1 ). c D`s que lordre de la rcurrence est suprieur ou gal ` 5, le polynme e e e e a o caractristique peut ne pas tre rsoluble par radicaux. Lexpression de la e e e suite fait alors intervenir des nombres algbriques non explicites. Cest ce qui e se produit par exemple avec la rcurrence suivante. e (1) un+5 = 3un+2 + un , u0 = u1 = u2 = u3 = u4 = 1,

pour laquelle Maple renvoie un rsultat peu utilisable, qui pourrait dailleurs e tre amlior en remplaant la limite de (z R)/(1 + 3z 3 + z 5 ) par 1/(9R2 + e e e c 5R4 ). rec:=u(n+5)=3*u(n+2)+u(n): ini:={u(0)=1,u(1)=1,u(2)=1,u(3)=1,u(4)=1}: rsolve({rec} union ini,u(n)); 3 2 4 1 limz R (z R)(2z 1zz +2z ) 1+3z 3 +z 5 R R
R=%1

%1 := RootOf(1 + 3 Z 3 + Z 5 )

1.1.2. Calcul rapide La rsolution explicite de la rcurrence ne donne pas un acc`s facile aux e e e valeurs de la suite. Par exemple, la suite dnie par la rcurrence (1) ne e e prend que des valeurs enti`res, mais il est dicile dobtenir u100 ` partir de e a la solution ci-dessus. En ralit, pour calculer des valeurs de la suite, il vaut mieux ne pas e e essayer de rsoudre la rcurrence. Des mthodes rapides seront dcrites en 4. e e e e Dans le cas des rcurrences linaires ` coecients constants, il est en outre e e a possible de calculer tr`s rapidement des valeurs de la suite pour des indices tr`s e e levs. En eet, le calcul de un ncessite moins de n oprations arithmtiques e e e e e pour n susamment grand ! Pour raliser ce calcul, la rcurrence est dabord e e rcrite sous forme matricielle. Dans lexemple de la rcurrence (1), la forme e e matricielle quivalente est e un+5 0 0 3 0 1 un+4 un+4 1 0 0 0 0 un+3 un+3 = 0 1 0 0 0 un+2 , un+2 0 0 1 0 0 un+1 un+1 0 0 0 1 0 un quation que lon peut encore noter Un+1 = A Un . En considrant ainsi e e des vecteurs, la rcurrence est devenue une rcurrence linaire dordre un et e e e sa solution est donc Un = An U0 . Or le calcul de An ncessite moins de n e multiplications de matrices, comme on la vu au chapitre IV. Cest ainsi par

1. RECURRENCES LINEAIRES

167

exemple que fonctionne la procdure fibonacci de Maple (voir chap. II pour e la faon dacher le code dune procdure Maple). c e Pour une rcurrence donne, on pourra sinspirer de la procdure suivante e e e qui calcule des valeurs de la rcurrence (1): e p:=proc(n:nonnegint) local A,res,i,l; A := array([[0,0,3,0,1],[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0]]); res := array([1,1,1,1,1]); l := convert(n4,base,2); if l[1] = 1 then res := array([4,1,1,1,1]) ; for i in subsop(1 = NULL, l) do A := evalm(A*A); if i = 1 then res := evalm(A&*res) od; res[1] end: Pour n = 100, cette procdure est trois fois plus rapide que lvaluation e e du rsultat donn par rsolve, et cinquante fois pour n = 1000. e e 1.1.3. Fonction gnratrice et comportement asymptotique e e Tout comme le calcul de valeurs de la suite, la dtermination du comportee ment asymptotique ne ncessite pas une rsolution explicite de la rcurrence. e e e Le comportement asymptotique de la suite se lit sur sa fonction gnratrice. e e La srie gnratrice dune suite un est la srie enti`re e e e e e (2) u(z) =
n0

un z n .

Lorsque la srie gnratrice a un rayon de convergence non nul, ce qui est le e e e cas ici, on parle de fonction gnratrice. e e Pour une rcurrence linaire ` coecient constants, cette fonction est e e a toujours une fraction rationnelle. Elle sobtient facilement en multipliant tous les termes de la rcurrence par z n et en sommant par rapport ` n. Lquation e a e obtenue est linaire en la srie gnratrice. La commande ztrans de Maple e e e e calcule u(1/z). Voici par exemple pour les nombres de Fibonacci subs([u(0)=0,u(1)=1],ztrans(u(n+2)=u(n+1)+u(n),n,z)): f:=normal(subs(z=1/z,solve(",ztrans(u(n),n,z)))); z f := 1 + z + z 2 La dcomposition en lments simples dune fraction rationnelle sur C e ee consiste ` crire la fraction rationnelle comme une somme nie de termes de ae la forme a,k . z (1 )k

On peut aussi utiliser le package gfun.

168

VII. SUITES REELLES

Le ne coecient de Taylor de ce terme ` lorigine vaut a a,k n n+k1 . k1

Le ne lment de la suite, qui est aussi le ne coecient de Taylor de u(z) ee dapr`s (2), est donc gal ` la somme des contributions de chacun des tere e a mes de la dcomposition en lments simples. Pour obtenir le comportement e ee asymptotique, il sut donc de se concentrer sur ceux de ces termes pour lesquels est de plus petit module et de ne calculer que les coecients a,k correspondants. Cest en cela que le calcul ncessite moins doprations que e e la rsolution exacte qui a besoin de tous les coecients. Les sont les racines e du dnominateur de la fonction gnratrice (inverses des racines du polynme e e e o caractristique) et les coecients a,k sont obtenus en calculant la valeur du e numrateur de la fraction rationnelle en et la premi`re drive non-nulle du e e e e dnominateur en ce point. e Exemple 1. Pour les nombres de Fibonacci, les racines du dnominae teur sont donnes par e fsolve(denom(f),z); 1.618033989, 0.6180339887 Cest donc la seconde racine qui a le plus petit module. Comme le dnominae teur est de degr 2, chacune de ces racines est un ple simple de la fonction e o gnratrice. Do` le coecient : e e u alpha:="[2]: a:=subs(z=alpha,-numer(f)/alpha/diff(denom(f),z)): Avec ces valeurs, le ne nombre de Fibonacci vaut asymptotiquement a/n (ici est linverse du nombre dor). En outre, ce comportement asymptotique est tr`s rapidement utilisable numriquement, comme on le voit par comparae e ison avec les valeurs exactes de la fonction fibonacci du package combinat : a/alpha^10,combinat[fibonacci](10); 55.00363618, 55 Exemple 2. Pour la rcurrence e un+5 = 3un+2 + un , u0 = u1 = u2 = u3 = u4 = 1, la fonction gnratrice vaut e e rec:=u(n+5)=3*u(n+2)+u(n): ini:={u(0)=1,u(1)=1,u(2)=1,u(3)=1,u(4)=1}: f:=normal(subs(z=1/z,solve(subs(ini,ztrans(rec,n,z)), ztrans(u(n),n,z)))); 1 z z 2 + 2z 3 + 2z 4 f := 1 + 3z 3 + z 5 et les modules des racines sont sol:=fsolve(denom(f),z,complex): map(abs,[sol]);

1. RECURRENCES LINEAIRES

169

0.7065263561, 0.7065263561, 1.738902813, 1.738902813, 0.662510317 L` encore, les ples sont simples et cest le cinqui`me qui a le plus petit a o e module. alpha:=sol[5]: a:=subs(z=alpha,-numer(f)/alpha/diff(denom(f),z)): Le ne lment de la suite vaut donc asymptotiquement a/n , estimation qui ee se vrie numriquement (p est la procdure de la p. 167) : e e e evalf(p(100)),a/alpha^100; 0.2645979826 1018 , 0.2648334906 1018 Lapproximation est moins bonne que pour les nombres de Fibonacci parce que le module suivant des racines du dnominateur nest pas tr`s loin e e : lerreur relative est en (0, 66/0, 70)n , soit deux milli`mes pour n = 100, ce e que conrme la comparaison ci-dessus. 1.2. Coecients polynomiaux. 1.2.1. Rsolution e Contrairement au cas des coecients constants, on ne sait pas rsoudre e toutes les rcurrences linaires ` coecients polynomiaux. Il est nanmoins e e a e facile de dterminer si une quation comme e e (3) nun+2 5un+1 (n + 1)un = 0

a des solutions qui sont des polynmes. La commande rsolve de Maple ne le o fait malheureusement pas. Ce calcul seectue en tudiant les coecients du e membre gauche de lquation lorsque un est un polynme en n de degr . Le e o e degr maximal est + 1. Le coecient de n+1 est 0. Ensuite, le coecient e de n vaut 2 6 et doit tre nul. Le degr vaut donc = 3. Maple peut e e conclure la rsolution par une mthode de coecients indtermins : e e e e rec:=n*u(n+2)-5*u(n+1)-(n+1)*u(n): pol:=n->a3*n^3+a2*n^2+a1*n+a0: collect(eval(subs(u=pol,rec)),n); (3 a3 2 a2 ) n2 + (4 a1 7 a3 6 a2 ) n 6 a0 5 a1 5 a3 5 a2 factor(subs(solve({coeffs(",n)},{a0,a1,a2,a3}),pol(n))); a1 n(2n 1)(n 1) Une fois trouve une solution, une seconde solution indpendante sobtient e e par variation de la constante. Nous verrons comment mener ` bien ce calcul a en exercice 7. On peut galement calculer les solutions rationnelles. Maple na pas e de procdure pour cela, mais nous allons montrer comment procder sur la e e rcurrence suivante : e (4) n(n + 3)(n2 + 3n + 3)un+2 5(n + 2)(n2 + n + 1)un+1 (n + 1)2 (n2 n + 1)un = 0.

170

VII. SUITES REELLES

La premi`re tape consiste ` localiser les ples de la fonction u, ou de mani`re e e a o e quivalente, il sagit de dterminer le dnominateur D de u. Si est une e e e racine de D, alors 1 est un ple de u(n+1) et p est un ple de u(n+p). o o Le terme droit de lquation (4) tant le polynme nul, le terme gauche ne e e o peut avoir de ple. En consquence, sauf si des racines de D di`rent dun o e e entier, le coecient ak (n) de un+k doit tre un multiple de D(n + k). Dans ce e cas, D doit diviser D = pgcd(a0 (n), a1 (n 1), . . . , ap (n p)). Il sut donc de poser un = Nn /D(n) et de rechercher les solutions polynomiales de la nouvelle quation, comme ci-dessus. Reste le cas o` des racines de D di`rent dun e u e entier, mais alors cet entier ne peut pas tre plus grand que la plus grande e dirence enti`re entre les racines de a0 et celles de ap . Lexercice 6 montre e e comment se traite ce cas. Sur notre exemple, la rsolution est tr`s simple : e e rec:=n*(n+3)*(n^2+3*n+3)*u(n+2)-5*(n+2)*(n^2+n+1)*u(n+1) -(n+1)^2*(n^2-n+1)*u(n): d:=gcd(coeff(rec,u(n)),gcd(subs(n=n-1,coeff(rec,u(n+1))), subs(n=n-2,coeff(rec,u(n+2))))); d := n3 + 1 Ce polynme est un multiple du dnominateur. Le changement de variable o e u(n) = a(n)/d(n) donne alors : map(normal,eval(subs(u=(n->(a(n)/(n^3+1))),rec))); na(n + 2) 5a(n + 1) (n + 1)a(n) et lon retrouve lquation (3) dont on conna les solutions polynomiales. Les e t solutions rationnelles de (4) sont donc de la forme C n(2n 1)(n 1) . n3 + 1

Une autre solution indpendante peut se dduire de la seconde solution de (3) e e dtermine ` lexercice 7. e e a 1.2.2. Fonctions gnratrices e e Les rcurrences linaires et les quations direntielles linaires sont lies. e e e e e e Les coecients dune srie enti`re solution dune quation direntielle linaire e e e e e a ` coecients polynomiaux satisfont une rcurrence linaire. Inversement la e e srie gnratrice dune solution dune rcurrence linaire ` coecients polye e e e e a nomiaux satisfait une quation direntielle linaire. Le passage de lune ` e e e a lautre enrichit ltude de chacune delles. e
2 Exemple 3. La suite an est dnie par an+2 = an+1 + n+2 an , a0 , a1 rels. e e La commande rsolve nest pas capable de rsoudre cette rcurrence, mais la e e fonction gnratrice de cette suite est simple. Le calcul de cette fonction e e gnratrice est tr`s facile ` raliser avec le package gfun. Nous montrons cie e e a e dessous comment faire avec la commande ztrans. Au lieu de chercher une

1. RECURRENCES LINEAIRES

171

quation direntielle en la fonction gnratrice e e e e y(z) =


n0

an z n ,

ztrans incite ` en chercher une satisfaite par u(z) = y(1/z) : a rec:=a(n+2)=a(n+1)+2*a(n)/(n+2): subs(ztrans(a(n),n,z)=u(z), ztrans(numer(op(1,rec)-op(2,rec)),n,z)); z 3 u(z) a(1)z zu(z) + z 2 u(z) + a(0)z 2u(z) z z Maple peut alors rsoudre cette quation direntielle : e e e dsolve(",u(z)); z u(z) = 5a(1)z 2 + 5a(0)z 2 + 6a(1)z 6a(0)z 2a(1) 4 +2a(0) 4e2/z z 2 C1 (1 + 3z 3z 2 + z 3 )

y:=map(factor,collect(subs(z=1/z,op(2,")),_C1)); 1 (5 6z + 2z 2 )(a(1) + a(0)) C1e2z + y := (1 + z)3 4 (1 + z)3 Il reste ` utiliser les conditions initiales pour dterminer C1 : a e subs(_C1=solve(coeff(series(y,z),z,0)=a(0),_C1),y); 5 e2z ( 4 a(1) + 9 a(0)) 1 (5 6z + 2z 2 )(a(1) + a(0)) 4 + (1 + z)3 4 (1 + z)3 La solution de la rcurrence se dduit de cette expression : le dvelope e e pement en srie de exp(2z) est connu et le fait de diviser une srie par 1 z e e revient ` en sommer les coecients. En conclusion, a an = a1 a0 9a0 5a1 (n + 2)(n + 5) + 8 8
n

k=0

(2)k (n k + 1)(n k + 2) . k!

En guise de vrication, nous calculons ci-dessous quelques valeurs numriques. e e Il est tr`s peu ecace dutiliser la fonction sum pour calculer la somme, en e particulier parce quon ne sintresse qu` sa valeur numrique. On utilisera e a e donc plutt la fonction seq suivie dun convert. o rec1:=proc(n) option remember; rec1(n-1)+2*rec1(n-2)/n end: rec1(0):=a0: rec1(1):=a1: rec2:=proc(n) local k; (a1-a0)/8*(n+2)*(n+5)+(9*a0-5*a1)/8* convert([seq((-2)^k/k!*(n-k+1)*(n-k+2),k=0..n)],+) end: seq(rec1(i),i=0..5); seq(rec2(i),i=0..5); 13 3 17 19 5 a0 , a1 , a1 + a0 , a1 + a0 , a1 + a0 , a1 + a0 3 6 2 6 10 5 13 3 17 19 a0 , a1 , a1 + a0 , a1 + a0 , a1 + a0 , a1 + a0 3 6 2 6 10

172

VII. SUITES REELLES

Dans le cas des rcurrences linaires ` coecients non polynomiaux, on e e a ne sait pas faire grand chose, si ce nest pour les rcurrences dordre un qui e sont traites ci-apr`s. e e 1.3. Exercices. 1. Rsoudre un+2 = ku3 /un . [Indication : prendre le logarithme]. e n+1 2. On consid`re le syst`me e e un+1 = un + 2vn vn+1 = un + vn avec u0 = v0 = 1. Calculer un t , vn t . n! n! 3. Dterminer le comportement asymptotique de la suite dnie par e e u0 = u1 = u2 = 1 un+3 = 7un+2 + un . 4. Dterminer les deux premiers termes du dveloppement asymptotique de e e la suite dnie par e u0 = u3 = 1 u1 = u2 = 0 un+4 3un+3 + un+2 + 4un = 0. 5. Dterminer le comportement asymptotique de la suite dnie par e e u0 = u1 = u2 = u3 = u4 = 1 un+5 = 3un+2 + un . [Il faut prendre en compte les contributions de deux ples]. o 6. On consid`re la rcurrence e e n5 + 7n4 + 18n3 + 21n2 + 9n un+2 + 6n 3n4 9n3 9n2 un+1 + 1 n5 + n3 n2 un = 0. (1) Vrier que certaines des racines du coecient de tte et certaines e e des racines du coecient de queue di`rent dun entier ; e (2) en dduire un entier p tel que deux racines du dnominateur dune soe e lution rationnelle ne puissent avoir une dirence enti`re plus grande e e que p ; (3) construire une rcurrence satisfaite par vn = upn ; e (4) vrier que les racines du dnominateur dune solution rationnelle de e e cette nouvelle rcurrence ne peuvent direr dun entier ; e e (5) rsoudre cette rcurrence ; e e (6) en dduire les solutions rationnelles de lquation de dpart. e e e 7. Le but de cet exercice est de dterminer une seconde solution indpendante e e de la rcurrence (3) : e nun+2 5un+1 (n + 1)un = 0
n n

2. RECURRENCES DORDRE UN

173

10

140 120

100 80

-10

-5

00

5 x

10 60 40 20

-5

-10 00 10 20 30 40 50

Figure 1 Les points xes de la tangente.

Figure 2 Les premi`res valeurs de la suite. e

connaissant la solution pn = n(2n 1)(n 1). La variation de la constante consiste ` chercher une solution de la forme a
n1

pn
k=0

tk .

Pour cela (1) Dterminer la rcurrence linaire dordre 1 satisfaite par la suite tn ; e e e (2) chercher les solutions rationnelles de cette rcurrence. e La somme demeure symbolique. 2. Rcurrences dordre un e Plus les rcurrences sont gnrales, moins les outils permettant de les e e e tudier sont puissants. Les thor`mes les plus gnraux sur les suites monoe e e e e tones bornes ou sur les suites de Cauchy peuvent parfois sappliquer et la e vrication des hypoth`ses ncessaires ` lapplication de ces thor`mes peut e e e a e e parfois tre facilite par le calcul formel. e e 2.1. Rcurrences du type un+1 = f (un ). Les probl`mes lis ` ces suites e e e a sont dune grande richesse et sont loin dtre tous rsolus. En pratique, et pour e e des suites relles, il faut tudier le comportement de la fonction f au voisinage e e de ses points xes, solutions de lquation x = f (x). Si elle y est contractante, e ce qui se traduit par une drive de valeur absolue strictement infrieure ` 1, e e e a alors toute suite passant dans un certain domaine autour du point xe va converger ; le point xe est dit attractif. Si au contraire la drive a une e e valeur absolue strictement suprieure ` 1, le point xe est rpulsif : seules les e a e suites passant exactement par le point xe y convergent. Il existe aussi des points xes indirents, o` la drive a une valeur absolue exactement 1 et e u e e o` une tude plus prcise de la suite est ncessaire avant de pouvoir conclure. u e e e Exemple 4. Voici un exemple o` tous les points xes sont rpulsifs : la u e suite dnie par un+1 = tan(un ). Cette suite a pour points xes les solutions e

174

VII. SUITES REELLES

de x = tan(x), abscisses des points dintersection sur la gure 1. Cette gure sobtient par : plot({tan(x),x},x=-4*Pi..4*Pi,-12..12,discont=true); Si u0 est lun de ces points, la suite est constante et donc converge. En revanche, le comportement des autres suites est gouvern par la stabilit de e e ces points xes, donc par la drive de la fonction tangente en leur voisinage. e e Comme tan = 1 + tan2 , la drive en u0 est strictement suprieure ` 1 e e e a lorsque u0 = k. Le seul cas ` considrer est u0 = k et l`, nullit de la a e a e drive seconde et signe de la drive troisi`me permettent de conclure. Par e e e e e consquent la suite ne converge jamais en dehors des points xes dont les e premi`res valeurs sont : e seq(fsolve(tan(x)=x,x,(2*k+1)*Pi/2..(2*k+3)*Pi/2),k=-1..9); 0, 4.493409458, 7.725251837, 10.90412166, 14.06619391, 17.22075527, 20.37130296, 23.5194525, 26.66605426, 29.81159879, 32.95638904 Pour les autres valeurs de u0 , le comportement de la suite ne prsente aucune e rgularit. Les premi`res valeurs lorsque u0 = 1 sont reprsentes en gure 2 e e e e e : u[0]:=1.:for i to 50 do u[i]:=tan(u[i-1]) od: plot([seq([i,u[i]],i=0..50)]); Exemple 5. On veut rsoudre : e x+2 x+2 + 2 3x = x.

De mani`re quivalente, il sagit de dterminer pour quelles valeurs initiales e e e u0 = x la suite dnie par un+1 = x + 2un converge vers x. Les points xes e sont donns par e solve(l=sqrt(x+2*l),l); RootOf x 2 Z + Z 2 Et la rponse est parmi e solve(x=",x); 0, 3 Il reste ` vrier que les deux suites ayant ces valeurs initiales convergent bien a e vers la limite souhaite, ce qui est ais puisquelles sav`rent constantes. e e e Exemple 6. La suite un+1 = sin(un ). Les points xes sont maintenant les solutions de x = sin(x). La commande solve de Maple trouve la racine 0 : solve(sin(x)=x,x); 0 Apr`s une itration de la suite, u1 se trouve dans lintervalle [1, 1] o` il est e e u facile de prouver que 0 est le seul point xe. Lintervalle [1, 1] est lui-mme e strictement inclus dans ] /2, /2[ ` lintrieur duquel la drive du sinus a e e e est toujours infrieure ` 1 (sauf en 0). La suite converge donc vers 0 pour e a

2. RECURRENCES DORDRE UN

175

0.014 0.012 0.01 0.008 0.006 0.004 0.002 00 0.1 0.2 0.3 0.4 0.5

Figure 3 plot(essai,0..0.5,0..0.015) toute valeur initiale. Il est galement possible dtudier ` quelle vitesse la e e a suite converge vers 0. Nous le ferons au chapitre VIII. 2.2. Rcurrences du type un+1 = f (n, un ). En dehors des rcurrences e e dordre un appartenant ` des classes plus restreintes et que nous avons dj` a ea vues, on ne peut pas donner de r`gle gnrale applicable face ` une telle e e e a rcurrence. Lexemple que nous traitons en dtail dans cette section illustre e e lapproche empirique que lon doit souvent adopter. Il sagit dtudier la rcurrence e e eun un+1 = n+1 en fonction de u0 (rel positif). e Intuitivement, lorsque un est trop grand, lexponentielle le fait exploser e et la suite un diverge rapidement vers +. Inversement, si eun reste limit alors que n cro un devrait tendre vers 0. Le programme suivant permet t, deectuer quelques exprimentations numriques : e e essai:=proc(u0) local u,n; u:=u0; for n to 100 do u:=evalf(exp(u)/n) od end: Pour u0 plus petit quenviron 0, 3 le programme renvoie toujours une mme valeur, ` savoir approximativement 0, 010 102 579 55. Pour des valeurs e a de u0 suprieures ` 0, 3, le syst`me renvoie un message derreur invoquant un e a e argument trop grand pour le calcul de lexponentielle. Il semble donc exister une valeur seuil de u0 . La gure 3 p. 175 conrme cette impression. Lexistence de cette valeur seuil est facile ` prouver : lexponentielle tant a e (x) (x ) croissante, en notant un et un les suites correspondant ` deux valeurs a (x) (x ) initiales x et x , on a x < x un < un pour tout n. Donc si la suite diverge pour une certaine valeur initiale u0 , elle diverge pour toutes les

176

VII. SUITES REELLES

6 5 4 3 2 1

00

10

15

20

25

30

00

10

20

30

40

Figure 4

Figure 5

valeurs suprieures. Inversement si elle converge pour une valeur initiale u0 , e elle reste borne pour toutes les valeurs infrieures. Pour achever la preuve de e e lexistence de ce seuil, il reste ` exhiber une valeur pour laquelle la suite diverge a et une autre pour laquelle elle converge, ce qui peut se faire en minorant une suite divergente et en majorant une suite convergente, mais cela ne met pas en uvre le calcul formel. En revanche, la valeur de ce seuil peut tre calcule, ainsi que bien dautres e e informations relatives ` cette suite. La gure 4 montre les premiers termes de a la suite pour direntes valeurs initiales. En abscisse sont ports les indices e e et en ordonne les valeurs. Les points dune mme suite sont relis entre eux. e e e Plusieurs questions se posent naturellement au vu de cette gure : (1) Toutes les suites semblent sortir dune mme courbe. Quelle est e cette courbe ? (2) Presque toutes les valeurs initiales utilises pour tracer ce dessin e sont dans un intervalle de largeur 0, 02 autour de la valeur seuil. Comment calculer prcisment cette valeur seuil ? e e (3) Toutes les suites qui ne divergent pas semblent converger. Peut-on le prouver ? (4) Toutes les suites qui ne divergent pas semblent aboutir ` une mme a e courbe. Peut-on prciser ce quest cette courbe (au moins asymptoe tiquement) ? (5) Comment ce dessin a-t-il t obtenu ? ee La cl de la rponse aux questions (1), (2), (3) et (5) est lobservation e e suivante : si un un1 , alors un+1 < un . Autrement dit, soit la suite est croissante, soit elle commence par cro tre, puis ne peut que dcro e tre. Comme par ailleurs elle reste positive, elle est alors convergente. Les courbes de la partie infrieure de la gure sont obtenues en recherchant les paliers, qui sont e solutions de un+1 = un . Pour n < 2, les deux courbes y = exp(x)/(n + 1) et y = x nont pas dintersection, il ne peut donc se produire de palier. Ensuite, les deux courbes ont deux intersections (lune ` gauche et lautre ` a a

2. RECURRENCES DORDRE UN

177

droite de 1), mais il est impossible que un < 1 pour n 2, ce qui dtermine e la solution qui nous intresse. e La fonction W de Maple, dnie par W (x) exp[W (x)] = x, permet de e donner une forme explicite ` lordonne du ne palier : a e solve(exp(z)/(n+1)=z,z); W 1 n+1

Il faut faire attention ` ce que la bonne solution soit choisie. Comme la racine a carre ou le logarithme, la fonction W a plusieurs branches. Une vrication e e numrique convainc que la solution renvoye par solve nest pas la bonne e e pour ce probl`me : e evalf(subs(n=2,")); 0.6190612866 On vriera que la bonne racine est en fait W (1, 1/(n + 1)). La courbe e obtenue en traant cette fonction pour n rel entre 0 et 40 passe par les points c e de dpart des paliers horizontaux de la gure 4. Ensuite, on remonte aux e valeurs antrieures de la suite, ce qui donne le dessin de la gure 5 : e t[0]:=-W(-1,-1/(x+1)): for i to 5 do t[i]:=log((x+1)*subs(x=x+1,t[i-1])) od: plot({seq(t[i],i=0..5)},x=0..40,0..6); Ceci rpond ` la question (1) : la courbe de dpart est celle que lon e a e obtient comme limite des courbes ti et la convergence est tr`s rapide. Le e procd employ permet galement de rpondre ` la question du seuil : il e e e e e a sut de prendre une valeur de un pas trop loin de la courbe et de remonter a ` u0 . La convergence est extrmement rapide : e for x in [2,4,8,16,32] do y:=-W(-1,-1/(x+1)); for j from x by -1 to 1 do y:=log(j*y) od: w[x]:=evalf(y) od: seq(w[x],x=[2,4,8,16,32]); 0.1013550039, 0.3044035424, 0.3132473044, 0.3132776390, 0.3132776397 Les dtails de la rponse ` la derni`re question seront abords dans e e a e e lexercice 2, il reste donc la question (4). La mthode que nous allons eme ployer est en fait tr`s gnrale et sadapte ` de nombreuses situations de calcul e e e a de dveloppements asymptotiques. On cherche un dveloppement asymptoe e tique z(n) dune suite tendant vers 0 telle que exp(z(n 1))/n ait le mme e dveloppement asymptotique. Il sut de raner lestimation z = 0 : e f:=exp(z)/n: 0: to 5 do asympt(eval(subs(z=subs(n=n-1,"),f)),n) od;

178

VII. SUITES REELLES

1 n 1 n 1 n 1 n 1 n

1 n2 1 + 2 n 1 + 2 n 1 + 2 n +

3 2n3 5 + 3 2n 5 + 3 2n 5 + 3 2n +

13 6n4 20 + 4 3n 23 + 4 3n 23 + 4 3n +

73 24n5 437 + 24n5 641 + 24n5 665 + 24n5 +

1 n6 1 +O 6 n 1 +O 6 n 1 +O 6 n +O

Avec k itrations, cette mthode fournit un dveloppement correct jusquau e e e ` terme en 1/nk inclus. A titre de conrmation, voici la valeur numrique de e ce dernier dveloppement en n = 100 : e subs(n=100.,"); 0.01010257944 + O(0.000000000001) ` 1010 pr`s, il sagit de la valeur renvoye par la procdure essai du dbut A e e e e de cette section. 2.3. Exercices. 1. On tudie la suite dnie par u0 > 0, e e un+1 = un log(1 + un ) . u2 n

(1) Vrier que la fonction x (x log(1 + x))/x2 ne poss`de quun e e point xe strictement positif ; (2) calculer une approximation numrique du point xe ; e (3) vrier que le point xe est attractif ; e (4) dterminer le dveloppement asymptotique de un , en reprsentant le e e e point xe symboliquement. 2. Cet exercice dtaille les tapes ncessaires ` lobtention de la gure 4 e e e a p. 176. (1) Ecrire une procdure qui prend en argument une valeur de u0 et e qui renvoie la liste [0, u0 , 1, u1 , . . . , 30, u30 ], sauf si uk > 6 pour un certain k auquel cas elle renvoie [0, u0 , 1, u1 , . . . , k 1, uk1 , k, 6] ; (2) calculer les valeurs des ordonnes des 20 premiers paliers ; e (3) calculer les valeurs de u0 correspondantes ; (4) tracer lensemble des listes produites par la procdure du (1) sur ces e valeurs de u0 : on doit obtenir la partie infrieure de la gure ; e (5) pour obtenir la partie suprieure de la gure, ajouter 2/k ` lordonne e a e obtenue en (2) pour le palier dabscisse k, calculer la valeur de u0 correspondante et la liste de valeurs par la procdure du (1) ; e (6) il ny a plus qu` tracer toutes ces listes ensemble. a 3. On sintresse ` la suite dnie par un = n1/un1 et u0 = 1, dont on veut e a e obtenir le comportement asymptotique.

3. SOMMES ET PRODUITS

179

(1) Calculer les premi`res valeurs ; e (2) faire un dessin des valeurs obtenues ; (3) ce dessin sugg`re dtudier les deux sous-suites vn = u2n et wn = e e u2n+1 . Les dessiner ; (4) crire la rcurrence reliant un ` un2 sous la forme un = f (un2 ) ; e e a (5) remplacer 1/un2 par 0 dans cette expression, puis en calculer le dveloppement asymptotique ; e (6) remplacer un2 dans f par le dveloppement obtenu ` la question e a prcdente, en ayant soin dy remplacer n par n 2 ; e e (7) rpter cette derni`re tape et observer que lexpression converge vers e e e e le dveloppement asymptotique de un . e 3. Sommes et produits Les sommes et les produits sont des cas particuliers de suites dnies par e une rcurrence linaire dordre 1 : si Sn et Pn sont dnis par e e e
n n

Sn =
k=0

uk ,

et

Pn =
k=0

uk ,

alors ils vrient e Sn Sn1 = un et Pn = un Pn1 . Cependant, les particularits des sommes et des produits permettent de les e tudier par des mthodes spciques. e e e Dans cette section, nous dcrivons surtout les calculs de sommes exactes, e cest-`-dire les cas o` il est possible de donner une formule pour Sn o` k a u u nintervient plus. Nous reviendrons sur dautres aspects des sommes dans le chapitre suivant sur les sries. e Quant au produit, on peut le ramener ` une somme en prenant le logaa rithme, tout en faisant attention aux signes. 3.1. Sommes gomtriques. Les sommes gomtriques sont les sommes e e e e b de la forme i=a xi . Maple sait les reconna et les valuer : tre e sum(x^i,i=a..b); xa xb+1 x1 x1 Ces sommes sont tr`s importantes en pratique. En particulier, elles intere viennent naturellement dans les calculs dintrts composs. Nous dtaillons ee e e en exercice quelques questions que lon peut se poser sur le plan pargne e logement. 3.2. Suites hypergomtriques et sommes indnies. Les suites hye e e pergomtriques sont une gnralisation des suites gomtriques : dans une e e e e e e suite gomtrique, le quotient un+1 /un est une constante indpendante de n, e e e alors que dans une suite hypergomtrique, ce quotient est une fraction rae e tionnelle en n. Des exemples de suites hypergomtriques sont la factorielle e e ou les coecients binomiaux.

180

VII. SUITES REELLES

Cette notion est importante pour le calcul de sommes indnies, qui sont e aux sommes ce que les primitives sont aux intgrales. Autrement dit la suite e {Sn } est une somme indnie de la suite {un } lorsque Sn Sn1 = un pour e tout n. Bien sr, la connaissance dune somme indnie permet le calcul de u e sommes dnies (avec des bornes) ; il sut de soustraire les valeurs de la e somme indnie aux deux bornes. e Un algorithme important d ` Gosper dtermine si une suite hypergoua e e mtrique admet une somme qui est elle-mme une suite hypergomtrique. e e e e Cet algorithme forme la base de la fonction sum des syst`mes de calcul formel. e Ainsi, lorsque la fonction sum de Maple ne trouve pas de somme ` une suite a hypergomtrique, cela signie que lon peut prouver quil nexiste pas de e e somme qui soit hypergomtrique. e e Voici un exemple de succ`s de lalgorithme : e v:=(3*n^3-10*n^2-9*n+11)*(n+1)!*2^n/(2*n+3)!/(n-5)/(n-4): Sum(v,n)=sum(v,n); 2n2 n! (3n 1) (3n3 10n2 9n + 11)(n + 1)! 2n = (n 4)(n 5)(2n + 3)! (n 5)(2n + 1)! n Voici un exemple o` lchec de sum prouve quil ny a pas de somme hyu e pergomtrique : e e sum(1/n!,n); 1 n! n 3.3. Autres sommes indnies. Il y a tr`s peu de sommes que lon sait e e exprimer sous forme explicite. En dehors de celles que nous venons de voir, la jungle des sommes est tr`s foisonnante et on ne peut pas donner de r`gle e e gnrale. Nous donnons en exercice deux exemples dans lesquels la chance e e nous sourit. 3.4. Exercices. 1. Le plan dpargne logement. e (1) Pour un taux annuel de 6,32 %, vrier que le taux mensuel corree spondant vaut environ 0,51199983 % ; (2) pour une somme emprunte de 100 000 F sur 8 ans, vrier que les e e versements mensuels sont environ de 1 321,17 F ; (3) calculer les intrts verss pendant les neuf annes civiles durant ee e e lesquelles le prt stend, sachant que le prt dmarre en mars ; e e e e (4) si 20 % de ces intrts sont dductibles des impts dans une limite ee e o de 15 000 F chaque anne pendant les 6 premi`res annes, quel est le e e e taux rel du prt, cest-`-dire le taux du prt correspondant ` largent e e a e a rellement rembours ? e e (5) quelle est le montant du prt qui minimise ce taux ? e Note : dans la ralit, il faut aussi tenir compte des frais de notaire et de e e lassurance du prt... e

4. CALCULS NUMERIQUES

181

2. Soit x R, que vaut la limite de la suite un suivante ? un = (1 + x + x2 + + x9 )(1 + x10 + + x90 ) (1 + x10 + + x910 ). 3. La suite un tant dnie par un+2 = 3un+1 un et u1 = 2, u2 = 5, que e e vaut la somme
N
n n

arccot(un ) ?
n=1

4. Avec x [0, 1], on demande dtudier e up = 1 p


p

cos2k (kx).
k=0

4. Calculs numriques e Dans les cas que nous avons traits jusquici, les rcurrences taient e e e linaires ou dordre un et les valeurs de la suite se calculaient donc sans dife cult. Nous montrons dans cette section comment calculer ces valeurs pour e des rcurrences plus complexes. e 4.1. Premiers termes dune suite rcurrente. Les programmes suivants e calculent les premi`res valeurs de la suite dorigine combinatoire dnie par e e
n

un+1 = un +
i=0

ui un1i ,

u0 = 1.

Les commentaires que nous allons faire sur ces programmes et sur leurs performances doivent permettre de guider lcriture de programmes pour dautres e rcurrences. e 4.1.1. Programme 1 : mthode na e ve u1:=proc(n:nonnegint) local i; if n=0 then 1 else u1(n1)+convert([seq(u1(i)*u1(n1i),i=0..n1)],+) end: Ce programme fonctionne rcursivement en sarrtant lorsque n vaut 0. e e Il a cependant linconvnient de recalculer tr`s souvent les mmes termes : le e e e nombre an dappels ` la procdure u1 pour calculer un vrie a e e
n1

an = 1 + an1 + 2
i=0

ai ,

a0 = 1,

La fonction sum ici serait inapproprie puisque son but premier est de trouver une e somme indnie. La mthode vraiment na consisterait ` utiliser la fonction sum. e e ve a

182

VII. SUITES REELLES

formule ` partir de laquelle on peut montrer que ce nombre cro en (2+ 3)n . a t Le temps de calcul cro donc de mani`re exponentielle par rapport ` n. La t e a premi`re ligne du tableau 1 (p. 184) montre le temps de calcul de un par cette e procdure pour diverses valeurs de n. e 4.1.2. Programme 2 : option remember u2:=proc(n:nonnegint) local i; option remember; u2(n1)+convert([seq(u2(i)*u2(n1i),i=0..n1)],+) end: u2(0):=1: Ce programme est bien plus ecace que le prcdent. Le gain princie e pal vient de lutilisation de loption remember. En eet, chaque un nest maintenant calcul quune fois (voir chap. II). Comme chaque un ncessite n e e multiplications et n additions, le temps de calcul est devenu polynomial par rapport ` n. La contrepartie a ce gain en vitesse est une perte en mmoire : a ` e tous les nombres uk calculs sont gards en mmoire. Cependant dans de e e e nombreuses applications, on a besoin de tous les lments dune suite et dans ee ce cas, cette faon de programmer la rcurrence est recommande. c e e 4.1.3. Programmes 3 et 4: plus spcialis e e ` partir de la fonction gnratrice de la suite, on peut montrer que la A e e suite un satisfait aussi une rcurrence linaire : e e (6n 3)un1 (n 2)un2 , u0 = 1, u1 = 2. n+1 Donc chaque terme peut se calculer ` partir des deux prcdents au lieu de a e e les utiliser tous. Ceci conduit ` un programme simple : a u3:=proc(n:nonnegint) local i,u0,u1,u2; u1 := 1; u2 := 2; for i from 2 to n do u0 := u1; u1 := u2; u2 := (2*u03*u1+(6*u1u0)*i)/(i+1) od; u2 end: u3(0):=1: u3(1):=2: Lintrt principal de ce programme est que chaque un est calcul en ee e faisant un nombre xe doprations ` partir des prcdents. Le temps de calcul e a e e est donc devenu linaire par rapport ` n (tant que les nombres manipuls e a e sont assez petits pour que lon puisse considrer le cot des oprations comme e u e constant). Par ailleurs, si lon veut calculer un seul un et que lon na pas besoin des uk pour 0 k < n, alors ce programme eectue le calcul sans gaspiller de mmoire. Il est toutefois plus frquent que lon veuille calculer e e un =

4. CALCULS NUMERIQUES

183

tous les lments dune suite jusqu` un certain rang et on aura alors recours ee a au programme suivant. u4:=proc(n:nonnegint) option remember; (2*u4(n2)3*u4(n1)+(6*u4(n1)u4(n2))*n)/(n+1) end: u4(0):=1:u4(1):=2: 4.1.4. Programmes 1bis ` 4bis : calculs approchs a e Dans les programmes prcdents, lorsque n est grand une grosse partie e e du temps de calcul provient des oprations sur des grands entiers (u1000 a e 761 chires dcimaux). Si lon accepte de se contenter de valeurs approches, e e les oprations lmentaires vont se faire en temps constant (indpendant des e ee e nombres manipuls) ce qui peut savrer tr`s payant sur des grands nombres. e e e Pour obtenir des valeurs approches des lments de la suite, il sut de e ee modier les lignes dnissant u0 et u1 dans ces programmes par lajout dun e point (.) apr`s le 1 et le 2. Les nombres entiers 1 et 2 deviennent alors les e nombres ottants (nombres dcimaux en virgule ottante) 1.0 et 2.0 et e cette proprit se propage aux sommes et produits auxquels ils participent. ee Pour dautres rcurrences, il vaut mieux mettre explicitement evalf dans le e corps de la procdure, car la propagation des nombres ottants aux fonctions e nest pas totale. 4.1.5. Programme 3ter : ottants machine La commande evalhf permet de tirer parti des nombres ottants du processeur de la machine. Ses performances dpendent fortement de larchitecture e de la machine, mais peuvent tre excellentes. En particulier, Maple utilise e evalhf pour tracer ses dessins. Il est parfois possible dappliquer evalhf sur une procdure. Lorsque cest le cas, tous les calculs intermdiaires sont faits e e rapidement. Le programme 1 ci-dessus ne peut pas tre excut par evalhf : e e e evalhf(u1(10)); Error, unable to evaluate function convert in evalhf Lapplication de evalhf sur les programmes utilisant loption remember est fatale : le syst`me meurt. Il reste donc le programme 3, pour lequel evalhf e fonctionne et donne de bons rsultats (tab. 1). Cependant, les ottants de la e machine sont souvent limits en taille (prcisions dans la documentation de e e evalhf[constants]). Ainsi, dans notre exemple et sur notre machine, nous ne pouvons pas valuer un par evalhf(u3(n)) pour n 405. e 4.1.6. Comparaison Le tableau 1 montre le temps de calcul de un par les dirents programmes e pour les valeurs de n indiques en haut de chaque colonne. Pour rendre ces e rsultats indpendants de la machine sur laquelle les tests ont t eectus, e e ee e

184

VII. SUITES REELLES

Table 1 Les temps de calcul des programmes. n 1 1bis 2 2bis 3 3bis 3ter 4 4bis 2 0,154 0,097 0,013 0,020 0,004 0,013 0,005 0,014 0,011 5 10 20 0,530 0,688 0,088 0,195 0,017 0,196 0,290 50 2,583 3,705 0,200 0,390 0,022 0,448 0,798 100 500 1 000 5 000

7,056 5 411 7,637 5 797 0,057 0,150 0,061 0,165 0,023 0,034 0,037 0,085 0,007 0,011 0,032 0,086 0,044 0,125

11,53 1 572 16,47 484,8 0,493 6,798 0,795 4,239 0,047 0,990 10,00 1,307 7,273

12 882 72 645 2 112 67 861 33,27 450,4 9,078 51,34 40,11 1 367 15,70 107,0

lunit de temps dans ce tableau est le dixi`me du temps ncessaire au calcul e e e de u500 par le programme 4. Les cases manquantes nont pu tre obtenues, e faute de temps ou despace mmoire. Ce tableau permet de tirer plusieurs e enseignements sur la programmation en Maple. La linarit du temps de calcul nest vraiment atteinte que pour les proe e grammes 3bis et 4bis qui op`rent sur des ottants. Elle est galement bien e e approche par les programmes 3 et 4 tant que les entiers manipuls ne sont e e pas trop gros, cest-`-dire de moins de 100 chires. a Les ottants en Maple sont lents par rapport aux entiers tant que ces derniers ne sont pas trop gros : avant la colonne u500 les programmes bis sont plus lents que les programmes exacts. Ceci provient de ce que les ottants sont reprsents de mani`re interne comme des couples dentiers (mantisse, e e e exposant) et les calculs sont en ralit eectus sur des entiers. En revanche, e e e lorsque evalhf peut tre appliqu, il utilise les ottants de la machine et ceci e e m`ne ` de bien meilleures performances (ligne 3ter). e a Mais lenseignement principal de ce tableau, cest quil est bien plus important damliorer lalgorithme de calcul que sa programmation. Ainsi le e programme 3 et le programme 4 ont des performances comparables, alors que les passages du programme 1 au programme 2 puis au programme 3 ont des consquences spectaculaires sur les temps de calcul. Le fait davoir remarqu e e que la suite satisfaisait une rcurrence linaire en a rendu possible le calcul e e pour de tr`s grandes valeurs de lindice. Si la rcurrence linaire avait t ` e e e eea coecients constants, il aurait t possible dtre encore bien plus rapide, en ee e appliquant la mthode du 1.1. e 4.2. Evaluations numriques de limites. Pour estimer numriquement e e la limite dune suite qui converge, il faut bien sr savoir calculer des lments u ee de la suite ; les indications donnes sur lexemple ci-dessus permettent de e traiter la plupart des cas rencontrs dans la pratique. Pour valuer la limite, e e le calcul des valeurs de la suite pour des indices tr`s levs est avantageusee e e ment remplac par une technique simple dacclration de convergence due ` e ee a Romberg. Si un est la suite, et si elle converge vers sa limite en admettant

4. CALCULS NUMERIQUES

185

14 1e+06 12 800000 10 600000 8 6 400000 4 200000 2 00 2 4 6 8 10 00 2 4 6 8 10

Figure 6
plot([seq([i,u4bis(i)],i=0..10)])

Figure 7
plot([seq([i,log(u4bis(i))],i=0..10)])

un dveloppement asymptotique du type e a b (5) un = + + 2 + , n n alors la mthode de Romberg consiste ` calculer des valeurs de un = 2u2n e a un . Sans conna la valeur de a, il est ainsi limin et asymptotiquement tre e e c (1) un = + 2 + n converge plus vite vers que un . Une nouvelle tape de la mme technique e e (2) (1) 4 (1) conduit ` calculer des valeurs de un = 3 u2n 1 un , et ainsi de suite. a 3 La gure 6 p. 185 reprsente les premi`res valeurs de la suite un de e e la section prcdente. Leur croissance rapide conduit ` sintresser ` la e e a e a suite log un qui est reprsente en gure 7 p. 185. Cette derni`re gure e e e sugg`re quasymptotiquement log un cn, o` la pente c est ` dterminer. e u a e Les premi`res valeurs de la suite obtenues par e seq(log(u3bis(2^i))/2^i,i=0..7); forment la premi`re colonne du tableau 2 p. 186 et conrment la convere gence (assez lente) de cette suite. Dans ce tableau, les premi`res valeurs des e direntes suites sont indiques. Ces valeurs ont t obtenues de la mani`re e e ee e (j) suivante, u[j,n] reprsentant u2n : e for i from 0 to 7 do u[0,i]:=ln(u3bis(2^i))/2^i od: for j to 7 do for i from 0 to 7-j do u[j,i]:=(2^j*u[j-1,i+1]-u[j-1,i])/(2^j-1) od od: Comme on le voit sur le tableau 2 (o` les valeurs ont t arrondies ` 4 u ee a dcimales), la convergence ne para pas avoir t beaucoup acclre par le e t ee ee e procd : il faut regarder la diagonale du tableau, cest-`-dire e e a seq(u[j,7-j],j=0..7); 1.704170344, 1.746640265, 1.751918544, 1.753464028, 1.754082842, 1.754362332, 1.754495423, 1.754560397
(1)

186

VII. SUITES REELLES

Table 2 Premier essai dacclration. ee n 1 2 4 8 16 32 64 128 un 0,6931 0,8959 1,1250 1,3294 1,4853 1,5926 1,6617 1,7042 un
(1)

un

(2)

un

(3)

un

(4)

un

(5)

un

(6)

un

(7)

1,0986 1,3540 1,5339 1,6411 1,6999 1,7308 1,7466

1,4392 1,5939 1,6768 1,7195 1,7411 1,7519

1,6160 1,6887 1,7256 1,7442 1,7535

1,6935 1,7281 1,7454 1,7541

1,7292 1,7460 1,7544

1,7462 1,7545

1,7546

Dans ce cas particulier, cette diagonale de valeurs ne montre pas une convergence convaincante. La raison pour laquelle le procd na pas fonctionn de faon spectace e e c ulaire est que la suite log un /n ne converge pas comme dans lquation (5). e La suite un satisfaisant une rcurrence linaire, on peut cependant sattendre e e (voir chap. VIII) ` ce quelle se comporte asymptotiquement comme a a1 a2 (6) un rn n a0 + + 2 + . n n Dans ces conditions, apr`s une tape du procd, le dveloppement obtenu e e e e e est : asympt(expand(log(r^n*n^alpha*(a[0]+a[1]/n+a[2]/n^2)))/n,n,3): asympt(2*subs(n=2*n,")-",n,3): map(expand,"); ln(2) a1 1 ln(r) + +O 3 n 2a0 n2 n Autrement dit, apr`s une tape du procd de Romberg sur la suite e e e e {log un }, la situation est ramene ` celle de lquation (5). Le tableau 3 est e a e alors calcul comme suit : e for i from 0 to 7 do v[0,i]:=ln(u3bis(2^i))/2^i od: for i from 0 to 6 do v[1,i]:=2*v[0,i+1]-v[0,i] od: for j from 2 to 7 do for i from 0 to 7-j do v[j,i]:=(2^(j-1)*v[j-1,i+1]-v[j-1,i])/(2^(j-1)-1) od od: La diagonale montre alors une vraie convergence. On peut par ailleurs montrer que la limite est log(3 + 2 2) 1, 762 747 174. Lerreur de 0, 06 (7) pour u128 est donc transforme en une erreur de pr`s de 4.108 (u1 e e 1, 762 747 134), ` partir des mmes 128 premiers lments de la suite. a e ee 4.3. Exercices. 1. Le programme u3 eectue trois aectations en trop : on peut viter la e derni`re itration de la boucle. Rcrire le programme en supprimant ces e e e trois aectations et comparer alors au temps de calcul du programme u4 pour les petites valeurs de n.

4. CALCULS NUMERIQUES

187

Table 3 Second essai dacclration. ee n 1 2 4 8 16 32 64 128 un 0,6931 0,8959 1,1249 1,3294 1,4853 1,5926 1,6617 1,7042 un
(1)

un

(2)

un

(3)

un

(4)

un

(5)

un

(6)

un

(7)

1,0986 1,3540 1,5339 1,6411 1,6999 1,7308 1,7466

1,6094 1,7138 1,7483 1,7587 1,7617 1,7625

1,7486 1,7597 1,7622 1,7627 1,7627

1,7613 1,7626 1,7627 1,7627

1,7627 1,7627 1,7627

1,7627 1,7627

1,7627

2. Vrier que les coecients ` utiliser pour la k e itration de Romberg e a e sont 1 2k (k1) u2n k u(k1) . u(k) = k n 2 1 2 1 n 3. On consid`re la suite un = n!/((n/e)n n). Il nest pas tr`s dicile de e e voir que la suite converge et la fonction limit de Maple dtermine que sa e e limite est 2 2, 506 628 274. Appliquer les mthodes de cette section pour retrouver cette valeur numrique. e 4. Lexemple de la suite un de cette section peut tre poursuivi : une fois que e lon conna r dans lquation (6), on peut diviser un par rn et chercher ` t e a dterminer numriquement . Sachant que est un rationnel tr`s simple, e e e on peut alors diviser aussi par n , et dterminer numriquement a0 . On e e doit trouver ainsi une approximation numrique de e 4+3 2 a0 = . 2 Cet exemple sera repris p. 216.

CHAPTER VIII

Sries et dveloppements asymptotiques e e


e admettent une solution exacte. Cependant, des dvee Peu de problenmesrie approchedeveloppements asymptotiques fournissent loppements s e ou des souvent des informations es assez prcises qui sont inaccessibles par e ` dautres voies. Nous commenons ce chapitre par des probl`mes pratiques de calcul c e numrique ` partir dune srie, puis nous montrons comment obtenir des e a e dveloppements en srie ou des dveloppements asymptotiques de suites, dine e e tgrales, ou de solutions dquations. Dans ce domaine, il est essentiel de juse e tier les oprations purement formelles que le logiciel eectue. Les syst`mes e e de calcul formel ne mettent en eet aucune entrave ` linterversion dun signe a somme et dun signe intgrale et une utilisation aveugle peut mener ` des e a rsultats faux. Nous insistons dans ce chapitre sur les calculs, et renvoyons le e lecteur aux ouvrages danalyse pour les probl`mes de justication. e 1. Sries numriques e e 1.1. Calcul approch de constantes dnies par des sries. Deux e e e types de probl`mes bien distincts se posent lors du calcul de valeurs numriques e e a ` partir dune srie. Le premier est de dterminer combien de termes de la e e srie doivent tre utiliss et avec quelle prcision ils doivent tre calculs. Le e e e e e e second probl`me est celui de lecacit : les calculs qui ne peuvent tre vits e e e e e doivent tre eectus au moindre cot. e e u Les probl`mes decacit surgissent surtout lors du calcul de plusieurs e e milliers de dcimales, o` des mthodes spcialises sont employes. Ce doe u e e e e maine tr`s intressant sort cependant du cadre de ce livre ; les calculs que e e nous allons faire sont tous limits ` quelques centaines de dcimales. e a e Exemple 1. Le sinus intgral de Fresnel est dni par e e
x

(1)

S(x) =
0

sin

2 t dt. 2

Lintgration terme ` terme du dveloppement du sinus de lintgrande donne e a e e le dveloppement en srie suivant : e e (2) S(x) = (1)n (/2)2n+1 4n+3 x , (2n + 1)! (4n + 3) n=0
189

190

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

16000 14000 12000 10000 8000 6000 4000 2000 00 5 10 15 20

Figure 1
plot([seq([n,(Pi/2)^(2*n+1)/(2*n+1)!/(4*n+3)*3^(4*n+3)],n=0..20)])

formule qui permet le calcul des valeurs de S(x) avec une prcision arbitraire e pour tout rel x. Bien entendu, la commande evalf(FresnelS(x)) calcule e ces valeurs numriques. Cependant nous allons montrer ici comment crire e e une procdure prenant en argument x et renvoyant une estimation de S(x) e en tenant compte de la valeur de Digits (le nombre de dcimales correctes e souhaites), car la mthode a employer est typique de ce que lon doit faire e e ` pour calculer une valeur approche ` partir de telles sries. e a e Le cur de la procdure consiste en une boucle qui calcule les termes de e la srie et les additionne, en essayant de faire le moins doprations possible. e e Dans le cas de S(x), cette boucle scrit ainsi : e t:=evalf(x2*Pi/2); u:=t2; t:=x*t; s:=t/3; olds:=0; for k from 2 by 2 while s<>olds do olds:=s; t:=u*t/(k2+k); s:=s+t/(2*k+3) od; Pour nir lcriture de la procdure, il reste ` rgler le probl`me de la prcision e e a e e e a ` utiliser dans les calculs intermdiaires, si le nombre de chires corrects que e doit avoir le rsultat est Digits. Les valeurs absolues des premiers termes de e la somme pour x = 3 sont tracs en gure 1. Comme souvent pour les sries e e convergentes, les termes commencent par cro en valeur absolue avant de tre dcro e tre pour tendre vers 0. Du point de vue de lvaluation, cela pose un e probl`me : pour obtenir k dcimales du rsultat, il faut calculer les premiers e e e termes avec plus de prcision. Ainsi, dans notre exemple le 4e terme de la e srie vaut environ 13 326 alors que S(3) e 0, 496 313 ; pour obtenir cette valeur avec 10 dcimales, il faut donc calculer les premiers termes de la suite e

1. SERIES NUMERIQUES

191

avec 15 chires signicatifs. La prcision ` utiliser pendant le calcul dpend e a e donc de la taille du terme maximal et de la taille du rsultat, informations e gnralement inaccessibles avant le calcul. e e Dans lexemple qui nous occupe, nous verrons en 2.3 comment montrer que le logarithme du terme maximal est de lordre de x2 /2. Cest un exercice plus dlicat que de montrer que cette estimation est toujours par exc`s. e e Dautre part, ` partir de lintgrale il nest pas dicile de voir que S est a e de lordre de 1/2 lorsque x tend vers linni. Un nombre de dcimales gal e e a Digits + log10 (x2 /2) convient donc. ` Un autre probl`me ` rsoudre est celui des erreurs darrondi. Si chaque e a e terme de la srie est calcul avec une erreur , lerreur accumule au bout e e e de N termes est N dans le cas le pire. Pour obtenir une erreur infrieure ` e a sur le rsultat, il faudrait donc calculer tous les termes de la srie avec une e e erreur infrieure ` /N , mais il faut donc conna la valeur de N avant la e a tre n du calcul. Comme les termes de la somme sont de signe alternant et dcroissent e a ` partir dun certain rang, le reste est major par le premier terme nglig e e e (sil est dans la partie dcroissante). Il sut donc dvaluer un ordre de e e grandeur de la valeur de N pour laquelle le N e terme est de lordre de . 1 Nous verrons en 3.2 comment dterminer que N e 2 log(1/ ) log log(1/ ) convient, et ce indpendamment de x (pour tr`s proche de 0). De ceci e e dcoule quil faut rajouter au nombre de dcimales utilises pendant le calcul e e e environ log10 (Digits) + c, o` c est une constante peu leve (3 convient). u e e Pour conclure, il sut donc de rajouter avant les instructions donnes e plus haut les lignes S:=proc(x) local s,u,t,olds,k,oldDigits; oldDigits:=Digits; Digits:=Digits+ceil(.196+.868*evalhf(ln(x)))+length(Digits)+3; et de terminer la procdure par e evalf(s,oldDigits) end:

1.2. Evaluation exacte de sries. Bien quil soit tr`s rare que la somme e e dune srie sexprime ` laide des fonctions usuelles, une telle somme, lorsquelle e a est calculable, permet daccder ` des proprits globales de la srie diciles e a ee e dacc`s autrement. Outre le cas des sries pour lesquelles on sait trouver e e une somme indnie dont il ny a plus qu` calculer la limite, nous done a nons ici quelques exemples de sries qui se somment. Bien souvent, la srie e e gomtrique est ` la base du calcul, ainsi parfois que quelques autres sries e e a e enti`res lmentaires. e ee Les suites hypergomtriques ont t dnies au chap. VII (p. 179), et les e e ee e sries hypergomtriques sont les sommes de ces suites. Plus prcisment, on e e e e e

192

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

note
p Fq

a1 , . . . , ap b1 , . . . , b q

=
n0

(a1 )n (ap )n z n , (b1 )n (bq )n n!

o` (a)n = a(a+1) (a+n1). Lorsque p q +1, le rayon de convergence de u cette srie est non nul et on parle alors de fonction hypergomtrique pour sa e e e somme. Si ces fonctions sont admises comme fonctions de base, alors toutes les fractions rationnelles se somment ; nous en donnerons quelques exemples. Exemple 2. En regardant sin(nx) comme sin(nx) n (einx ), la somme

n1

appara comme la primitive dune srie gomtrique. Ceci conduit ` une t e e e a forme exacte : evalc(Im(sum(exp(I*x)^n/n,n=1..infinity))); arctan ( sin(x), 1 cos(x)) Il faut ensuite un peu de patience avec les fonctions de simplication de Maple avant darriver ` la forme plus simple a x , 2 valable pour 0 < x < 2. Exemple 3. Voici un exemple qui porte sur une fraction rationnelle. Il montre quil ne faut pas se limiter ` des manipulations purement formelles de a sries innies, mais bien justier chacune des tapes du calcul. La fonction f e e ci-dessous admet une dcomposition en lments simples particuli`rement e ee e lmentaire : ee f:=1/(4*n+1)/(4*n+2)/(4*n+3); f := 1 (4n + 1)(4n + 2)(4n + 3)

convert(f,parfrac,n); 1 1 1 + 2(4n + 1) 2(2n + 1) 2(4n + 3) Il est donc tentant de conclure que dans la somme f (n), les inverses des entiers impairs apparaissent tous multiplis par 0 et donc que cette somme e est nulle. Or cest une somme de termes positifs. Rarranger les termes de e cette faon nest pas valide, car cela fait intervenir simultanment des termes c e dindice n et dindice 2n de la srie. En faisant la somme jusqu` un indice N e a x avant de le faire tendre vers linni, ce qui donne le bon rsultat, on prend e e en compte N termes en moins dans la srie ngative. Le rsultat est alors celui e e e que Maple parvient ` trouver dans cet exemple : a sum(f,n=0..infinity);

1. SERIES NUMERIQUES

193

(1/4) ln(2) (3/4) 8 4 2 8 Dans cette expression dsigne la drive logarithmique de la fonction e e e dEuler et dsigne la constante dEuler. En ralit, cette expression se e e e simplie pour donner nalement 1 1 = ln 2. (4n + 1)(4n + 2)(4n + 3) 4
n0

Ce rsultat sobtient galement ` partir de la dcomposition en lments e e a e ee simples, par une mthode ablienne, qui consiste ` multiplier le sommant e e a par z 4n , pour faire tendre z vers 1 ` la n du calcul. Chacun des termes de la a dcomposition en lments simples se ram`ne une fois encore ` une srie tr`s e ee e a e e proche de celle de log(1 z). Maple trouve ainsi la plus simple : sum(z^(4*n)/(2*n+1),n=0..infinity); 4 1+ ln 1z 4 z 2z 2 et les deux autres en termes de fonctions hypergomtriques : e e sum(z^(4*n)/(4*n+1),n=0..infinity); 1, 1/4 z4 2 F1 5/4 sum(z^(4*n)/(4*n+3),n=0..infinity); 1 1, 3/4 z4 2 F1 7/4 3 Malheureusement, Maple narrive pas ` simplier ces expressions ni ` calculer a a leur limite pour z tendant vers 1. Ces deux sommes sont pourtant faciles ` a calculer : des combinaisons linaires ` partir de la srie de log(1 z) et de e a e arctan(z) fournissent, en jouant sur la parit : e z 4n 1 1+z = ln 4n + 1 4z 1z n=0 z 4n 1 1+z = 3 ln 4n + 3 4z 1z n=0

1 arctan(z), 2z 1 arctan(z). 2z 3

Il ne reste plus qu` sommer les direntes contributions (et ` justier le a e a procd) : e e limit(-ln((1+z^2)/(1-z^2))/4/z^2+ln((1+z)/(1-z))/8/z*(1+1/z^2) +arctan(z)/4/z*(1-1/z^2),z=1,left); 1 ln 2. 4 Exemple 4. Voici un exemple o` la srie du logarithme ne sut plus u e pour trouver une forme simple ` la somme. Il sagit de la somme suivante, a qui rappelle la formule de Stirling : nn+1 ny n e y . n!

n0

194

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

Cette somme sugg`re de regarder la srie enti`re n0 nn+1 xn /n! o` x = e e e u yey . Or, bien que Maple ne reconnaisse pas cette somme, il en conna une t bien proche : xn (1)n nn1 , W (x) = |x| < 1/e. n!
n0

Les bons signes sont donns par W (x). Le numrateur du sommant doit e e tre multipli par n2 , ce qui revient ` driver la srie et ` la multiplier par x, e e a e e a deux fois de suite, do` le rsultat : u e normal(simplify(subs(x=y*exp(-y),x*diff(x*diff(-W(-x),x),x)))); y (1 y)3 Une autre classe tr`s importante de sommes calculables exactement e est la classe des sries hypergomtriques. On retrouve ainsi de nombreuses e e e sommes connues comme limite de la srie en 1 : e sum(1/n!,n=1..infinity),sum(1/n^2,n=1..infinity), sum((-1)^n/(2*n+1),n=0..infinity); 2 e 1, , 6 4 La plupart des sommes dnies que trouvent les syst`mes de calcul formel e e sont des sommes hypergomtriques. e e 1.3. Convergence et divergence des sries. Peu doutils sont disponibles e pour tudier la convergence et la divergence des sries. Les plus utiles sont la e e majoration de la somme des valeurs absolues par une srie convergente et la e dcroissance des valeurs absolues pour une srie alterne. Nous illustrons sur e e e quelques exemples lutilisation du calcul formel dans ces probl`mes. e Exemple 5. On tudie la convergence de la srie e e
1

an o` u

an =
0

1 (1 tn )1/n dt.

Les variations des intgrandes pour les premi`res valeurs de n (g. 2) donnent e e une ide du comportement des an . Il est facile de prouver que les an sont e positifs et que lintgrande est monotone. On souhaite donc majorer la srie an e e par une srie convergente (le calcul numrique de quelques valeurs de an e e convainc que la srie converge). Ces courbes sugg`rent que 1 (1 tn )1/n e e reste tr`s proche de 0 sur la plus grande partie de [0, 1], avant de cro e tre tr`s rapidement pour atteindre 1 pour t = 1. La majoration se fait donc en e deux tapes : dune part en majorant la valeur de lintgrande sur la partie e e proche de 0, dautre part en majorant la largeur dun intervalle dans lequel lintgrande est major par 1. Pour cela, on cherche par exemple pour quelle e e valeur de t lintgrande vaut 1/n2 (donc commence ` dcoller) : e a e asympt(solve(1-(1-t^n)^(1/n)=1/n^2,t),n,3);

1. SERIES NUMERIQUES

195

0.8

0.6

0.4

0.2

00

0.2

0.4

0.6

0.8

Figure 2
plot({seq(1-(1-t^i)^(1/i),i=1..10)},t=0..1)

log n 1 +O 2 n n Lintgrale est donc majore par 1/n2 sur lintervalle [0, 1 log n/n] et par 1 e e sur lintervalle [1 1/n2 , 1]. Il reste ` la majorer sur [1 log n/n, 1 1/n2 ] a par la valeur de lintgrande en 1 1/n2 , cest-`-dire e a asympt(subs(t=1-1/n^2,1-(1-t^n)^(1/n)),n,3); 1 log n +O 2 n n 1 Ceci permet de majorer an par (2 + log2 n)/n2 et ach`ve la preuve de la e convergence de la srie. e Exemple 6. Nature de la srie e

sin(
n=0

4n2 + 1).

Cette somme est semblable ` a sin(2n) qui vaut 0. La priodicit du sie e nus permet dobtenir le comportement asymptotique des termes somms car e sin( 4n2 + 1) = sin(( 4n2 + 1 2n)) : asympt(sin(Pi*(sqrt(4*n^2+1)-2*n)),n,3); 1 +O 3 4n n e Donc il existe N tel que pour n > N , sin( 4n2 + 1) est positif et born infrieurement par /(5n). Ceci permet de conclure que la srie diverge. e e Exemple 7. Nature de (1)n n sin(1/ n) . n + (1)n n>1

Pour cet exemple, on a envie dutiliser la convergence des sries alternes dont e e les termes dcroissent en valeur absolue, mais la monotonie pose probl`me. e e Voici quelques valeurs :

196

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

f:=(-1)^n*sqrt(n)*sin(1/sqrt(n))/(n+(-1)^n): evalf([seq(subs(n=i,f),i=2..17)]); 0.3062417898, -0.4726815281, 0.1917702154, -0.2417496044, 0.1389218269, -0.1627266612, 0.1088107209, -0.1226980113, 0.08940149714, -0.09849172063, 0.0758591436, -0.08226905886, 0.06587584553, -0.07063756192, 0.0582126963, -0.06188905459 Les signes semblent alterner et il est facile de le prouver. Mais les valeurs absolues des termes ne dcroissent pas. En revanche, en groupant f (n) e avec f (n + 1), on peut prouver la convergence de la somme : f+subs(n=n+1,f); (1)n n sin(1/ n) (1)n+1 n + 1 sin(1/ n + 1) + n + (1)n n + 1 + (1)n+1 Maple ne peut pas calculer directement de dveloppement asymptotique de e cette expression : il faut prciser la parit de n. e e asympt(subs((-1)^n=1,(-1)^(n+1)=-1,"),n,3); 1 1 2 +O 3 n n Ceci prouve que la srie de terme gnral f (2k) + f (2k + 1) converge ; f (n) e e e tendant vers zro, la srie e e f (n) converge aussi. 1.4. Exercices. 1. La constante de Catalan peut tre dnie de nombreuses faons. Elle vaut e e c par exemple
1

C=
0

arctan x dx = x x dx = 2 sin x
/2 0

1 0

ln(x)dx 1 + x2

/2

=
0

x ln(2 sin ) dx. 2

On peut aussi la reprsenter comme une somme, e C= (1)n 1 3 = log(2 + 3) + (2n + 1)2 8 8 n=0 (2n + 1)2 n=0
2n n

la premi`re de ces deux sommes ayant lavantage de la simplicit, et la e e seconde celui de permettre un calcul rapide. Ecrire une procdure qui calcule cette constante, en prenant le nombre e de dcimales souhait en argument. e e 2. Montrer ` laide de Maple que a 1 cosn cos n = ln(sin ), n n=1

]0, [ ,

n=1

12

22

1 = 18 24 ln 2. + + n2

1. SERIES NUMERIQUES

197

3. La somme double

1 m2 n + n2 m + 2nm

n=1 m=1

a une valeur rationnelle simple. (1) Dcomposer le sommant en lments simples par rapport ` m ; e ee a (2) remarquer quune partie indpendante de m se factorise et la somme e restante (sur m) est un nombre harmonique (Hn = 1+1/2+ +1/n) ; (3) dcomposer le facteur trouv en lments simples par rapport ` n e e ee a et annuler deux ` deux les contributions provenant du nombre hara monique sauf deux des composants du nombre harmonique ; (4) sommer alors les termes restants. On pourra vrier numriquement la valeur trouve. e e e 4. Calculer 1 ). arctan( 1 + n + n2 n=0 [Indication : regarder les premi`res troncatures.] e 5. Calculer les produits n3 1 , n3 + 1 1 + (1/2)2
n0
n

,
n2

1+

n2

2n + 1 . (2n 1)(n + 1)2

Indications : dans ces produits le calcul formel nest utile que parce quil permet dexprimenter facilement. Pour le premier produit, regarder le e dveloppement du logarithme des termes ; pour le deuxi`me la dcomposie e e tion en base 2 des produits tronqus ; pour le troisi`me, noter que, comme e e tout produit indni de fractions rationnelles, celui-ci sexprime ` laide e a de la fonction ; il ne reste plus ensuite qu` faire tendre n vers linni. a 6. Nature des produits (1 1/n)x (1 + x/n),
n>1 n0

x + x2n . 1 + x2n

7. Nature des sries e log(cos


n0

x ), 2n

n2

einx , n log n

n1

cos(log n) . n

Pour la troisi`me, on pourra encadrer la valeur absolue des blocs de signe e constant. 8. Etudier les domaines de convergence uniforme de la srie e sin nx , n x [0, ].

n1

198

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

10

-20

-10

00

10 z

20

-4

-2

00

2 z

-5

-1

-10

-2

Figure 3 sin(z).
20

Figure 4 1/(z).
10

10

-3

-2

-1

00

-2

-1

00

1 z

-10

-5

-20

-10

Figure 5 tan(z).

Figure 6

1 . 1 + z2

2. Sries enti`res et dveloppements limits e e e e Les dveloppements limits sont des objets de base du calcul formel. e e Maple leur aecte un type de donnes particulier (le type series) et de nome breuses oprations peuvent tre eectues sur des objets de ce type. Par e e e ailleurs, lorsque le terme gnral dune srie enti`re est connu explicitement, e e e e quelques calculs sont possibles mais peu doprations symboliques peuvent e tre alors appliques directement sur la srie. e e e 2.1. Disque de convergence. Le premier objet dun dveloppement en e srie est dapproximer la fonction localement. Les gures 3 ` 6 montrent e a comment les dveloppements ` des ordres de plus en plus levs sapprochent e a e e de la fonction. Ces gures ont t obtenues par linstruction ee plot({seq(convert(series(f,z,i),polynom),i=1..p)},z=a..b,c..d) pour des valeurs appropries de p, a, b, c et d. Les deux premi`res fonctions e e ont un dveloppement en srie enti`re dont le rayon de convergence est ine e e ni. Les deux autres ont un rayon de convergence ni, le premier ` cause de a singularits relles et le second ` cause de singularits imaginaires. e e a e

` 2. SERIES ENTIERES ET DEVELOPPEMENTS LIMITES

199

Au-del` du disque de convergence, la srie cesse de converger, ce qui a e appara bien sur ces gures. Lorsque les coecients un dune srie enti`re t e e sont connus explicitement, il nest gnralement pas trop dicile den dduire e e e le rayon de convergence par la r`gle dHadamard : cest linverse de la limite e suprieure de la suite |un |1/n si elle existe. Dans la plupart des cas en pratique, e la limite suprieure est en fait la limite et la fonction limit peut la trouver. e 2.2. Fonctions dnies explicitement. Cest la commande series qui e permet de calculer des dveloppements limits. Voici comment on calcule le e e dveloppement ` lordre 2 en 0 de e a sin 6+x + cos 3+x
1/x

series((sin(Pi/(6+x))+cos(Pi/(3+x)))^(1/x),x,4); 61 2 7 3 e 3/24 + e 3/24 x 10368 432 5 3 565 2 859 3 3 3721 3/24 +e + + + 4 864 124416 4478976 214990848

x2 + O x3

Cette commande ne se limite dailleurs pas ` des dveloppements en srie a e e enti`re, mais calcule aussi des dveloppements en srie de Laurent (o` des e e e u puissances ngatives interviennent) et certains dveloppements en srie de e e e Puiseux (o` des puissances rationnelles interviennent) : u series(arccos(1-x),x); 1/2 2 3/2 3 2 5/2 5 2 7/2 35 2 9/2 63 2 11/2 2x + x + x + x + x + x + O(x6 ) 12 160 896 18432 90112 La commande series peut parfois tre amliore en ecacit, notamment e e e e sur les dveloppements avec un grand nombre de termes (voir le 2.2.4 du e chapitre IV pour le cas des fractions rationnelles). 2.3. Fonctions dnies implicitement. Le plus souvent, ce nest pas de e fonctions connues explicitement que lon cherche un dveloppement, mais e plutt dune fonction dnie implicitement comme solution dune quation. Le o e e dveloppement permet alors de calculer des valeurs approches ` faible cot, e e a u en plus de donner une ide du comportement local. Nous montrons ici come ment rechercher une srie par coecients indtermins, puis nous prsentons e e e e linversion de sries formelles et quelques-unes de ses applications. e On consid`re le probl`me de Cauchy : e e y (z) sin(z)y (z) = esin(y(z
2

))

y(0) = 0, y (0) = 1.

La relation entre le dernier argument de series et lordre que lon souhaite obtenir nest pas aussi claire que dsirable : largument donn ` series est en gros lordre utilis e ea e dans les calculs intermdiaires. Lorsquil y a beaucoup dannulations, on obtient donc moins e de termes quon le voudrait. La valeur par dfaut de ce nombre de termes est gouverne e e par la variable globale Order.

200

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

La mthode la plus directe consiste ` substituer une srie arbitraire dans cette e a e quation, puis ` eectuer le dveloppement en srie de lexpression obtenue e a e e et enn ` rsoudre le syst`me form de lensemble des coecients. En Maple, a e e e ceci sexprime ainsi : eq:=diff(y(z),z,z)-sin(z)*diff(y(z),z)-exp(sin(y(z^2))): f:=z->z+convert([seq(a[i]*z^i,i=2..9)],+): s:=series(eval(subs(y=f,eq)),z,8): subs(solve({seq(coeff(s,z,i),i=0..7)}, {seq(a[i],i=2..9)}),f(z)); z3 z4 z5 z6 z7 311 8 43 z2 + + + + + + z z9 z+ 2 6 6 60 20 5040 20160 362880 Cette mthode est dans certains cas inapplicable parce que ltape du cale e cul de la srie apr`s substitution dun polynme de degr lev dans lquation e e o ee e e peut tre tr`s exigeante en mmoire. Un simple procd itratif lemportera e e e e e e pratiquement toujours en place mmoire et souvent en vitesse : e for i from 2 to 9 do sol:=subs(ii=i, proc(z)z+convert([seq(a[j]*z^j,j=2..ii)],+)end); a[i]:=solve(op(1,series(eval(subs(y=sol,eq)),z,i)),a[i]) od: sol(z); Un cas important qui ne ncessite pas le calcul par coecients indtermins e e e est linversion de sries formelles. Il sagit de la rsolution de lquation x = e e e f (y), o` f est connue par son dveloppement en srie. Maple dispose dune u e e fonction spcialise pour cela et il faut essayer de sy ramener aussi souvent e e que possible. Cette fonction appara en Maple comme un avatar de la commande t solve, mais elle rclame des conditions tr`s particuli`res : il faut que lun e e e des membres de lquation soit une srie et que lon rsolve par rapport ` e e e a la variable de la srie. En outre, la commande fonctionne mieux (cest-`e a dire sans oublier de solution) lorsque la srie comporte une partie linaire et e e lorsque lautre membre de lquation est rduit ` une variable. e e a Par exemple, le dveloppement de y(x) dni par e e log(1 + y) = 1 + sin(x), y est obtenu par solve(series(log(1+y)/y,y)=1+sin(x),y); 8 25 344 4 2x + x2 x3 + x + O x5 3 9 135 Si linversion navait pas fonctionn, alors il aurait fallu aider le syst`me ainsi e e : series(subs(u=sin(x),solve(series(log(1+y)/y-1,y)=u,y)),x); Lorsque la srie ne comporte pas de terme linaire, il vaut mieux en ime e poser un par changement de variable et rechanger la variable apr`s linversion. e

` 2. SERIES ENTIERES ET DEVELOPPEMENTS LIMITES

201

Par exemple lquation e sin y = cos(x) + x3 , y se rsout en posant u = 1 cos x x3 : e series(subs(u=(1-cos(x)-x^3)^(1/2), solve(series((1-sin(y)/y)^(1/2),y)=u,y)),x); 6 2 6 2 2 7 3 x x 6 2x + O x4 2 2 30 Une des applications de cette technique est la recherche du dveloppement e asymptotique des solutions de certaines quations. Lexemple classique est e ltude de la ne racine de lquation x = tan x. Dapr`s la gure 1 p. 173, e e e les courbes y = tan x et y = x ont une intersection dans chacun des intervalles ](2n 1)/2, (2n + 1)/2[, et labscisse de cette intersection se rapproche de (2n + 1)/2 quand n cro Donc t. xn = (2n + 1)/2 un = tan(xn ). Pour ramener ce probl`me ` linversion de srie, il faut utiliser la priodicit e a e e e de la tangente et ramener toutes les sries au voisinage de 0. On obtient ainsi e le dveloppement de xn : e asympt(subs(t=2/Pi/(2*n+1),1/tsolve(t=series(1/(u+tan(Pi/2-u)),u),u)),n); n + 1 1 + 2 n 2n2 2 1 + 3 4 3 1 1 1 1 + 3 + 3 n 8 n4 1 13 1 1 1 + 3+ +O 6 5 5 16 15 n n

2.4. Sommes et produits. Du point de vue du calcul formel, la dtermie nation du dveloppement en srie dune somme se rduit souvent ` sommer e e e a les dveloppements des sommants, la justication de la convergence devant e tre faite sparment. e e e Ainsi, le dveloppement en srie enti`re de e e e sin(an x),
n0

a ]1, 1[ ,

est calcul par e series(sum(sin(a^n*x),n=0..infinity),x); x x3 x5 + + O x6 3 1) a 1 6 (a 120 (a5 1) Il est alors facile de donner le terme gnral de la srie (mais aucun syst`me e e e e de calcul formel ne dispose de fonctionnalit pour ce faire). e De la mme mani`re, le logarithme du produit e e

1
n=0

z , 2n

202

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

est une somme que Maple sait dvelopper. Le rsultat sen dduit en prenant e e e lexponentielle : series(exp(sum(log(1-z/2^n),n=0..infinity)),z); 4 8 16 4 32 5 1 2z + z 2 z 3 + z z + O z6 3 21 315 9765 L` encore il est facile de reprer le motif gnral (regarder le quotient de a e e e deux dnominateurs conscutifs) et dans ce cas encore, il nest pas dicile de e e prouver que la formule suggre par le calcul est exacte. ee Tous les cas ne sont pas aussi simples ; voici un exemple plus dlicat o` e u on cherche un quivalent lorsque x 1 de e xn . 1 + xn
n0

Lorsque x 1 , tous les termes tendent vers 1/2 et la fonction series ne peut pas tre applique directement. On commence donc par rcrire la somme e e e : simplify(subs(u=x^n,series(subs(x^n=u,x^n/(1+x^n)),u))): map(sum,",n=0..infinity); 1 1 1 1 1 O(x6n ) + 2 3 + 4 5 + x 1 x 1 x 1 x 1 x 1 n=0 Ce calcul sugg`re lgalit suivante quil faudrait par ailleurs prouver : e e e xn (1)n = . n 1+x xn 1 n>0

n0

Tous les termes de la somme de droite ont un ple simple en 1, on va donc o intervertir (ceci reste ` justier) la limite et la somme : a sum(limit((-1)^n*(1-x)/(x^n-1),x=1),n=1..infinity)/(1-x); ln 2 1x 2.5. Intgrales. Pour les intgrales comme pour les sommes, tant que lon e e se contente de calculer sans chercher ` justier les interversions des signes a sommes et intgrales, il ny a pas de dicult importante. e e Ainsi le calcul du dveloppement dune intgrale comme e e
x2

dt 1 + t4

en x = 0 est facile, en admettant sa validit : e series(Int(1/sqrt(1+t^4),t=x..x^2),x); x5 x + x2 + + O x9 10


On utilise ici Int et non int pour viter que Maple ne passe du temps a essayer de e ` calculer symboliquement lintgrale. e

` 2. SERIES ENTIERES ET DEVELOPPEMENTS LIMITES

203

Exemple 8. Lorsque x tend vers 0, lintgrale e


+ 0

cos t dt (1 + t)x

devient dicile ` valuer par les mthodes de calcul numrique dintgrales. ae e e e Son dveloppement en srie devient alors prfrable. Il ne sut cependant e e ee pas pour lobtenir dintgrer terme ` terme le dveloppement de lintgrande, e a e e car alors lintgrale du terme constant est divergente. Le rsultat sobtient en e e commenant par une intgration par parties : c e student[intparts](Int(cos(t)/(1+t)^x,t=0..A),1/(1+t)^x); A x sin(t) sin(A) + dt x x (1 + A) 0 (1 + t) (1 + t) Lorsque A tend vers linni, le premier terme tend vers 0 pour tout x > 0 et le second se traite directement : series(subs(A=infinity,op(2,")),x,4); cos(1) Si(1) cos(1) + Ci(1) sin(1) x 2 ln(1 + t) sin(t) ln(1 + t)2 sin(t) dt x2 + dt x3 + O(x4 ) 1+t 2 + 2t 0 0 Dans cette expression, Ci et Si dsignent le cosinus intgral et le sinus intgral. e e e On peut alors calculer une fois pour toutes les valeurs numriques de ces e coecients de Taylor et utiliser ce dveloppement pour calculer des valeurs e de lintgrale de dpart. e e Nous verrons des exemples plus dlicats de calculs de dveloppements e e dintgrales en 3.5. e ` 2.6. Sries gnratrices. A plusieurs reprises dans ce livre, nous avons vu e e e quil tait dicile, voire impossible, de faire comprendre ` Maple que telle e a variable reprsentait un rel positif, un entier impair,... Bien souvent, les e e informations lies aux variables reprsentant des entiers peuvent tre prises e e e en compte par le biais de sries gnratrices (voir chap. VII). Nous insistons ici e e e sur lutilisation de sries gnratrices pour le calcul exact dexpressions faisant e e e intervenir un param`tre entier. Dans la section suivante, nous reviendrons sur e les sries gnratrices pour leur application ` la recherche du dveloppement e e e a e asymptotique dune suite. Une illustration typique de lusage des sries gnratrices pour calculer e e e des expressions dpendant dun entier est le calcul dune srie de Fourier. e e Les premiers coecients sont calculs aisment par la commande int, mais il e e est parfois possible de calculer explicitement le ne coecient : f:=1/(lambda^2-2*lambda*cos(x)+1); 1 f := 2 2 cos(x) + 1

204

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

Comme f est paire en x, les coecients ` calculer sont : a


2

f (x) cos(nx) dx.


0

Le calcul commence par la dtermination de la srie gnratrice de cos(nx) : e e e e g:=evalc(Re(sum(exp(I*x)^n*z^n,n=0..infinity))); 1 z cos(x) g := 2 2 (1 z cos(x)) + sin(x) z 2 Il ne reste plus qu` intervertir (ce quil faudrait justier) les signes somme et a intgrale et ` simplier le rsultat (voir chap. I) : e a e res:=int(f*g,x=0..2*Pi): assume(z<1,z>-1):assume(lambda,real): simplify(factor(res),radical); signum(1 + 2 ) signum(1 + z2 ) z signum(1 + 2 ) + z signum(1 + 2 )2 %1 z2 signum(1 + z2 ) %1 z signum(1 + z2 ) + 2%1 signum(1 + z2 ) (1 + 2 )(z 1)( + z) %1 := csgn ( + 1)2 signum(1 + 2 )(1 + 2 ) subs(csgn=1,signum(z^2-1)=-1,"): normal(map(subs,[seq(signum(lambda^2-1)=i,i=[-1,1])],")); 2 2 2 , (1 z)(1 ) ( z)(2 1) Le rsultat obtenu dpend du signe de 2 1. Comme il sagit dans les e e deux cas de fractions rationnelles tr`s simples, le coecient de z n sen dduit e e aisment : e
2 0

cos(nx) dx 2 = 2 2 2 cos(x) + 1 | 1|

n n

si 2 < 1, si 2 > 1.

2.7. Exercices. 1. Dterminer un dveloppement limit solution de lquation e e e e y (z) y(y(z)) = cos(z), y(0) = 0, dabord ` lordre 6, puis ` lordre 50. a a 2. Calculer le dveloppement asymptotique lorsque n tend vers linni de e la ne racine de tan x = x3 /(x2 1). 3. Dans lexemple du dveloppement en srie enti`re du sinus intgral de e e e e Fresnel du 1.1, calculer le dveloppement en srie de lindice du terme e e maximal. 4. Dterminer un quivalent lorsque x tend vers 1 de e e nxn . 1 xn
n1

` 2. SERIES ENTIERES ET DEVELOPPEMENTS LIMITES

205

5. Calculer le dveloppement en srie enti`re de e e e


/2

log(1 + x sin2 t) dt.


0

Vrier que pour x = 1/10 on obtient une tr`s bonne approximation. e e 6. Calculer les premiers termes du dveloppement en puissances de 1/n de e lintgrale e
+

sin(xn ) dx
0

lorsque n . [Indication : commencer par changer la variable.] 7. Calculer le dveloppement en srie enti`re en r de e e e F (x, r) = 1 2
2 0

(1 r2 )f (t) dt. 1 2r cos(t x) + r2

[On regardera avec prot le help de combine/trig.] 8. Calculer +2 sin2 n xt dt 2 , nN . sin2 xt n 2 9. Calcul de la fonction perturbatrice de la Lune (Delaunay). La fonction perturbatrice de la Lune est ` un facteur multiplicatif pr`s a e (3) k k k P2 (cos ) + c 3 P3 (cos ) + c2 4 P4 (cos ) + k2 k k o` k (respectivement k ) est le rapport de la distance moyenne de la Terre u a ` la Lune (respectivement au Soleil) ` la distance ` linstant considr, les a a ee Pi sont les polynmes de Legendre, et o` est langle entre les directions o u Terre-Lune et Terre-Soleil. La premi`re tape du calcul consiste ` obtenir e e a un dveloppement de k, k et cos . Cette derni`re quantit est lie ` une e e e e a constante et aux angles f, f de rotation de la Lune et du Soleil par lidentit e S= cos = (1 2 ) cos(f + h f h ) + 2 cos(f + h + f + h ),
3 4 5

(4)

o` h, h sont dautres angles indpendants. Le rapport k est donn par u e e db (5) k= dl o` b est donn par lquation de Kepler u e e (6) b = l + e sin b et nalement f est donn par e df = k 2 1 e2 . (7) dl Le but de lexercice est de calculer un dveloppement de la fonction pere turbatrice ` lordre n (commencer par n = 2) en fonction des petites a quantits e, e , et c. Les fonctions Maple ` utiliser sont indiques entre e a e crochets.

206

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

` (1) A laide de lquation de Kepler (6), calculer un dveloppement de e e b ` lordre n en e. [Inversion de sries formelles.] a e ` (2) A partir du dveloppement de b, en dduire celui de k par lquation e e e (5) et celui de f par (7). Remplacer e par e et l par l dans k et f pour obtenir les dveloppements de k et f relatifs au Soleil. e (3) Calculer cos en fonction de , e, e , l, l , h, h ` laide de lidentit (4). a e (4) Former S en se servant de la formule (3). Il sut de considrer les e polynmes de Legendre jusqu` lordre n/2 + 2. [orthopoly[P]] o a (5) Eectuer un dveloppement limit de S ` lordre n en les quatre e e a variables e, e , , c. Etant donnes les valeurs approches e e e 1/18, e 1/60, 1/11 et c 1/400, on consid`re comme Delaunay e 3 e et comme des termes dordre un, e comme un terme dordre quatre et c comme un terme dordre deux. [mtaylor,select] (6) Linariser les expressions trigonomtriques an de mettre S sous la e e forme dune somme de termes du genre ai cos bi o` ai est un monme u o en e, e , , c et bi est une combinaison linaire des angles l, l , h, h . e [combine( ,trig)] (7) Regrouper les termes ayant le mme facteur cos bi . [Commandes e collect et indets.] On doit obtenir ` lordre 2 le dveloppement suivant. a e 1 3 1 3 2 3 2 3 S = + e + c cos(l l + h h ) e cos(l) + e cos(l ) 4 2 8 8 2 4 3 2 3 15 2 1 2 + + e cos(2l 2l + 2h 2h ) e cos(2l) 2 4 8 8 3 21 + e cos(3l 2l + 2h 2h ) + e cos(2l 3l + 2h 2h ) 4 8 3 3 2 e cos(2l l + 2h 2h ) + e cos(4l 2l + 2h 2h ) 8 4 5 9 + c cos(3l 3l + 3h 3h ) e cos(l 2l + 2h 2h ) 8 4 3 3 15 + e2 cos(2l + 2h 2h ) + 2 cos(2l + 2h ) + 2 cos(2l + 2h). 8 2 2

3. Dveloppements asymptotiques e Tous les comportements asymptotiques ne sexpriment pas en termes de sries enti`res. Il faut souvent faire intervenir des singularits logarithmiques e e e ou exponentielles. Du point de vue du calcul formel cela signie une structure ` de donnes et des oprations direntes. A lheure actuelle, les syst`mes de e e e e calcul formel sont encore assez dmunis pour manipuler des dveloppements e e asymptotiques dans des chelles asymptotiques tr`s nes. e e La commande de base pour les dveloppements asymptotiques en Maple e est asympt, mais il faut occasionnellement se servir de series, ou de fonctions plus spciques, comme eulermac, que nous verrons dans cette section. e

3. DEVELOPPEMENTS ASYMPTOTIQUES

207

Le calcul asymptotique est un art subtil et on ne peut pas donner de mthode gnrale infaillible. Cependant, il existe dans ce domaine un cere e e tain nombre de mthodes souvent applicables et dont la complexit peut e e tre extrmement amoindrie par lusage dun syst`me de calcul formel. Nous e e e prsentons dans cette section certaines de ces mthodes. e e 3.1. Fonctions dnies explicitement. Les calculs de dveloppements e e asymptotiques de fonctions connues explicitement sont importants car ils forment la base de nombreuses oprations courantes : calcul numrique, come e paraison dordres de grandeurs de fonctions, calcul de dveloppements asympe totiques plus complexes, tude de la convergence dune intgrale impropre,... e e La commande de base en Maple est asympt ; voici comment faire appara la formule de Stirling : tre asympt(n!,n,4); 139 2 2 2 nn + + O n7/2 2 n+ en 12 n 288n3/2 51840n5/2 Cependant la commande asympt est encore tr`s insusante. Il est en e eet dicile dobtenir des dveloppements simples comme celui de e n 2 3n + p
2

n 2 3n

lorsque n . Voici les acrobaties par lesquelles on peut y parvenir : f:=binomial(n,2*n/3+p)^2/binomial(n,2*n/3)^2: expand(ln(convert(f,GAMMA)),GAMMA); 2 ln (2n/3 + p + 1) 2 ln (n/3 p + 1) + 2 ln (2n/3 + 1) + 2 ln (n/3 + 1) eval(subs(GAMMA=(x->exp(_B)),_B=asympt(ln(GAMMA(x)),x,4),")): asympt(simplify(exp("),ln),n,3): simplify(map(normal,"),exp); 22p 3/2p 9/2p2 1 22p + +O 2 n n 3.2. Fonctions dnies implicitement. La mthode des coecients inde e e termins qui sappliquait au cas des dveloppements limits ne sapplique plus e e e ici, puisquil faut dabord dterminer dans quelle chelle asymptotique doit se e e faire le dveloppement. Nous montrons cependant sur un exemple dinversion e comment les calculs se m`nent dans de nombreux cas. e Exemple 9. On cherche le comportement asymptotique lorsque x de la fonction y(x) dnie par e yeln
2

(y exp

ln ln y)

= x.

Une premi`re remarque est que y tend ncessairement vers linni avec x. e e Ensuite, la premi`re tape est de comparer les deux facteurs du produit de e e gauche pour dterminer lequel domine. Il faut noter que Maple est le seul e syst`me de calcul formel ` savoir faire cette comparaison : e a

208

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

eq:=y*exp(ln(y*exp(sqrt(ln(ln(y)))))^2)=x: limit(y/op(2,op(1,eq)),y=infinity); 0 Comme cest le second facteur qui domine, on divise les deux membres de lgalit par le premier facteur et on inverse jusquau produit suivant : e e assume(y>0,ln(y)>0,ln(ln(y))>0); simplify(map(exp,map(t->t^(1/2),map(ln,map(t->t/y,eq))))); y exp ln ln y = exp ln x ln y ` nouveau, la comparaison des deux facteurs du produit de gauche montre A que le premier lemporte, donc on divise par le second : op(1,")/op(2,op(1,"))=op(2,")/op(2,op(1,")); exp ln x ln y y = exp ln ln y On voudrait raner lestimation grossi`re exp( ln x) que nous sugg`re cette e e quation. Si asympt tait bien fait, il surait de taper e e t:=op(2,"): exp(sqrt(ln(x))): while "<>"" do asympt(subs(y=",t),x) od: "; Malheureusement, Maple ne permet pas de faire cela directement. Voici les commandes qui am`nent pniblement au rsultat : e e e t:=subs(ln(x)=X,simplify(log(op(2,")),ln)): X^(1/2): while "<>"" do map(simplify,asympt(subs(ln(y)=",t),X,1)) od: subs(X=ln(x),exp(op(1,")+op(2,")+op(3,"))*simplify( map(normal,asympt(exp(subsop(1=0,2=0,3=0,")),X,1)),ln)); 5 2 ln ln x + 2 ln ln x + 2(ln ln x)3/2 1 1 ln x 22 ln ln x 2 e 1+ +O ln x 4 ln ln x ln x (Le numrateur du O renvoy par Maple peut sembler faux par exc`s doptie e e misme, mais il est d ` une trange dnition du O en Maple, dcrite dans la ua e e e documentation de series.) 3.3. Sommes. Une mthode importante pour dterminer le comportement e e asymptotique dune somme de termes assez rguliers est de comparer la somme e avec une intgrale. Nous donnons ici deux exemples de calcul asymptotique e et le calcul peut se pousser jusqu` obtenir un encadrement de la somme. a Exemple 10. On cherche la limite de
n

n3
k=1

1 . n4 + n2 k 2 + k 4

Cette suite se rcrit 1/n f (k/n), o` f = 1/(1+x2 +x4 ). Asymptotiquement, e u la somme tend donc vers lintgrale e int(1/(1+x^2+x^4),x=0..1);

3. DEVELOPPEMENTS ASYMPTOTIQUES

209

3 ln(3) + 12 4

Sans entrer dans les dtails, disons que cette mthode de comparaison e e dune somme avec une intgrale (la formule dEuler-Maclaurin ci-dessous e en est un cas particulier) demande un peu deorts pour lobtention dune majoration des termes derreur : il faut une majoration uniforme sur les drives de la fonction intgre. e e e e Lorsque les sommants uk ne dpendent pas de la borne de sommation n, e la formule dEuler-Maclaurin sapplique. Elle renvoie une expression Sk telle quasymptotiquement Sk+1 Sk uk . Pour trouver le comportement asymptotique de
n1

k 2 log k
k=1

lorsque n , la commande eulermac sutilise ainsi : readlib(eulermac)(n^2*log(n),n); n2 ln(n) n ln(n) n 1 1 1 n3 ln(n) n3 + + + +O 5 3 3 9 2 6 12 360n 7560n n Comme int, la commande eulermac sait aussi traiter des sommes dnies, e et fournit alors une constante dintgration qui nappara pas dans le cas e t indni : e eulermac(k^2*log(k),k=1..n); ln(n)n2 ln(n)n n 1 1 1 ln(n)n3 n3 (1, 2) + + + + +O 5 3 9 2 6 12 360n 7560n3 n La constante (1, 2) reprsente la drive de la fonction zeta de Riemann e e e en 2, et vaut (2) 0.03. evalf(subs(n=100,")=convert([seq(k^2*log(k),k=1..100)],+)); 1447056.584 + O(1/10000000000) = 1447056.585 La commande asympt sait reconna tre les cas dapplication de la mthode e dEuler-Maclaurin ; on aurait donc pu crire directement e asympt(sum(k^2*log(k),k=1..n),n); La comparaison avec une intgrale ne fonctionne bien que lorsque les e sommants sont assez rguliers et que la somme nest pas trop concentre : e e si seuls quelques termes contribuent asymptotiquement ` la somme, il faut a commencer par les reprer, puis majorer le reste. Cest le cas par exemple e n pour k=1 k!. 3.4. Suites itratives. Nous reprenons lexemple de la rcurrence un+1 = e e sin un du chapitre VII, pour en tudier la vitesse de convergence. La mthode e e que nous allons employer sapplique ` toutes les suites convergeant vers 0 a dnies par un+1 = f (un ), la fonction f ayant un dveloppement en srie e e e de la forme f (x) = x(1 + i1 ai xi ) lorsque x 0. En notant p le plus

210

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

petit indice tel que ap = 0, lide est de regarder la suite vn = 1/up . En e n substituant dans la rcurrence on obtient e (8) vn+1 vn = pap + O(un ).

Comme un tend vers 0 et par hypoth`se ap = 0, ` partir dun certain indice la e a suite {vn+1 vn } est de signe constant et |vn+1 vn | > p|ap |/2. Donc pour n susamment grand |vn | > p|ap |n/4 et par consquent un = O(n1/p ). Ene suite, il sagit de raner lestimation vn pap n en sommant (8). Pour cela, il faut prendre susamment de termes dans le dveloppement (8) an davoir e un reste tendant vers 0 dans lestimation de vn . Ce rsultat est atteint lorsque e p+ le reste est en O(un ). La somme des uk pour k > p converge alors vers n une constante qui dpend de u0 alors que tout le reste du dveloppement nen e e dpendait pas. Ce procd se poursuit ensuite formellement sans conna u0 . e e e tre Dans notre exemple, p = 2 et ap = 1/6. Le calcul se droule ainsi : e d:=series(1/sin(x)^2-1/x^2,x,7); x2 + O x4 d := 1/3 + 15 Ici d correspond ` vn+1 vn . Une premi`re approximation sen dduit : a e e u:=(n/3)^(-1/2): vn sobtient alors en sommant {vn vn1 } : v:=asympt(eulermac(asympt(subs(x=u,n=n-1,d),n),n),n); 1 n ln(n) 1/6 + O v := + 3 5 n La constante 1/6 obtenue par la mthode dEuler-Maclaurin nest valable e qu` une constante dintgration pr`s. Nous la remplaons par une constante a e e c symbolique C qui reprsente la valeur exacte. e v:=v+1/6+C: u:=asympt(v^(-1/2),n); 3 3 (3/10 lnn 3/2C) + u := + O n5/2 n n3/2 Pour obtenir plus de termes du dveloppement, il sut daugmenter lordre e des dveloppements et dappliquer rptitivement e e e Order:=Order+1: d:=subs(x=u,n=n-1,series(1/sin(x)^2-1/x^2,x)): u:=asympt((C+1/6+eulermac(asympt(d,n),n))^(-1/2),n); 3.5. Intgrales. Plusieurs mthodes assez gnrales permettent de calculer e e e e le comportement asymptotique de nombreuses intgrales. Lintgration par e e parties vient ` bout des intgrales les plus rguli`res. Sinon, la premi`re a e e e e partie de ltude consiste ` localiser les points du domaine dintgration o` e a e u lintgrande se concentre lorsque le param`tre tend vers sa limite. Lintgrande e e e est alors dveloppe au voisinage de ces points, puis sommation et intgration e e e sont intervertis. Il faut bien sr justier la validit de cette interversion. u e Lorsque lintgrande est exponentiellement dcroissante, cette justication e e peut prendre la forme dun thor`me assez gnral et la mthode sappelle e e e e e

3. DEVELOPPEMENTS ASYMPTOTIQUES

211

alors la mthode de Laplace. Il est galement possible dutiliser des proe e prits de la transforme de Mellin pour dterminer le comportement asympee e e totique dune intgrale, mais nous nen parlerons pas ici. e Exemple 11. Nous avons vu en 1.1 comment calculer numriquement e le sinus intgral de Fresnel lorsque largument est assez proche de lorigine. e Lorsque largument devient plus grand, il est prfrable dutiliser le dvelopee e pement asymptotique. Lintgration par parties sapplique ` lintgrale de e a e lquation (1), apr`s un changement de variables : e e S := a -> Int(sin(Pi*t^2/2),t=a..infinity): value(S(0))-student[changevar](t=u^(1/2),S(x),u); sin( u ) 2 du 1/2 2 u x2 student[intparts](",u^(-1/2)); 2 cos x cos( u ) 2 2 + du 1/2 x 2u3/2 2 x Le calcul se poursuit et donne de plus en plus de termes du dveloppement : e for i from 3 by 2 to 7 do student[intparts](",u^(-i/2)) od: subs(csgn(x)=1,map(simplify,")); 2 2 2 2 cos x sin x cos x sin x 105 sin u 2 2 1/2 2 2 + 3 3 2 + 15 4 2 du x x3 x5 x7 2 4 u9/2 x2 Exemple 12. On consid`re maintenant lintgrale e e
x 0

log(1 + tx) dt, 1 + t2

o` x tend vers linni. u Le calcul se simplie en remarquant que lorsque x cro log(1 + tx) se t, comporte au premier ordre comme log(x), la dirence tant gale ` log(1/x+ e e e a t). Une premi`re partie du comportement asymptotique est donc donne par e e f1:=int(log(x)/(1+t^2),t=0..x); f 1 := log(x) arctan(x) Il reste ` considrer lintgrale o` log(1 + tx) est remplac par log(1/x + t). a e e u e La commande asympt ne sapplique pas directement ` cette intgrale parce a e quune des bornes dpend de x. Il faut donc encore dcomposer en deux e e sous-probl`mes : dune part lintgrale tendue jusqu` linni, dautre part e e e a lintgrale de x ` +. La premi`re se traite directement par asympt : e a e f2:=asympt(Int(log(1/x+t)/(1+t^2),t=0..infinity),x); ln x ln x 1/9 + 1/25 ln x + 1 1 3 f 2 := + 2+ 4+ 5 5 +O 6 3 x 4x x 8x x x Il nous reste lintgrale e ln(1/x + t) dx, 1 + t2 x

212

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

1 0.8 0.6 0.4 0.2

00 -0.2

10

Figure 7
plot({seq(exp(-lambda*t)*cos(t)/(1+t),lambda=[0,1,2])},t=0..10)

pour laquelle il sut dintgrer terme ` terme le dveloppement de lintgrande e a e e : f3:=asympt(map(int,subs(O=0,asympt(ln(1/x+t)/(1+t^2),t)), t=x..infinity),x); 1 ln x + 1 7/18 ln x 3 + +O 5 f 3 := x x3 x Il ne reste plus qu` sommer les trois contributions : a asympt(f1+f2-f3,x); ln x 1/2 ln x ln x 1 + 2+ 3 3 4 +O 5 2 x 4x x 8x x ` dfaut, une vrication Toutes les tapes du calcul ncessitent justication. A e e e e numrique est rconfortante : e e evalf(Int(ln(1+10*t)/(1+t^2),t=0..10)),evalf(subs(x=10,")); 3.394715756, 3.394715938 + O(1/100000) Exemple 13. Dans sa version la plus simple, la mthode de Laplace e sapplique ` des intgrales du type a e

et f (t) dt,
0

o` tend vers linni. Nous allons dtailler le calcul avec u e cos t . f (t) = 1+t Lide est simple : quand cro lintgrale se concentre au voisinage de e t, e lorigine (g. 7). Il sut alors de dvelopper la partie indpendante de au e e voisinage de lorigine et dintgrer terme ` terme : e a series(cos(t)/(1+t),t): readlib(laplace)(",t,lambda); 1 1 1 3 13 65 + 3 4+ 5 6 2 (la fonction laplace perd le O).

3. DEVELOPPEMENTS ASYMPTOTIQUES

213

Bien souvent, lintgrale ne se prsente pas directement sous la forme e e ci-dessus et il faut ly ramener par des changements de variables appropris. e Exemple 14. On tudie lintgrale suivante lorsque n tend vers linni : e e
b

sinn t dt,
0

b ]0, /2[ .

Cette intgrale ne se concentre pas ` lorigine, mais en b. Ceci sugg`re de e a e rcrire sinn t comme exp(n log sin t) et deectuer le changement de variable e log sin t = log sin b u : f:=Int(sin(t)^n,t=0..b): student[changevar](log(sin(t))=log(sin(b))-u,f,u): simplify(",trig,exp); n (sin(b)eu ) sin(b)eu du 1 sin(b)2 e2u 0 Il reste ` isoler la partie qui dpend de n de celle qui nen dpend pas, ` a e e a dvelopper cette derni`re et ` intgrer terme ` terme : e e a e a subs(csgn(cos(b))=1,sin(b)^(n+1)*laplace(simplify( series(exp(-u)/sqrt(1-sin(b)^2*exp(-2*u)),u,3)),u,n)); 1 1 3 + 2 cos(b)2 sin(b)n+1 3 n2 cos(b)n cos(b) cos(b)5 n3 L` encore, le terme en O a t perdu, il faut penser ` le rintroduire si lon a ee a e souhaite poursuivre le calcul. 3.6. Solutions dquations direntielles. Les quations direntielles e e e e linaires ` coecients polynomiaux jouent un rle important en calcul formel e a o : elles donnent acc`s par une information reprsentable en machine (les coefe e cients) ` de nombreuses fonctions spciales. Lune des oprations qui peut a e e seectuer directement sur les quations, sans avoir ` rsoudre, est le cale a e cul du comportement des solutions au voisinage dun point du plan, mme e lorsquil sagit dune singularit. Les singularits se trouvent parmi les racines e e du coecient de tte. Le comportement en leur voisinage est toujours une e combinaison linaire de dveloppements de la forme : e e
m

exp[Q(x1/d )]x
i=0 j

cij xj/d lni x,

o` x = z , est la singularit et Q est un polynme. Lorsque Q = 0 u e o dans tous les dveloppements, le point singulier est dit rgulier. Sinon, il est e e irrgulier. e La thorie permet de calculer toutes les constantes intervenant dans ces e expressions et de produire un dveloppement complet. Maple ne conna e t malheureusement que les points singuliers rguliers. Cette fonctionnalit est e e accessible par la commande dsolve, avec loption series : eq:=z^2*diff(y(z),z,z)-z*diff(y(z),z)-(z+1)*y(z)=0;

214

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

z2

2 y(z) z y(z) (z + 1)y(z) = 0 z 2 z

Order:=3: simplify(dsolve(eq,y(z),series)); y(z) = C1 z 1


2

z2 z + 1 + 2 2 4 1 + 2 2
2

21

+ O z3

+ C2 z 1+

1+

z2 z + + O z3 1+2 2 4 1+2 2 1+ 2

Lorsque la singularit nest pas ` lorigine, il faut dabord ly ramener par un e a changement de variables. 3.7. Sries gnratrices. Le comportement asymptotique dune suite se e e e lit sur les singularits de sa fonction gnratrice. La position des singue e e larits de plus petit module donne la croissance exponentielle. Le comportee ment de la fonction au voisinage de ces singularits donne la croissance souse exponentielle. Un exemple de cette mthode de calcul asymptotique a dj` e ea t prsent, pour le cas des suites solutions de rcurrences linaires ` coeee e e e e a cients constants. Voici quelques autres exemples pour illustrer cette mthode. e Dans tous les cas les singularits sont polaires ou algbriques isoles, mais la e e e mthode stend ` dautres types de singularits. e e a e Formellement, les oprations ` faire sont les suivantes : e a localiser la ou les singularits de module minimal ; e calculer le dveloppement de la fonction gnratrice au voisinage de e e e cette (ces) singularit(s) ; e prendre les coecients terme ` terme, en utilisant le fait que a (9) (1 z/) = (n ) z n , () n!n n=0

N,

o` chacun des coecients est dvelopp par la formule de Stirling u e e (sauf bien sr si est entier). u Dans tous les exemples qui suivent, la fonction gnratrice est connue exe e plicitement. Cependant, il est important de noter quaucune de ces tapes ne e ncessite cette connaissance explicite (voir exercice 8). e Exemple 15. Un drangement de n objets est une permutation o` aucun e u des objets ne retrouve sa place initiale. Le nombre de drangements sur un e ensemble ` n lments vaut a ee n! n! n! + + + (1)n . cn = 2! 3! 4! La fonction gnratrice n0 cn z n /n! vaut donc e e ez . 1z

3. DEVELOPPEMENTS ASYMPTOTIQUES

215

La seule singularit de cette fonction est en 1, le dveloppement au voisinage e e de 1 est vident : e series(exp(-z)/(1-z),z=1,2); e1 + e1 + O(1 z) 1z dont on dduit e cn = n! e1 + O(1/n2 ) , le O tant ici tr`s pessimiste. Pour n = 10 lestimation asymptotique est dj` e e ea tr`s bonne : e convert([seq((-1)^i*10!/i!,i=2..10)],+),exp(-1.)*10!; 1334961, 1334960.916 Exemple 16. Si la commande ztrans tait bien faite, son application ` e a la rcurrence e
n

un+1 = un +
i=0

ui un1i ,

u0 = 1

tudie ` la n du chapitre VII donnerait lquation suivante satisfaite par la e e a e fonction gnratrice : e e (U (z) 1)/z = U (z) + U 2 (z). Lquation se rsout pour donner la valeur de U (z) : e e solve((U(z)-1)/z=U(z)+U(z)^2,U(z)); 1 1 6z + z 2 1 6z + z 2 1 1/2 , 1/2 + 2z 2z 2z 2z Seule la premi`re de ces deux solutions est rguli`re ` lorigine, cest donc elle e e e a la fonction gnratrice. Les singularits sont les zros de la racine carre : e e e e e fg:="[1]: solve(1-6*z+z^2,z); 3 + 2 2, 3 2 2 La singularit de plus petit module est la seconde racine. Il faut calculer le e dveloppement de la fonction gnratrice en ce point. Idalement il faudrait e e e e excuter series(subs(z="[2]*(1-t),fg),t,3). Mais series g`re mal les e e constantes et il est ncessaire daider Maple. Nous dcrivons une approche e e adapte ` la plupart des fonctions gnratrices algbriques (cest-`-dire racines e a e e e a dun polynme en y et z). Sur lquation dnissant la fonction U (z), les o e e singularits sont facilement reprables : ce sont les points o` le thor`me e e u e e des fonctions implicites cesse de sappliquer. Au voisinage de ces points, on eectue un changement de variables en utilisant le fait que le dveloppement e attendu est en puissances demi-enti`res. Il ne reste plus qu` appliquer une e a mthode de coecients indtermins comme en 2.3. e e e eq:=numer((U-1)/z-(U+U^2)): assign(solve(subs(U=U0,z=z0,{eq,diff(eq,U)}),{z0,U0})): evala(Normal(numer(subs(z=z0*(1-t^2),U=U0+V,eq)))): s:=series(subs(V=convert([seq(a[i]*t^i,i=1..5)],+),"),t,7): solve(coeff(s,t,2),a[1]);

216

VIII. SERIES ET DEVELOPPEMENTS ASYMPTOTIQUES

2 2 17 3 RootOf(1 6 Z + Z 2 ), 17 3 RootOf(1 6 Z + Z 2 ) 2 2 Les lments de la suite un tant tous positifs, la fonction U (z) est croisee e sante jusqu` sa singularit et donc, dapr`s les normalisations eectues, a e e e cest la racine ngative quil faut considrer. Tous les autres coecients sen e e dduisent, do` le dveloppement cherch en utilisant (9) : e u e e a[1]:="[1]: for i from 2 to 5 do a[i]:=solve(coeff(s,t,i+1),a[i]) od: r:=asympt(convert([seq(a[2*i+1]*GAMMA(n-i-1/2)/ GAMMA(-i-1/2),i=0..2)],+)/n!,n,4): simplify(subs(z0=3-2*sqrt(2),z0^(-n)* map(evala,map(Normal,combine(map(normal,r),exp))))); (3 2 2)
(n)

3 25 + 18 2 4+3 2 2 n3/2 32 4 + 3 2 n5/2

5 964 + 687 2 + O n9/2 + 2048 4 + 3 2 n7/2

3.8. Exercices. 1. Calculer le dveloppement asymptotique lorsque n N tend vers linni e de sin(2en!). Vrier numriquement le dveloppement obtenu. e e e 2. En utilisant le rsultat de lexercice 3 p. 204, calculer le comportement e asymptotique de la valeur du terme maximum de la srie du sinus intgral e e de Fresnel, lorsque x tend vers linni. Calculer ensuite la valeur de N telle que la valeur absolue du N e terme de la srie p. 189 vaille , tendant e vers 0. 3. Calculer le dveloppement asymptotique de la fonction y(x) dnie par y+ e e log y = x, lorsque x tend vers +. 4. Nature de n=1 un , o` u un = 1 n
n

log2 k.
k=1

5. Calculer le dveloppement asymptotique de e (1 + 1/n)n


n1
2

xn n!

lorsque x . 6. Soit An le nombre dentiers i {1, . . . , n} tels que le reste de la division de n par i vaut au moins i/2. Donner un quivalent de An . [Indication : e considrer une somme de Riemann.] e

3. DEVELOPPEMENTS ASYMPTOTIQUES

217

7. Calculer le dveloppement asymptotique lorsque x de e


x 1 0

log t dt, t2

/2

ex cos(t) dt,
0 0

(1 t2 )x dt,
+

[log(1 + t)]x dt,


0

sin t tx dt,

ext

1 + t2 dt.

8. Dterminer le comportement asymptotique du ne coecient de Taylor de e la fonction T (z) dnie par e T (z) = 1 + zT 2 (z) + z 2 T 5 (z). 9. On souhaite dterminer la limite quand n de la primitive e [(n + 1)cn+1 ex ncn ]e1/(1+e ) dx, t enx (ex + 1)2 0 o` la suite cn est dnie par c0 = 1, c1 = 1 et u e ncn + (2n 1)cn1 + (n 2)cn2 = 0, n > 1. (1) Calculer et rsoudre lquation direntielle satisfaite par la fonction e e e gnratrice de la suite {cn } ; e e (2) en dduire la fonction gnratrice de lintgrande puis de lintgrale ; e e e e e (3) localiser la singularit dominante en fonction de t et en dduire la e e limite.
t
x

CHAPTER IX

Intgrales et primitives e
e egrales de primitives est un L calcul dintbeaucoup `etapporter. une eet,rationdomaineeauquel le calcul formel a a En obtenir lexpression dune primitive ou dune intgrale dnie est e e op e en gnral dicile ` e a raliser ` la main, autant en raison de la taille des calculs quen raison e a des connaissances mathmatiques ncessaires. Les classes dintgrales que e e e les syst`mes savent calculer sont bien dlimites et leur connaissance pere e e met de guider les calculs. Nous dcrivons ces classes dans ce chapitre. Nous e commenons par les calculs de primitives, puis nous abordons les intgrales c e dnies, et nous concluons le chapitre par le cas des intgrales dpendant dun e e e param`tre. e 1. Primitives Autant le calcul de drives est souvent ralisable ` la main lorsque e e e a lexpression nest pas tr`s complique, autant celui de primitives est gnralee e e e ment dicile. Pour une fonction aussi simple que 1/(x3 + 1) le calcul manuel dune primitive est loin dtre immdiat. En revanche un syst`me de calcul e e e formel donne immdiatement une rponse : e e int(1/(1+x^3),x); 1 1 1 1 ln(x + 1) ln(x2 x + 1) + 3 arctan (2x 1) 3 3 6 3 3 Mme le recours ` des tables de primitives nest ni pratique ni toujours e a tr`s sr (certains citent le chire de plus de 10% derreurs dans ces tables !). e u Les mthodes utilises habituellement pour calculer ` la main des primie e a tives sont plutt de nature heuristique : table des intgrales connues, changeo e ment de variables, intgration par parties, dcoupage de lintgrande, ree e e connaissance de motifs... Ces mthodes permettent souvent de trouver une e primitive assez rapidement, mais en aucun cas elles ne permettent de conclure en cas dchec. Les techniques employes par les syst`mes de calcul e e e formel sont dune autre nature. Les heuristiques du calcul manuel sont employes dans un premier temps, pour leur rapidit. Puis des algorithmes e e bass sur des thor`mes dalg`bre direntielle prennent le relais. Alors, pour e e e e e des classes bien dnies dexpressions, sur lesquelles nous allons revenir, la e rponse ngative du syst`me est plus quun constat dchec : il sagit dune e e e e preuve que la fonction na pas de primitive lmentaire. Le sens prcis du ee e terme lmentaire sera dni plus bas. ee e
219

220

IX. INTEGRALES ET PRIMITIVES

Nous allons passer en revue dans les paragraphes suivants les direntes e classes de fonctions quun syst`me de calcul formel sait intgrer. e e 1.1. Fractions rationnelles. Pour calculer lintgrale dune fraction rae tionnelle p(x)/q(x), la mthode classique consiste ` la dcomposer en lments e a e ee simples, cest-`-dire si le corps de base est C, ` la mettre sous la forme : a a
i p(x) Ai,j = b(x) + q(x) (x ai )j i=1 j=1

o` b(x) est un polynme. Lintgration ne pose alors aucun probl`me. La u o e e seule dicult, et elle est de taille, consiste ` trouver les ai , ples de la fraction e a o rationnelle, ce qui revient ` factoriser q(x) sur C. Bien que les syst`mes de a e calcul formel soient capables de factoriser les polynmes sur Q, la factorisation o sur C est une opration extrmement coteuse qui de plus nest pas ncessaire e e u e a lintgration. ` e Lintgration des fractions rationnelles pose deux probl`mes aux syst`mes e e e de calcul formel. Dune part il faut viter de faire trop grossir les expressions. e Par exemple, Maple calcule la primitive de 5x4 + 60x3 + 255x2 + 450x + 275 x5 + 15x4 + 85x3 + 225x2 + 274x + 120 sous la forme : int((5*x^4+60*x^3+255*x^2+450*x+275)/ (x^5+15*x^4+85*x^3+225*x^2+274*x+120),x); 25 ln(x + 5) 5 ln(x + 4) 5 ln(x + 3) 5 ln(x + 2) 25 ln(x + 1) + + + + 24 6 4 6 24 Il est galement possible dexprimer cette primitive en fonction du logae rithme dun seul polynme, mais ce polynme est de degr 120 et ses coeo o e cients sont de lordre de 1068 . Le second probl`me est illustr par la fraction rationnelle 1/(z 2 2). Sa e e primitive vaut : int(1/(z^2-2),z); 2 z 2 arctanh 2 2 Le nombre 2 appara dans le rsultat et on peut montrer quil nexiste t e pas de primitive de cette fonction o` ce nombre nappara pas (` moins u t a dutiliser lexponentielle). Dans le cas gnral, il nest pas possible dintgrer e e e des fractions rationnelles sans faire appel ` des nombres algbriques. Une des a e dicults consiste alors ` exprimer le rsultat avec des nombres algbriques e a e e de degr le plus petit possible. e Exemple 1. La dcomposition en lments simples sur Q de 1/(x6 + 1) e ee ne donne pas les ples de f (x) car ils ne sont pas rationnels. Les nombres o algbriques qui interviennent sont tous de degr 2 : e e f:=1/(1+x^6);

1. PRIMITIVES

221

f := int(f,x);

1 1 + x6

1 1 1 3 ln(x2 3x + 1) + arctan(2x 3) arctan(x) 3 12 6 1 1 2 + 3 ln(x + 3x + 1) + arctan(2x + 3) 12 6 Exemple 2. Le polynme x5 + x2 + 2 est irrductible sur Q. La primitive o e de (x6 +1)/(x5 +x2 +2) fait donc intervenir des nombres algbriques de degr 5. e e Les syst`mes de calcul formel qui ne disposent pas de nombres algbriques sont e e par consquent incapables de la calculer. e f:=(1+x^6)/(2+x^2+x^5); f := int(f,x); 1 2 x + 2 1 + x6 2 + x2 + x5

R ln x
R=%1

55244064845502 4 1183145201920 3 R + R 251979825667 251979825667

25042172070863 2 3205221300291 R + R 1007919302668 251979825667 440585345352 + 251979825667

%1 := RootOf(50216 Z 5 2133 Z 3 3476 Z 2 632 Z 104) La sommation dans la solution est une somme sur toutes les racines du polynme argument de RootOf. Pour vrier le rsultat il sut de le driver : o e e e normal(diff(",x)); 1 + x6 2 + x2 + x5 Ce rsultat symbolique peut assister lvaluation numrique de lintgrale. Il e e e e sut de calculer numriquement les racines du polynme et la formule cie o dessus permet alors un calcul rapide et ` prcision arbitraire de lintgrale. a e e Exemple 3. Lexemple suivant illustre la capacit de lalgorithme ` rechere a cher le rsultat dans les extensions algbriques du plus petit degr possible. e e e f:=(7*x^13+10*x^8+4*x^7-7*x^6-4*x^3-4*x^2+3*x+3)/ (x^14-2*x^8-2*x^7-2*x^4-4*x^3-x^2+2*x+1); 7x13 + 10x8 + 4x7 7x6 4x3 4x2 + 3x + 3 f := x14 2x8 2x7 2x4 4x3 x2 + 2x + 1 convert(f,parfrac,x); 7x13 + 10x8 + 4x7 7x6 4x3 4x2 + 3x + 3 x14 2x8 2x7 2x4 4x3 x2 + 2x + 1 int(f,x);

222

IX. INTEGRALES ET PRIMITIVES

1 1 ln(x7 2x2 + ( 2 1)x 1) 2 + ln(x7 2x2 + ( 2 1)x 1) 2 2 2 1 1 7 + ln(x + 2x + ( 2 1)x 1) ln(x7 + 2x2 + ( 2 1)x 1) 2 2 2 Dans cet exemple, le dnominateur est irrductible de degr 14, mais les e e e nombres algbriques ncessaires ` lexpression de la solution sont de degr au e e a e plus 2, rsultat dicile ` obtenir sans un syst`me de calcul formel. e a e En conclusion, toutes les fractions rationnelles ` coecients dans un corps a K admettent une primitive exprime ` laide dune fraction rationnelle ` coe a a ecients dans K et dune somme de logarithmes de polynmes ` coecients o a dans une extension algbrique de K. e En pratique, lorsque K = Q, Maple parvient toujours au rsultat et il e devrait toujours y parvenir lorsque K est une extension algbrique de Q. e Exemple 4. Voici un exemple o` le corps de base est Q( 2, ) : u f:=1/(sqrt(2)+Pi*x+x^5); 1 f := 2 + x + x5 int(f,x); R ln (4 R + 1)x + 5 2 R
R=%1

%1

:=

RootOf (256 5 + 12500) Z 5 160 Z 3 3 80 Z 2 2 15 Z 1

Pour calculer lintgrale dune fraction rationnelle o` interviennent des e u nombres ottants, Maple commence par convertir ces nombres en rationnels, puis eectue le calcul et le rsultat obtenu est transform ` nouveau en nome ea bres ottants. Lorsque Digits est lev, cette conversion est parfois coteuse. e e u Exemple 5. f:=(1.2*x+1)/(2.3*x^2+x-0.1); 1.2x + 1 f := 2.3x2 + x .1 int(f,x); .2608695652 ln(23.x2 + 10.x 1.) 1.066842889 arctanh(3.319764049x + .7216878367) 1.2. Fonctions lmentaires. La classe des fractions rationnelles est inee cluse dans la classe des fonctions lmentaires. Pour toutes les fonctions de ee cette derni`re classe, le calcul formel dispose dun algorithme de recherche e de primitive. Lalgorithme m`ne soit ` une primitive soit ` la preuve quune e a a primitive lmentaire nexiste pas. ee Les fonctions lmentaires sont les fonctions bties ` partir des fractions ee a a rationnelles ` coecients dans un corps K (en pratique K = Q) par applicaa tion rpte de lexponentielle, du logarithme, des oprations +, , , et e ee e de lopration de clture algbrique. e o e

1. PRIMITIVES

223

Par exemple lensemble des fonctions lmentaires sur Q(x) contient la ee fonction 3 x3 1, solution de lquation y 3 x3 + 1 = 0 et la fonction ln(x5 + e x + 1). Il contient aussi les fonctions trigonomtriques car, par exemple, e eix eix , 2i i tant obtenu comme solution de y 2 + 1 = 0. De mme les fonctions e e trigonomtriques inverses sont lmentaires. Par exemple, e ee i+x i . arctan x = ln 2 ix sin x = Pour une fonction lmentaire, le principe de Liouville (env. 1875) ee donne la forme de sa primitive si cette derni`re est elle aussi lmentaire et le e ee thor`me de structure de Risch (1969) fournit un algorithme qui permet de e e dcider si une fonction lmentaire a une primitive lmentaire ou non. e ee ee En pratique, limplantation de Maple est compl`te pour les extensions e purement transcendantes, cest-`-dire celles o` aucune fonction algbrique a u e nintervient. Dans ce cas, lchec du syst`me prouve linexistence dune prime e itive lmentaire. Dans le cas des extensions algbriques, limplantation est ee e encore incompl`te, certaines primitives sont trouves par le syst`me, mais il e e e choue parfois alors quune primitive lmentaire existe. e ee Exemple 6. Voici un exemple de fonction purement transcendante admettant une primitive lmentaire. Le syst`me la trouve sans peine : ee e f:=exp(x^3+1)*(3*x^3-1)/x^2; 3 e(x +1) (3x3 1) f := x2 int(f,x); 3 e(x +1) x Exemple 7. Voici une autre fonction purement transcendante : int(1/(ln(x^3+1)),x); 1 dx 3 + 1) ln(x Ce rsultat non valu prouve que 1/ln(x3 + 1) na pas de primitive lmentaire. e e e ee Exemple 8. Le cas de lintgration dune fonction lmentaire algbrique e ee e est plus dicile. Nous avons dj` mentionn que Maple ne peut intgrer toutes ea e e les fonctions algbriques. En outre, le programme ncessite parfois lemploi e e de la notation RootOf. La commande alias simplie les expressions. f:=(x^2+1)^(1/3)/x: int(f,x); (x2 + 1)1/3 dx x alias(alpha=RootOf(z^3-x^2-1,z)): f:=convert(f,RootOf); f := x

224

IX. INTEGRALES ET PRIMITIVES

int(f,x); 3 3 2 2 ln (48%1 55 9%1 + 9%1 x2 + 27x2 %1 22x2 2 2 45%1 54 45%12 542 )/x2 %1 1 2 2 ln (48%1 55 9%1 + 9%1 x2 + 27x2 %1 22x2 2 45%1 54 45%12 542 )/x2 3 2 2 + %1 ln (8 + 18%1 9%1 6x2 + 3x2 %1 + 9%1 x2 2 + 21%1 7 + 21%12 72 /x2 ) %1 := RootOf(9 Z 2 + 3 Z + 1) Cet exemple illustre une dicult dutilisation des intgrateurs actuels : lvae e e luation numrique (par exemple en x = 1) produit une partie imaginaire non e nulle, ce qui nest gnralement pas souhait. e e e Exemple 9. Voici une fonction algbrique admettant une primitive le ee mentaire que Maple ne parvient pas ` trouver : a dx (2x 1)3
3

x(x 1)2

Pour parvenir ` la calculer, il sut deectuer le changement de variable a x1 . x Nous verrons en 1.4 comment sy prendre. t=
3

` A lheure actuelle, le seul syst`me de calcul formel qui implante compl`tee e ment lalgorithme de Risch est Axiom. 1.3. Autres fonctions. Un certain nombre dintgrales simples ne sexprie ment pas ` laide des fonctions lmentaires. Par leur frquente apparition et a ee e leur importance dans certaines applications, quelques-unes dentre elles ont reu un nom et font partie des fonctions spciales. Les plus importantes de c e celles que conna Maple sont la fonction derreur, lexponentielle intgrale, le t e sinus intgral et le cosinus intgral, soit respectivement e e 2 erf(x) =
x 0

et dt,

ext dt, Si(x) = tn 1 x i cos t 1 Ci(x) = + ln(ix) + dt. 2 t 0


2

x 0

Ei(n, x) =

sin t dt t

Deux autres fonctions importantes pour lintgration sont reconnues e par Maple : la fonction Heaviside(t) qui est nulle pour t < 0 et vaut 1 pour t 0, et sa drive la fonction Dirac(t). e e

1. PRIMITIVES

225

Toutes ces fonctions sont connues du syst`me, en ce sens quil est possible e de les valuer numriquement, de les driver, den calculer le dveloppement e e e e en srie,... Il est galement possible den intgrer certaines. Il ne sagit plus l` e e e a dune classe dexpressions pour laquelle lintgration est garantie. Ceci signie e que lorsque Maple ne trouve pas de primitive dune expression comportant des fonctions spciales, cela nquivaut pas ` une preuve de linexistence dune e e a primitive dans cette classe. Cependant quelques heuristiques permettent au syst`me dintgrer certaines de ces fonctions ou de les utiliser pour exprimer e e des primitives de fonctions lmentaires. ee Exemple 10. Nous protons ici de la dirence entre la commande e dintgration int et sa forme inerte Int. e f:=exp(x^2+1)/x: Int(f,x) = int(f,x); 2 1 e(x +1) = Ei(1, x2 )e x 2 f:=sin(x^2+1)/x: Int(f,x) = int(f,x); 1 1 sin(x2 + 1) = cos(1) Si(x2 ) + sin(1) Ci(x2 ) x 2 2 int(Heaviside(x)*x^2,x); 1 3 x Heaviside(x) 3 int(Dirac(x)*Dirac(x-t),x); Heaviside(x) Dirac(t) Exemple 11. Dautres fonctions spciales, comme les fonctions de Bessel, e sont traites par des heuristiques du mme type : e e int(x^4*BesselJ(2,x)*BesselJ(1,x),x); 1 5 x (BesselJ(2, x) BesselJ(1, x) + BesselJ(3, x) BesselJ(2, x)) 8 1.4. Commandes de rcriture. Lorsque la fonction ` intgrer (ou sa prime a e itive) nest pas lmentaire, et que les heuristiques ont chou, il se peut ee e e que lintgrale, ou une partie, puisse tre ramene par rcriture dans une e e e e classe de fonctions que le syst`me sait intgrer. Les deux oprations prine e e cipales de rcriture sont le changement de variable et lintgration par pare e ties. Ces techniques sappliquent galement aux fonctions algbriques qui, e e quoiqulmentaires, celles-ci ne sont pas encore bien intgres par Maple. ee e e 1.4.1. Changement de variable Sous de bonnes conditions de direntiabilit le changement de variable e e x = (t) permet de transformer F (x) = f (x) dx en F [(t)] = f [(t)] (t) dt.

La commande Maple correspondante se nomme changevar et se trouve dans le package student.

226

IX. INTEGRALES ET PRIMITIVES

Exemple 12. Maple ne sait pas calculer la primitive suivante : e:=1/(1+((x+1)/x)^(1/3)): int(e,x); 1 dx 1/3 x+1 1+ x Or les expressions de la forme R x,
n

ax + b cx + d

dx

o` R(u, v) est une fraction rationnelle en u et v (a, b, c, d tant des constantes u e et n un entier) se ram`nent ` des primitives de fractions rationnelles par le e a changement de variable ax + b . t= n cx + d student[changevar]((x+1)/x=t^3,Int(e,x),t); t2 3 dt (1 + t)(1 t3 )2 value("); 1 1 1 1 1 t1 3 + ln(t 1) + ln(t2 + t + 1) + 2 ln(1 + t) + 4 6 t 1 12 3 3t +t+1 Les fonctions Int et value ont t prsentes au 2.3.5 du chapitre I. Pour ee e e trouver la primitive cherche, il sut de remplacer dans la valeur obtenue t e par 3 x + 1 . x 1.4.2. Intgration par parties e La fonction arcsin est lmentaire, mais nest pas purement transcendante ee a ` cause de la racine carre : e arcsin x = i ln( 1 x2 + ix). Maple obtient facilement la primitive de arcsin x : int(arcsin(x),x); x arcsin(x) + 1 x2 En revanche il ne trouve pas celle de arcsin2 x : intarc:=int(arcsin(x)^2,x); intarc := arcsin(x)2 dx Comme la drive de arcsin x est 1/ 1 x2 , lintgration par parties vient e e e facilement ` bout de cette intgrale et plus gnralement de celle de arcsinn x. a e e e La formule de lintgration par parties, en supposant quil ny ait pas de e probl`me de direntiabilit, est : e e e u(x)v (x)dx = u(x)v(x) u (x)v(x)dx

2. INTEGRALES DEFINIES

227

Il faut donc donner ` la commande student[intparts] dintgration par a e parties lintgrale ` calculer et la partie u(x) ` driver (qui nappara pas e a a e t obligatoirement, Maple divisant lintgrande par u(x) pour trouver la partie e a ` intgrer). Lintgration de arcsin2 x se m`ne alors facilement en ralisant e e e e deux intgrations par parties successives. e student[intparts](intarc,arcsin(x)^2); arcsin(x)x dx arcsin(x)2 x 2 1 x2 student[intparts](",arcsin(x)); arcsin(x)2 x + 2 arcsin(x) 1 x2 + value("); arcsin(x)2 x + 2 arcsin(x) 1 x2 2x Ce processus peut tre rpt autant de fois que ncessaire pour calculer e e ee e la primitive de puissances plus leves de arcsin x. Par exemple pour calculer e e la primitive de arcsin4 x, on intgrera par parties en prenant u(x) = arcsin4 x, e puis une nouvelle fois avec u(x) = arcsin3 x et ainsi de suite, la derni`re e intgration par parties tant eectue avec u(x) = arcsin x. e e e Le calcul de lintgrale dans le cas de n entier quelconque sera repris e au 3.2. 2. Intgrales dnies e e En mati`re dintgration numrique, la connaissance dune primitive pere e e met de rduire les temps de calculs et dviter les probl`mes dinstabilit e e e e numrique. e Par exemple si lon doit calculer une intgrale du type e
b(x)

2 dx

f (x, y)dy
a(x)

pour un grand nombre de valeurs de x et que la primitive a une expression analytique, il est bien plus ecace de passer du temps ` calculer cette expresa sion une fois pour toutes puis ` lvaluer ensuite numriquement plutt que a e e o de faire chaque fois lintgration numrique. e e Cette situation se produit en particulier lorsque, dans une intgrale mule tiple, on peut intgrer formellement une partie de lintgrale, comme dans e e lexemple suivant. Le temps de lintgration formelle est tr`s court et la cone e naissance de la primitive permet de gagner un facteur 20 dans lvaluation e numrique. e Exemple 13. i:=Int(Int(sqrt(2-x^2-y^2),y=0..x),x=0..1);
1 x

i :=
0 0

2 x2 y 2 dy dx 113.400

st:=time(): evalf(i),time()-st; .5685164493,

228

IX. INTEGRALES ET PRIMITIVES

i:=int(int(sqrt(2-x^2-y^2),y=0..x),x=0..1);
1

i :=
0

1 2

1 2 2x2 x + I ln(Ix + 2 I ln(Ix +

2 2x2 )x2

1 2 2x2 ) + I ln( 2 x2 ) I ln( 2 x2 )x2 dx 2 st:=time(): evalf(i),time()-st; .5685164493 + .55082610681014 I, 5.967 Dans cette section, nous passons en revue les direntes classes dintgrales e e dnies que Maple sait calculer : soit ` partir dune primitive, soit par e a recherche dans une table, soit par transforme de Laplace ou de Fourier. e Nous traitons ensuite les intgrales multiples et lintgration numrique. e e e 2.1. Utilisation dune primitive. Pour calculer
b

f (x) dx,
a

la mthode classique consiste ` calculer une primitive F (x) de f (x), puis ` e a a eectuer F (b) F (a), ou bien dans le cas des intgrales impropres e
xb

lim F (x) lim+ F (x).


xa

Il est ` noter que ce dernier cas ne pose en gnral pas de probl`me particulier. a e e e De plus, Maple sait calculer un certain nombre dintgrales impropres autre e que celles dont il sait calculer la primitive (voir le 2.2). Cette mthode nest pas valide sans quelques hypoth`ses sur f . La e e vrication de ces hypoth`ses pose parfois probl`me aux syst`mes de cale e e e cul formel. Les deux principales dicults sont la dtection de singularits e e e dans lintervalle dintgration et le choix de la bonne branche des fonctions e multiformes. 2.1.1. Singularits dans lintervalle dintgration e e Lexemple le plus simple est celui de
1 1

1 dx. x2

f:=1/x^2;F:=int(f,x): int(f,x=-1..1),subs(x=1,F)-subs(x=-1,F); , 2 La formule F (b)F (a) ne sapplique pas ` cause du ple en 0, mais Maple a o trouve le bon rsultat car il commence par essayer de reprer les discontinuits e e e en utilisant la fonction discont. La puissance de cette commande est limite e par celle de solve. Il faut donc faire attention lorsque les singularits de e la fonction nont pas de forme analytique ou lorsque la fonction ` intgrer a e dpend dun param`tre. e e

2. INTEGRALES DEFINIES

229

Exemple 14. Le dnominateur z 2 exp(z) 2z 1 sannule deux fois sur e lintervalle [1, 2], mais Maple ne sen rend pas compte, et fournit un rsultat e alors que la fonction nest pas intgrable sur cet intervalle. e f:=(2*z*exp(z)+z^2*exp(z)-2)/(z^2*exp(z)-2*z-1): int(f,z=-1..2); ln(4e2 5) ln(e1 + 1) Exemple 15. Le calcul suivant nest valable que pour a [1, 1]. / int(1/(x-a)^2,x=-1..1); 1 1 1 + a 1 + a Exemple 16. Il est ` noter que mme lorsque la fonction f est continue, la a e primitive F trouve peut ne pas ltre, ce qui complique le calcul dintgrales e e e dnies : e f:=1/(3+2*cos(x)): F:=int(f,x); 2 1 1 tan( x) 5 F := 5 arctan 5 5 2 int(f,x=0..2*Pi), eval(subs(x=2*Pi,F)-subs(x=0,F)); 2 5, 0 5 Ici, Maple a dtect la discontinuit de F en x = , et le rsultat donn par e e e e e int est correct. 2.1.2. Fonctions multiformes Les techniques utilises pour calculer des primitives prtent peu attention e e au domaine de dnition de la fonction ` intgrer. La formule renvoye par e a e e le syst`me est correcte, en ce sens que sa drive formelle est bien la fonce e e tion intgre. Cependant, cette primitive peut ne pas tre dnie sur tout e e e e lintervalle dintgration. Dans les exemples que nous avons vus ci-dessus, la e primitive cessait dtre dnie ` cause de la prsence dune singularit dans e e a e e lintervalle. Une autre cause frquente dincorrection est un changement de e dtermination dune fonction multiforme. e Exemple 17. Le rsultat suivant est faux : e f:=t->sin(t)*cos(t)*ln(tan(t)): Int(f(t),t=0..Pi/2)=evalc(int(f(t),t=0..Pi/2)); /2 1 sin(t) cos(t) ln(tan(t)) dt = I 2 0 La bonne valeur est 0, car f (/4 + u) est impaire : simplify(f(Pi/4+u)+f(Pi/4-u)); 0 Lorsque lintgrande lui-mme contient une fonction multiforme, Maple e e choisit lune des formes a priori : f:=sqrt(1-cos(x)^2): F:=int(f,x);

230

IX. INTEGRALES ET PRIMITIVES

F := cos(x) Ici la primitive cos(x), qui correspond ` lintgrande sin(x), nest correcte a e que pour (2k 1) x 2k. Sur les autres intervalles, cette primitive donne des rsultats aberrants : e int(f,x=0..Pi); 2 2.1.3. Fonctions complexes Un autre cas de fonctions multiformes peut appara lors de lintgration tre e de fonctions complexes. En eet, les fonctions obtenues lors de lintgration e peuvent par exemple tre dnies ` k pr`s, et le syst`me de calcul formel e e a e e peut tr`s bien prendre des dterminations non compatibles lors des calculs. e e Cest le cas pour lexemple suivant : Exemple 18. Calculons
+

dx . 1 + (x + 2i)2

Maple donne le rsultat suivant : e f:=1/(1+(x+2*I)^2): int(f,x=-infinity..infinity); Ce rsultat est faux ! Pour le vrier, nous calculons sparment lintgrale e e e e e de la partie relle et de la partie imaginaire : e evalc(f); Ix 3 + x2 4 (3 + x2 )2 + 16x2 (3 + x2 )2 + 16x2 map(int,",x=-infinity..infinity); 0 Lexplication de lerreur se trouve en calculant la primitive et sa limite pour x tendant vers et + : int(f,x); arctan(x + 2I) limit(",x=infinity), limit(",x=-infinity); 1 1 , 2 2 evalc(map(int,evalc(f),x)); 1 1 1 1 1 1 arctan(x) + arctan( x) ( signum(x2 + 9)) 2 2 3 4 2 2 1 1 1 2 + ( signum(x + 1)) 4 2 2 1 1 + I( ln(|x2 + 9|) ln(|x2 + 1|)) 4 4 limit(",x=infinity), limit(",x=-infinity);

2. INTEGRALES DEFINIES

231

0, 0 Cet arctan complexe se rcrit en terme de logarithme : e 1 3 ix i ln( ) 2 1 + ix formule ` laquelle on peut arriver en simpliant le rsultat de a e convert(arctan(x+2*I),ln); Il est alors clair par composition des limites que la limite est la mme e en en prenant les mmes dterminations principales pour le logarithme e e complexe. Maple semble ignorer dans son calcul que largument de arctan est un nombre complexe. 2.2. Classes dintgrales dnies. Outre les fonctions dont il sait dtere e e miner une primitive, Maple sait calculer plusieurs classes dintgrales dnies e e sans passer par le calcul de la primitive. Cest en particulier ainsi que le syst`me calcule de nombreuses intgrales impropres. e e Les classes dintgrales dnies reconnues voluent de version en version. e e e La technique est simplement base sur une recherche dans des tables de fore mules, o` il ne reste plus qu` dterminer les valeurs des param`tres. En u a e e outre, une cinquantaine dintgrales dnies lmentaires sont stockes dans e e ee e la table de remember de la fonction int/def. Voici les classes dintgrales reconnues par la version actuelle (ce qui veut e dire que dans ces cas, des conditions supplmentaires sur les param`tres sont e e testes, qui peuvent ou non mener ` une valeur) : e a

(1)

P (x) exp(ax2 + bx + c) dx,

o` P (x) est un polynme en x ; u o


ou 1

(2)
x

exp(u1 ts1 + u2 ts2 )tv lnm (btd1 ) cos(ctr ) dt, ( + f d )p

o` f est soit t soit exp(wt), et le cosinus peut tre remplac par un sinus ; u e e

(3)
0

exp(uts )tv lnm (btd1 ) erf(f tv + g) dt,

o` f est soit t soit exp(wt) ; u

(4)
0

p1 p exp(uts )tw Jk1 (ctd )Yk22 (ctd ) dt,

o` Jk et Yk sont les fonctions J et Y de Bessel dindice k ; u

(5)

cos(a sin t) cos(bt) dt,

o` les dirents cosinus et sinus peuvent tre intervertis. u e e Une autre classe est celle des intgrales elliptiques, dont lintgrande est e e une fraction rationnelle R(x, s(x)), o` s(x) est soit la racine carre dun u e

232

IX. INTEGRALES ET PRIMITIVES

polynme de degr infrieur ` 5, soit la racine cubique ou quatri`me dun o e e a e polynme de degr 2. o e Exemple 19. Dans cet exemple, la formule (2) sapplique avec v = 1/3, u1 = u2 = c = 0, = d = m = b = d1 = 1, = 1, p = 1/2 : f:=(x^(-1/3))*ln(x)*((1-x)^(1/2)): int(f,x); ln(x) 1 x dx x1/3 normal(int(f,x=0..1)); 1 3 42 + 7 3 63 ln(3) 288 42 ( 6 ) ( 2 ) ( 5 ) 3 6 98 o` est la drive logarithmique de la fonction . u e e Exemple 20. Ici encore la formule (2) sapplique : f:=exp(-x^2+1)/x; 2 e(1x ) f := x int(f,x=1..infinity); 1 eEi(1, 1) 2 Un tel rsultat permet en particulier une valuation numrique avec une e e e prcision arbitraire e evalf(",30); .298173681161597037170539249684 Exemple 21. Cette intgrale elliptique est donne en terme de la fonce e tion F de Legendre : f:=1/sqrt((1-x^2)*(1-4*x^2)); 1 f := 2 )(1 4x2 ) (1 x int(f,x=1..3); 1 1 1 1 1 LegendreF(1, ) LegendreF( , ) 2 2 2 3 2 evalf("); .6721475221 2.3. Mthode des rsidus. La mthode des rsidus peut servir ` calculer e e e e a certaines intgrales impropres. e Supposons en eet que lon veuille calculer lintgrale e
0

cos x dx, x2 + a2

a > 0.

Maple donne un rsultat complexe insatisfaisant : e assume(a>0):int(cos(x)/(x^2+a^2),x=0..infinity); 1 I(I sinh(a) + cosh(a) + I cosh(a)) 1 cosh(a) + 2 a 2 a Im(");

2. INTEGRALES DEFINIES

233

1 cosh(a) 2 a Si lon remarque que cette intgrale est gale ` e e a 1 2


eix dx, x2 + a2

la fonction sin x tant impaire, Maple donne 0 comme rsultat, ce qui est faux e e (voir le 2.1.2). f:=exp(I*x)/(x^2+a^2)/2; 1 e(Ix) f := 2 x2 + a2 int(f,x=-infinity..infinity)/2; 0 On peut utiliser la mthode des rsidus pour calculer cette intgrale. On e e e consid`re la fonction complexe correspondante e 1 eiz . 2 z 2 + a2 Les seuls ples de la fonction tant les points z = ai et z = ai de laxe o e imaginaire, on peut intgrer f (z) selon un lacet form du segment rel e e e [R, R] avec R > a et du demi cercle 1 de centre O et de rayon R situ dans e le demi-plan des parties imaginaires positifs. On a alors : f (z) =
R

f (z)dz =
R

f (x)dx +
1

f (z)dz = 2i Resai f f (Reit )d(Reit )


0

avec
1

f (z)dz =
R R+

La valeur cherche est alors e lim f (x)dx.


R

Tout ces calculs se font aisment en Maple. La fonction residue (quil faut e charger) permet de calculer le rsidu. e f1:=subs(x=R*exp(I*t),f)*diff(R*exp(I*t),t); f1 := int(f1,t=0..Pi); 1 I(ea Ei(1, a + IR) + e(a) Ei(1, IR a)) 4 a 1 I(ea Ei(1, IR + a) + e(a) Ei(1, IR a)) 4 a limit(",R=infinity); 0 readlib(residue)(f,x=a*I)*2*Pi*I; 1 Ie(IRe ) Re(It) 2 R2 (e(It) )2 + a2
(It)

234

IX. INTEGRALES ET PRIMITIVES

1 e(a) 2 a a Et on obtient le rsultat cherch qui est gal ` e e e a e . 2a 2.4. Transformes intgrales. Les transformes intgrales sont un cas pare e e e ticulier dintgrales impropres ` un param`tre que le syst`me calcule en e a e e recherchant dans une table. Par une aberration dorganisation du logiciel, la fonction int ne sait pas reconna tre ces intgrales dnies ; cest donc ` e e a lutilisateur de les identier. Les transformes les plus connues sont la transforme de Laplace et la e e transforme de Fourier qui sont respectivement dnies par e e

L(s) =
0

f (t)est dt

et

F (s) =

f (t)eist dt.

Ces transformes sont tr`s utiles dans des domaines comme lautomatique e e ou le traitement du signal. Leur calcul en Maple, lorsquil est possible, est immdiat avec les fonctions laplace et fourier. e Exemple 22. laplace((Heaviside(t)*sin(t))/t+sin(3*t)/t,t,s); arctan(s) arctan(s/3) Pour obtenir ce rsultat avec int, il faut prciser que s est positif ou nul et e e intgrer chaque terme sparment. e e e La transforme de Laplace permet entre autres de rsoudre des quations e e e direntielles ou intgrales. e e Exemple 23. Pour rsoudre lquation intgrale e e e
t

sin t = 1 +
0

ex f (t x) dx,

t>0

en f (t), utilisons la transforme de Laplace et sa transforme inverse. e e eq:=sin(t)=1+int(exp(x)*f(t-x),x=0..t);


t

eq := sin(t) = 1 +
0

ex f (t x)dx

1 laplace(f (t), t, s) 1 = + 1 + s2 s s1 solve(",laplace(f(t),t,s)); 1 1 (s 1) 2 1+s s sol:=invlaplace(",s,t); sol := Dirac(t) + 1 + cos(t) sin(t) Vrions la cohrence du rsultat : e e e subs(f(t-x)=subs(t=t-x,sol),eq);
t

laplace(eq,t,s);

sin(t) = 1 +
0

ex ( Dirac(t x) + 1 + cos(t x) sin(t x)) dx

2. INTEGRALES DEFINIES

235

assume(t>0):simplify(",Dirac); sin(t) = sin(t) Il est ` noter que Maple ne sait pas calculer a
t

(t x)f (x)dx
0

pour une fonction f (x) quelconque tant que lon na pas spci que t est e e positif. Une utilisation marginale de la transforme de Laplace est le calcul de e certaines intgrales contenant des fonctions spciales. Comme dans lexemple e e ci-dessus, il sut de calculer la transforme de Laplace de lintgrale, puis e e la transforme inverse. e Exemple 24. Lintgrale ` calculer est : e a
t

(J0 (x) xJ1 (x)) dx,


0

o` Ji est la fonction J de Bessel dindice i. u f:=BesselJ(0,x)-x*BesselJ(1,x); f := BesselJ(0, x) x BesselJ(1, x) int(f,x=0..t); t (BesselJ(0, x) x BesselJ(1, x)) dx
0

normal(laplace(",t,s)); invlaplace(",s,t);

s (1 + s2 )3/2 t BesselJ(0, t)

La transforme de Fourier est une mthode simple et ecace pour e e rsoudre les quations direntielles linaires rencontres en lectronique ou e e e e e e en mcanique. e Exemple 25. Le mouvement dun oscillateur forc (par exemple un diple e o RLC soumis ` une tension sinuso a dale) est rgi par lquation e e eq := diff(x(t),t,t)+2*lambda*diff(x(t),t)+omega[0]*x(t) = f[0]*cos(omega*t); d2 d eq := x(t) + 2 x(t) + 0 x(t) = f0 cos( t) dt2 dt et la rsolution via la transforme de Fourier se m`ne comme suit : e e e readlib(fourier)(eq,t,s); s2 fourier(x(t), t, s) + 2Is fourier(x(t), t, s) + 0 fourier(x(t), t, s) = f0 (Dirac(s ) + Dirac(s + )) solve(",fourier(x(t),t,s)); f0 Dirac(s ) f0 Dirac(s + ) s2 + 2Is + 0

236

IX. INTEGRALES ET PRIMITIVES

normal(evalc(invfourier(",s,t))); f0 cos(t) 2 + cos(t)0 + 2 sin(t) 4 2 2 0 + 0 2 + 42 2 Lexpression trouve est une solution particuli`re de lquation direntielle e e e e eq ; on pourra comparer ` la solution gnrale obtenue par dsolve(eq,x(t)). a e e Maple conna aussi la transforme de Mellin dnie par t e e

M (s) =
0

f (t)ts1 dt,

qui a de nombreux usages en thorie analytique des nombres et en analyse e asymptotique. mellin(t/(t^2+1),t,s); 1 1 1 2 sin ( s + ) 2 2 2.5. Intgrales multiples. Les intgrales multiples, doubles ou triples, ine e terviennent en physique ou en mcanique pour calculer des aires, des volumes, e des masses, des moments dinertie,... Les syst`mes de calcul formel ne disposent gnralement pas dintgrateur e e e e multiple. Il faut utiliser plusieurs fois lintgration simple. Lordre des intgrae e tions peut jouer un rle important et lutilisateur doit le dnir. o e Exemple 26. Pour calculer lintgrale double e (x2 + y 2 ) dx dy sur le domaine dni par (0 < x < h, y 2 2px < 0), ce qui revient ` calculer e a
h 0 2px 2px

(x2 + y 2 ) dy dx,

il faut excuter en Maple: e int(int(x^2+y^2,y=-sqrt(2*p*x)..sqrt(2*p*x)),x=0..h); 4 (ph)5/2 2(15h + 14p) 105 p2 Exemple 27. Le calcul du volume engendr par un arc AB tournant e autour de laxe Oz se rduit ` lintgrale curviligne AB x2 dz. Pour un arc e a e AB paramtr par (x = f (t), z = g(t)), cela donne e e
t2

t1

f 2 (t)g (t) dt.

Par exemple, le volume du domaine illimit engendr par la cisso z 2 x = e e de (2a x)3 lorsquelle tourne autour de laxe Oz (g. 1) sobtient en utilisant la reprsentation paramtrique suivante de la cisso : e e de x = f (t) = a(1 cos t), z = g(t) = a (1 + cos t)2 sin t t ]0, 2[ .

2. INTEGRALES DEFINIES

237

4 z 2

00

1 x

-2

-4

Figure 1 La cisso z 2 x = (2a x)3 pour a = 1. de La courbe est symtrique par rapport ` laxe Ox et la valeur du volume en e a dcoule : e f:=a*(1-cos(t)): g:=a*(1+cos(t))^2/sin(t): Pi*int(f^2*diff(g,t),t=2*Pi..0); 2 2 a3 Il ne faut cependant pas tre trop optimiste concernant lusage du calcul e formel pour les intgrales multiples. Dans la plupart des cas, le syst`me e e ne parvient pas ` calculer une forme explicite. Cependant, comme nous a lavons dj` mentionn, lobtention dune formule pour un ou deux niveaux ea e dintgration prsente lintrt de rduire considrablement la dure dune e e ee e e e valuation numrique. e e 2.6. Intgration numrique. Tous les syst`mes de calcul formel permee e e ttent de faire de lintgration numrique. En Maple, il sut dutiliser la e e fonction evalf applique ` la forme inerte de lintgrale Int(f,x=a..b), ou e a e a ` ce que retourne Maple lorsquil ne sait pas calculer lintgrale dnie. e e Exemple 28. int(exp(sin(x)),x=-Pi..Pi);

esin(x) dx

evalf("); 7.954926521 Il vaut cependant mieux utiliser directement la forme inerte, car cela vite e la perte de temps lie ` la recherche dune primitive explicite. e a Pour ces intgrations numriques, Maple emploie par dfaut la quadrae e e ture de Clenshaw-Curtis l` o` lintgrande est rgulier, et traite les singua u e e larits par dveloppement limit. Il est parfois utile de choisir une des deux e e e autres mthodes disponibles (une procdure de quadrature exponentielle et la e e mthode de Newton-Cotes) an davoir des temps de calcul moins longs. e

238

IX. INTEGRALES ET PRIMITIVES

Exemple 29. Un euve de dbit 1 se divise en deux, le dbit du premier e e sous-euve tant dtermin par une loi uniforme, puis chaque sous-euve se e e e redivise en deux suivant la mme r`gle. Le calcul de lesprance du dbit du e e e e plus gros des quatre sous-sous-euves m`ne ` une intgrale multiple faisant e a e intervenir la fonction max. Si nous essayons de faire le calcul avec la mthode dintgration par dfaut e e e (quadrature de Clenshaw-Curtis), Maple sarrte au bout de 95 minutes, e en disant quil narrive pas ` traiter les singularits. En revanche, avec la r`gle a e e e de Newton-Cotes, spcie par largument NCrule, le rsultat est obtenu e e en moins de deux minutes : f := max(x*y,x*(1-y),(1-x)*z,(1-x)*(1-z)); f := max(x(1 y), (1 x)z, xy, (1 x)(1 z)) st:=time(): evalf(Int(Int(Int(f,x=0..1,10,_NCrule),y=0..1,10,_NCrule), z=0..1,10,_NCrule)),time()-st; .5659985785, 117.716 Ce rsultat est correct, ` une unit pr`s sur la derni`re dcimale. e a e e e e Lvaluation numrique des intgrales multiples est assez lente en Maple. e e e Il faut savoir en eet que du fait de la mthode employe, le temps de calcul e e est multipli par 25 environ ` chaque dimension supplmentaire. Dans le cas e a e dune fonction rguli`re, la mthode de Simpson peut donner rapidement une e e e premi`re approximation : e st:=time(): student[simpson](f,x=0..1,8): student[simpson](",y=0..1,8): student[simpson](",z=0..1,8): evalf("), time()-st; .5661168983, 8.917 Le dernier argument de simpson est le nombre dintervalles utiliss ; la fonce tion a t value ici 93 = 729 fois. eee e 2.6.1. Fonctions oscillantes Dans le cas de fonctions changeant de signe un nombre tr`s grand e voire inni de fois sur lintervalle dintgration, les mthodes classiques e e dintgration numrique chouent. Il est parfois possible de mener ` bien le e e e a calcul en assistant le syst`me. Illustrons la mthode sur une intgrale produite e e e par Maple lors du dveloppement limit dune intgrale paramtre (ch. VIII, e e e e e exemple 8 p. 203) : f:=t->ln(1+t)/(1+t): Int(f(t)*sin(t),t=0..infinity); ln(1 + t) sin(t) dt 1+t 0

2. INTEGRALES DEFINIES

239

evalf("); Error, (in evalf/int) singularity in or near interval of integration Le principe consiste ` dcouper lintervalle dintgration en rgions o` linta e e e u e grande se comporte de faon rguli`re. Dans notre exemple, sur chaque c e e intervalle [2k, 2(k + 1)], lintgrale de f (t) sin(t) est la mme que celle e e de (f (2k + u) f (2k)) sin(u) sur [0, 2] ` cause de la priodicit du sia e e nus. On commence donc par calculer un dveloppement asymptotique de e f (2k + u) f (2k) lorsque k tend vers linni : h:=combine(map(normal,asympt(f(2*k*Pi+u)-f(2*k*Pi),k,4)),ln); h := 1 u (1 + ln(2k)) 4 2 k2 1 u 6 3u + u ln(k 2 ) + u ln(4 2 ) + ln(16 4 k 4 ) 1 +O 4 + 16 3 k3 k

puis on int`gre ce dveloppement multipli par sin(u) entre 0 et 2 : e e e i:=combine(map(normal,asympt(int(h*sin(u),u=0..2*Pi),k)),ln); i := 1 1 + ln(2k) 2 k 2 1 4 ln() + ln(16) 6 + ln(k 4 ) 6 + ln(16 4 k 4 ) 1 +O 4 2 k3 8 k

Ceci nous indique que lintgrale Ik de f (t) sin(t) entre 2k et 2(k + 1) se e comporte comme ln k/k 2 . La somme des contributions est donc convergente, et on peut mme obtenir un dveloppement asymptotique de Ik + Ik+1 + e e Ik+2 + . . . grce ` la formule dEuler-Maclaurin : a a combine(map(normal,asympt(-eulermac(i,k),k)),ln); 1 ln( 2 k) 1 ln(16) + ln( 164 ) + 4 ln() 4 + ln(16 4 k 4 ) 1 +O 3 k 16 2 k2 k En combinant ce dveloppement avec une intgration numrique sur lintervalle e e e [0, 2k], on obtient une approximation de lintgrale : e evalf(subs(k=100,Int(f(t)*sin(t),t=0..2*k*Pi)+")); 1 .3494748858 + O( ) 1000000 Cette mthode sapplique aux intgrales de la forme a f (t)g(t)dt, o` g e e u est une fonction priodique de moyenne nulle, et f est une fonction ` varie a ation lente. Suivant le comportement de f ` linni, lintgrale diverge ou a e converge. Dans ce dernier cas, il faut trouver un compromis entre lordre des dveloppements asymptotiques et la valeur de k de faon ` obtenir une e c a approximation avec la prcision voulue. e

240

IX. INTEGRALES ET PRIMITIVES

3. Intgrales paramtres e e e Du point de vue du calcul formel, la prsence de param`tres correspond e e a ` une extension du corps de base. Les transformes intgrales sont dailleurs e e un cas particulier dintgrales paramtres, o` le param`tre s appartient ` un e e e u e a domaine bien dni (rel, rel positif ou complexe). Tant que les param`tres e e e e a1 , a2 , . . . ninterviennent que dans des fractions rationnelles, le corps de base usuel Q est remplac par Q(a1 , a2 , . . . ) dans lequel la nullit reste dcidable, e e e en supposant a1 , a2 , . . . algbriquement indpendants (voir chap. I, 2.3.1). e e Gnralement les programmes sont plus lents mais le calcul de primitive fonce e tionne encore. Le calcul dintgrale dnie est bien plus dlicat puisquil e e e ncessite la dtection de singularits sur le domaine dintgration. Lusage de e e e e la commande assume devient alors crucial pour mener ` bien les simplicaa tions ncessaires. e 3.1. Cas gnral. e e Exemple 30. Dans cet exemple, le param`tre t est positif. Il faut le e signier assez tt au syst`me, car sinon il va exprimer lintgrale en termes de o e e signum et parfois de limit, fonctions diciles ` manier et ` simplier dans a a des expressions compliques. e f:=1/(t^2*cos(x)^2+sin(x)^2); f := 1 t2 cos(x)2 + sin(x)2

r:=Int(f,x=0..Pi): value(r); csgn( t2 4 + conjugate(2t2 2 t4 )) 2 t2 2t2 2 t4 + 4 assume(t>0): value(r); t Il est galement possible de manipuler des objets plus formels. Voici une e intgrale dpendant dun param`tre : e e e g:=int(f(x,t),x=a(t)..b(t));
b(t)

g :=
a(t)

f (x, t) dx

Et voici le calcul de sa drive : e e diff(g,t);


b(t) a(t)

f (x, t)dx + f (b(t), t) b(t) f (a(t), t) a(t) t t t

Il faut noter que ce calcul est purement formel et quune utilisation pratique de ce rsultat ncessite la vrication de certaines hypoth`ses de continuit e e e e e et de drivabilit. e e

3. INTEGRALES PARAMETREES

241

3.2. Suites dintgrales. Les suites dintgrales peuvent tre vues comme e e e un cas particulier dintgrales dpendant dun param`tre o` celui-ci ne prend e e e u que des valeurs enti`res positives. e Pour les calculer, une technique souvent employe consiste ` chercher e a des formules de rcurrence entre les intgrales de la suite. Une autre teche e nique plus simple lorsquelle sapplique consiste ` employer des fonctions a gnratrices. Nous dtaillons cette seconde technique sur un exemple de calcul e e e de srie de Fourier au chapitre VIII, page 203. e Exemple 31. Nous avons dj` vu que la fonction arcsin nest pas pureea ment transcendante, ce qui cause des dicults ` lintgrateur de Maple. La e a e primitive de arcsinn x pour n entier suprieur ou gal ` 2 ne sobtient pas die e a rectement, mais est fournie par intgrations par parties rptes. La procdure e e ee e suivante ralise ce calcul : e intarcsin:=proc(n:posint) local e,i; e:=Int(arcsin(x)n,x); for i from n by 1 to 1 do e:=student[intparts](e,arcsin(x)) od; value(e) end: intarcsin(5); arcsin(x)5 x + 5 arcsin(x)4 1 x2 20 arcsin(x)3 x 1 x2 + 120x arcsin(x) + 120 1 x2

60 arcsin(x)2

La raison pour laquelle cette technique fonctionne si bien est que ces intgrales vrient une rcurrence linaire dordre 2 : e e e e student[intparts](Int(arcsin(x)^n,x),arcsin(x)^n); arcsin(x)n nx arcsin(x)n x dx 1 x2 arcsin(x) student[intparts](simplify(",power),arcsin(x)^(n-1)); arcsin(x)(n1) (n 1)n dx arcsin(x)n x + arcsin(x)(n1) 1 x2 n + arcsin(x) Autrement dit, en notant Jn la primitive de arcsinn x, ces intgrales vrient e e la rcurrence : e Jn = x arcsinn x + n 1 x2 arcsinn1 x n(n 1)Jn2 . Il sut alors de savoir calculer J0 = x et J1 = x arcsin(x) + 1 x2 pour trouver la forme gnrale de ces intgrales. e e e Exemple 32. La mme mthode sapplique ` lintgrale e e a e dx In = . (x2 + 1)n En outre dans cet exemple, la commande rsolve permet de rsoudre la e rcurrence. e

242

IX. INTEGRALES ET PRIMITIVES

3.5 3 2.5 2 1.5 1 0.5 00 0.2 0.4 0.6 0.8 1

Figure 2 La suite fn (x) = n2 xenx . int(1/(1+x^2)^n,x); 1 dx (1 + x2 )n student[intparts](",1/(1+x^2)^n); x 2nx2 dx (1 + x2 )n (1 + x2 )n (1 + x2 ) La rcurrence est donc une rcurrence linaire dordre 1 : e e e x In = 2 + 2nIn 2nIn+1 (x + 1)n rsolve({u(n)=x/(x^2+1)^n+2*n*u(n)-2*n*u(n+1), u(1)=arctan(x)},u(n)); n2 n1 x2 + 1 ( n2 ) (n 1/2) + 2 arctan(x) x ( n2 + 1/2) 2 (n) n2 =1 Dans tous ces calculs, il faut faire attention aux justications. Ainsi, la limite dune suite dintgrales nest pas toujours lintgrale de la limite, comme e e lillustre lexemple suivant. Exemple 33. La suite de fonctions fn (x) = n2 xenx converge vers la fonction nulle. Le trac des courbes correspondantes pour diverses valeurs e de n montre que cette convergence nest pas uniforme (g. 2). Ce trac est e obtenu par f:=n^2*x*exp(-n*x): plot({seq(subs(n=k,f),k=1..10)},x=0..1); Voici la limite des intgrales e limit(int(f,x=0..1),n=infinity); 1 et voici lintgrale de la limite : e assume(x>0):int(limit(f,n=infinity),x=0..1); 0

3. INTEGRALES PARAMETREES

243

3.3. Exercices. dx o` a et b sont des rels. u e a2 + (x + ib)2 2. Calculer la primitive de lexemple 9 ` laide du changement de variable a indiqu, puis la driver et retrouver la forme de lintgrande. [Indication e e e : on pourra utiliser les commandes factor, normal(...,expanded) et simplify(...,power,symbolic).] 3. Montrer que lintgrale double de lexemple 13 vaut (5 2 2)/12. e 4. Refaire les mmes oprations que pour la suite de fonctions fn (x) = e e n2 xenx du 3.2 (trac de courbes, calcul des intgrales et des limites) e e lorsque : 2n2 x pour 0 x 1/(2n) fn (x) = 2n(1 nx) pour 1/(2n) x 1/n . 0 pour 1/n x 1 1. Calculer lintgrale e 5. Trouver une formule gnrale ou une rcurrence pour les intgrales e e e e n sin x arccosn x dx, dx, lnn x dx, nN . xn 0 6. Lintgrale double e sin t dt dx t 0 x a une valeur simple. Aider un syst`me de calcul formel ` la calculer. e a 7. Lintgrale e
/4 +

ln(1 + tan x) dx
0

admet une valeur simple ; la calculer. 8. Calculer 1 dx 1+x+ 1x+2 1 par un changement de variable appropri. e 9. La primitive de e2x + ex + 1 est lmentaire. La calculer. ee 3 10. Lintgrale triple de lexercice 29 vaut 17 ln(2) 2 ln(3) + 1 . Le montrer e 6 4 a ` laide dun syst`me de calcul formel. e

CHAPTER X

Calcul direntiel e
e diffe un domaine tr`s vaste pour lequel le calcul e Llacalculpeut desrentiel estdienombre deordinaires unEnsyst`eme de calcul formel rendre un grand services. particulier, lors de rsolution e quations e rentielles formel peut venir ` bout des probl`mes de singularits mieux quun syst`me a e e e numrique par la recherche de solutions exactes ou sous la forme de dveloppee e ments en srie. Cest ce que nous montrerons en 1. En 2, nous indiquerons e sur deux exemples comment un syst`me de calcul formel peut traiter tr`s e e agrablement des probl`mes lis aux proprits direntielles des courbes. e e e ee e

1. Equations direntielles ordinaires e Les quations direntielles ordinaires sont omniprsentes dans les scie e e ences pures et appliques. De nombreuses techniques ont t dveloppes e ee e e pour en rechercher des solutions approches par le calcul numrique, mais e e ces mthodes se dgradent gnralement loin des conditions initiales ou en e e e e prsence de singularits. Bien que ne couvrant quun champ plus restreint, e e des mthodes formelles existent qui ne sourent pas de ce dfaut. Dans cette e e section nous prsentons les outils numriques et formels que propose Maple ` e e a travers la commande dsolve et le package DEtools pour ltude des quations e e direntielles. e Il existe aussi des techniques de recherche de solutions analytiques approches dquations direntielles ; les syst`mes ne fournissent pas doutil e e e e spcialis, mais les mthodes sapparentent ` la recherche de dveloppements e e e a e de solutions, dont nous parlons. Il en va de mme pour les quations aux e e drives partielles, qui sortent encore du champ dapplication du calcul formel. e e 1.1. Solutions exactes. La recherche de solutions exactes, cest-`-dire exa primes en termes de fonctions lmentaires (cf. chap. IX 1.2), consiste essene ee tiellement ` dterminer si lquation appartient ` lune des classes dquations a e e a e que lon sait au moins partiellement rsoudre ou simplier, ou si elle peut sy e ramener par un changement de variables. Les classes dquations reconnues e varient dun syst`me ` lautre et dune version ` lautre. Cependant, les e a a quations suivantes sont gnralement reconnues (y est la fonction inconnue, e e e x la variable de drivation) : e
245

246

X. CALCUL DIFFERENTIEL

quations linaires : e e a0 (x)y (p) (x) + a1 (x)y (p1) (x) + + ap (x)y(x) = b(x); quations homog`nes : e e P (x, y(x))y (x) + Q(x, y(x)) = 0, avec P et Q homog`nes en x, y de mme degr ; e e e quations autonomes : x nappara pas dans lquation ; e t e quations de Riccati : e y (x) = a(x)y 2 (x) + b(x)y(x) + c(x); quations de Bernoulli : e y (x) + P (x)y(x) = Q(x)y n (x); quations de Clairaut : e f (xy (x) y(x)) = g(y (x)); quations dEuler : e a0 xn y (n) (x) + a1 xn1 y (n1) (x) + + an y(x) = 0. Les syst`mes de calcul formel poss`dent des procdures spcialises qui e e e e e leur permettent de simplier ces quations, parfois jusqu` la solution. La e a plupart des exercices classiques sur les quations direntielles ordinaires sont e e ainsi rsolus par les syst`mes. Cela ne dispense cependant pas lutilisateur de e e conna tre ces quations, car lorsquun syst`me narrive pas ` rsoudre, on e e a e ne bncie pas de ses eorts intermdiaires pour simplier lquation. Il e e e e faut alors faire les changements de variables adquats ` la main pour aider e a le syst`me dans les derni`res tapes, ou passer ` une tude numrique. Nous e e e a e e allons dans cette section montrer sur des exemples comment arriver ` une a solution en interagissant avec Maple, en prsentant au passage la syntaxe des e direntes commandes daide ` la rsolution. e a e Exemple 1. Lquation suivante est sparable : on peut la rcrire de e e e faon que la fonction inconnue et la variable apparaissent chacune dans un c seul membre de lquation : e (1) Ax(y )2 y 2 + 1 = 0, A > 0, y(0) = 1.

La syntaxe pour rsoudre cette quation en Maple est la suivante : e e dsolve({A*x*diff(y(x),x)^2-y(x)^2+1=0,y(0)=1},y(x)); Comme bien trop souvent, Maple choue sur cet exemple. En fait seule la e condition initiale pose probl`me (dans ce cas prcis, un message derreur d e e u a ` une faute de programmation est renvoy, mais en gnral dsolve retourne e e e la valeur NULL en cas dchec, et Maple nache rien). Nous recommenons e c donc sans la condition initiale : dsolve(A*x*diff(y(x),x)^2-y(x)^2+1=0,y(x));

1. EQUATIONS DIFFERENTIELLES ORDINAIRES

247

Axy(x)2 Ax y(x)2 1 Ay(x)2 A


y(x)

+
0

4 y1 2y 2 1 2 1 5/2 + 2 dy1 = C1 , 2 1)5/2 (y1 (y1 1) (y1 1)5/2

Axy(x)2 Ax y(x)2 1 Ay(x)2 A


y(x)

+
0

4 2y 2 1 y1 2 1 5/2 + 2 dy1 = C1 2 1)5/2 (y1 (y1 1) (y1 1)5/2

Les intgrales des membres gauches nont pas t calcules. Pour en dclencher e ee e e le calcul, il sut de demander lvaluation de lexpression prcdente (cf. e e e chap. II). Pour simplier, nous nous contentons de la premi`re quation : e e "[1]; Axy(x)2 Ax y(x)2 1 i + ln(y(x) + y(x)2 1) = C1 2 Ay(x)2 A 2 Cette quation se rsout en y(x). Nous allons dtailler comment on aide Maple e e e a ` obtenir la solution. Nous commenons par utiliser la condition initiale pour c dterminer C1 : e solve(subs(x=0,y(0)=1,"),_C1); i 2 On isole ensuite le logarithme et on l`ve au carr : ee e op(1,op(1,""))^2=op(2,op(1,""))^2; (Axy(x)2 Ax)(y(x)2 1) 4 = ln(y(x) + y(x)2 1)2 (Ay(x)2 A)2 On peut alors normaliser le terme de gauche : map(normal,"); 2 x 4 = ln y(x) + y(x)2 1 A Il y a alors deux racines possibles : epsilon*op(1,")^(1/2)=op(1,op(2,")); x 4 = ln(y(x) + y(x)2 1) A o` vaut 1 ou 1. Il ne reste plus alors qu` prendre lexponentielle et ` u a a rsoudre, puis ` simplier un peu : e a solve(subs(y(x)=y,map(exp,")),y): convert(simplify(expand("),exp),trig); x cosh 2 A Comme le cosinus hyperbolique est pair, on peut se passer de . Lorsque x est ngatif, cette solution devient un cosinus : e assume(A>0,x<0); simplify(subs(epsilon=1,"));

248

X. CALCUL DIFFERENTIEL

Ax A La seconde solution de lquation direntielle m`ne au mme rsultat. e e e e e cos 2 Exemple 2. Voici une quation autonome la variable par rapport ` e a laquelle on drive nintervient pas qui nous permet de prsenter la syntaxe e e des conditions initiales pour les drives de la fonction : e e (y )2 = (1 + y )3 ,
2

y(0) = y (0) = 1.

deq:=diff(y(x),x$2)^2=(1+diff(y(x),x)^2)^3: dsolve({deq,y(0)=1,D(y)(0)=1},y(x)); 2 2 + 1, y(x) = i x2 + 2x 1/2 + +1 y(x) = i x2 2x 1/2 2 2 Pour spcier des conditions initiales dordre plus lev, on utilise loprateur e e e e de composition itre @@, par exemple (D@@2)(y)(0)=1 pour y (0) = 1. ee Exemple 3. Maple narrive pas ` rsoudre lquation a e e y = yy /x eq:=diff(y(x),x,x)=y(x)*diff(y(x),x)/x: dsolve(eq,y(x)); Cependant, comme cette quation est invariante par le changement de varie able x ax, on a intrt ` changer x en et , ce qui la transforme en une ee a quation autonome. Pour faire le changement de variable, il faut aider le e syst`me ainsi : e eval(subs(y(x)=Y(ln(x)),eq)): subs(ln(x)=t,x=exp(t),"): map(numer,"); D(2) (Y )(t) D(Y )(t) = Y (t)D(Y )(t) La rsolution fonctionne sur cette quation : e e dsolve(",Y(t)); Y arctan 2(t)+1 C1 1 C2 t=2 2 C1 1 Il ne reste plus qu` eectuer le changement de variable inverse : a subs(t=ln(x),solve(",Y(t))); 1 2 C1 1 tan(1/2 ln(x) 2 C1 1 + 1/2 C2 2 C1 1) 2 C1 1 donc les solutions de y = yy /x sont de la forme y = a tan(a ln(x)/2 + b) 1. Exemple 4. Les fonctions liouvilliennes sont celles que lon peut obtenir en composant lexponentielle, lintgration, lextraction de racines de polyne o mes, et les oprations de corps, ` partir des fractions rationnelles en une e a variable ` coecients dans Q. Maple dispose dalgorithmes pour trouver a ces solutions dans le cas des quations direntielles linaires ` coecients e e e a polynomiaux dordre 1 et 2.

1. EQUATIONS DIFFERENTIELLES ORDINAIRES

249

10

00

0.5

1.5

Figure 1 Lquation suivante rentre dans cette classe : e (x3 /2 x2 )y (x) + (2x2 3x + 1)y (x) + (x 1)y(x) = 0. dsolve((x^3/2-x^2)*diff(y(x),x$2) +(2*x^2-3*x+1)*diff(y(x),x)+(x-1)*y(x),y(x)); e1/x dx C2 e1/x x3/2 x2 C1 e1/x y(x) = + . x x2 x x2 Comme pour la recherche de primitives, les algorithmes existant dans la littrature permettent de prouver quune quation nadmet pas de solution e e liouvillienne. Cependant, leur implantation nest pas compl`te en Maple, et e lchec du programme ne constitue donc pas une preuve dinexistence. e 1.2. Dveloppements en srie et asymptotiques. Bien quil ne soit pas e e possible en gnral de rsoudre exactement une quation direntielle, un e e e e e certain nombre dinformations exactes peuvent tre obtenues directement en e partant de lquation. Cest le cas en particulier pour les dveloppements en e e srie de Taylor et certains calculs asymptotiques. Les questions relatives e a ces dveloppements sont abordes au chapitre VIII ; nous ne donnons ici ` e e quun exemple supplmentaire. e Exemple 5. On consid`re lquation : e e y = sin(x) + xy 2 (x), y(0) = 1, ce qui se traduit en Maple par : deq:=diff(y(x),x)=sin(x)+x*y(x)^2: La courbe correspondante est reprsente en gure 1. Il y appara un come e t portement singulier vers x 1, 2. Notre objectif est de trouver le dveloppee ment de cette fonction au voisinage de cette singularit. e On ne sait pas calculer de solution explicite de cette quation, pas plus e quune expression formelle de la singularit, qui dpend de la condition initiale e e y(0) = 1. Nous poursuivons donc le calcul en notant cette singularit par le e symbole . Nous adoptons un procd heuristique qui consiste ` essayer de e e a dterminer si le comportement asymptotique de la solution nest pas dict e e

250

X. CALCUL DIFFERENTIEL

par un petit nombre de termes de lquation. Dans notre exemple, y(x) tend e vers linni ` sa singularit (cela se voit sur la gure 1 et il est possible de a e le prouver rigoureusement), et donc le terme en sin(x) devient ngligeable, ce e qui nous am`ne ` considrer une quation plus simple : e a e e dsolve(diff(y(x),x)=x*y(x)^2,y(x)); x2 1 = + C1 y(x) 2 Pour satisfaire la condition y(x) + quand x , il faut C1 = 2 /2, ce qui donne y(x) K/( x) au voisinage de . Ceci sugg`re deectuer e dans lquation de dpart le changement y(x) = 1/u(x) et de chercher un e e dveloppement de u(x) en srie au voisinage de x = . Pour cela, en Maple e e il faut dabord ramener le point dtude ` lorigine. On obtient nalement le e a dveloppement cherch par : e e subs(x=rho-t,eval(subs(y(x)=1/U(rho-x),deq))): series(subs(dsolve({",U(0)=0},U(t),series),1/U(t)),t,4): subs(t=rho-x,"); 1 sin() + 42 (x ) 3 1 1 + + O (x )2 (x ) 22 En dautres termes, apr`s un premier changement de variable, lquation e e direntielle est rsolue en srie ` lorigine, puis le dveloppement en srie e e e a e e de linverse de la solution est calcul et il ny a plus qu` remettre la variable e a de dpart dans ce dveloppement. e e 1.3. Mthodes numriques. Il est bien rare quune quation direntielle e e e e se rsolve explicitement, mais de nombreuses mthodes numriques permete e e tent den tudier les solutions. Les syst`mes de calcul formel, orients vers e e e les calculs exacts, ne sont pas les meilleurs outils pour aborder ces probl`mes. e Cependant, il peut se produire quune quation direntielle apparaisse au e e cours dun calcul plus formel que numrique, et que lon veuille poursuivre e une tude interactive. Les syst`mes tirent aussi parti de leurs capacits syme e e boliques pour mieux grer les calculs numriques en cas dinstabilit. e e e Une tude numrique vise ` obtenir les valeurs dune solution en un cere e a tain nombre de points, ou un dessin reprsentant une ou plusieurs solutions. e Lquation ou le syst`me dquations sera gnralement accompagn de cone e e e e e ditions initiales les valeurs de la solution et de ses drives en un point e e ou de conditions aux limites les valeurs sont prises en plusieurs points, habituellement aux extrmits du domaine dtude. Maple ne propose daide e e e que pour le premier cas, en utilisant une mthode de Runge-Kutta par e dfaut. Il est galement possible de changer de mthode, ou de programmer e e e sa propre mthode et de la faire utiliser par le syst`me. Pour plus de dtails, e e e nous renvoyons ` laide en ligne de dsolve[numeric]. a Exemple 6. On consid`re lquation e e y = sin(xy), y(0) = 1.

1. EQUATIONS DIFFERENTIELLES ORDINAIRES

251

3 2

2 1.5

y 1

00

10

15

20

0.5

-1

-0.2

00

0.2

0.4 x

0.6

0.8

-2

-0.5

-3

-1

Figure 2

Figure 3

Dapr`s le thor`me de Cauchy, lexistence dune solution et son unicit sont e e e e assures sur tout R. On ne sait pas exprimer la solution ` laide des fonctions e a usuelles, mais il est possible den calculer des valeurs : f:=dsolve({diff(y(x),x)=sin(x*y(x)),y(0)=1},y(x),numeric): Le rsultat est une procdure que lon peut utiliser pour calculer des valeurs e e de la solution : f(0.5), f(1); [x = .5, y(x) = 1.12970783844130440], [x = 1, y(x) = 1.53409997627099437] Le trac de la fonction sobtient par la commande DEplot du package e DEtools. Exemple 7. Le trac de la solution de e y (x) = x sin x e|y(x)| , y(0) = 1, est obtenu (cf. g. 2) par : deq:=diff(y(x),x)=x*sin(x)*exp(-abs(y(x))): DEtools[DEplot](deq,[x,y],0..20,{[0,1]},stepsize=0.2); Comme DEtools comporte quelques incorrections, il est bon de savoir que lon peut galement crire : e e plots[odeplot](dsolve({deq,y(0)=1},y(x),numeric),y(x), 0..20,numpoints=100); Diverses options permettent de contrler laspect des courbes obtenues ; o plus de dtails sont fournis par laide en ligne de DEtools[options]. e Dans de nombreuses applications physiques, le mouvement dun point est modlis par un syst`me dquations direntielles indiquant comment la e e e e e drive de chacune des coordonnes du point dpend du temps et des autres e e e e coordonnes. Nous donnons en gure 3 lexemple du mouvement plan corree spondant au syst`me : e x (t) = y, y (t) = y 3 sin x.

252

X. CALCUL DIFFERENTIEL

Le trac des trajectoires (qui dpendent de la position initiale, ici x(0) = 0 et e e y(0) = 2) est obtenu par la commande with(DEtools): phaseportrait([y,-y-3*sin(x)],[x,y],0..40, {[0,0,2]},stepsize=0.1); 1.4. Exercices. 1. On souhaite construire un changeur dautoroute. On consid`re pour cela e e que les conducteurs tournent leur volant ` vitesse constante, sans changer a la vitesse de leur vhicule. Calculer lquation paramtrique de la courbe e e e parcourue par le vhicule. Cette courbe sappelle une clotho ou spie de rale de Cornu. [Indication: la courbure est proportionnelle ` labscisse a curviligne.] 2. Aider Maple ` terminer la rsolution de a e (x + yy )2 = x2 + y 2 , 3. Rsoudre les quations e e |x|y + (x 1)y = x2 , 2y + 3y = 5|y|. (xy y)2 = x2 y 2 .

Noter que cette rsolution ncessite une discussion. e e 4. Chercher les fonctions continues sur R telles que
x+y

(x, y) R2 ,

f (x)f (y) =
xy

f (t) dt.

5. Chercher une solution C 1 sur R de f (0) = 0, f (x) = f (1/x).

2. Etude direntielle de courbes e Un grand nombre de probl`mes gomtriques portent sur les proprits e e e ee direntielles des courbes dans le plan ou dans lespace euclidien, cest-`-dire e a dans une large mesure sur ltude des drives du vecteur OM (M tant le e e e e point courant de la courbe) par rapport ` son abscisse curviligne. En partica ulier, les probl`mes faisant intervenir la courbure, les formules de Frenet ou e le tri`dre de Frenet ncessitent des calculs de drives qui sont facilement e e e e ralisables ` laide dun syst`me de calcul formel. Cest ce que nous allons e a e montrer ` travers un exemple de calcul de dveloppe et un exemple de calcul a e e de godsique. e e
On devrait pouvoir crire directement DEtools[phaseportrait], mais le package e DEtools est mal programm et ncessite lemploi de with. e e

2. ETUDE DIFFERENTIELLE DE COURBES

253

-4

-2

00

-4

-2

00

-2

-2

-4

-4

Figure 4 La courbe et ses normales.

Figure 5 La courbe et sa dveloppe. e e

2.1. Un calcul de dveloppe. Pour des courbes dont la reprsentation e e e paramtrique est complique, les calculs de dveloppe sont lourds, mais e e e e pas diciles. Il suivent toujours le mme schma : calculer les quations e e e paramtriques de la famille des normales ` la courbe, puis lenveloppe de e a cette famille de droites. Nous illustrons cette approche sur un exemple. Exemple 8. Nous tudions la courbe donne par la reprsentation parame e e e trique x = sin2 t cos t, y = (1 + cos2 t) cos t. La famille de normales ` la courbe sobtient facilement ` partir de ces quations a a e : coords:=[sin(t)^2*cos(t),(1+cos(t)^2)*cos(t)]: vit:=map(diff,coords,t): fam:=[coords[1]+vit[2]*lambda,coords[2]-vit[1]*lambda]; fam := sin(t)2 cos(t) + 2 sin(t) cos(t)2 1 + cos(t)2 sin(t) , 1 + cos(t)2 cos(t) 2 sin(t) cos(t)2 sin(t)3 Ces droites ainsi que la courbe de dpart sont reprsentes en gure 4 e e e telles quelles ont t obtenues par les commandes : ee p1:=plot([sin(t)^2*cos(t),(1+cos(t)^2)*cos(t),t=0..2*Pi]): p2:=plot({seq(subs(t=i*2*Pi/100,[op(fam),lambda=-10..10]), i=1..100)},-4..4,-4..4): plots[display]({p1,p2}); Pour trouver lenveloppe, il faut trouver pour chaque normale la valeur de correspondant au point o` la normale est tangente ` lenveloppe. En ce point, u a la drive par rapport au param`tre t doit tre parall`le ` la normale, ce qui e e e e e a nous donne la valeur de : map(diff,fam,t):

254

X. CALCUL DIFFERENTIEL

simplify(solve(vit[1]*"[1]+vit[2]*"[2],lambda)); 9 cos(t)4 + 1 6 sin(t) cos(t) Il ne reste plus qu` substituer cette valeur de dans lquation des droites : a e res:=map(simplify,subs(lambda=",fam)); res := 27 cos(t)6 3 cos(t)2 + 15 cos(t)4 + 1 , 6 cos(t) 3 cos(t)2 15 cos(t)4 + 27 cos(t)6 1 6 cos(t)

La courbe obtenue est trace sur la gure 5, avec la courbe de dpart, par les e e instructions suivantes : p3:=plot([op(res),t=-Pi/2+0.001..Pi/2-0.001],-4..4,-4..4): p4:=plot([op(res),t=Pi/2+0.001..3*Pi/2-0.001],-4..4,-4..4): plots[display]({p1,p3,p4}); Dans le cas o` la courbe ` tudier est beaucoup plus complique, on u a e e imagine facilement que les calculs pour obtenir la dveloppe peuvent devenir e e inextricables. Avec un syst`me de calcul formel il sut de raliser ` nouveau e e a les oprations prcdentes en changeant uniquement les quations de dpart, e e e e e cest-`-dire la liste coords. a 2.2. Un calcul de godsique. Une godsique est une courbe dune sure e e e face qui, localement, suit un chemin de longueur minimale entre deux points. Pour de bonnes surfaces, cette proprit est aussi globale. Le calcul se m`ne ee e simplement en utilisant la proprit que lacclration dun point se dplaant ee ee e c sur la godsique est en tout point perpendiculaire ` la surface. e e a Exemple 9. Nous allons calculer des godsiques dun tore, fourni par e e sa reprsentation paramtrique : e e pt:=[(3+cos(phi))*cos(theta),(3+cos(phi))*sin(theta),sin(phi)]; pt := [(3 + cos()) cos(), (3 + cos()) sin(), sin()] Le mouvement dun point sur la surface est dtermin par la variation des e e param`tres en fonction du temps : e time_dep:=[theta=theta(t),phi=phi(t)]: Le vecteur acclration sobtient comme drive seconde des coordonnes du ee e e e point par rapport au temps : acc:=diff(subs(time_dep,pt),t,t): Les vecteurs tangents ` la surface sobtiennent par drivation par rapport aux a e param`tres : e tang:=subs(time_dep,[diff(pt,phi),diff(pt,theta)]): Il ne reste plus qu` crire que lacclration est perpendiculaire ` ces deux ae ee a vecteurs, soit deux produits scalaires : sys:={seq(v[1]*acc[1]+v[2]*acc[2]+v[3]*acc[3],v=tang)}:

2. ETUDE DIFFERENTIELLE DE COURBES

255

Figure 6 Une portion de godsique du tore. e e Ces quations fournissent un syst`me direntiel non linaire dnissant (t) e e e e e et (t). Dans notre exemple, ces quations se simplient un peu : e combine(sys,trig); 2 2 1 d d d2 (t) sin(2(t)) + 3 sin((t)) (t) + 2 (t), 2 dt dt dt 2 d d 19 d d d 6 sin((t)) (t) (t) + (t) (t) (t) sin(2(t)) dt dt 2 dt2 dt dt 1 d2 d2 (t) cos(2(t)) + 6 2 (t) cos((t)) + dt 2 dt2 Maple ne trouve pas de solution formelle ` ce syst`me, mais il peut en calculer a e des solutions numriques : e res:=dsolve(sys union {phi(0)=0,theta(0)=0,D(theta)(0)=1, D(phi)(0)=4},{theta(t),phi(t)},numeric): Si plots[odeplot] fonctionnait correctement, il surait de faire plots[odeplot](res,subs(time_dep,pt),0..10); pour tracer une godsique. Dans la version actuelle, il faut quelques acroe e baties supplmentaires : e f := t -> eval(subs(time_dep,res(t),pt)): plots[spacecurve]([seq(f(i/100),i=1..1000)]); Le rsultat est reprsent en gure 6 simultanment avec le tore. e e e e 2.3. Exercices. 1. Faire ltude de la fonction f (x) = |x 1| ln |x| : tableau de variation, e concavit et recherche des points dinexion, trac de la courbe. e e 2. Dterminer la dveloppe de la courbe dnie par e e e e x(t) = sin 2t, y(t) = cos 2t ln | tan t|.

3. Faire dessiner au syst`me une godsique dune sph`re. e e e e

CHAPTER XI

Calculs en Probabilit e
e des probabilites a pour but de modliser le hasard. e L calculenements apparemment imprevisibles.sintegrations dedesAccidents de la circulation, chute des boules au loto, d e particules, sont des v e Cependant, mod`les e probabilistes de ces vnements permettent aux assurances de calculer leurs e e tarifs, ` lEtat dtre sr de gagner de largent sur le loto et aux physiciens a e u de dater les vestiges prhistoriques. e Le calcul formel ne propose pas doutils spciques pour le calcul des e probabilits, mais certaines des techniques prsentes aux chapitres prcdents e e e e e peuvent y tre appliques avec succ`s. Ce chapitre est donc essentiellement e e e un chapitre dapplication. Ainsi, les calculs faisant intervenir des variables alatoires discr`tes sont e e rendus prcis par lutilisation de rationnels exacts et sont simplis par les e e manipulations de sries. Nous aborderons ces aspects en 1 et dtaillerons un e e exemple en 2. Lalg`bre linaire joue galement un grand rle, notamment e e e o dans ltude des cha e nes de Markov, mais cette question sort du cadre de ce livre. En 3, nous dcrivons quelques techniques de simulation, domaine o`, e u malgr sa lenteur, le calcul formel est attractif par son interactivit. Lorsque e e la variable alatoire est continue, les calculs utilisent des intgrales, mais les e e capacits des syst`mes ` calculer des primitives ou des intgrales dnies ne e e a e e sont utilisables que sur des exemples simples, aussi nous naborderons pas les variables alatoires continues dans ce chapitre. e

1. Oprations lmentaires e ee La gure 1 p. 258 reprsente le rsultat de 500 tirages ` pile ou face (voir e e a le 3.1 pour la faon de lobtenir). En ordonne sont ports les rapports du c e e nombre de piles obtenus sur le nombre de tirages. La frquence tend visie blement vers la probabilit 1/2. Cependant quelques questions plus prcises e e peuvent tre abordes : e e (1) est-il normal que la frquence vaille pr`s de 0,8 apr`s 20 tirages ? e e e (2) avec quelle probabilit la frquence reste-t-elle toujours au-dessus de e e 1/2 ? (3) quelle est la probabilit que la frquence soit comprise entre 0,4 et e e 0,6, ou entre 0,45 et 0,55 apr`s 500 tirages ? e
257

258

XI. CALCULS EN PROBABILITE

0.8

0.6

0.4

0.2

00

100

200

300

400

500

Figure 1 Evolution de la proportion du nombre de piles dans un tirage ` pile ou face. a 1.1. Probabilits combinatoires. Lorsque les vnements possibles sont e e e en nombre ni et que lon suppose quils ont tous la mme probabilit dapparie e tion (quiprobabilit), la probabilit dun vnement se rduit au quotient du e e e e e e nombre de cas o` cet vnement se produit par le nombre total de cas. Ainsi, u e e la probabilit davoir pile lors dun tirage ` pile ou face vaut 1/2. Un syst`me e a e de calcul formel est utile dans ce domaine par sa facilit ` manipuler des e a nombres rationnels exacts. Exemple 1. La probabilit de gagner le gros lot du loto est linverse du e nombre de tirages possibles, sachant quun tirage consiste ` tirer 6 boules a parmi 49. Do` la probabilit u e 1/binomial(49,6); 1 13983816 ou numriquement : e evalf("); 0.7151123842 107 En pratique, le calcul du nombre de cas nest pas toujours aussi facile, mais les outils introduits au chapitre IV peuvent souvent faciliter la tche. a 1.2. Sommes de variables alatoires. Revenons sur le tirage ` pile ou e a face. La probabilit pn,k davoir k piles apr`s n tirages permet dtudier la e e e frquence de piles dans la gure 1. Au dpart p0,0 = 1 et p0,k = 0 pour k = 0. e e Pour arriver ` k piles en n tirages, soit on part de k 1 piles en n 1 tirages a et on tire pile, soit on part de k piles en n 1 tirages et on tire face. Ceci conduit ` la rcurrence suivante : a e 1 1 pn,k = pn1,k1 + pn1,k . 2 2 En oubliant les facteurs 1/2, il sagit l` de la rcurrence des coecients binomia e aux du triangle de Pascal. Ce nest pas tonnant puisque pour obtenir k piles e en n tirages, il sut de choisir les positions de k tirages donnant pile parmi n

1. OPERATIONS ELEMENTAIRES

259 n k

et les n k tirages qui restent donnent forcment face, do` pn,k = e u Une autre faon de le voir consiste ` utiliser des sries gnratrices. c a e e e

2n .

1.2.1. Sries gnratrices de probabilits e e e e La srie gnratrice de probabilit associe ` une variable alatoire discr`te e e e e e a e e X est par dnition e (1) f (z) =
k

Pr[X = k]z k

o` Pr[X = k] est la probabilit dapparition de la valeur k et o` la sommation u e u vaut sur toutes les valeurs possibles de la variable alatoire X. En consquence e e f (1) = 1 et le rayon de convergence vaut au moins 1. La suite des coecients sappelle la distribution de probabilit de la variable X. e Exemple 2. Dans le cas du jet dune pi`ce, la variable alatoire tant e e e le nombre doccurrences de pile, elle ne peut prendre pour valeur que 0 ou 1, chacune avec probabilit 1/2. La srie gnratrice est donc le polynme e e e e o 1/2 + z/2. f := 1/2+z/2: Lintrt des sries gnratrices vient de ce que la srie gnratrice associe ee e e e e e e e a ` la somme de deux variables alatoires indpendantes sobtient en multipliant e e leurs sries respectives. Pour sen convaincre, il sut de regarder ce qui se e passe au niveau des monmes. Le produit de ai z i par bj z j donne ai bj z i+j ; o les probabilits ai , bj sont bien multiplies grce ` lhypoth`se dindpendance e e a a e e et les occurrences i, j additionnes. e Exemple 3. Ceci nous permet de rpondre ` deux des questions poses e a e ci-dessus. La srie associe ` une suite de 20 tirages est f 20 ; la probabilit e e a e davoir au moins 80 % de piles est la somme des coecients de z 16 , z 17 , z 18 , z 19 et z 20 . f20 := expand(f^20): convert([seq(coeff(f20,z,j),j=16..20)],+); 1549 262144 Pour 500 tirages, la probabilit davoir une frquence comprise entre 0,4 e e et 0,6 correspond ` un nombre doccurrences de pile entre 200 et 300, et de a mme 0,45 et 0,55 correspondent ` 225 et 275. e a f500 := expand(f^500): evalf(convert([seq(coeff(f500,z,j),j=200..300)],+)), evalf(convert([seq(coeff(f500,z,j),j=225..275)],+)); 0.9999941484, 0.9775337951 Autrement dit, si lon prdit quapr`s 500 tirages le nombre de piles obtenus e e est compris entre 200 et 300, la probabilit de se tromper vaut moins de e 0,0006 %, alors que si lon prdit quil est compris entre 225 et 275, on a tort e avec une probabilit proche de 2 %. e

260

XI. CALCULS EN PROBABILITE

Exemple 4. Dans lexemple prcdent, toutes les probabilits pouvaient e e e sobtenir comme des coecients binomiaux. Ce nest plus le cas lorsque lon consid`re les ds, en particulier pour la somme des valeurs lors de k lancers. e e Au bout de 100 jets de ds la probabilit pour que la somme soit comprise e e entre 300 et 400 sobtient par : de100:=expand((z/6+z^2/6+z^3/6+z^4/6+z^5/6+z^6/6)^100): evalf(convert([seq(coeff(de100,z,j),j=300..400)],+)); 0.9969883792 1.2.2. Esprance et cart type e e Lorsque des valeurs numriques sont associes aux vnements possibles e e e e (lancer dun d par exemple), on dnit lesprance mathmatique qui corree e e e spond ` la limite de la moyenne arithmtique des valeurs observes. Cest une a e e information importante lorsque par exemple la variable alatoire reprsente e e un gain dans une partie. Lesprance reprsente alors le gain espr et il faut e e ee faire en sorte de la maximiser. Si X est une variable alatoire discr`te, son esprance est e e e E(X) =
k

k Pr[X = k] = p (1),

o` p est la srie gnratrice de probabilit. Cette esprance nest pas ncessaireu e e e e e e ment nie, mais elle lest pour beaucoup dexemples courants. Nous verrons en 2.2 un exemple de variable dont lesprance nest pas nie. e Lesprance de lcart ` E(X) est naturellement nulle. La variance, qui e e a est lesprance du carr de lcart ` E(X), prcise ` quel point une distrie e e a e a bution est centre sur son esprance, cest-`-dire ` quel point les valeurs e e a a loignes de lesprance sont probables. L` encore, la connaissance de la e e e a fonction gnratrice facilite le calcul : e e V (X) =
k

[E(X) k]2 Pr[X = k] k 2 Pr[X = k]


k 2

= E(X)2 2E(X)2 + = p (1) + p (1) p (1) .

Si la variable alatoire reprsente une quantit physique dans une certaine e e e unit, la racine carre de la variance, appele cart-type, est dans la mme e e e e e unit. e 1.2.3. Moments dordre suprieur e Esprance et variance sont prcises par les moments de la variable alatoie e e e re. Le moment dordre n est par dnition E(X n ) et le moment centr n = e e E((X E(X))n ) sen dduit par linarit de lesprance. Dapr`s la sece e e e e tion prcdente, la variance 2 = V (X) est relie aux drives de la fonction e e e e e gnratrice et il en va de mme pour les autres moments. Le lien sobtient e e e

1. OPERATIONS ELEMENTAIRES

261

0.08

0.06

0.04

0.02

00

20

40

60

80

100

f100 := expand((1/2+z/2)^100): plot([seq([i,coeff(f100,z,i)],i=0..100)],style=point);

Figure 2 Distribution du nombre de piles lors de 100 tirages. grce aux nombres de Stirling de seconde esp`ce Sn,j (combinat[stirling2] a e en Maple) que lon peut dnir par : e
n

kn =
j=1

Sn,j k(k 1) (k j + 1),

do` u
n

E(X ) =
j=1

Sn,j p(j) (1).

Le quatri`me moment est ainsi e E(X^4)=convert([seq(stirling2(4,j)*(D@@j)(p)(1),j=1..4)],+); E(X 4 ) = D(p)(1) + 7D(2) (p)(1) + 6D(3) (p)(1) + D(4) (p)(1) qui se lit p (1) + 7p (1) + 6p (1) + p(4) (1). 1.2.4. Distributions classiques Dans les exemples les plus simples qui viennent ` lesprit (tirage ` pile ou a a face, lancer de d, tirage du loto), tous les vnements ont la mme probabilit e e e e e de se produire. La distribution de probabilit est alors uniforme. e Mais dans de nombreux cas courants, la distribution nest pas uniforme. Il en va ainsi pour le nombre de piles lors de k tirages, dont la distribution de probabilits est trace en gure 2 pour k = 100. Cest un exemple de e e distribution binomiale. Plus gnralement, si p est la probabilit dun certain e e e vnement et q = 1 p, la probabilit quil se ralise k fois lors de n tirages e e e e indpendants est le coecient de z k dans (pz + q)n , cest-`-dire e a n k nk p q . k Esprance et variance du nombre de ralisations sobtiennent facilement : e e

262

XI. CALCULS EN PROBABILITE

f[0]:=(p*z+1-p)^n: f[1]:=diff(f[0],z): f[2]:=diff(f[1],z): subs(z=1,f[1]), factor(subs(z=1,f[2]+f[1]-f[1]^2)); np, np(1 p) Lesprance est conforme ` lintuition : apr`s n tirages o` lvnement a une e a e u e e probabilit p, on esp`re lavoir observ np fois. Quant ` la variance, e e e a elle cro linairement avec n, ce qui signie que lcart-type ne cro quen n. t e e t Donc lorsque n cro les valeurs (apr`s division par n) se regroupent autour t, e de lesprance p. On peut mme tre beaucoup plus prcis : lorsque n tend e e e e vers linni, la probabilit que la valeur soit comprise entre np np(1 p) e et np + np(1 p) tend vers (2) 1 2

ex

/2

dx.

Cette approximation sappelle traditionnellement lapproximation gaussienne, bien quelle ait t utilise avant Gauss par De Moivre et Laplace. ee e Exemple 5. Pour calculer ` lexemple 3 la probabilit davoir une frquena e e ce de piles comprise entre 0,4 et 0,6 au bout de 500 tirages, il avait fallu dvelopper un polynme de degr 500. Si lon augmente trop ce degr, le e o e e calcul devient impraticable. En revanche, lapproximation prend toujours le mme temps de calcul : e N:=expand(1/sqrt(2*Pi)*int(exp(-x^2/2),x=-alpha..alpha)); N := erf 2 seq(evalf(subs(alpha=d/sqrt(500/4),N)),d=[50,25]); 0.9999922558, 0.9746526813 Inversement, pour une probabilit donne, lexpression de N permet de e e trouver la valeur de donnant cette probabilit dans (2). e fsolve(N=0.95), fsolve(N=0.99); 1.959963985, 2.575829304 Par consquent, 95% des valeurs sont dans un intervalle de largeur 1,96 fois e lcart-type autour de la moyenne et 99% dans un intervalle de largeur 2,58 e fois lcart-type. e La distribution binomiale se gnralise en distribution multinomiale lorse e que plus de deux cas sont possibles ` chaque tirage. En eet, si p1 + +pr = 1 a sont les probabilits dvnements disjoints A1 , . . . , Ar , alors la probabilit que e e e e lors de n preuves, A1 se produise k1 fois,. . . , Ar se produise kr fois est le e coecient de xk1 xkr dans le polynme o r 1 (p1 x1 + + pr xr )n . Il vaut gnralement mieux calculer avec des sries car ces polynmes ont un e e e o grand nombre de coecients. Par exemple, la probabilit que lors de 20 lancers de ds, le deux appae e raisse 4 fois et le six 3 fois sobtient par :

1. OPERATIONS ELEMENTAIRES

263

p:=(x[2]/6+x[6]/6+4/6)^20: coeff(series(coeff(series(p,x[2],5),x[2],4),x[6],4),x[6],3); 57881600 1162261467 Distribution de Poisson. La distribution de Poisson a pour fonction gnrae e trice n n e(z1) = e z . n! n=0 Elle sobtient comme limite de la distribution binomiale lorsque la probabilit p = /n de lvnement observ est faible par rapport au nombre e e e e dobservations n. Exemple 6. Si la probabilit dune faute de frappe vaut 0,0012 par care act`re, la probabilit quune page de 2 500 caract`res contienne zro, une ou e e e e deux fautes vaut respectivement p:=0.0012: (1-p)^2500, 2500*p*(1-p)^2499, 2500*2499/2*p^2*(1-p)^2498; 0.04969746062, 0.1492715077, 0.2240866026 et lapproximation de Poisson donne : lambda:=p*2500: exp(-lambda), exp(-lambda)*lambda, exp(-lambda)*lambda^2/2; 0.04978706837, 0.1493612051, 0.2240418077 La fonction gnratrice donne lesprance et la variance : e e e f[0]:=exp(lambda*(z-1)):f[1]:=diff(f[0],z):f[2]:=diff(f[1],z): eval(subs(z=1,[f[1], f[2]+f[1]-f[1]^2])); [, ] 1.3. Produits de variables alatoires. La dnition des sries gnratrices e e e e e de probabilit donne plus haut est surtout adapte ` ltude de la somme de e e e a e variables alatoires indpendantes. Dans le cas du produit, il faut utiliser une e e srie de Dirichlet de la forme e 1 f (s) = Pr[X = k] s . k
k

En eet, dans le produit de 1/is par 1/j s , les valeurs i et j se multiplient pour donner 1/(ij)s . Ici cest le nombre lev ` la puissance s qui permet de e ea suivre la valeur de la variable. Exemple 7. Avec quelle probabilit le produit des valeurs de cinq ds e e est-il compris entre 100 et 1 000 ? Les sries de Dirichlet associes ` un et e e a a ` cinq tirages valent f := convert([seq(1/6/j^s,j=1..6)],+): f5 := expand(f^5): Il ne reste plus qu` garder les termes de lintervalle considr. a ee

264

XI. CALCULS EN PROBABILITE

test := a -> evalb(100<=a and a<=1000): f5bon := select(t->test(limit(t^(-1/s),s=infinity)),f5): Le remplacement de s par 0 limine les termes en k s et donne la probabilit e e cherche. e eval(subs(s=0,f5bon)); 4631 7776 1.4. Exercices. 1. Probl`me du chevalier de Mere. Des deux vnements suivants, quel est e e e le plus probable ? (1) Obtenir au moins une fois 6 en lanant un d 4 fois ; c e (2) obtenir au moins un double 6 en lanant deux ds 24 fois. c e 2. Apr`s 10 lancers de ds, avec quelle probabilit la somme des points faite e e elle k ? Tracer la courbe. Recommencer avec 100 lancers. 3. Calculer la probabilit davoir trois bons numros au loto. e e 4. La queue du cinma contient 100 personnes. La caisse est vide. Le billet e cote 50 F. Dans la queue, 40 personnes nont que des billets de 100 F et 60 u nont que des billets de 50 F. Quelle est la probabilit quaucune personne e ne se prsente ` la caisse sans que lon puisse lui rendre la monnaie ? e a 5. Huit tours sont places sur un chiquier. Quelle est la probabilit quaucune e e e des tours ne puisse prendre une autre ? 6. Sur 1 000 oranges ` emballer, 10 sont pourries. Ces oranges sont mises par a sacs de 8. Combien peut-on esprer de sacs vendables ? Comparer avec e lapproximation de Poisson. 7. Le paradoxe de Saint-Petersbourg. Un homme joue ` pile ou face avec de a largent : si la face sur laquelle il a pari sort, il gagne autant que sa mise, e et la perd sinon. Sa stratgie consiste ` sarrter d`s quil a gagn, et ` e a e e e a doubler sa mise en cas de dfaite. En dmarrant avec une mise de 1 F, e e quelle est son esprance de gain ? Que devient cette esprance si sa fortune e e est limite ` 16 384 F ? Quelle est la probabilit que cette stratgie paye k e a e e parties successives (en repartant toujours avec la mme somme initiale) ? e 8. Le Tapis Vert. Dans ce jeu quotidien cr en 1987, on choisit dans un jeu ee de 32 cartes une carte de chaque couleur (tr`e, pique, carreau, cur). Les e mises tant faites, une combinaison de quatre cartes est tire au hasard. e e Avec deux cartes exactes, on gagne 2 fois la mise, avec trois cartes 30 fois, et avec quatre cartes 1 000 fois la mise. (1) Calculer lesprance de gain pour une mise de un franc. e (2) Le 29 mars 1988, le carr das est sorti ; 22 000 joueurs avaient choisi e cette combinaison et la Franaise des Jeux a d dbourser 100 fois le c u e total des mises ce jour l`. Quelle tait la probabilit que le carr das a e e e sorte au moins une fois dans les 165 premiers jours apr`s la cration e e du jeu ? Quelle est lesprance du nombre de jours entre deux sorties e du carr das ? e

` 2. MARCHES ALEATOIRES ET PROBLEMES DE RUINE

265

9. Le paradoxe des anniversaires. En supposant les 365 jours de lanne e quiprobables, calculer ` partir de combien de personnes dans une ase a semble la probabilit quau moins deux dentre elles aient le mme jour e e e anniversaire est suprieure ` 1/2. e a Mme question pour 3 personnes avec le mme anniversaire. e e 2. Marches alatoires et probl`mes de ruine e e Le mod`le des marches alatoires sapplique ` de nombreuses quantits e e a e qui voluent par transitions alatoires. Il nous permet dillustrer lutilisation e e des sries gnratrices et dobtenir plusieurs exemples de rsultats contraires e e e e a ` lintuition. 2.1. R`gles du jeu et probl`mes. Le probl`me de la ruine se prsente e e e e sous la forme dun jeu : ` chaque tape une pi`ce est lance. Si pile sort, le a e e e premier joueur reoit un franc de son adversaire, sinon il lui donne un franc. c Pour rendre le mod`le plus gnral, on consid`re une pi`ce imparfaite donnant e e e e e pile avec probabilit p (on note ` nouveau q = 1 p). e a Le jeu dure n tapes. Dans un premier temps la fortune des deux joueurs e est suppose illimite. Il sagit de rpondre aux questions suivantes : e e e (1) au bout de combien dtapes les deux joueurs reviennent-ils ` galit e ae e pour la premi`re fois ? e (2) quelle est lesprance de gain de chacun des joueurs ? e (3) combien de fois les joueurs sont-ils ` galit au cours de la partie ? ae e (4) au bout de combien dtapes les deux joueurs reviennent-ils ` galit e ae e pour la derni`re fois ? e (5) en supposant la fortune dun joueur limite ` k, quelle est la probe a abilit quil ait tout perdu en n tapes ? Combien dtapes dure en e e e moyenne la partie ? Une reprsentation graphique dvolution du gain du premier joueur est done e ne en gure 3 p. 266. Cest une marche alatoire dun point partant de e e lorigine, dont labscisse augmente dune unit ` chaque tape, et dont lordonea e ne augmente dune unit lorsque pile sort et dcro dune unit sinon. Les e e e t e deux joueurs sont ` galit lorsque le point retourne sur laxe des abscisses. ae e La limitation sur les fortunes revient ` rajouter des barri`res horizontales. a e Lorsque le point arrive sur une telle barri`re, il est absorb, ce qui correspond e e a ` la ruine dun joueur, et ` la n de la partie. a Les questions (1), (2) et (5) sont traites dans les sections qui suivent ; e des indications sur les autres questions sont donnes dans les exercices. e 2.2. Premier retour. Si Y est labscisse du premier retour ` une ordonne a e nulle (galit des joueurs), la fonction gnratrice de Y sobtient en cone e e e sidrant la structure de larche que doit parcourir le point : cette arche e commence par un pas vers le haut ou vers le bas, se termine par le pas inverse, et entre les deux le point peut parcourir une succession darches dnies de la e

266

XI. CALCULS EN PROBABILITE

25

20

15

10

00

200

400

600

800

1000

-5

-10

Figure 3 Evolution de la fortune des joueurs (ici p = q = 1/2). mme faon. Cette dnition se traduit en termes de fonctions gnratrices, e c e e e par exemple pour les arches montantes : 1 A(z) = pz qz. 1 A(z) Le facteur pz est la fonction gnratrice dun pas vers le haut. Il est suivi e e dune suite 1/(1 A(z)) (voir p. 108) darches indpendantes de fonction e gnratrice A(z), et enn dun pas vers le bas, de fonction gnratrice qz. e e e e Cette quation se rsout : e e solve(A=p*q*z^2/(1-A),A); 1 1 1 1 1 4pqz 2 , 1 4pqz 2 + 2 2 2 2 La premi`re solution ayant des coecients de Taylor ngatifs, cest la sece e onde qui nous intresse : e A:="[2]: Les arches descendantes vriant la mme quation, elles ont la mme fonction e e e e gnratrice. La probabilit que le premier retour ait lieu ` labscisse 2n est le e e e a coecient de z 2n dans 2A(z), et la probabilit de retour est la somme de ces e coecients, cest-`-dire 2A(1) : a 2*subs(z=1,A); 1 1 4pq Le seul cas o` le retour est certain est par consquent p = q = 1/2. En cas de u e retour, lesprance de labscisse du premier retour vaut : e 2*subs(z=1,diff(A,z)); pq 4 1 4pq Lorsque p = 1/2 le retour nest donc pas certain, mais lorsquil se produit sa position a une esprance nie, alors que lorsque p = 1/2, le retour est certain, e mais sa position a une esprance innie. La variance sobtient de la mme e e mani`re. e Apr`s quune arche a t parcourue, la situation est revenue au point de e ee dpart, et la suite est indpendante de ce qui sest pass pendant la premi`re e e e e

` 2. MARCHES ALEATOIRES ET PROBLEMES DE RUINE

267

arche. La fonction gnratrice du k e retour ` lorigine vaut donc [2A(z)]k et e e a dans la fonction gnratrice e e B(z) = 1 , 1 2A(z)

le coecient de z n est la probabilit quun retour ait lieu ` labscisse n. e a 2.3. Gain. Apr`s avoir parcouru un certain nombre darches, le point dcole e le et quitte laxe des abscisses pour ne plus y revenir. Sil part vers le haut (resp. le bas), sa trajectoire se dcompose en une succession darches e suivie dun pas montant (resp. descendant), suivi dune succession darches montantes (resp. descendantes), suivie dun pas montant (resp. descendant)... Do` les deux fonctions gnratrices u e e (3) C + (z) = B(z) , pz 1 1A(z) C (z) = B(z) , qz 1 1A(z)

la premi`re correspondant aux parties gagnes par le premier joueur, et la sece e onde ` celles quil perd. Ces formules traduisent la dcomposition ci-dessus : a e B(z) correspond ` la succession darches montantes ou descendantes parcoua rues jusquau dernier dpart de laxe des abscisses, puis, indpendamment de e e ce qui sest pass auparavant, le point parcourt une succession de quasi-arches, e chacune tant forme dun pas montant (pz) suivi dune successions darches e e montantes (1/(1 A(z))). Le coecient de z n dans C + (z) (resp. C (z)) est donc la probabilit que lordonne ` labscisse n soit positive (resp. ngative). e e a e Cp:=1/(1-2*A)/(1-p*z/(1-A)): Cp := 1 1 4pqz 2 1 pz
1 2

+ 1 4pqz 2

Les premi`res valeurs de ces probabilits sont e e map(expand,series(Cp,z)); 1 + pz + (2pq + p2 )z 2 + (3p2 q + p3 )z 3 + (6p2 q 2 + 4p3 q + p4 )z 4 + (10p3 q 2 + 5p4 q + p5 )z 5 + O(z 6 ) Chacun de ces coecients sinterpr`te facilement. Par exemple pour que e le point ait une ordonne positive ` la troisi`me tape, il faut que les tirages e a e e aient t pile-face-pile, face-pile-pile, pile-pile-face ou pile-pile-pile. La somme ee des probabilits de ces trois vnements donne le coecient de z 3 . e e e Le comportement asymptotique de cette probabilit (la victoire du pree mier joueur) lorsque le nombre dtapes tend vers linni studie comme on e e la vu au chapitre VIII. La premi`re phase consiste ` chercher la singularit e a e la plus proche de lorigine. La fonction A(z) est singuli`re en = 1/ 4pq, o` e u elle vaut 1/2. La position relative de 2p = p/q et de 1 dtermine alors la e singularit dominante. e

268

XI. CALCULS EN PROBABILITE

Si 2p < 1, cest-`-dire si p < 1/2, les singularits dominantes sont et a e , o` 1 4pqz 2 sannule. Le comportement au voisinage de est le suivant u : series(subs(z=1/sqrt(4*p*q)*(1-u),Cp),u,2); 1 2 p + p p 2 1 u pq + p 1 pq pq

+O

et celui au voisinage de est similaire. Lquation (9) page 214 donne pour le e coecient de (1z/)1/2 lquivalent n / n. En tenant compte des deux e contributions, en et , le premier terme du dveloppement asymptotique e de la probabilit de victoire du premier joueur pour un jeu en n tapes est e e pour n pair q 2 (4pq)n/2 n1/2 . (q p) Pour n impair seule la constante di`re, la contribution en venant se e retrancher au lieu de sajouter. Cette probabilit dcro exponentiellement e e t avec n car 4pq < 1. Si 2p = 1, cest-`-dire si p = 1/2, la singularit dominante est toujours a e en = 1, mais le comportement au voisinage de la singularit a chang : e e series(subs(p=1/2,q=1/2,Cp),z=1,2); 1 1 1 I 2 + O(1) 2z1 4 z1 do` le comportement asymptotique u 1 + O(1/ n) 2 qui correspond bien ` la probabilit 1/2 qua chacun des joueurs de gagner a e dans ce cas. Si 2p > 1, cest-`-dire si p > 1/2, la singularit dominante est atteinte a e lorsque pz = 1 A(z), cest-`-dire en z = 1. Le comportement singulier est a alors donn par : e assume(p>1/2); map(normal,series(subs(q=1-p,Cp),z=1,2)); (z 1)1 + O(1) do` lon dduit le comportement asymptotique u e 1 + O(1/n). Le comportement asymptotique d au ple suivant donne un reste exponenu o tiellement faible : cest par symtrie la probabilit de gagner lorsque p < 1/2. e e Le comportement dans ce cas est conforme ` lintuition : d`s que p > 1/2 a e la probabilit de gagner tend vers 1 lorsque la dure de la partie tend vers e e linni. Lesprance de gain fait lobjet de lexercice 1. e

` 2. MARCHES ALEATOIRES ET PROBLEMES DE RUINE

269

2.4. Ruine. On suppose que la fortune du premier joueur est limite (il e joue contre un casino, ou il sagit dune compagnie dassurance,...). La srie e gnratrice associe ` la probabilit de ruine ` ltape n sobtient en dcompoe e e a e a e e sant la partie comme prcdemment : au dpart le point parcourt un certain e e e nombre darches montantes, puis une tape vers le bas, puis des arches mone tantes,... Contrairement au cas prcdent, le nombre dtapes vers le bas est e e e limit par la fortune du joueur. Si k est cette fortune, la fonction gnratrice e e e scrit donc : e k qz 1 A(z) et lesprance du nombre dtapes avant la ruine vaut : e e p:=p: normal(subs(z=1,diff((q*z/(1-A))^k,z))); q 1+ 1 4pq 1 4pq La singularit de ce rsultat pour p = q = 1/2 montre qualors lesprance du e e e nombre dtapes est innie. e k 2 2.5. Exercices. 1. Le calcul de lesprance du gain dans la marche alatoire est simpli par e e e lutilisation de fonctions gnratrices ` deux variables. e e a (1) Justier pourquoi la fonction obtenue en remplaant pz (resp. qz) c par pvz (resp. qvz) dans lexpression de C + (z) (resp. C (z)), donne e p. 267, est une fonction gnratrice o` le coecient de v k z n est la e e u probabilit qu` labscisse n lordonne vaille +k (resp. k). e a e ` (2) A partir des drives par rapport ` v en v = 1 de ces fonctions, e e a calculer la fonction gnratrice des esprances de gain du premier e e e joueur. Vrier les premiers coecients. e (3) En procdant comme pour la probabilit de gagner, calculer le come e portement asymptotique de lesprance de gain. e 2. Cet exercice propose dtudier le nombre de passages par la position de e dpart pendant la partie. e (1) Construire une fonction gnratrice ` deux variables u et z o` le coefe e a u cient de z n uk est la probabilit que lordonne soit positive apr`s n e e e tapes de jeu, le jeu tant pass k fois ` lquilibre. [Il sut de mete e e a e tre u au bon endroit dans C + .] (2) Comme dans lexercice prcdent, en dduire la fonction gnratrice e e e e e de lesprance du nombre de passages ` lquilibre. e a e (3) Dterminer alors singularit dominante et comportement asymptoe e tique. 3. Cet exercice propose de dterminer lesprance de la derni`re abscisse o` e e e u lordonne est nulle. Lintuition peut tre guide par les simulations efe e e fectues ` lexercice 1 p. 273. e a
k

270

XI. CALCULS EN PROBABILITE

(1) Dterminer une fonction gnratrice ` deux variables z et t o` le coefe e e a u cient de z n tm est la probabilit que le dernier passage ` lordonne 0 e a e prcdant ltape n ait eu lieu ` ltape m. [Il sut de mettre t au e e e a e bon endroit dans C + + C .] (2) En dduire la fonction gnratrice des esprances cherches. e e e e e (3) Mener ltude asymptotique. e (4) Etudier la variance. 4. Le premier joueur a une fortune limite. Il dcide que sa stratgie sera de e e e sarrter d`s quil a augment sa fortune initiale de . e e e (1) Calculer la fonction gnratrice dont le coecient de z n est la probe e abilit pour que le joueur atteigne le but quil sest x ` ltape n. e ea e (2) Calculer la probabilit quil gagne. e (3) Calculer lesprance de la dure de la partie sil est ruin. e e e (4) Calculer son esprance de gain. e 5. Lorsque les deux joueurs ont une fortune limite dirente, calculer en e e fonction de ces fortunes la probabilit qua chacun de ruiner lautre. e 3. Simulation Bien souvent il est impossible de dterminer exactement une distribution e ou les caractristiques dune variable alatoire. La simulation permet de faire e e rapidement de nombreuses expriences, de tester dirents mod`les, ou de e e e vrier des rsultats thoriques. Nous montrons dans cette section des exe e e emples dutilisation dun gnrateur alatoire uniforme, et comment crire un e e e e gnrateur alatoire selon une distribution donne. e e e e 3.1. Tirage uniforme. La gure 1 p. 258 na pas t obtenue en tirant ee 500 fois ` pile ou face. Elle est le rsultat de lutilisation de la commande a e rand qui fournit une procdure renvoyant un entier alatoire uniformment e e e dans un intervalle donn en argument : e piece:=rand(2): pile[0]:=0: for i to 1000 do pile[i]:=pile[i-1]+piece() od: plot([seq([i,pile[i]/i],i=1..500)],n=0..500,p=0..1); Pour obtenir une distribution, il faut faire plusieurs sries de tirages. Par e exemple, la courbe exprimentale correspondant ` la distribution thorique e a e de la gure 2 p. 261 sobtient en comptant le nombre moyen de piles dans une srie de 100 tirages. Pour compter le nombre de piles, il sut dcrire une e e procdure qui vaut 1 en cas de pile et 0 sinon : e pile:=rand(2): puis on crit une procdure qui compte le nombre de piles dans une srie de e e e 100 tirages : nbpile:=proc() local i;convert([seq(pile(),i=1..100)],+) end: ensuite on fait des sries de 100 tirages, et on compte combien de fois le e nombre de piles vaut k, pour 0 k 100 :

3. SIMULATION

271

160

140

120

100

80

60

40

20

00

20

40

60

80

100

Figure 4 s:=array(0..100,sparse): to 2000 do n:=nbpile(); s[n]:=s[n]+1 od: La gure 4 sen dduit alors par e plot([seq([n,s[n]],n=0..100)]); Lorsque la variable alatoire est continue, il faut lisser la courbe en groue pant les rsultats proches. Nous en verrons un exemple plus loin. e La fonction rand renvoie un gnrateur dentiers ; une approximation e e dun gnrateur uniforme sur lintervalle rel [0, 1] sobtient ainsi : e e e N := 10^20: randN := rand(0..N-1): randU := () -> evalf(randN()/N): 3.2. Tirage selon une distribution xe. On a souvent besoin de tirer des e ` nombres de mani`re alatoire, mais pas uniforme. A partir dun gnrateur e e e e alatoire uniforme, il est possible de construire un gnrateur alatoire suive e e e ant une distribution de probabilit donne. La distribution est dnie par la e e e donne de lintervalle (a, b) parcouru par la variable alatoire X, et par sa fonce e tion de rpartition F (t) = Pr[X t]. La fonction F transforme lintervalle e (a, b) en [0, 1], et il nest pas dicile de voir que cest la fonction inverse que nous cherchons : F 1 transforme la distribution uniforme sur [0, 1] en la distribution dsire sur (a, b). Lorsque F admet un inverse simple, il sut donc e e de tirer X = F 1 (U ) o` U est uniforme sur [0, 1]. u Exemple 8. Un gnrateur alatoire selon la loi exponentielle sur [0, [, e e e dont la fonction de rpartition est 1 exp(t), sobtient par e rand_exp:=proc() -log(randU()) end: en utilisant le gnrateur randU vu plus haut, et le fait que U et 1 U ont la e e mme distribution. Une vrication est obtenue en traant la courbe, de la e e c mme faon que ci-dessus : e c s:=array(0..100,sparse): to 2000 do

272

XI. CALCULS EN PROBABILITE

100

80

60

40

20

00

20

40

60

80

100

Figure 5 Tirages selon une loi exponentielle. t:=trunc(20*rand_exp()); if t<=100 then s[t]:=s[t]+1 fi od; plot([seq([n,s[n]],n=0..100)]); ce qui donne la gure 5. Lorsque la fonction de rpartition a une expression complique, il nest e e pas si facile de calculer son inverse. Voici une procdure qui prend en entre e e une fonction de rpartition F de variable x, un intervalle r, et retourne un e gnrateur alatoire (peu ecace) suivant la distribution voulue. e e e gen_rand := proc(F,x,r) subs(_corps=fsolve(F=randU(),x=r),proc() _corps end) end: Considrons par exemple la distribution de fonction de rpartition (x+sin x)/ e e sur lintervalle [0, ] ; F1 := (x+sin(x))/Pi: le gnrateur alatoire correspondant est obtenu par e e e randF1 := gen_rand(F1,x,0..Pi): Voici la procdure que nous avons construite e print(randF1); proc() fsolve((x+sin(x))/Pi = randU(),x = 0 .. Pi) end et voici quelques tirages: seq(randF1(),i=1..12); .4556513441, 1.030514031, 1.336654437, .6295240942, .1501246179, .7593796395, .2153416371, .09045415529, .6006381568, .1712310204, .3114670168, .5318833976 ` A titre de vrication, lesprance de la distribution dnie ci-dessus est e e e donne par e esp := normal(int(x*diff(F1,x),x=0..Pi));

3. SIMULATION

273

esp := evalf(esp);

1 2 4 2

0.9341765549 a ` comparer avec la moyenne obtenue sur 1 000 tirages : s:=0: to 1000 do s:=s+randF1() od: s/1000; 0.9627213171 3.3. Exercices. 1. Dans le probl`me considr au 2, on suppose p = q = 1/2. Tracer la distrie ee bution du dernier retour ` lordonne 0 lorsque la partie dure 100 tapes. a e e 2. Pour tirer rapidement une loi gaussienne ` partir dun gnrateur unia e e forme, on tire uniformment deux nombres x et y entre -1 et 1, jusqu` ce e a que r = x2 + y 2 1. On renvoie alors 2 log r . r Comparer ce procd ` celui qui consiste ` inverser e ea a x 2 1 et /2 dt. 2 0 x

CHAPTER XII

Calcul formel et calcul numrique e


e numerique pas au calcul Il L calculment eetesparfoisnemesoppose aboutissement. formel.le casen est soncompl e me son Cest en math e matiques appliqu et en analyse numrique, par exemple pour le traitement e du signal, lanalyse et la commande des syst`mes, la robotique et la thorie e e de lestimation. Il est possible de faire du calcul numrique ` lintrieur dun syst`me de e a e e calcul formel ; nous en illustrons certains aspects en 1. Cependant les contraintes decacit obligent souvent ` utiliser dautres langages ou logiciels. e a Les probl`mes dinterface qui se posent alors sont abords en 2. e e 1. Calcul numrique ` lintrieur du syst`me e a e e Lorsquune approximation numrique dun rsultat sut, on utilise des e e nombres dcimaux (appels aussi nombres ottants). Tous les syst`mes de cale e e cul formel permettent de choisir le nombre de chires signicatifs utiliss au e cours dun calcul. Nous parlons alors de calcul en prcision arbitraire, par ope position aux oprations ` prcision xe (usuellement 15 dcimales) proposes e a e e e par les autres langages (C, Fortran, Pascal) et logiciels numriques. e Certains syst`mes, dont Maple, orent galement la possibilit daccder e e e e interactivement aux oprations ottantes de la machine. Nous montrons come ment exploiter au mieux ce mode pour diminuer le temps de calcul dun facteur pouvant aller jusqu` 30. Si cela ne sut pas, il faut alors passer ` la produca a tion de code C ou Fortran, ce qui permet grce ` la compilation de gagner a a encore un facteur pouvant aller jusqu` 100, soit un facteur denviron 3 000 a par rapport au dpart. Ces questions sont abordes dans la section suivante. e e 1.1. La prcision arbitraire. Lorsque le nombre de chires dsirs est e e e suprieur ` la prcision des ottants de la machine, il est ncessaire de recourir e a e e aux nombres ottants en prcision arbitraire du syst`me de calcul formel, e e ce qui peut savrer coteux en temps. Certaines biblioth`ques telles que e u e GMP, Bignum ou Pari (voir Ann. C) font aussi ce type de calcul en grande prcision, mais il faut sattendre au mieux ` un gain de lordre de dix. De e a plus GMP et Bignum savent faire uniquement les oprations arithmtiques e e lmentaires (addition, multiplication, soustraction, division) et nont pas la ee souplesse demploi dun syst`me interactif. e La grande prcision est cependant souvent ncessaire lors de calculs instae e bles numriquement. Dans certains cas, les calculs numriques peuvent assez e e
275

276

XII. CALCUL FORMEL ET CALCUL NUMERIQUE

facilement tre acclrs de mani`re non ngligeable, nous lillustrerons sur e ee e e e deux exemples importants. Phnom`ne dannulation. La prcision que lutilisateur indique au syst`me e e e e pour les calculs ottants (en Maple par Digits:=n ou bien evalf(expr,n)) est la prcision relative des calculs, cest-`-dire que la mantisse des nombres e a manipuls contient n chires. e Si a et b sont des approximations ` n chires de deux nombres positifs, a a+b est une approximation ` n chires de leur somme. La prcision relative de a e a b par rapport ` leur dirence est quant ` elle infrieure ` n chires, et ce a e a e a dautant plus que les nombres sont proches. Cest le phnom`ne dannulation. e e e a Exemple 1. Dans lexemple suivant, il se trouve que e 163 est gal ` lentier 262537412640768744 a 1012 pr`s ! Si lon ne prend pas garde ` la ` e a prcision choisie, le calcul numrique de cette dirence donne des rsultats e e e e qui semblent incohrents lorsque le nombre de chires signicatifs choisi est e trop faible. seq(evalf(exp(Pi*sqrt(163))-262537412640768744,i), i=[10,15,20,25,30,35]); .29 1010 , 5000., .43, .36 105 , .24 1010 , .75020 1012 Le phnom`ne dannulation se remarque lorsque le nombre de chires sige e nicatifs achs par le syst`me est tr`s infrieur ` la prcision demande. e e e e a e e Ainsi dans lexemple ci-dessus, dix chires sont demands pour la premi`re e e valeur .29 1010 , mais seulement deux sont obtenus. Cet exemple montre aussi quil ne faut pas faire conance aveuglment aux chires achs lorsquils sont e e peu nombreux. Une technique ecace consiste ` augmenter la prcision dea e mande de 5 ou 10 units et ` observer la prcision obtenue : si elle augmente e e a e de mme, alors le rsultat est sans doute able. e e Rglage de la prcision. Pour obtenir n chires corrects au bout dune suite e e doprations, il faut eectuer les calculs intermdiaires avec une prcision e e e n n apr`s avoir montr quelle tait susante. Par exemple pour le calcul e e e de constantes dnies par une srie, comme dans le cas du sinus intgral de e e e Fresnel dtaill au VIII.1.1, n = n + a + b, o` a prend en compte le e e u phnom`ne dannulation (fonction du rapport entre le terme maximal et la e e somme de la srie), et b prend en compte les erreurs darrondi (fonctions du e nombre de termes ajouts). Il sut ` la n du calcul de tronquer le rsultat e a e obtenu ` n chires. a Mais il nest pas toujours ncessaire de raliser tous les calculs avec la e e mme prcision. Une illustration importante de ce principe est fournie par e e litration de Newton. Pour rsoudre f (x) = 0, la mthode de Newton part e e e dun point x0 puis calcule des lments de la suite xn+1 = xn f (xn )/f (xn ) ee ; sous certaines conditions, cette suite converge vers un zro de f . On peut e montrer que dans ce cas le nombre de dcimales correctes est approximativee ment doubl ` chaque itration. ea e

` ` 1. CALCUL NUMERIQUE A LINTERIEUR DU SYSTEME

277

Exemple 2. Une approximation de 2 sobtient comme racine de f = x2 2 ce qui donne xn+1 = xn /2 + 1/xn . Une premi`re mthode consiste ` e e a excuter e Digits:=1000: x:=1.4: to 9 do x:=x/2+1/x od: qui fournit 999 dcimales correctes. Il est cependant plus habile deectuer e Digits:=1: x:=1.4: while Digits<1000 do Digits:=2*Digits; x:=x/2+1/x od: qui produit seulement 990 dcimales, mais huit fois plus rapidement. En eet, e dans le second cas, le cot du calcul est quasiment rduit ` celui de la derni`re u e a e itration. e Utilisation dentiers. Il faut savoir quen Maple les nombres ottants sont reprsents par des couples (m, e) o` m et e sont des entiers, respectivement e e u la mantisse et lexposant. Par consquent tous les calculs ottants en grande e prcision sont bass sur les oprations entre grands entiers. Il ressort de ceci e e e que lon a intrt lorsque cest possible ` utiliser directement des entiers. Cest ee a notamment le cas lors du calcul approch dune somme s = i ti lorsque le e quotient ti+1 /ti est rationnel en i. Au lieu dajouter les nombres ottants ti , il vaut mieux ajouter les nombres entiers ti = 10d ti , o` d est le nombre de u dcimales du rsultat nal ; ti+1 sobtient ` partir de ti par multiplication et e e a division enti`re. e Exemple 3. La procdure ci-dessous calcule ainsi n dcimales de e, la e e base des logarithmes npriens : e e Enum := proc(n) local t,s,i; t:=10n; s:=t; for i while t<>0 do t:=iquo(t,i); s:=s+t od; Float(s,n) end: Bien quinterprte, cette procdure est presque aussi rapide que evalf(E,n), ee e qui appelle une routine du noyau de Maple, et 35 fois plus rapide que la procdure suivante : e Enum2 := proc(n) local t,s,i; Digits:=n; t:=1.0; s:=t; for i while t>Float(1,-n) do t:=t/i; s:=s+t od; s end: En plus du gain d ` lutilisation dentiers au lieu de nombres ottants, ua le premier programme ne calcule des termes ti que la partie utile au rsultat e nal, alors que le second les dtermine tous avec n chires signicatifs. e

278

XII. CALCUL FORMEL ET CALCUL NUMERIQUE

1.1.1. Le temps de calcul La principale faiblesse des syst`mes de calcul formel en calcul numrique e e est leur lenteur. Nous lillustrons sur un exemple de calcul des valeurs singuli`res dune matrice. e Exemple 4. Les valeurs singuli`res dune matrice A sont les racines e carres des valeurs propres de AtA. Le rapport entre la plus grande valeur e singuli`re et la plus petite, appel le conditionnement de la matrice, quantie e e la sensibilit de la solution u du syst`me linaire Au = b par rapport aux e e e donnes A et b. La solution est dautant plus sensible que le conditionnement e est grand. Calculons les valeurs singuli`res dune matrice numrique 100100 e e obtenue alatoirement en Maple : e m:=evalm(randmatrix(100,100)/99.0): time(evalf(Svd(m))); 33.134 Le rsultat est obtenu apr`s 33 secondes. Sauvegardons dans un chier les e e lments de la matrice utilise et ralisons le mme calcul dans un syst`me ee e e e e spcialis comme Scilab, qui excute en fait des programmes Fortran : e e e -->m=read(mat100.data,100,100); -->initimer(),v=svd(m);timer() ans = 0.6 Les rsultats donns par les deux syst`mes sont les mmes, mais le temps de e e e e calcul est de 33 secondes avec Maple, contre 0.6 seconde avec Scilab, soit un rapport de plus de 50. La lenteur des syst`mes de calcul formel pour les calculs numriques e e provient de deux facteurs : (1) gnralit : les syst`mes de calcul formel utilisent des structures e e e e de donnes plus gnrales que les syst`mes numriques, ce qui leur e e e e e donne la possibilit de faire des calculs en prcision arbitraire. Le e e revers de la mdaille est que ces structures plus gnrales sont plus e e e lourdes ` manipuler, do` un plus grand nombre doprations lmena u e ee taires ; (2) compilation : aucun syst`me de calcul formel actuel ne permet la e compilation ecace de larithmtique ottante. Lorsque ces instruce tions sont lmentaires comme laddition de deux nombres ottants, ee la compilation diminue le temps de calcul dun facteur pouvant aller jusqu` 100. a 1.1.2. La prcision e En revanche, dans le cas de la rsolution de probl`mes numriques mal e e e conditionns o` un langage comme C ou Fortran manque de prcision pour e u e

` ` 1. CALCUL NUMERIQUE A LINTERIEUR DU SYSTEME

279

donner la bonne solution, un syst`me de calcul formel peut tre tr`s utile. e e e Bien sr, il faut que le probl`me ne soit pas de trop grande taille et, comme u e nous lavons vu dans le paragraphe prcdent, que le temps de calcul ne soit e e pas une contrainte imprative. e Exemple 5. Reprenons le calcul des valeurs singuli`res dune matrice, e mais pour une matrice de Hilbert, matrice tr`s mal conditionne. En Maple, e e le calcul avec une prcision de 50 chires est ais : e e h:=hilbert(30): time(assign(v=evalf(Svd(h),50))); 34.784 v[1],v[15],v[16],v[17],v[30]; 1.9864925686087363474534871311714227555376938069200, .27112398180823380771764993344965366797871366951760 1014 , .98296319223573173752229056229247630363353503058785 1016 , .31914477625966150949774017342529486456377251924053 1017 , .46986365445013202024187188936355711531488366113258 1043 Le rsultat sobtient en 35 secondes, et quelques valeurs singuli`res sont afe e ches ci-dessus, dont la plus grande v[1] et la plus petite v[30]. e Avec Scilab, le temps est tr`s court (moins dun dixi`me de seconde !) e e mais seuls v(1) ` v(15) sont corrects : a -->for i = 1:30, for j = 1:30, h(i,j) = 1/(i+j-1);end;end -->initimer(),v=svd(h);timer() ans = 0. -->[v(1),v(15),v(16),v(17),v(30)] ans = ! 1.9864926 2.711D-15 1.022D-16 1.465D-17 9.100D-20 ! En eet, les nombres ottants de Scilab, qui sont ceux de la machine, norent que 16 chires de prcision, ce qui est insusant ici o` le rapport entre v[1] e u et v[30] est de lordre de 1044 . Des rsultats semblables ` ceux de Scilab sont e a obtenus par evalf(Svd(h),16) sous Maple. Les rsultats obtenus par Maple ne sont pas ncessairement corrects. La e e vrication nest pas simple ` raliser. Le mme calcul avec 100 chires de e a e e prcision donne les mmes 48 premiers chires pour v[1], 37 chires pour e e v[15], 35 pour v[16], 33 pour v[17] et 8 pour v[30], mais ce nest en aucun cas une justication rigoureuse. 1.2. Les ottants de la machine. Maple donne acc`s aux oprations sur e e les nombres dcimaux de la machine (les quatre oprations, les fonctions e e trigonomtriques, lexponentielle, le logarithme,...). Leur prcision est limite e e e

280

XII. CALCUL FORMEL ET CALCUL NUMERIQUE

a ` une quinzaine de chires, mais ces oprations sont bien plus rapides que e celles en prcision arbitraire fournies par le syst`me. Ces nombres sont soue e vent utiliss en Maple ` linsu de lutilisateur. Les deux cas les plus importants e a sont les tracs graphiques (plot et plot3d) o` cinq dcimales susent largee u e ment, et lintgration numrique (evalf/int) lorsque la prcision demande e e e e est infrieure ` quinze chires. e a Exemple 6. Pour calculer la 10 000e itre de la suite dnie par u0 = 1 ee e et un+1 = un + sin(un ), une premi`re solution est dexcuter : e e s:=1.0: to 10000 do s:=s+sin(s) od: en aectant au pralable ` la variable Digits le nombre de dcimales voulues, e a e plus quatre ou cinq pour se prmunir contre les erreurs darrondi. Si une e quinzaine de dcimales susent, la commande e s:=1.0: to 10000 do s:=evalhf(s+sin(s)) od: est trois fois plus rapide. Mieux encore, lvaluation dune procdure : e e f:=proc(u0) local u; u:=u0; to 10000 do u:=u+sin(u) od end: s:=evalhf(f(1.0)): est quatorze fois plus rapide. En eet, dans ce dernier cas la conversion entre les nombres dcimaux de Maple et ceux de la machine nest faite que deux e fois, ` lentre et ` la sortie de la procdure f. a e a e Exemple 7. Pour tracer lensemble de Mandelbrot (voir p. 83), il faut 2 calculer des valeurs de la suite zn+1 = zn + z0 , o` z0 est un nombre complexe u donn. Cest ce que fait la procdure f ci-dessous, qui part de z0 = a0 + ib0 e e et renvoie le carr du module de zn , ou dune valeur prcdente sil dpasse 4. e e e e f := proc(a0,b0,n) local a,b,c; a:=a0; b:=b0; to n while a2+b2<=4 do c:=a2b2; b:=2*a*b+b0; a:=c+a0 od; a2+b2 end: Pour cette fonction, lutilisation des ottants de la machine apporte un gain proche de 30 : time(f(0.3,0.2,100000)), time(evalhf(f(0.3,0.2,100000))); 107.233, 3.683 Cet exemple montre que la commande evalhf permet dvaluer avec des e ottants de la machine des procdures relativement complexes, comprenant e des boucles et des tests. Cependant nous avons atteint l` les limites de ce qui a est possible sans sortir de Maple. Nous verrons dans la section suivante que lon peut encore gagner un facteur 100 grce ` la compilation (ex. 8 p. 285). a a

` ` 1. CALCUL NUMERIQUE A LINTERIEUR DU SYSTEME

281

F M1 O c Figure 1 Un hauban charg transversalement. e 1.3. Un exemple concret. Le calcul formel est un outil idal pour rsoudre e e beaucoup de probl`mes qui se posent aux ingnieurs. En eet, lingnieur e e e a souvent des modlisations physiques compliques et, travaillant dans des e e plages dtermines de variation des param`tres, est intress par des formules e e e e e ` oe approches, par exemple pour les insrer dans un programme. A ct de la e e recherche classique de telles formules par des mthodes didentication ou par e ttonnement, le calcul formel, par lintermdiaire des dveloppements limits a e e e et des calculs de limites, peut donner une rponse prcise et rapide. e e ` A titre dexemple, nous traitons ci-apr`s un probl`me complet qui a trait e e a ` lobtention dune formule approche pour la longueur dun hauban. Un e hauban est un cble gnralement mtallique qui sert de renfort. Connaissant a e e e les forces qui sappliquent sur ce cble, un probl`me classique consiste ` en a e a calculer la longueur. Il est reprsent dans le cas dune charge transversale e e sur la gure 1. Les variables sont les suivantes : M1 le couple de exion ` lextrmit a e e gauche du hauban ; M2 le couple de exion ` lextrmit droite ; T la force a e e de traction aux deux extrmits ; q la charge uniformment rpartie le long e e e e du hauban (correspond ici au poids du hauban) ; F la charge transversale au point dabscisse c ; l la longueur entre les deux extrmits ; p param`tre e e e dpendant de la nature et de la forme du matriau. e e La `che y du hauban est donne par y(x) = yF (x) + yq (x) + yM (x) avec e e : yF (x) = yq (x) = F sinh(pc) sinh(px) + T p sinh(pl)
F cx Tl F sinh[p(lc)] sinh[p(lx)] + F (lc)(lx) T p sinh(pl) Tl

M2 l x

si x c, si x c,

q cosh(px pl/2) qx(l x) 1 + , T p2 cosh(pl/2) 2T M1 l x sinh[p(l x)] M2 x sinh(px) yM (x) = T l sinh(pl) T l sinh(pl)

282

XII. CALCUL FORMEL ET CALCUL NUMERIQUE

140 120 100 80 60 40 20 00 1000 2000 3000 x 4000 5000 6000

Figure 2 Courbes du hauban pour diverses valeurs de F . Dans un premier temps, nous allons tudier la fonction y(x) en fonction e de la force F . Les autres param`tres sont donns : l = 6 000, c = l/2, e e p = 1,62 102 , q = 0,283, T = 98 100, M1 = 2 106 et M2 = 106 . Une premi`re tape consiste ` tracer la forme du hauban, cest-`-dire la courbe e e a a y(x) pour diverses valeurs de F , par exemple pour F variant de 0 ` 10 000 a par pas de 500. La session Maple ci-dessous permet de tracer les 21 courbes reproduites dans la gure 2. y[F]:=-F*sinh(p*c)*sinh(p*x)/(T*p*sinh(p*l))+F*c*x/(T*l): y[F]:=[y[F],subs([x=l-x,c=l-c],y[F])]: y[q]:=q*(cosh(p*x-p*l/2)/cosh(p*l/2)-1)/T/p/p+q*x*(l-x)/(2*T): y[M]:=(M[1]/T)*((l-x)/l-sinh(p*(l-x))/sinh(p*l)) -(M[2]/T)*(x/l-sinh(p*x)/sinh(p*l)): y:=[y[F][1]+y[q]+y[M],y[F][2]+y[q]+y[M]]: data:=c=l/2,l=6E3,T=98100,p=1.62E-2,q=-.283,M[1]=2E6,M[2]=-1E6: v:=subs(data,y): p1:=plot(map(subs,{seq(F=500*i,i=0..20)},v[1]),x=0..3000): p2:=plot(map(subs,{seq(F=500*i,i=0..20)},v[2]),x=3000..6000): plots[display]({p1,p2}); Le but nal est de calculer la longueur du hauban, qui est donne par la e formule :
c l

L=
0

1 + y1 2 dx +
c

1 + y2 2 dx

o` y1 et y2 reprsentent respectivement les drives de y1 (`che ` gauche de u e e e e a x = c) et y2 (`che ` droite de x = c) par rapport ` x. e a a Maple ne trouve pas dexpression symbolique pour cette intgrale. Nous e allons donc la simplier en observant que pour les valeurs numriques donnes e e 2 y est petit devant 1. En eet, la gure 3 montre que pour F = 10 000, le 2 maximum de y vaut environ 0,14. dy:=[diff(y[1],x)^2,diff(y[2],x)^2]: v:=subs(data,F=10000,dy): plots[display]({plot(v[1],x=0..3000),plot(v[2],x=3000..6000)});

` ` 1. CALCUL NUMERIQUE A LINTERIEUR DU SYSTEME


0.14 0.12 0.1 0.08 0.06 0.04 0.02 00

283

1000

2000

3000 x

4000

5000

6000

Figure 3 Courbe donnant le carr de la drive de la `che. e e e e En remplaant 1 + y 2 par 1 + y /2 (la lgitimit de cette approxic e e mation sera vrie a posteriori), la longueur L devient la valeur approche e e e : c l 1 2 2 y1 dx + Lap = l + y2 dx 2 0 c expression qui se calcule formellement. Lap:=l+(int(dy[1],x=0..c)+int(dy[2],x=c..l))/2: length(Lap); 157288 Lexpression obtenue est tr`s grosse et dicilement maniable pour tre utilise e e e dans un programme de calcul numrique. Parmi les sous-expressions qui revie ennent frquemment (que lon observe dans les variables annexes %) se trouve e elp , qui vaut 0,6 1042 avec les valeurs numriques indiques plus haut. e e Ceci sugg`re de simplier Lap en utilisant le fait que elp est tr`s petit. e e Pour pouvoir eectuer la simplication elp 0, le plus simple est de commencer par exprimer les fonctions trigonomtriques hyperboliques en tere mes dexponentielles (tab. 5 p. 25), puis de dvelopper lexpression obtenue e pour faire appara tre tous les produits lp susamment isols pour que la e substitution lp ln(t) soit possible par un subs (voir chap. II). Pour avoir la formule approche, il sut alors de calculer la limite de lexpression e obtenue lorsque t tend vers linni. Au passage nous simplions encore un peu lexpression en tenant compte du fait que l = c/2. Lap:=limit(subs(c=l/2,l*p=ln(t),expand(convert(Lap,exp))), t=infinity); Lap := 24p3 M1 M2 12p3 M1 2 + 3p3 F 2 l2 + p3 q 2 l4 48pF ql + 12M1 ql2 p3 24q 2 l2 p + 3p3 F l3 q 12M2 F lp3 + 24T 2 p3 l2 12p3 M2 2 + 60q 2 l 9p2 F 2 l + 6p4 M2 2 l 12M2 ql2 p3 + 36M2 qp2 l
2 36M1 qp2 l + 6p4 M1 l + 12M1 F lp3 /(24lT 2 p3 ) 2

284

XII. CALCUL FORMEL ET CALCUL NUMERIQUE

Lexpression obtenue contient 19 termes. La validit des approximations est e conrme par une comparaison ` lintgration numrique directe de lexpression e a e e de la longueur exacte : evalf(subs(data,F=10000,[Lap, Int(sqrt(1+dy[1]),x=0..c)+Int(sqrt(1+dy[2]),x=c..l)])); [6009.704162, 6009.653189] Si lon a un grand nombre de longueurs de poutre ` calculer le temps gagn a e dans la simple valuation de lexpression ci-dessus par rapport au calcul e numrique de lintgrale est considrable (en Maple le rapport est de 60). e e e Pour sassurer de la validit des approximations ` chaque jeu de donnes, il e a e faudrait bien sr calculer aussi une formule approche de lerreur commise. u e La section suivante revient plus en dtail sur la mani`re de produire le e e code Fortran correspondant ` la longueur approche Lap : a e fortran(subs(M[1]=M1,M[2]=M2,[L=Lap]));
L = (3*p**3*F**2*l**2+36*M2*q*l*p**2-12*p**3*M2**2+12*p**3*F*l*M1#12*p**3*M1**2-12*p**3*F*l*M2+24*p**3*T**2*l**2+3*p**3*F*l**3*q+6*p #**4*M1**2*l-9*p**2*F**2*l-24*p**3*M1*M2-12*p**3*q*M2*l**2+6*p**4*M #1**2*l+p**3*q**2*l**4-36*q*M1*p**2*l+12*p**3*q*M1*l**2-48*q*F*l*p+ #60*q**2*l-24*q**2*l**2*p)/l/p**3/T**2/24

2. Lien avec dautres langages ou biblioth`ques e Pour certains calculs numriques, la lenteur des syst`mes de calcul formel e e est rdhibitoire, et le recours ` des langages tels que C ou Fortran est indise a pensable. Cest le cas notamment des applications en temps rel, comme la e commande dune fuse, o` un dlai de quelques secondes dans la rsolution e u e e dun syst`me peut savrer fatal. e e En revanche, lors de la prparation du programme embarqu, un syst`me e e e de calcul formel constitue un environnement tr`s agrable pour la mise en e e quations, ne faisant pas derreur dans les calculs de drives, et fournissant e e e des optimisations non ngligeables. e Depuis un syst`me de calcul formel, il est donc important de savoir proe duire du code numrique. Nous distinguons deux modes de production de e code : (1) lvaluation dune expression : lutilisateur ins`re ces expressions e e dans un programme quil crit lui-mme ; e e (2) la production de programmes : le syst`me de calcul formel produit e un programme complet, prt ` tre compil, ` partir dune descripe ae e a tion sous forme de macro-instructions fournie par lutilisateur. Avant dillustrer ces deux modes de production de code, nous montrons lutilisation depuis un syst`me de calcul formel de petits programmes numrie e ques que lutilisateur a lui-mme crits. e e

` 2. LIEN AVEC DAUTRES LANGAGES OU BIBLIOTHEQUES

285

2.1. Utilisation de sous-programmes en C ou Fortran. Lorsquune petite boucle numrique utilise la majeure partie du temps total de calcul, il e peut savrer fructueux dcrire cette boucle dans un langage compil tel que e e e C ou Fortran et de lier le sous-programme ainsi ralis au syst`me de calcul e e e formel. La technique la plus ecace de transmission de donnes entre le syst`me e e de calcul formel et le langage numrique consiste ` utiliser la mme reprsentae a e e tion interne des donnes. Ceci nest possible que si le syst`me de calcul formel e e est assez ouvert. Dans sa version de base, Maple ne permet pas une telle communication, et nous nen parlerons pas plus ici. La technique la plus employe est de communiquer sous un format ine termdiaire que le syst`me de calcul formel et le langage numrique savent lire e e e ` et crire (le plus souvent par lintermdiaire dun chier texte). A cause de ces e e recopies, cette technique nest intressante que lorsque le nombre doprations e e est lev par rapport au volume des donnes ` transmettre (en entre ou en e e e a e sortie du sous-programme). Cette section dpend assez fortement du syst`me dexploitation utilis. e e e Les indications donnes ci-dessous sappliquent au syst`me Unix. e e Exemple 8. Le calcul de termes dune suite numrique est un exemple e idal. Considrons la fonction f de lexemple 7 p. 280. Un programme C e e ralisant le mme calcul est le suivant : e e #include <stdio.h> #include <stdlib.h> main(int argc,char *argv[]) { double a,b,c,a0=atof(argv[1]),b0=atof(argv[2]); int n=atoi(argv[3]); for (a=a0, b=b0; n && a*a+b*b<=4; n) { c=a*ab*b; b=2*a*b+b0; a=c+a0; } printf("%e\n",a*a+b*b); } Les arguments a0 , b0 et n sont donns sur la ligne de commande. Une e fois le programme compil, son excution est tr`s simple : e e e % mandelbrot 0.3 0.2 100000 1.767315e-01 Depuis Maple cet excutable sutilise comme un sous-programme ainsi : e readlib(C): ff := proc(a0,b0,n) system(cat(mandelbrot ,C/float(a0), , C/float(b0), ,n, > resultat));

286

XII. CALCUL FORMEL ET CALCUL NUMERIQUE

op(readdata(resultat)) end: ff(0.3,0.2,100000); .176731500000000014 Le temps de calcul du sous-programme en C est environ 37 millisecondes et le temps de transfert des donnes est de 2 millisecondes, soit un temps total e voisin de 0,04 seconde, contre 107 s en Maple et 3,7 s en Maple avec les ottants de la machine. La compilation nous a donc permis dacclrer dun ee facteur 100 notre programme. 2.2. Code valuant une expression. Avant dillustrer les deux modes de e production de code (expressions et programmes), nous dcrivons un exemple e typique de probl`me numrique : la rsolution dun syst`me non linaire. e e e e e Rsolution dun syst`me non linaire. Un syst`me non linaire ` n quations e e e e e a e et n inconnues se prsente sous la forme e f1 (x1 , . . . , xn ) = 0 . . . . . . fn (x1 , . . . , xn ) = 0 avec x1 , . . . , xn appartenant ` R. Ce syst`me scrit aussi sous forme maa e e tricielle F (X) = 0 apr`s avoir pos e e x1 f1 (x1 , . . . , xn ) . . . X= . et F (X) = . . . xn fn (x1 , . . . , xn ) Une faon de rsoudre un tel syst`me est dutiliser la mthode de Newton c e e e gnralise, extension de la mthode de Newton pour la recherche de zros e e e e e dune fonction. Cet algorithme peut scrire, toujours en notation matricielle e : X := X0 while norm(F (X)) > do < trouver Y solution du syst`me linaire F (X).Y = F (X) > e e X := Y + X end o` F (X) reprsente la matrice jacobienne du syst`me, cest-`-dire la matrice u e e a dont llment (i, j) est fi /xj . Il faut donc calculer n(n + 1)/2 drives ee e e partielles (la matrice est symtrique) avant de pouvoir crire le programme e e de rsolution, ou dutiliser un programme tout fait qui prend en entre la e e matrice jacobienne. Si le probl`me est assez compliqu, ce simple calcul de drives partielles e e e e peut savrer fastidieux et surtout amener des erreurs. La solution qui consiste e

` 2. LIEN AVEC DAUTRES LANGAGES OU BIBLIOTHEQUES

287

T1 h1

h2

T2

Figure 4 Une cage de laminage.

a ` calculer ces valeurs par discrtisation, par exemple en approchant e

fi (x1 , . . . , xn ) xj

par

fi (x1 , . . . , xj + hj , . . . , xn ) fi (x1 , . . . , xj , . . . , xn ) hj

nest pas non plus tr`s satisfaisante car elle am`ne des erreurs qui rendent la e e convergence de la mthode de Newton plus lente. La solution idale consiste e e a ` utiliser un syst`me de calcul formel pour calculer ces drives, et ` lui faire e e e a imprimer directement les drives partielles dans le langage choisi pour viter e e e les erreurs de recopie. Code calculant une expression. Nous illustrons la production de code calculant une expression sur la rsolution dun syst`me non linaire par un exemple e e e prcis emprunt au domaine de lingnierie, ` savoir la modlisation dune e e e a e cage dun train de laminage ` chaud. Le mme exemple illustrera aussi la a e production de programmes. Un train de laminage ` chaud a pour but de rduire lpaisseur dune tle a e e o dacier chaude en la faisant passer entre des cylindres. Le dispositif o` se u trouvent les cylindres se nomme une cage et en gnral la tle passe ` travers e e o a un certain nombre de cages successives (g. 4).

288

XII. CALCUL FORMEL ET CALCUL NUMERIQUE

Les quations qui rgissent le comportement de la cage sont les suivantes e e :

f1 (F, h2 , ) = h2 S f2 (F, h2 , ) = F +

F + a2 (1 ea3 F ) a1

RT1 h2 1 2 r r h2 arctan( r) ln R 4 ! hN h2 1 + ln 2 h1 h2 !

lkR

f3 (F, h2 , ) = arctan 1 2 avec r h2 R

R h2

ln 4

h2 h1

+ r

R T2 T1 arctan( r) + h2 klh1 klh2 hN = h2 + R2 .

r=

h1 h2 , h2

h1 h2 , R

Les inconnues sont la force de laminage F , lpaisseur de sortie h2 et e langle neutre (dterminant le point o` la vitesse de glissement de la tle par e u o rapport au cylindre est nulle). Les autres variables sont donnes, en particulier e lpaisseur dentre h1 , les tractions T1 et T2 , le module de cdage a1 , le serrage e e e des vis S, la rsistance k du mtal ` la dformation et la largeur dentre l e e a e e de la tle. Les coecients a2 et a3 ont t trouvs exprimentalement par les o ee e e lamineurs. Il est ` noter que ces quations sont simplies car elles ne tiennent pas a e e compte de la temprature de la tle. Pour le probl`me rel, il faut en plus e o e e rsoudre une quation de la chaleur le long de la tle. e e o Il est clair que le calcul de la matrice jacobienne du syst`me est pour e le moins compliqu. En revanche il est tr`s facile ` raliser en utilisant un e e a e ` syst`me de calcul formel comme Maple. A titre de curiosit, llment (2, 2) e e ee de la matrice jacobienne est imprim ci-dessous. e xi:=sqrt((h1-h2)/R): r:=(h1-h2)/h2: hN:=h2+R*Phi^2: f:=[h2-S-(F+a2*(1-exp(a3*F)))/a1, F-l*k*R*(Pi*sqrt(h2/R)*arctan(sqrt(r))/2-Pi*xi/4 -log(hN/h2)+log(h1/h2)/2)+R*xi*T1/h2, arctan(Phi*sqrt(R/h2))-sqrt(h2/R)*(Pi*log(h2/h1)/4 +sqrt(R/h2)*arctan(sqrt(r))-T1/k/l/h1+T2/k/l/h2)/2]: Fp:=linalg[jacobian](f,[F,h2,Phi]): Fp[2,2];

` 2. LIEN AVEC DAUTRES LANGAGES OU BIBLIOTHEQUES h1 h2 h2 h2 RR 1 h2 h2 R 1 h2 h1 h2 h2 2 h1 h2 h2

289

arctan lkR 4 + 8 2

+ 4

h1 h2 h2

1+ h2

h2 +R2 h2 2

h1 h2 R R

h2 +

R2

1 2h2

T1
h1 h2 R h2

h1 h2 R T1 h2 2

Le probl`me peut tre beaucoup plus compliqu quune simple modlisae e e e tion du laminoir, par exemple si lon sintresse ` sa rgulation. En ralit, e a e e e il y a gnralement sept cages successives, donc la modlisation demande e e e la rsolution des quations prcdentes sept fois de suite ; de plus le temps e e e e intervient et la simulation doit tre faite ` chaque pas de temps. La rgulation e a e demande donc une simulation rapide du syst`me, voire en temps rel, et cellee e ci ne peut tre ralise que dans un langage numriquement rapide comme e e e e Fortran ou C. Transformons donc la matrice jacobienne obtenue prcdemment en syne e taxe Fortran. En Maple, la commande fortran ralise cette transformation. e Si son argument est un tableau, tous les lments sont transforms. ee e fortran(Fp);
Fp(1,1) = -(1-a2*a3*exp(a3*F))/a1 Fp(1,2) = 1 Fp(1,3) = 0 Fp(2,1) = 1 Fp(2,2) = -l*k*R*(0.3141593E1/sqrt(h2/R)*atan(sqrt((h1-h2)/h2))/R/ #4+0.3141593E1*sqrt(h2/R)/sqrt((h1-h2)/h2)*(-1/h2-(h1-h2)/h2**2)/(1 #+(h1-h2)/h2)/4+0.3141593E1/sqrt((h1-h2)/R)/R/8-(1/h2-(h2+R*Phi**2) #/h2**2)/(h2+R*Phi**2)*h2-1/h2/2)-1/sqrt((h1-h2)/R)*T1/h2/2-R*sqrt( #(h1-h2)/R)*T1/h2**2 Fp(2,3) = 2*l*k*R**2*Phi/(h2+R*Phi**2) Fp(3,1) = 0 Fp(3,2) = -Phi/sqrt(R/h2)*R/h2**2/(1+Phi**2*R/h2)/2-1/sqrt(h2/R)*( #0.3141593E1*alog(h2/h1)/4+sqrt(R/h2)*atan(sqrt((h1-h2)/h2))-T1/k/l #/h1+T2/k/l/h2)/R/4-sqrt(h2/R)*(0.3141593E1/h2/4-1/sqrt(R/h2)*atan( #sqrt((h1-h2)/h2))*R/h2**2/2+sqrt(R/h2)/sqrt((h1-h2)/h2)*(-1/h2-(h1 #-h2)/h2**2)/(1+(h1-h2)/h2)/2-T2/k/l/h2**2)/2 Fp(3,3) = sqrt(R/h2)/(1+Phi**2*R/h2)

Il ne faut pas oublier quun langage tel que Fortran ne fait pas la dirence e entre lettres majuscules et minuscules : contrairement ` Maple, les noms R et a r dsignent la mme variable en Fortran. e e Maple propose galement des possibilits doptimisation pour viter de e e e recalculer les sous-expressions communes aux lments de la matrice, comme ee

290

XII. CALCUL FORMEL ET CALCUL NUMERIQUE

h2 /R ou h2 + R2 . Maple introduit alors un certain nombre de variables auxiliaires qui contiennent ces expressions communes. fortran(Fp,optimized);
t8 = l*k t9 = 1/R t11 = sqrt(h2*t9) t12 = 1/t11 t14 = h1-h2 t15 = 1/h2 t16 = t14*t15 t17 = sqrt(t16) t18 = atan(t17) t22 = 1/t17 t23 = h2**2 t24 = 1/t23 t26 = -t15-t14*t24 t29 = 1/(1+t16) t33 = sqrt(t14*t9) t34 = 1/t33 t37 = Phi**2 t38 = R*t37 t39 = h2+t38 t42 = 1/t39 t54 = R**2 t59 = sqrt(R*t15) t60 = 1/t59 t62 = R*t24 t65 = 1/(1+t38*t15) t68 = 1/h1 t73 = 1/k t75 = 1/l t78 = T2*t73 Fp(1,1) = -(1-a2*a3*exp(a3*F))/a1 Fp(1,2) = 1 Fp(1,3) = 0 Fp(2,1) = 1 Fp(2,2) = -t8*R*(0.3141593E1*t12*t18*t9/4+0.3141593E1*t11*t22*t26* #t29/4+0.3141593E1*t34*t9/8-(t15-t39*t24)*t42*h2-t15/2)-t34*T1*t15/ #2-R*t33*T1*t24 Fp(2,3) = 2*t8*t54*Phi*t42 Fp(3,1) = 0 Fp(3,2) = -Phi*t60*t62*t65/2-t12*(0.3141593E1*alog(h2*t68)/4+t59*t #18-T1*t73*t75*t68+t78*t75*t15)*t9/4-t11*(0.3141593E1*t15/4-t60*t18 #*t62/2+t59*t22*t26*t29/2-t78*t75*t24)/2 Fp(3,3) = t59*t65

Malgr le nombre important de variables auxiliaires introduites, cette e optimisation est loin dtre inutile, puisque le programme est acclr dun e ee e facteur variant entre 2 et 5 selon les machines.

` 2. LIEN AVEC DAUTRES LANGAGES OU BIBLIOTHEQUES

291

Pour le langage C, il faut faire respectivement C(Fp) et C(Fp,optimized), apr`s avoir charg le programme de transformation par readlib(C). e e 2.3. Production de programmes. Le dfaut de cette utilisation du cale cul formel dans lcriture dun programme est quil faut aller et venir entre e lditeur de texte et le syst`me de calcul formel, car ce dernier gn`re uniquee e e e ment les calculs dexpressions ; tout le reste du programme (initialisation, boucles, appels de sous-programmes) doit tre crit par lutilisateur, ce qui e e peut entra ner des erreurs. Il est possible de rester a lintrieur du syst`me de calcul formel pour ` e e produire tout le programme. Une premi`re mthode consiste ` utiliser les e e a commandes dimpression du syst`me. En Maple par exemple, une boucle do e de Fortran est produite par : lprint( do 1,i=1,n),fortran([z=z+f(i)^2]), lprint(1 continue); ce qui produit le texte ci-dessous. do 1,i=1,n z = z+f(i)**2 1 continue Cette faon de faire est plutt fastidieuse. La plupart des syst`mes de calc o e cul formel procurent de quoi automatiser plus ou moins cette tche. Maple a dispose dans la share library de deux modules, Macrofort et MacroC, qui gn`rent respectivement de vritables programmes Fortran et C. e e e Le principe est de dcrire le programme sous la forme dune liste dont e chaque lment est la description dune instruction ou dun ensemble dinstrucee tions Fortran ou C. Cette description est elle aussi sous la forme dune liste dont le premier lment est un mot-cl dcrivant linstruction. ee e e Par exemple, pour obtenir un sous-programme Fortran qui calcule la matrice jacobienne de la cage du laminoir avec comme arguments les variables F , h2 , , T1 et T2 , et un programme principal qui appelle ce sous-programme, Macrofort semploie ainsi : with(share): readshare(macrofor,numerics); init_genfor(): MACROFORT FORTRAN code generator Version 1.2.4 data:={a1=610,a2=648,a3=-.00247,l=1250,k=1.4E-2,R=360, h1=24,S=12}: vFp:=subs(data,op(Fp)): prog:=[programm,cage, [[declarem,doubleprecision,[F,h2,Phi,T1,T2,j(3,3)]], [equalf,F,1363], [equalf,h2,15], [equalf,Phi,0.06], [equalf,T1,12], [equalf,T2,35], [dom,i,1,100000, [callf,jacob,[F,h2,Phi,T1,T2,j]]]]]:
Ici le programme principal eectue une simple boucle avec les mmes param`tres. Un e e tel programme permet dvaluer le gain d ` loption optimized de la commande fortran. e ua

292

XII. CALCUL FORMEL ET CALCUL NUMERIQUE

ssprog:=[subroutinem,jacob,[F,h2,Phi,T1,T2,j], [[declarem,doubleprecision,[F,h2,Phi,T1,T2,j(3,3)]], [matrixm,j,vFp]]]: optimized:=true: precision:=double: genfor(prog), genfor(ssprog); et lon obtiendra


c c c MAIN PROGRAM cage program cage doubleprecision F,h2,Phi,T1,T2,j(3,3) F = 1363 h2 = 15 Phi = 0.6D-1 T1 = 12 T2 = 35 c do 1000, i=1,100000 call jacob(F,h2,Phi,T1,T2,j) continue end c c c SUBROUTINE jacob subroutine jacob(F,h2,Phi,T1,T2,j) doubleprecision F,h2,Phi,T1,T2,j(3,3) t3 = sqrt(360.D0) t4 = 0.3141592653589793D1*t3 t5 = sqrt(h2) t6 = 1/t5 t7 = 24-h2 t8 = 1/h2 t9 = t7*t8 t10 = sqrt(t9) t11 = atan(t10) t16 = h2**2 t17 = 1/t16 t23 = 1/t10*(-t8-t7*t17)/(1+t9) t26 = sqrt(1.D0/15.D0-h2/360) t27 = 1/t26 t29 = Phi**2 t30 = h2+360*t29 t33 = 1/t30 t43 = sqrt(t8) t44 = 1/t43 t48 = 1/(1+360*t29*t8) t54 = t3*t43

1000 c

` 2. LIEN AVEC DAUTRES LANGAGES OU BIBLIOTHEQUES

293

j(1,1) = -1.D0/610.D0-0.2623868852D-2*exp(-0.247D-2*F) j(1,2) = 1 j(1,3) = 0 j(2,1) = 1 j(2,2) = -0.4375D1*t4*t6*t11-0.4375D1*t4*t5*t23-0.21875D1*0.314 +1592653589793D1*t27+0.63D4*(t8-t30*t17)*t33*h2+0.315D4*t8-t27*T1*t +8/2-360*t26*T1*t17 j(2,3) = 0.4536D7*Phi*t33 j(3,1) = 0 j(3,2) = -Phi*t3*t44*t17*t48/2-t3*t6*(0.3141592653589793D1*log( +h2/24)/4+t54*t11-0.2380952381D-2*T1+0.5714285714D-1*T2*t8)/1440-t3 +*t5*(0.3141592653589793D1*t8/4-t3*t44*t11*t17/2+t54*t23/2-0.571428 +5714D-1*T2*t17)/720 j(3,3) = t54*t48 end

Pour faire la mme chose en langage C, les instructions ` excuter sont e a e les suivantes. with(share): readshare(macroC,numerics); init_genC(): data:={a1=610,a2=648,a3=-.00247,l=1250,k=1.4E-2,R=360., h1=24,S=12}: vFp:=subs(data,op(Fp)): prog:=[[includeC,<math.h>],[functionm,,main,[], [[declareC,double,[F,h2,Phi,T1,T2,j[4,4]]], [declareC,int,[i]], [equalC,F,1363], [equalC,h2,15.0], [equalC,Phi,0.06], [equalC,T1,12], [equalC,T2,35], [form,&=(i,0),i<100000,&=(i,i+1), [callC,jacob,[F,h2,Phi,T1,T2,j]] ]]]]: ssprog:=[functionm,,jacob,[[double,[F,h2,Phi,T1,T2,j[4,4]]]], [[matrixm,j,op(vFp)]]]: optimized:=true: precision:=double: autodeclare:=double: genC(prog), genC(ssprog); Les seules dirences notables sont linclusion du chier math.h pour la e dclaration des fonctions mathmatiques log, exp, atan, sqrt, et lajout de e e linstruction autodeclare:=double pour que les variables auxiliaires introduites par Maple soient de type double. Lavantage de cette approche est non seulement dviter la manipulation e fastidieuse de chiers, mais aussi de permettre dcrire des codes gnriques e e e dont les entres sont des expressions symboliques. On peut par exemple crire e e une fonction Maple qui, ` partir dun syst`me non linaire de n quations a e e e a ` n inconnues, produit automatiquement le code Fortran ou C ralisant la e rsolution de ce syst`me selon la mthode de Newton gnralise. e e e e e e Une autre faon de rsoudre ce probl`me de lien entre numrique et c e e e formel est dappeler ` partir du syst`me de calcul formel des biblioth`ques a e e numriques existantes. Cest le cas par exemple du syst`me IRENA, qui e e

294

XII. CALCUL FORMEL ET CALCUL NUMERIQUE

fonctionne ` lintrieur du syst`me de calcul formel Reduce, et qui permet a e e dappeler les sous-programmes Fortran de la biblioth`que NAG sans sortir de e Reduce.

2.4. Lien avec les biblioth`ques numriques. Un syst`me de CAO en e e e automatique, en anglais CACSD package (Computer Aided Control System Design), est un logiciel qui g`re une grande biblioth`que de programmes e e Fortran et C pour le calcul numrique matriciel, lintgration des syst`mes e e e dquations direntielles, la commande et loptimisation des syst`mes et le e e e traitement du signal. Il dispose dun interprteur permettant dcrire des e e programmes appels macros et tracer des courbes. Le plus connu de ces e syst`mes est le logiciel Matlab. Citons aussi le logiciel franais Basile et le e c logiciel Scilab ralis ` lINRIA (voir p. 307). e ea Lorsquon lie un syst`me de calcul formel avec un syst`me de CAO en e e automatique, le premier ralise les calculs symboliques et le second est adapt e e aux calculs numriques performants ` laide des programmes Fortran et C e a quil g`re. Ce lien peut tre fait de faon plus ou moins automatique. Il e e c existe par exemple un lien entre Maple et Matlab. Cest une bo ` outils te a (ensemble de fonctions) rajoute ` Matlab qui permet, tout en restant dans e a Matlab, dappeler Maple, de raliser des calculs et de rcuprer les rsultats e e e e en Matlab. Un autre type de lien consiste ` produire du code Fortran ` partir a a du syst`me de calcul formel et ` lintroduire dans le syst`me de CAO comme e a e nouvelle fonction. Il est dicile de prsenter un exemple en dtail car les calculs mcaniques e e e sont souvent longs et ncessitent des connaissances qui sortent du cadre de e ce livre. Nous allons simplement donner les grandes lignes dune application rcente dun tel lien entre Maple et le syst`me de CAO Scilab. Ce dernier e e syst`me fonctionne sur stations de travail Unix avec X-Windows. Il est libree ment distribu, sources compris. De plus, il est possible dajouter facilement e des programmes C ou Fortran ` Scilab. a Lapplication prsente consiste ` raliser la simulation et la commande e e a e dun vlo. Les commandes sont les couples appliqus au guidon et ` la roue e e a arri`re. Le probl`me de simulation consiste, la position de dpart du vlo e e e e et les valeurs des commandes tant donnes, ` chercher la trajectoire suivie. e e a Pour le probl`me de commande, la position de dpart est donne et il sagit de e e e dterminer les commandes qui permettent datteindre un tat donn le plus e e e rapidement possible, par exemple de tourner laxe du vlo dun angle x. e e La technique utilise consiste ` employer le formalisme de Lagrange. e a Ceci ncessite le calcul dune matrice 23 23, de plusieurs gradients, et la e rsolution dun immense syst`me direntiel linaire. Les calculs de matrices e e e e et de gradients sont raliss en Maple ; des programmes Fortran sont ensuite e e produits de faon automatique en utilisant Macrofort (voir 2.3), puis ils sont c compils et inclus dans Scilab sous la forme de macros. Ils peuvent alors e ` tre ecacement utiliss par les fonctions de Scilab. A titre de curiosit, nous e e e

` 2. LIEN AVEC DAUTRES LANGAGES OU BIBLIOTHEQUES

295

donnons ci-apr`s la valeur dun lment de matrice du probl`me de commande, e ee e montrant ainsi la quasi-impossibilit dune criture ` la main e e a
fmat(41,67) = -(pd(18)*t257+2*pd(18)*t252+t804+t810+t814+t819+t +192-2*pd(18)*t240+t677-pd(18)*t229+pd(18)*t199+t166+t655+t669+t598 ++t617+t625+t637+t608+2*pd(18)*t181+t580+t588+t593+t568+t573+t555+t +550+t531+t516-pd(18)*t1125+t507+pd(18)*t1137+t483+t493+t475+t467-2 +*pd(18)*t1148+t454+2*pd(18)*t1154+t437+t540-pd(18)*t786+pd(18)*t11 +94+pd(18)*t755+pd(18)*t773-pd(18)*t721+pd(18)*t717-pd(18)*t901-2*p +d(18)*t896-pd(18)*t889+2*pd(18)*t1210+pd(18)*t855-pd(18)*t874+t408 ++t398+t394+t388+t379+t361+t369+t337+pd(18)*t10*param(17)*lambda(7) +*t148+2*pd(14)*param(20)*lambda(14)*t3*t171-pd(18)*t10*param(19)*l +ambda(9)*t148+pd(18)*t10*param(17)*lambda(7)*t219+t301+2*pd(18)*t1 +0*param(17)*lambda(7)*t206-2*pd(18)*t10*param(19)*lambda(9)*t206-p +d(18)*t10*param(19)*lambda(9)*t219-pd(18)*t10*param(19)*lambda(10) +*t244+pd(14)*param(19)*lambda(9)*t525+pd(14)*param(20)*lambda(15)* +t9*t684+pd(14)*param(19)*lambda(9)*t725+pd(14)*param(17)*lambda(7) +*t641-2*pd(14)*param(17)*lambda(7)*t737-pd(14)*param(19)*lambda(9) +*t462-pd(14)*param(19)*lambda(9)*t641-pd(14)*param(17)*lambda(7)*t +525+t28*pd(19)*t132*param(19)*lambda(10)*t122+2*t133*pd(19)*t132*p +aram(19)*lambda(10)*t828+2*t133*pd(19)*t10*param(1)*t915+t28*pd(19 +)*t132*param(19)*lambda(9)*t309+2*t133*pd(19)*t132*param(19)*lambd +a(9)*t846+t28*pd(19)*t10*param(1)*t933+2*pd(14)*param(19)*lambda(9 +)*t737+t134*pd(19)*t132*param(19)*lambda(10)*t908+t28*pd(19)*t10*p +aram(1)*t866-t28*pd(19)*t132*param(17)*lambda(7)*t309-2*t133*pd(19 +)*t132*param(17)*lambda(7)*t846+t134*pd(19)*t10*param(20)*lambda(1 +5)*t821-2*t133*pd(19)*t132*param(17)*lambda(6)*t828+t28*pd(19)*t10 +*param(20)*lambda(15)*t123-pd(14)*param(19)*lambda(10)*t517+pd(14) +*param(20)*lambda(14)*t3*t684-pd(18)*t132*param(20)*lambda(15)*t12 +2-param(1)*pd(20)*t10*t766-2*pd(14)*param(19)*lambda(9)*t760+t134* +pd(19)*t132*param(19)*lambda(9)*t840+2*t133*pd(19)*t10*param(20)*l +ambda(14)*t950-t134*pd(19)*t132*param(17)*lambda(7)*t840-t28*pd(19 +)*t132*param(17)*lambda(6)*t122-2*pd(14)*param(19)*lambda(10)*t102 +3-2*pd(14)*param(19)*lambda(10)*t1033+pd(14)*param(17)*lambda(7)*t +462-pd(14)*param(20)*lambda(14)*t1017+pd(14)*param(20)*lambda(14)* +t3*t1072+pd(14)*param(20)*lambda(15)*t1107-pd(14)*param(19)*lambda +(10)*t1165-pd(14)*param(17)*lambda(7)*t725-pd(18)*t132*param(20)*l +ambda(14)*t309+param(1)*pd(20)*t10*t9*t702-param(1)*pd(20)*t10*t3* +t689+2*pd(18)*t10*param(17)*lambda(6)*t1185+pd(18)*t10*param(17)*l +ambda(6)*t123+pd(14)*param(17)*lambda(6)*t1165+pd(14)*param(17)*la +mbda(6)*t517-2*pd(18)*t132*param(20)*lambda(14)*t3*t204+pd(18)*t10 +*param(17)*lambda(6)*t244-pd(18)*t10*param(19)*lambda(10)*t123-2*p +d(18)*t10*param(19)*lambda(10)*t1185-2*pd(18)*t132*param(20)*lambd +a(15)*t9*t204-pd(18)*t132*param(20)*lambda(14)*t618-pd(18)*t132*pa +ram(20)*lambda(15)*t225+2*pd(14)*param(17)*lambda(6)*t1033+pd(14)* +param(20)*lambda(15)*t640+2*pd(14)*param(20)*lambda(15)*t3*t1054+p

Le rsultat de la simulation ou de la commande est une animation graphique e du comportement du vlo. La gure 5 p. 296 donne la trajectoire optimale e

296

XII. CALCUL FORMEL ET CALCUL NUMERIQUE

Figure 5 Comment faire tourner un vlo de 15 degrs le e e plus rapidement possible. dun vlo pour tourner de 15 degrs (noter le contrebraquage au dpart, qui e e e permet de tourner plus vite). Lintrt de cette approche est sa exibilit : on peut ainsi rsoudre un ee e e grand nombre de probl`mes varis avec la mthode que lon dsire sans tre li e e e e e e a ` un syst`me spcialis. De plus les syst`mes utiliss, Maple et Scilab, sont tr`s e e e e e e ecaces dans leur domaine respectif. Lensemble fournit un environnement riche pour des probl`mes de commande de syst`mes. e e 2.4.1. Les logiciels spcialiss e e Pour conclure ce chapitre, mentionnons lexistence dun certain nombre de logiciels spcialiss qui ralisent des liens entre calcul formel et calcul e e e numrique dans des domaines bien particuliers. En mcanique, ces logiciels e e permettent en gnral dcrire les quations, de les transformer en utilisant e e e e un formalisme appropri, puis de les rsoudre en produisant habituellement e e du code Fortran ou C. Certains de ces logiciels sont indpendants de tout syst`me de calcul e e formel et incluent donc les oprations ncessaires ` leur domaine dapplication, e e a

` 2. LIEN AVEC DAUTRES LANGAGES OU BIBLIOTHEQUES

297

dautres sont construits autour dun syst`me de calcul formel existant. Pour e lanalyse des syst`mes multicorps ou polyarticuls, dans le premier cas, on e e peut citer des logiciels tels que Mesa-Verde, Dynamica ou Autolev. Dans le second cas on peut citer les logiciels James et Sygmmae qui sont construits au-dessus de Maple. Plus de dtails sur ces syst`mes sont prsents en annexe C. e e e e

Annexes

ANNEXE A

Une session Mathematica


Cette annexe reprend lexemple du chapitre I en Mathematica. Elle illustre lanalogie entre les commandes mises ` la disposition de lutilisateur par a les dirents syst`mes de calcul formel. e e Comme en Maple, la premi`re tape consiste ` dnir les quations des e e a e e deux cercles In[1]:= eq1 = x^2+y^2==R1^2; In[2]:= eq2 = (x-R1)^2+y^2 == R2^2; (ici le symbole = dsigne laectation, le symbole == lgalit et le point-virgule e e e ordonne ` Mathematica de ne pas acher le rsultat). Le syst`me est ensuite a e e rsolu par rapport ` x et y : e a In[3]:= sol = Solve[{eq1,eq2},{x,y}] 4 R22 /R12 2R12 R22 ,x }, 2 2R1 R2 4 R22 /R12 2R12 R22 {y ,x }} 2 2R1 Les solutions sont prsentes comme un ensemble de substitutions. La soe e lution cherche (celle pour laquelle y est positif) est la seconde, cest-`-dire e a sol[[2]]] en Mathematica. On en dduit les valeurs des sinus et cosinus e de 1 et 2 . Out[3] = {{y R2 In[4]:= sint1 = Together[y/Sqrt[x^2+y^2] /. sol[[2]]] 2 R12 In[5]:= sint2 = Together[y/Sqrt[(R1-x)^2+y^2] /. sol[[2]]] Out[4] = 2 R22 In[6]:= cost1 = Together[x/Sqrt[x^2+y^2] /. sol[[2]]] 2R12 R22 Out[6] = 2R1 R12 In[7]:= cost2 = Together[(R1-x)/Sqrt[(R1-x)^2+y^2] /. sol[[2]]] R22 Out[7] = 2R1 R22 Out[5] =
301

R2

4R12 R22 R12

R2

4R12 R22 R12

302

A. UNE SESSION Mathematica

Lexpression expr /. sol[[2]] signie expr dans lequel on a eectu la e substitution sol[[2]], cest-`-dire remplac x et y en fonction de R1 et R2 . a e La commande Together eectue la rduction au mme dnominateur. e e e In[8]:= A=PowerExpand[R1^2(ArcCos[cost1]-sint1 cost1)+ R2^2(ArcCos[cost2]-sint2 cost2)] R2 R2 4R12 R22 + ArcCos Out[8] = R22 + 4R12 2R1 2R12 R22 R2(2R12 R22 ) 4R12 R22 2 + ArcCos R1 4R14 2R12 La commande PowerExpand dveloppe des expressions contenant des puise sances. Le symbole de multiplication est facultatif en Mathematica. Voici comment on vrie les valeurs extrmes de laire : e e In[9]:= A /. R2->0 Out[9] = 0 In[10]:= A /. R2->2 R1 Out[10] = R12 Le rapport P des aires est dni par : e In[11]:= AA = Expand[A /. R2 -> K R1] KR1 4R12 K 2 R12 Out[11] = + K 2 R12 ArcCos(K/2) 2 2R12 K 2 R12 + R12 ArcCos 2R12 In[12]:= P = Together[PowerExpand[Simplify[AA / (Pi R1^2)]]] K 4 K 2 + 2K 2 ArcCos(K/2) + 2 ArcCos(1 K 2 /2) Out[12] = 2 La recherche de la valeur de K donnant P = 1/2 se fait ` laide de la coma mande FindRoot de rsolution numrique des quations transcendantes e e e In[13]:= FindRoot[P==1/2,{K,1},WorkingPrecision->17] Out[13] = {K 1.15872847301812152} a ` laquelle on a donn K = 1 comme point de dpart et demand 17 chires e e e de prcision. e

ANNEXE B

Autour du calcul formel


Informations lectroniques e En France, le calcul formel est un domaine o` la recherche est tr`s vivante. u e Les principaux domaines dactivit concernent les polynmes, les quations e o e direntielles, les applications en combinatoire et les interfaces. Deux groupee ments coordonnent une partie de ces recherches, ce sont le GDR (groupe de recherche) Mdicis et le ple calcul formel du PRC (programme de recherches e o coordonnes) mathmatiques et informatique. e e Une partie de ces activits a pour retombe un serveur ftp e e medicis.polytechnique.fr (129.104.3.60) qui contient de nombreuses informations utiles sur le calcul formel. La mme e machine propose galement un serveur WEB spcialis en calcul formel ` e e e a partir duquel il est possible daccder ` dautres serveurs dans le monde (URL e a http://medicis.polytechnique.fr/). Les personnes ayant acc`s aux news peuvent y lire un newsgroup enti`ree e ment consacr au calcul formel : sci.math.symbolic. Par ailleurs, les persone nes ayant acc`s au courrier lectronique peuvent demander par simple email e e a (voir la documentation en ligne de maple group) ` faire partie de la Maple User Group mailing list. La share library de Maple contient des programmes dvelopps par des e e utilisateurs. Elle est distribue avec le syst`me, mais les nouvelles versions e e de la share library sont plus frquentes que les nouvelles versions de Maple. e On peut trouver la derni`re version de la share library par ftp sur la machine e ftp.inria.fr (192.93.2.54) dans le rpertoire lang/maple. e

Revues et confrences e La principale revue du domaine sappelle The Journal of Symbolic Computation. Lassociation amricaine ACM dite galement un bulletin, le SIGSAM e e e Bulletin, consacr au calcul formel. La Maple Technical Newsletter, publie e e par Birkhuser, est une revue consacre uniquement ` Maple, qui contient a e a des articles de niveau lmentaire sur des applications de Maple, en particee ulier pour lenseignement. Enn, les confrences ayant trait au calcul formel sont : e
303

304

B. AUTOUR DU CALCUL FORMEL

ISSAC (International Symposium on Symbolic and Algebraic Computation), confrence annuelle dont les actes sont gnralement pue e e blis par ACM Press ; e AAECC (Applied Algebra and Error Correcting Codes), confrence e bisannuelle plus oriente vers lalg`bre, dont les actes sont publis e e e dans la srie Lecture Notes in Computer Science, Springer-Verlag ; e DISCO (Design and Implementation of Symbolic Computation Systems), confrence annuelle dont les actes sont publis dans la srie e e e Lecture Notes in Computer Science, Springer-Verlag.

ANNEXE C

Index des syst`mes actuels e


Les syst`mes que nous dcrivons ici sont les plus couramment utiliss. e e e Il est bien clair quil en existe beaucoup dautres et que lon ne saurait tre e exhaustif. Pour chaque syst`me nous indiquons son type (commercial ou gratuit), e la version actuelle, les machines sur lesquelles il est disponible (stations de travail Unix, Macintosh ou PC), le distributeur principal, et les principales caractristiques. e

1. Syst`mes gnraux e e e Axiom. Type : commercial. Version actuelle : 2. Disponible sur Sun SPARC Station, IBM RS/6000, HP 9000, Silicon Graphics (une version pour PC est prvue pour n 1995). Distributeur : NAG Ltd, Wilkinson House, e Jordan Hill Road, Oxford, OX2 8DR, Angleterre, fax (0)865 310139, tl. e (0)865 511245, email infodesk@nag.co.uk. Syst`me comprenant le mieux e les concepts mathmatiques, du fait de son caract`re fortement typ ; ine e e clut limplantation la plus compl`te de lalgorithme dintgration de Risch e e ; possibilit de faire des calculs paresseux. Mise en uvre lourde pour un e non-spcialiste. e Derive. Type : commercial. Version actuelle 2.59. Disponible sur PC et certaines calculatrices de poche (HP 95). Distributeur : Soft Warehouse, 3660 Waialae Avenue, Suite 304, Honolulu, HI 96816-3236, USA, tl. (808) 734e 5801, fax (808) 735-1105. Petit logiciel peu gourmand en mmoire pouvant e mme fonctionner sur certains ordinateurs de poche. Langage de programe mation rudimentaire, pas dacc`s aux structures de donnes, factorisation des e e polynmes faible. o Macsyma. Type : commercial. Version actuelle 419.0 sous Unix et 2.0 sur PC. Disponible sur machines Unix et PC (PC Macsyma). Distributeur : Macsyma Inc., 20 Academy Street, Suite 201, Arlington, MA 02174-6436, USA, tl. (617) 646-4550, fax (617) 646-3161, email info@macsyma.com. Il exe iste de nombreux syst`mes drivs : Maxima, Aljabr, Vaxima, Paramacs. Le e e e syst`me qui compte le plus dhommes-annes de dveloppement, dot de nome e e e breux modules spcialiss qui nexistent pas encore dans les autres syst`mes. e e e Syst`me un peu vieillissant. e
305

306

` C. INDEX DES SYSTEMES ACTUELS

Maple. Type : commercial. Version actuelle : V.3. Disponible sur machines Unix, Mac et PC. Distributeur : Waterloo Maple Software, 450 Phillip Street, Waterloo, Ontario, N2L 5J2, Canada, tl. (519) 747-2373, fax e (519) 747-5284, email info@maplesoft.on.ca. Facilit de mise en uvre, e rapidit et acc`s aux sources des biblioth`ques. e e e Mathematica. Type : commercial. Version actuelle 2.2. Disponible sur machines Unix, Mac et PC. Distributeur : Wolfram Research Inc., 100 Trade Center Drive, Champaign, IL 61820, USA, email info@wri.com, fax 217-3980747. Possibilit dutiliser des sous-programmes en C ou Fortran via le logiciel e MathLink. Programmation par r`gles de rcriture, mais peu ecace. Un peu e e trop bo noire. te MuPAD. Type : gratuit (pour les tablissements ` caract`re non come a e mercial). Version actuelle 1.2.1. Disponible sur machines Unix, Mac et PC sous Linux (ftp.uni-paderborn.de). Distributeur : MuPAD-Distribution, Fachbereich 17, Univ. of Paderborn, Warburger Str. 100, D-33095 Paderborn, Allemagne, email MuPAD-Distribution@uni-paderborn.de. Permet la programmation oriente objets, comprend des instructions de paralllisme e e explicite. Syst`me jeune, certaines fonctionnalits manquent. e e Reduce. Type : commercial. Version actuelle 3.5. Disponible sur machines Unix, Mac et PC. Distributeur : The Rand Corporation, 1700 Main Street, P.O. Box 2138, Santa Monica, CA 90407-2138, USA, tl. (310) 393e 0411 poste 7681, fax (310) 393-4818, email reduce@rand.org. Lun des plus vieux syst`mes, donc tr`s robuste. Reduce a t en grande partie dvelopp e e ee e e par ses utilisateurs, et manque dorganisation globale. 2. Syst`mes spcialiss e e e Gap. Calculs sur les groupes nis. Type : gratuit. Version actuelle 3.3 (ftp ftp.math.rwth-aachen.de). Disponible sur machines Unix, Mac et PC. Distributeur : Lehrstuhl D fuer Mathematik, RWTH Aachen, 52056 Aachen, Allemagne, email gap@math.rwth-aachen.de. GB. Calculs de bases de Grobner (bases standard). Type : gratuit (ftp posso.ibp.fr). Version actuelle : 4.0. Disponible sur machines Unix. Ecrit en C++ par Jean-Charles Faug`re, Universit de Paris VI, jcf@posso.ibp.fr. e e Tr`s rapide. Utilise notamment de nouveaux algorithmes qui ne sont ime plants dans aucun autre syst`me, et est conu pour pouvoir tre utilis e e c e e comme serveur de calcul de bases de Grobner. Macaulay. Calculs en gomtrie algbrique (anneaux de polynmes sur e e e o des corps nis). Type : gratuit (ftp math.harvard.edu). Version actuelle : 3.0. Disponible sur machines Unix, Mac et PC. Auteurs : Dave Bayer, Department of Mathematics, Barnard College, New York, NY 10027, USA, tl. (212) 854-2643, dab@math.columbia.edu, et Mike Stillman, Department e of Mathematics, Cornell University, Ithaca, NY 14853, USA, tl. (607) 255e 7240, email mike@math.cornell.edu.

` 3. SYSTEMES DE CAO EN AUTOMATIQUE

307

Magma. Calculs sur les ensembles, groupes, anneaux, corps, alg`bre e linaire et combinatoire. Type : commercial. Version actuelle : V1. Disponible e sur machines Unix (une version pour PC 486/Pentium est annonce pour n e 1994). Distributeur : The Secretary, Computational Algebra Group, School of Mathematics and Statistics, University of Sydney, NSW 2006, Australie, fax 2-351-4534, tl. 2-351-3338, email magma@maths.su.oz.au. e Pari/GP. Calculs en thorie des nombres. Type : gratuit. Version e actuelle : 1.38 (ftp megrez.math.u-bordeaux.fr). Disponible sur machines Unix, Mac et PC. Ecrit en C par Christian Batut, Dominique Bernardi, Henri Cohen, Michel Olivier (Univ. de Bordeaux), pari@ceremab.u-bordeaux.fr. Dispose de nombreuses fonctionnalits gnrales comme la recherche numrique e e e e des racines de polynmes, les tracs graphiques, les manipulations de matrio e ces, et dun mini-langage de programmation. Est utilisable aussi comme une biblioth`que de fonctions arithmtiques en C (les syst`mes de calcul formel e e e Axiom et MuPAD utilisent Pari pour leur arithmtique). Tr`s ecace. e e 3. Syst`mes de CAO en automatique e Ce ne sont pas des syst`mes de calcul formel. Il ne font en eet que e des calculs numriques, mme si certains manipulent des polynmes et des e e o matrices de fractions rationnelles (` coecients numriques). Cependant, a e leur mode dutilisation est tr`s proche de celui des syst`mes de calcul formel e e et ils ralisent tr`s ecacement la partie numrique (principalement le calcul e e e matriciel, la rsolution de syst`mes direntiels et loptimisation) et le trac e e e e de courbes. Ceux dcrits ci-apr`s ont la possibilit dchanger des donnes avec Maple. e e e e e Basile. Type : commercial. Version actuelle : 4.1. Disponible sur machines Unix, VMS et PC. Distributeur : Simulog, 1 rue James Joule, 78286 Guyancourt Cedex, France, tl. 30 12 27 00, fax 30 12 27 27. Ralis en e e e collaboration avec lINRIA. Ce syst`me, aux fonctionnalits tr`s compl`tes, a e e e e lavantage dtre compl`tement franais avec un fort support local. e e c Matlab. Type : commercial. Version actuelle : 4.1. Disponible sur machines Unix, Mac et PC. Distributeur : The MathWorks, Inc., 24 Prime Park Way, Natick, MA 01760-1500, USA, tl. (508) 653-1415, fax (508) 653e 2997, email info@mathworks.com. Le plus dius actuellement. e Scilab. Type : gratuit (ftp ftp.inria.fr). Version actuelle : 2.0. Disponible sur machines Unix. Dvelopp ` lINRIA-Rocquencourt par le e e a projet Meta2 en collaboration avec le laboratoire Cergrene de lENPC, email scilab@inria.fr. Il poss`de la plupart des fonctionnalits que lon attend e e dun tel type de syst`me, en particulier il permet la manipulation symbolique e des syst`mes linaires. e e

Bibliographie
Ouvrages gnraux e e Une bonne introduction aux mathmatiques du calcul formel : e Davenport (James H.), Siret (Yves), et Tournier (Evelyne). Calcul formel. Masson, Paris, , seconde dition. e La seule rfrence actuelle sur les principaux algorithmes du calcul formel : ee Geddes (Keith O.), Czapor (Stephen R.), et Labahn (George). Algorithms for Computer Algebra. Kluwer Academic Publishers, . Sur Maple, les livres de rfrence sont les trois ouvrages des dveloppeurs ee e publis chez Springer-Verlag : le plus gros, Maple V: Library Reference Mane ual, est enti`rement contenu dans la documentation en ligne. Un ouvrage e introductif sur Maple est : Heck (Andr). Introduction to Maple. Springer-Verlag, . e ` A lheure actuelle il nexiste pas douvrage sur la programmation en Maple. Ouvrages plus spcialiss e e Un ouvrage tr`s complet mais un peu ardu qui traite plus en dtail et qui e e va plus loin sur de nombreux aspects de ce livre, notamment sur la premi`re e partie du chapitre IV et du chapitre VI : Cohen (Henri). A course in computational algebraic number theory. Springer-Verlag, , Graduate Texts in Mathematics, vol. 138. Un livre plus lmentaire sur une partie de ces sujets est : ee Zippel (Richard). Eective polynomial computation. Kluwer Academic Publishers, . Un petit livre extrmement agrable ` lire, mais malheureusement puis, e e a e e pour aller plus loin en combinatoire : Comtet (Louis). Analyse Combinatoire. Presses Universitaires de France, Paris, . 2 volumes. Il est parfois possible den trouver ldition anglaise (galement puise) : e e e e Comtet (Louis). Advanced Combinatorics. Reidel, Dordrecht, . Les fonctions gnratrices sont prsentes dans de nombreux chapitres de ce e e e livre, une introduction pdagogique y est donne dans e e Wilf (Herbert S.). Generatingfunctionology. Academic Press, .
309

310

3. BIBLIOGRAPHIE

Sur les polynmes en calcul formel et leur utilisation en gomtrie, louvrage o e e suivant est extrmement clair et complet : e Cox (David), Little (John), et OShea (Donal). Ideals, Varieties, and Algorithms. Springer-Verlag, . Pour toutes les questions danalyse mentionnes dans ce livre, une bonne e rfrence est ee Dieudonne (Jean). Calcul Innitsimal. Hermann, Paris, . e Un livre tr`s intressant et agrable de calcul asymptotique par lexemple : e e e De Bruijn (Nicolaas G.). Asymptotic Methods in Analysis. Dover, . Une rimpression de la troisi`me dition par North Holland, en (premi`re e e e e dition, ). e Un livre de recettes pour rsoudre des quations direntielles : e e e Zwillinger (Daniel). Handbook of Dierential Equations. Academic Press, . Sur les probabilits, voici deux classiques, le premier est lmentaire mais a e ee peut-tre un peu vieilli : e Renyi (Alfred). Calcul des probabilits. Dunod, . e Le second est plus complet mais plus gros : Feller (William). An Introduction to Probability Theory and its Applications. John Wiley, , troisi`me dition, vol. 1. e e

Index

aide, 10 Airy, sir George Biddel fonction d, 69 algorithme dEuclide, 34, 143 dEuclide tendu, 96, 98, 101 e de Gosper, 180 de Risch, 223224 du simplexe, 129 alias, 19, 21, 67, 149, 223 Alpak, 2 animation, 8991 apostrophe, 14, 55 argument dun nombre complexe, 23 dune procdure, 41, 60 e assume, 2728, 204, 208, 240, 247 Axiom, 2, 45, 224 base de Grbner, 151164 o standard, 151 Basile, 294 Bernoulli quation de , 246 e Bessel, Friedrich Wilhelm fonctions de , 225, 231, 235 Bzout, Etienne e identit de , 96 e boolen, 1618, 50 e boucle, 3339 break, 37 by, 34, 35 do, 3437 for, 3437 from, 34, 35 seq, 35, 3738 while, 3437 browser, 10
311

CAO syst`mes de , 294 e Carmichael, Robert Daniel nombres de , 97 Cauchy, Augustin Louis thor`me de , 251 e e Cayley, 2 Clairaut, Alexis Claude quation de , 246 e Clenshaw-Curtis quadrature de , 237, 238 code RSA, 9899, 104 coecients coeff, 107, 142 coeffs, 169 combinatoire, 106116, 257258 compilation, 278, 280, 286 composition de polynmes, 146 o oprateur de , 30 e oprateur de itre, 248 e e e constante constant, 53 e, E, 14, 23 , gamma, 14, 23 i, I, 23 , infinity, 14 , Pi, 14, 23 convert, 47, 48 +,*, 38, 49, 97, 171 GAMMA, 207 confrac, 100 exp, 25 ln, 25 parfrac, 192 sqrfree, 146 trig, 25 DAG, 67, 73 dcomposition e

312

INDEX

en facteurs premiers, 9798 degr, 141, 150 e Delaunay, Charles Eug`ne, 1, 205 e dnumrant, 106107 e e drangement, 214 e dterminant, 123 e dveloppe, 253 e e dveloppement e asymptotique, 25, 167169, 177, 206217, 239, 267268 de polynmes, 141 o en fraction continue, 99 en srie, 126, 128, 142, 197206, e 225, 249 limit, 17, 19, 20, 25, 27, 51, 83, e 100, 107, 237, 238, 281 De Moivre, Abraham, 262 diff, 25, 38, 39, 70, 73, 119 Digits, 15, 18, 190, 222, 276 Dirichlet, Peter Gustav Lejeune srie de , 263 e discriminant, 124, 144 division dentiers, 95 de polynmes, 143 o euclidienne, 34, 96, 143, 151 limination, 151, 156161 e enveloppe calcul d, 159 quations e dEuler, 246 de Bernoulli, 246 de Clairaut, 246 de Kepler, 205 de Riccati, 246 de rcurrence, 165187 e direntielles autonomes, 246 e direntielles homog`nes, 246 e e direntielles linaires, 113, 248 e e direntielles ordinaires, 245252 e direntielles sparables, 246 e e diophantiennes, 100104 linaires, 121122 e polynomiales, 147148, 150164 Eratosth`ne (Eratosjenhc) e crible d, 105 esprance, 260 e Euclide (Eukleidhc) algorithme d, 34, 143 algorithme d tendu, 96, 98, 101 e Euler, Leonhard constante d, 193 quation d, 246 e

fonction d, 193 formule d-Maclaurin, 209210, 239 valuation, 41, 5467 e numrique, 26, 224, 227, 238 e assign, 12 assigned, 41, 56 eval, 41, 5563, 66, 98, 112, 118 avec subs, 14, 25, 30, 48 evala, 17, 21, 22, 148149 evalb, 17, 18 evalc, 17, 2324 evalf, 17, 18, 26, 41, 61, 100, 237, 276279 evalhf, 41, 183, 184, 280 evalm, 17, 19, 120 evaln, 41, 57 evalp, 17, 19 value, 26 factorielle, 17 factorisation dentiers, 9798 de polynmes, 146 o sans carrs, 146 e Fermat, Pierre de conjecture de , 17 nombres de , 97 test de , 9798 Fibonacci, Lonard, de Pise, e nombres de , 167168 fonction algbrique, 148150 e dAiry, 69 de Bessel, 225, 231, 235 de Dirac, 224 de Heaviside, 224 gnratrice, 167172, 203204, e e 214216, 259270 liouvillienne, 248 symtrique, 150 e de Riemann, 209 W, 177, 194 Formac, 2 forme inerte, 2627, 237 normale, 139, 154 fortran conversion en , 289, 291 Fourier, baron Jean Baptiste Joseph srie de , 203 e transforme de , 234 e fraction continue, 99100 Frenet, Jean-Frdric, 252 e e

INDEX

313

Fresnel, Augustin Jean sinus intgral de , 189, 211, 276 e Galois, Evariste, 147 Gauss, Karl Friedrich approximation de , 262 Gb, 157 gfun, 113, 165, 167, 170 Gosper, Ralph William Jr. algorithme de , 180 Grbner o base de , 151164 hachage, 67 Hadamard, Jacques Salomon r`gle d, 199 e hypergomtrique e e srie , 191 e suite , 179180 intgrales, 219243 e changement de variable, 211, 213, 225226 dveloppement asymptotique, e 210213 dveloppement en srie, 202203 e e Int, 202 int, 25 intparts, 203, 211, 227 Jordan, Camille forme de , 126127, 134 Kant, 2 Kepler, Johannes quation de , 205 e Lagrange, Joseph Louis, comte de dcomposition de , 103, 110 e Laplace, Pierre Simon, marquis de, 262 mthode de , 211 e transforme de , 212, 234 e Laurent srie de , 199 e Legendre, Adrien Marie polynmes de , 205 o limite calcul de , 25, 193, 199, 207, 240 calcul numrique de , 184186 e Lucas, Edouard Anatole test de , 97 Macaulay, 2, 157 Machin, John formule de , 31 Maclaurin, Colin

formule dEuler-, 209210, 239 macro, 65, 71 MacroC, 291293 Macrofort, 291294 Macsyma, 2 Magma, 2 Mandelbrot, Beno t ensemble de , 83, 280 map, 35, 39, 61, 119 Markov ( ), Andrey Andreevich, 257 Mathematica, 2, 301302 Matlab, 2, 294 matrice identit, 120 e inverse, 120, 122 addition de s, 120 dotprod, 132 evalm, 120 exponential, 122, 129 jordan, 122 linsolve, 121, 136 matrix, 117118 multiply, 120 randmatrix, 125 scalarmul, 120 transpose, 118119 Mellin, Robert Hjalmar transforme de , 211, 236 e member, 36, 47 Mr, Antoine Gombaud, chevalier de, e e 264

Newton, sir Isaac mthode de , 36, 276, 286287, 293 e Newton-Cotes mthode de , 237, 238 e nombres alatoires, 82, 86, 90, 270271 e algbriques, 148150 e complexes, 23, 89 de Carmichael, 97 de Fibonacci, 167168 de Stirling de seconde esp`ce, 261 e ottants, 275 harmoniques, 197 premiers, 34, 97 rationnels, 94 transcendants, 141 tricolores, 103 nops, 46 normal, 12, 17, 59, 142 noyau, 65

314

INDEX

op, 4647, 51, 62, 118 optimisation, 68, 73 Order, 210 package, 71 Pari, 2, 275 Pascal, Blaise triangle de , 258 Pell, John quation de , 102 e permutation, 214 pgcd dentiers, 9596 de polynmes, 34, 143144, 170 o tendu, 143144, 157 e Poisson, Simon Denis e distribution de , 263 Postscript, 78 probabilit, 256273 e procdure e args, 41, 60 proc, 34 procmake, 64 remember, 4244, 57, 60, 63, 65 produits calcul de , 179181 dveloppement en srie de , e e 201202 projection, 159 Puiseux, Victor Alexandre srie de , 199 e Pythagore (Pujagorac) quation de , 102 e readlib, 44, 57, 61, 71 rcurrences e dordre un, 173179 linaires, 112, 165173 e Reduce, 2, 294 rsidus e mthode des , 232234 e rsolution e dquations, 11, 24, 147148 e dquations direntielles, 213, 246 e e dquations diophantiennes, e 100103 dquations linaires, 121122 e e dquations polynomiales, 147148, e 152153 de rcurrences, 165166, 169170 e modulo p, 103 numrique, 15, 80, 147 e restes chinois, 9697

dune division, 95 pseudo-, 143 pseudo- creux, 143 rsultant, 144145 e Riccati, Jacopo Francesco, comte de quation de , 246 e Riemann, Georg Friedrich Bernhard fonction de , 209 somme de , 216 Risch, Robert H., 223 Romberg acclration de convergence de , 184 ee RootOf, 21, 22, 26, 148150 Runge-Kutta mthode de , 250 e Scilab, 278279, 294 Scratchpad, 2 select, 47, 49, 52 seq, 41, 48, 58, 171, 253 sries, 188206 e gnratrices, 108115, 203204, e e 214216, 259270 hypergomtriques, 191 e e solutions dquations direntielles, e e 213214 calcul de , 20, 21, 25, 26, 142, 199, 208, 215 share library, 87, 291 signe, 28 simplexe, 129 simplication, 1631 de polynmes, 141142 o collect, 16, 20, 141142 combine, 16, 25, 26, 141, 255 expand, 16, 20, 25, 26 factor, 20 normal, 16 rationalize, 21, 22 simplify, 13, 16, 17, 2527, 48, 154 Simpson, Thomas mthode de , 238 e simulation, 270273 singularit, 245, 249 e SMP, 2 sommes de Riemann, 216 de sries, 191194 e de variables alatoires, 259 e calcul de , 150, 171, 179181, 191194, 204 dveloppement asymptotique de , e 208209

INDEX

315

dveloppement en srie de , e e 201202 Stirling, James formule de , 193, 207 nombres de de seconde esp`ce, 261 e Sturm, Jacques Charles Franois c suites de , 147, 153 substitution dexpressions, 1214, 25, 4748, 54, 55, 58, 62, 63, 283 doprandes, 4748, 62 e suites dveloppement asymptotique de , e 209210, 214216 table, 46, 5965 de remember, 42 de hachage, 67 array, 62, 72, 117118 entries, 63 indices, 63 Taylor, Brook dveloppements de , 249 e test, 34 tirage alatoire, 270273 e trace dune matrice, 117 dune procdure, 61, 72 e tracs e quations direntielles, 251, 255 e e contourplot, 88 cylinderplot, 85, 87 display, 84, 87, 90, 253 implicitplot, 81 implicitplot3d, 86 intersectplot, 87 plot, 15, 25, 7790, 280 plot3d, 280 plots, 77 plotsetup, 77 pointplot, 86 polarplot, 80, 81 spacecurve, 84, 86, 88, 255 sphereplot, 85 types, 50 de base, 49, 52 de surface, 53 paramtrs, 52 e e procduraux, 52 e rcursifs, 53 e structurs, 53 e anything, 53 cration de , 52 e

exprseq, 29, 50 float, 49 integer, 49 list, 29 rational, 49 series, 51, 198 set, 29 type, 49, 5253 valuation, 141 variables globales, 34, 40, 42, 63, 71 locales, 34, 40, 63 variance, 260 vecteur vector, 117 W, fonction, 177, 194 worksheet, 8, 78