gomez,salvy,zimmermann calcul formel mode d'emploi - exemples en maple (masson)

325

Upload: osito-pxndx

Post on 08-Jul-2015

297 views

Category:

Documents


0 download

TRANSCRIPT

Calcul formel : mode demploi

Exemples en MaplePhilippe Dumas Claude Gomez Bruno Salvy Paul Zimmermann

Avant-Propose 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

Contentsiii 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 ev

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.

x

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

Introduction1858, 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 e1

2

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

3

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 esyste 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

8

` I. PRISE EN MAIN DU SYSTEME

y

(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

9

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 particulier2 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 fx3 +3x2 +2x+yx2 +3yx+2y x3 +yx+2x2 +2y

Opration e normal(f) factor(f)

Rsultat ex2 +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) assume(x0) assume(xx^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

x

)

(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 enest 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. e33

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 t0 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 t0 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 produit1000

(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 quen

k=1

1 > 1, 7 k!

s:=0: for k while s 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 e499

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