Vous êtes sur la page 1sur 131

Algorithmes de calcul formel

B. Parisse
Institut Fourier
UMR 5582 du CNRS
Universit de Grenoble I
Rsum
Ce document dcrit une partie des algorithmes de calcul formel utiliss
pour le logiciel de calcul formel Giac/Xcas, cf.
http://www-fourier.ujf-grenoble.fr/~parisse/giac_fr.html
Table des matires
1 Calculer sur ordinateur 4
1.1 Problmes spciques au calcul formel . . . . . . . . . . . . . . . 4
1.1.1 Calcul exact et approch, types, valuation. . . . . . . . . 4
1.1.2 Forme normale et reconnaissance du 0. . . . . . . . . . . 5
1.1.3 Valeur gnrique des variables et hypothses . . . . . . . 6
1.2 Structures de donnes . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.1 Calculatrices formelles HP . . . . . . . . . . . . . . . . . 8
1.2.2 Calculatrices formelles TI . . . . . . . . . . . . . . . . . 9
1.2.3 Maple, Mathematica, ... . . . . . . . . . . . . . . . . . . 10
1.2.4 Giac/xcas . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Algorithmes et complexit. . . . . . . . . . . . . . . . . . . . . . 11
1.4 Quelques algorithmes darithmtique de base. . . . . . . . . . . . 14
1.4.1 Exemple : lalgorithme de Karatsuba . . . . . . . . . . . 15
1.4.2 Bezout sur les entiers et les fractions continues . . . . . . 16
1.4.3 La puissance rapide itrative . . . . . . . . . . . . . . . . 17
1.5 Pour en savoir plus. . . . . . . . . . . . . . . . . . . . . . . . . . 18
2 Exercices sur types, calcul exact et approch, algorithmes de bases 19
3 Le PGCD 21
3.1 Le sous-rsultant. . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Le pgcd en une variable . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.1 Le pgcd heuristique. . . . . . . . . . . . . . . . . . . . . 24
3.2.2 Le pgcd modulaire . . . . . . . . . . . . . . . . . . . . . 27
3.3 Le pgcd plusieurs variables. . . . . . . . . . . . . . . . . . . . . 31
3.3.1 Le pgcd heuristique. . . . . . . . . . . . . . . . . . . . . 31
3.3.2 Le pgcd modulaire multivariables. . . . . . . . . . . . . . 31
3.3.3 EZGCD. . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.4 Quel algorithme choisir ? . . . . . . . . . . . . . . . . . . . . . . 38
3.5 Pour en savoir plus. . . . . . . . . . . . . . . . . . . . . . . . . . 38
1
4 Le rsultant 39
5 Localisation des racines : les suites de Sturm. 41
6 Exercices (PGCD, rsultant, ...) 44
6.1 Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.1.1 Entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.1.2 Polynmes . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.1.3 Calculs modulo n . . . . . . . . . . . . . . . . . . . . . . 45
6.2 Exercices PGCD . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.3 Exercices (rsultant) . . . . . . . . . . . . . . . . . . . . . . . . 46
6.4 Exercice (Bzout modulaire) . . . . . . . . . . . . . . . . . . . . 47
6.5 Exercice (Gomtrie et rsultants). . . . . . . . . . . . . . . . . . 47
6.6 Dcalage entier entre racines. . . . . . . . . . . . . . . . . . . . . 48
7 Factorisation 50
7.1 Les facteurs multiples . . . . . . . . . . . . . . . . . . . . . . . . 50
7.2 Factorisation en une variable . . . . . . . . . . . . . . . . . . . . 52
7.2.1 Factorisation dans Z/pZ[X] . . . . . . . . . . . . . . . . 52
7.2.2 Distinct degree factorization . . . . . . . . . . . . . . . . 52
7.2.3 La mthode de Cantor-Zassenhaus . . . . . . . . . . . . . 54
7.2.4 La mthode de Berlekamp . . . . . . . . . . . . . . . . . 56
7.2.5 Remonte (Hensel) . . . . . . . . . . . . . . . . . . . . . 57
7.2.6 Combinaison de facteurs . . . . . . . . . . . . . . . . . . 60
7.3 Factorisation plusieurs variables . . . . . . . . . . . . . . . . . 61
7.4 Preuve de lidentit de Bzout gnralise . . . . . . . . . . . . . 64
7.5 Algorithme de Bzout gnralis . . . . . . . . . . . . . . . . . . 64
7.6 Pour en savoir plus . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.7 Exercices (factorisation des polynmes) . . . . . . . . . . . . . . 66
8 Intgration 68
8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
8.2 Fonctions lmentaires . . . . . . . . . . . . . . . . . . . . . . . 68
8.2.1 Extensions transcendantes, tour de variables . . . . . . . . 68
8.2.2 Thorme de structure de Risch . . . . . . . . . . . . . . 69
8.2.3 Thorme de Liouville . . . . . . . . . . . . . . . . . . . 73
8.3 Lalgorithme de Risch . . . . . . . . . . . . . . . . . . . . . . . . 76
8.3.1 Intgration dune fraction propre . . . . . . . . . . . . . . 77
8.3.2 Rduction sans facteurs multiples . . . . . . . . . . . . . 77
8.3.3 La partie logarithmique . . . . . . . . . . . . . . . . . . . 77
8.3.4 La partie polynomiale (gnralise) . . . . . . . . . . . . 79
8.3.5 Extension logarithmique . . . . . . . . . . . . . . . . . . 79
8.3.6 Extension exponentielle . . . . . . . . . . . . . . . . . . 80
8.4 Quelques rfrences . . . . . . . . . . . . . . . . . . . . . . . . . 84
2
9 Intgration numrique 85
9.1 Les rectangles et les trapzes . . . . . . . . . . . . . . . . . . . . 85
9.2 Ordre dune mthode . . . . . . . . . . . . . . . . . . . . . . . . 87
9.3 Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
9.4 Newton-Cotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
9.5 En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
10 Algbre linaire 91
10.1 Rsolution de systmes, calcul de dterminant. . . . . . . . . . . 91
10.1.1 La mthode du pivot de Gau. . . . . . . . . . . . . . . . 91
10.1.2 Le dterminant. . . . . . . . . . . . . . . . . . . . . . . . 92
10.1.3 Systmes linaires . . . . . . . . . . . . . . . . . . . . . 93
10.1.4 Bzout et les p-adiques. . . . . . . . . . . . . . . . . . . 94
10.1.5 Base du noyau . . . . . . . . . . . . . . . . . . . . . . . 96
10.2 Rduction des endomorphismes . . . . . . . . . . . . . . . . . . 97
10.2.1 Le polynme minimal . . . . . . . . . . . . . . . . . . . 97
10.2.2 Le polynme caractristique . . . . . . . . . . . . . . . . 98
10.2.3 La mthode de Hessenberg . . . . . . . . . . . . . . . . . 98
10.2.4 La mthode de Leverrier-Faddeev-Souriau . . . . . . . . . 99
10.2.5 Les vecteurs propres simples. . . . . . . . . . . . . . . . 101
10.2.6 La forme normale de Jordan . . . . . . . . . . . . . . . . 101
10.2.7 Exemple 1 . . . . . . . . . . . . . . . . . . . . . . . . . 102
10.2.8 Exemple 2 . . . . . . . . . . . . . . . . . . . . . . . . . 103
10.2.9 Le polynme minimal par Faddeev . . . . . . . . . . . . 104
10.2.10 Formes normales rationnelles . . . . . . . . . . . . . . . 104
10.2.11 Fonctions analytiques . . . . . . . . . . . . . . . . . . . . 108
10.3 Quelques autres algorithmes utiles . . . . . . . . . . . . . . . . . 108
10.3.1 Complexit asymptotique . . . . . . . . . . . . . . . . . 108
10.3.2 Numriques . . . . . . . . . . . . . . . . . . . . . . . . . 108
10.3.3 Dcomposition de Schur . . . . . . . . . . . . . . . . . . 109
10.3.4 Autres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
10.4 Quelques rfrences . . . . . . . . . . . . . . . . . . . . . . . . . 113
10.5 Exercices (algbre linaire) . . . . . . . . . . . . . . . . . . . . . 113
10.5.1 Instructions . . . . . . . . . . . . . . . . . . . . . . . . . 113
10.5.2 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . 113
11 Interpolation 115
11.1 Interpolation de Lagrange . . . . . . . . . . . . . . . . . . . . . . 115
11.1.1 Existence et contrle de lerreur. . . . . . . . . . . . . . . 115
11.1.2 Diffrences divises . . . . . . . . . . . . . . . . . . . . 116
11.2 Les splines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
12 La moyenne arithmtico-gomtrique. 118
12.1 Dnition et convergence . . . . . . . . . . . . . . . . . . . . . . 118
12.2 Lien avec les intgrales elliptiques . . . . . . . . . . . . . . . . . 121
12.3 Application : calcul efcace du logarithme. . . . . . . . . . . . . 123
12.4 La mthode de Newton. . . . . . . . . . . . . . . . . . . . . . . . 127
3
1 Calculer sur ordinateur
1.1 Problmes spciques au calcul formel
1.1.1 Calcul exact et approch, types, valuation.
Dans les langages de programmation traditionnel (C, Pascal,...), il existe dj
des types permettant une reprsentation exacte des donnes (type entier) ou une re-
prsentation approche (type ottant). Mais ces types de donne de base occupent
une taille xe en mmoire, le type entier est donc limit un intervalle dentiers
(par exemple [0, 2
32
1] pour un entier non sign sur une machine utilisant un
processeur 32 bits) alors que le type ottant peut reprsenter des nombres rels,
mais est limit une prcision en nombre de digits de la mantisse et de lexposant
(par exemple 12 chiffres signicatifs et un exposant compris entre -499 et 499).
En calcul formel, on souhaite pouvoir calculer rigoureusement dune part, et
avec des paramtres dont la valeur nest pas connue dautre part ; il faut donc saf-
franchir de ces limites :
pour les entiers relatifs, on utilise des entiers de prcision arbitraire dont la
taille en mmoire est dynamique (dtermine pendant lexcution et non la
compilation),
pour les nombres complexes, on utilise un couple de nombres rels,
pour les rationnels, on utilise un couple dentiers relatifs,
pour les irrationnels algbriques (par exemple

2), on utilise un polynme


irrductible dont ils sont racines,
pour les paramtres (x, y, z, t...), on utilise un type structur contenant un
champ de type chaine de caractres pour reprsenter le nom du paramtre et
un champ pour attribuer une valeur (ou une hypothse sur) ce paramtre,
pour les nombres transcendants (par exemple ), on est oblig dintroduire
un paramtre auquel on attribue une valeur numrique, qui ne sera utilise
quau moment o on veut une approximation numrique dune expression
contenant ce nombre transcendant, on parle de constante,
lorsquon a besoin dune approximation numrique dun nombre, on peut
utiliser des conversions de ces types en un type ottant. On peut aussi pour
lutter contre les erreurs darrondi utiliser des nombres ottants tendus dont
la prcision est dynamique ou mme des intervalles de ottants tendus,
il faut aussi un nouveau type, appel expression ou symbolique, permettant
dappliquer une fonction quon ne peut valuer directement sur les objets
prcdents, par exemple sin(x). Il doit sagir dune opration de clture, au
sens o appliquer une fonction un objet symbolique ne ncessite pas la
cration dun nouveau type (en gnral on renvoie un objet symbolique).
Enn, il faut pouvoir valuer un objet (en particulier symbolique) : par exemple
valuer sin(x) lorsquon assigne une valeur x. Dans cet exemple, on voit quil
faut dabord remplacer x par sa valeur avant de lui appliquer la fonction sinus.
Cest le mcanisme gnral de lvaluation, mais il y a quelques exceptions o on
souhaite empcher lvaluation dun ou plusieurs arguments dune fonction avant
lvaluation de la fonction. Par exemple si on veut calculer la valeur numrique
dune intgrale par des mthodes de quadrature, on ne souhaitera pas rechercher
une primitive de la fonction intgrer. Dans le jargon, on parle alors de quoter
un argument (lorigine du terme vient probablement de la notation du langage
4
Lisp). Certaines fonctions doivent toujours quoter leurs arguments (par exemple la
fonction qui permet de purger le contenu dun paramtre), on parle parfois dauto-
quotation.
1.1.2 Forme normale et reconnaissance du 0.
Une fois dni ces types de base reprsentant les nombres dun systme de
calcul formel, il faut pouvoir comparer ces nombres, en particulier dcider si deux
reprsentations distinctes correspondent au mme nombre ou, ce qui revient au
mme, par soustraction dcider quand un nombre est nul. Par exemple 4/2 et 2
reprsentent le mme nombre. Lorsquon dispose dun algorithme permettant de
reprsenter un nombre dune manire unique, on parle de forme normale. Cest
par exemple le cas pour les nombres rationnels, la forme normale usuelle est la
fraction irrductible de dnominateur positif. Cest aussi le cas pour les fractions
rationnelles de polynmes coefcients entiers reprsentes par une fraction ir-
rductible, avec au dnominateur un coefcient de plus haut degr positif. Mal-
heureusement, il nest pas toujours possible de trouver une forme normale pour
diverses raisons thoriques ou pratiques :
on ne connat pas toujours le statut de certaines constantes (par exemple la
constante dEuler),
il nexiste pas dalgorithmes permettant de dterminer sil existe des rela-
tions algbriques entre constantes,
il nexiste pas forcment une seule forme plus simple, par exemple :
(

2 + 1)x + 1
x +

2 + 1
=
x +

2 1
(

2 1)x + 1
Ce cas se prsente frquemment avec les extensions algbriques.
en pratique il peut tre trop coteux dutiliser une forme normale, par exemple
le polynme
x
1000
1
x1
possde 1000 monmes
En rsum, au mieux on a une forme normale, au pire on risque de ne pas recon-
natre un zro, entre les deux on peut ne pas avoir de forme normale mais tre
capable de reconnatre coup sr une expression nulle (par contre, si le systme de
calcul formel dtermine quune expression est nulle, alors elle lest).
Il nexiste pas dalgorithme solution pour le problme de la reconnaissance
du zro pour une classe dexpressions "assez gnrale". Heureusement, dans la
plupart des cas pratiques on sait rsoudre ce problme, en se ramenant le plus
souvent au cas des polynmes et fractions rationnelles. Par exemple, pour simpli-
er une expression trigonomtrique, on remplace les fonctions trigonomtriques
sin(x), cos(x), tan(x) par leur expression en fonction de t = tan(x/2), on est
ainsi ramen une fraction rationnelle en t que lon crit sous forme normale.
Les polynmes ont un rle central dans tout systme de calcul formel puisque
sauf dans les cas les plus simples (fractions dentiers par exemple), la simplica-
tion dexpressions fait appel un moment ou un autre des calculs de PGCD de
polynmes. Le PGCD de polynmes est un algorithme trs sollicit auquel nous
consacrerons une section. En effet, lapplication brutale de lalgorithme dEuclide
pose des problmes defcacit ce qui a oblig inventer des mthodes plus ef-
caces. Anticipons rapidement sur un exemple qui montre lun des problmes ma-
jeurs des algorithmes de calcul formel, lexplosion en taille (ici des coefcients des
5
restes successifs). Voici donc les restes successifs lorsquon applique lalgorithme
dEuclide pour calculer le PGCD de P(x) = (x + 1)
7
(x 1)
6
avec sa drive
(les deux polynmes sont premiers entre eux) :
7(x + 1)
6
6(x 1)
5
162
49
x
5
+
390
49
x
4
+
1060
49
x
3
+
780
49
x
2
+
474
49
x +
78
49
157780
729
x
4
+
507640
2187
x
3
+
290864
729
x
2
+
101528
729
x +
28028
729
1
49
(
1400328
2645
x
3
+
732888
2645
x
2
+
1133352
3703
x +
732888
18515
)
1
2187
(
2161816376832
4669921
x
2
+
555436846944
4669921
x +
301917024864
4669921
)
1
907235
(
469345063045455
129411872
x +
47641670106615
129411872
)
5497465490623352995840
209648836272383412129
Le lecteur voulant tester dautres exemples pourra utiliser le programme Xcas (cf.
lappendice) suivant :
pgcd(a):={
local b,r,res;
b:=diff(a,x);
res:=NULL;
for (;b!=0;){
res:=res,b;
r:=rem(a,b);
a:=b;
b:=r;
}
return(res);
}
1.1.3 Valeur gnrique des variables et hypothses
Lorsquon utilise un symbole sans lui affecter de valeurs en mathmatiques on
sattend une discussion en fonction du paramtre reprsent par ce symbole. Ce
qui ncessiterait de crer un arborescence de calculs (on retrouve ici les problmes
dexplosion voqus dans la section prcdente). La plupart des systmes de calcul
formel contournent la difcult en supposant que le paramtre possde une valeur
gnrique (par exemple la solution de (t
2
1)x = t 1 sera x = 1/(t + 1)) ou
choisissent une branche pour les fonctions possdant un point de branchement (par
exemple pour rsoudre x
2
= t en fonction de t). Certains systmes demandent de
manire interactive lutilisateur si la variable est par exemple positive ou diff-
rente de 1 mais cela soppose un traitement automatique. On peut aussi anticiper
ce type de dcision en faisant des hypothses sur une paramtre, la plupart des
systmes de calcul formel actuel proposent cette possibilit.
6
1.2 Structures de donnes
On a vu plus haut quon souhaitait manipuler des entiers de taille non xe,
des rels de prcision xe ou non, des fractions, des nombres complexes, des ex-
tensions algbriques, des paramtres, des expressions symboliques. La plupart des
systmes proposent un type gnrique qui recouvre ces divers types de scalaire. On
peut par exemple utiliser un type structur comportant un champ type et la donne
ou un pointeur sur la donne (avec dans ce cas un pointeur sur un compteur de r-
frences de la donne pour pouvoir la dtruire ds quelle nest plus rfrence
1
).
En programmation oriente objet, on utiliserait plutt un type abstrait dont drivent
ces diffrents scalaires et le polymorphisme.
Il faut aussi un type pour les vecteurs, les matrices et les listes. Il faut prendre
garde la mthode utilise par le systme lorsquon modie un lment dun vec-
teur, matrice ou liste : soit on effectue une copie de tout lobjet en modiant ll-
ment, soit on modie llment de lobjet original. La premire mthode (par va-
leur) est plus aise comprendre pour un dbutant mais la seconde mthode (par
rfrence) est bien plus efcace.
On peut se poser la question de savoir sil faut inclure ces types dans le type
gnrique ; en gnral la rponse est afrmative, une des raisons tant que les in-
terprteurs qui permettront de lire des donnes dans un chier texte sont en gnral
bas sur le couple de logiciels lex(flex)/yacc(bison) qui ne peut com-
piler qu destination dun seul type. Ceci permet galement dunier en un seul
type symbolique les fonctions ayant un ou plusieurs arguments en voyant plusieurs
arguments comme un vecteur darguments. Les fonctions sont le plus souvent elle-
mme incluses dans le type gnrique permettant ainsi lutilisateur de saisir des
commandes ou programmes fonctionnels (on peut utiliser une fonction comme ar-
gument dune commande).
Pour des raisons defcacit, les systmes de calcul formel utilisent souvent
des reprsentations particulires pour les polynmes dont on a dit quils jouaient
un rle central. Pour les polynmes une variable, on peut utiliser la liste des coef-
cients du polynme, on parle alors de reprsentation dense. On peut aussi dcider
de ne stocker que les coefcients non nuls, on parle alors de reprsentation creuse
(on stocke alors un couple form par le coefcient et le degr du monme corres-
pondant). Pour les polynmes plusieurs variables, on peut les considrer comme
des polynmes une variable coefcients polynomiaux, on parle alors de repr-
sentation rcursive. On peut aussi dcider de ne pas briser la symtrie entre les
variables (pas de variable principale), on parle alors de reprsentation distribue,
le plus souvent les reprsentation distribues sont creuses car les reprsentations
denses ncessitent trs vite beaucoup de coefcients. Les mthodes de reprsenta-
tion creuses sont parfois aussi utilises pour les matrices ayant beaucoup de coef-
cients nuls.
Voyons maintenant plus prcisment sur quelques exemples de logiciels de cal-
cul formel rpandus quelles structures de donnes sont utilises. Plusieurs lments
entrent en compte dans les choix faits :
1. Certains systmes de calcul formel (calculatrices par exemple) utilisent dailleurs des m-
thodes spciques pour grer le problme de la fragmentation de la mmoire, appels garbage col-
lector. Ce type de mthode est intgr dans des langages comme Lisp ou Java, en C/C++ on trouve
des libraries pour cela, par exemple GC de Boehm, incluse dans la distribution de GCC.
7
le(s) prol(s) dutilisation (enseignement, ingnirie, calcul intensif, recherche)
les ressources disponibles (mmoire, puissance du processeur...)
la facilit dimplmentation (choix du langage, outils disponibles en particu-
lier dbuggueurs, ...)
lhistoire du systme (un systme conu avec les outils disponibles aujour-
dhui est forcment diffrent dun systme conu il y a 20 ans)
Nous allons dabord parler des calculatrices formelles HP et TI (le lecteur pourra
facilement les tester grce aux mulateurs gratuits pour PC). Ce sont des systmes
plutt destins lenseignement, soumis de fortes contraintes en termes de taille
mmoire, et destins traiter des petits problmes. Puis nous prsenterons des sys-
tmes pour ordinateur o les ressources (par exemple mmoire) sont moins limites
ce qui permet dutiliser des langages de programmation de plus haut niveau.
1.2.1 Calculatrices formelles HP
Les langages utiliss pour programmer ces calculateurs sont lassembleur et
le RPL (Reverse Polish Lisp) adapt lcriture de code en mmoire morte trs
compact.
Le type gnrique est implment avec un champ type appel prologue (qui est
en fait un pointeur sur la fonction charge dvaluer ce type dobjet) suivi de la
donne elle-mme (et non dun pointeur sur la donne, on conomise ainsi la place
mmoire du compteur de rfrence).
Le type entier en prcision arbitraire est cod par le nombre de digits (sur 5
quartets
2
) suivi du signe sur un quartet et de la reprsentation BCD (en base 10)
de la valeur absolue de lentier. Le choix de la reprsentation BCD a t fait pour
optimiser les temps de conversion en chane de caractres pour lafchage. La m-
moire vive disponible est de 256K, cest elle qui limite la taille des entiers et non le
champ longueur de lentier. Il ny a pas de type spcique pour les rationnels (on
utilise un objet symbolique normal).
Les fonctions internes des HP49/50/40 utilisent le type programme pour repr-
senter les entiers de Gau (complexes dont la partie relle et imaginaire est entire).
Les nombres algbriques ne sont pas implments, sauf les racines carres (repr-
sente de manire interne par le type programme). Il y a un type spcique prvu
pour les ottants en prcision arbitraire, mais limplmentation des oprations sur
ces types na pas t intgre en ROM ce jour.
Les types listes, programmes et objet symbolique sont composs du prologue
(champ type) suivi par la succession dobjets situs en mmoire vive ou de poin-
teurs sur des objets situs en mmoire en lecture seule (ROM) et se terminent par
un pointeur sur une adresse xe (appele SEMI). Ces types sont eux-mmes des
objets et peuvent donc tre utiliss de manire rcursive. La longueur des types
listes, programmes, symboliques nest stocke nulle part, cest le dlimiteur nal
qui permet de la connatre, ce qui est parfois source dinefcacit. On utilise de ma-
nire interne les listes pour reprsenter les polynmes denses (avec reprsentation
rcursive pour les polynmes plusieurs variables).
Les calculatrices HP4xG utilisent une pile
3
, cest--dire une liste de taille non
2. un quartet=un demi octet
3. Plus prcisment deux piles, la pile de donne et la pile grant le ux dexcution. Cette
dernire nest pas visible par lutilisateur
8
xe dobjets. On place les objets sur la pile, lexcution dune fonction prend
ces arguments sur la pile et renvoie un ou plusieurs rsultats sur la pile (ce qui
est une souplesse du RPN compar aux langages o on ne peut renvoyer quune
valeur de retour). Il faut donc donner les arguments avant dappeler la fonction
correspondante. Par exemple pour calculer a+b on tapera a b +. Cest la syntaxe
dite polonaise inverse (RPN). Un avantage de cette syntaxe est que le codage
dun objet symbolique par cette syntaxe est vidente, il suft de stocker la liste
prcdente {a b +}. Les objets symboliques sont donc reprsent par une suite
dobjets crit en syntaxe polonaise inverse. Lvaluation dun objet symbolique se
fait dans lordre polonaise invers : les arguments sont valus puis les fonctions
leur sont appliqus. Pour des raisons defcacit, on reprsente souvent les objets
composites (listes, symboliques) par leurs composants placs sur la pile (appel
meta-objets).
Une rigidit de la syntaxe polonaise est que les fonctions ont toujours un nombre
xe darguments
4
, par exemple laddition a toujours 2 arguments, ainsi a+b+c est
obtenu par (a +b) +c ou par a +(b +c) cest--dire respectivement a b + c +
ou a b c + + ce qui brise parfois articiellement la symtrie de certaines op-
rations. En polonaise inverse, le systme doit de plus jongler avec lautoquote
puisque les arguments sont valus avant loprateur qui ventuellement demande-
rait ne pas valuer ses arguments. noter lexistence dune commande QUOTE
permettant lutilisateur de quoter une sous-expression.
Les hypothses sur des variables relles sont regroupes dans une liste stocke
dans la variable globale REALASSUME, on peut supposer quune variable est dans
un intervalle. Il ny a pas ce jour de possibilit de supposer quune variable est
entire (ni fortiori quune variable une valeur modulo un entier x), bien quil
ait t dcid de rserver la variable globale INTEGERASSUME cet effet. Il ny
a pas de possibilit de faire des hypothses ayant une porte locale.
1.2.2 Calculatrices formelles TI
Le langage utilis pour programmer ces calculatrices est le langage C (on peut
aussi crire du code en assembleur pour ces calculatrices). On retrouve ici les dif-
frents types de donnes regroup en un type gnrique qui est un tableau doctets
(aussi appel quantum). Le champ type est appel tag dans la documentation TI.
Contrairement ce qui prcde, ce champ type est plac en mmoire la n de
lobjet, ce qui est possible car la longueur dun objet est toujours indique au dbut
de lobjet. Ceci est fait an de faciliter lvaluation (cf. infra).
Les entiers en prcision arbitraire sont cods par un tag parmi deux (pour dif-
frencier le signe), un octet pour la longueur, puis la valeur absolue de lentier
(en base 256). Ils sont donc limits par le champ longueur 255 octets, le plus
grand entier reprsentable est
5
(256
255
1). Il existe un tag spcique pour les
rationnels, pour les constantes relles et entires qui apparaissent par exemple en
rsolvant une quation. Il existe des tags utiliss de manire interne, par exemple
pour les nombres complexes. Il ny a pas de tag prvu pour les ottants en prcision
4. Sauf si on utilise comme dernier argument le nombre darguments de la fonction ou si on
utilise (cf. infra) un tag de dbut de liste darguments
5. Toutefois une adaptation du logiciel utilisant comme quantum de base par exemple 32 bits
porterait cette limite 65536
65535
1
9
arbitraire. ni pour les nombres algbriques (racines carres par exemple).
Les listes sont codes par la succession de leurs lments. En principe elles
ne peuvent pas contenir des listes (sauf pour reprsenter une matrice). Quelques
fonctions utilisent les listes pour reprsenter des polynmes denses une variable,
mais probablement pas pour reprsenter de manire rcursive des polynmes
plusieurs variables (puisque le type liste nest en principe pas rcursif).
Comme les HP, les TI utilisent une pile (non visible par lutilisateur) appele
expression stack an de traduire un expression mathmatique sous forme dun texte
en un objet symbolique cod exactement comme ci-dessus en syntaxe polonaise.
Toutefois, la prsence du champ longueur permet dvaluer un objet symbolique
sans perdre en efcacit en partant de loprateur nal et en redescendant ensuite
sur ces arguments, cest la stratgie adopte. Cest pour cela que le tag didentica-
tion se trouve la n de lobjet. Lutilisation de cette mthode facilite grandement
lautoquotation (on peut toutefois regretter que le systme nait pas prvu dins-
truction permettant lutilisateur dempcher lvaluation dune sous-expression).
On ne peut pas faire dhypothse globale sur un paramtre par contre on peut
faire des hypothses de type appartenance un intervalle ayant une porte locale.
1.2.3 Maple, Mathematica, ...
Ces systmes ont un noyau ferm, au sens o lutilisateur na pas accs du tout,
ou en tout cas pas facilement, aux structures de donnes de base. Je ne dispose donc
pas dinformation sur les structures de donnes utilises par le noyau.
Linteraction systme-utilisateur se fait quasiment toujours en utilisant le lan-
gage de programmation propre au systme, langage interprt par le noyau du sys-
tme (ce qui ralentit lexcution). Ces langages utilisateurs sont essentiellement
non typs : on travaille avec des variables du type gnrique sans pouvoir accder
aux types sous-jacents. On ne bncie en gnral pas des vrications faites lors
de la compilation avec un langage typ, de plus ces systmes ne sont pas toujours
fourni avec de bon outils de mise au point. Enn ces langages ne sont pas standar-
diss dun systme lautre et il est en gnral impossible dutiliser ces systmes
comme des librairies depuis un langage de programmation traditionnel. Leur int-
rt principal rside donc dans une utilisation interactive en protant de la librairie
de fonctions accessibles.
1.2.4 Giac/xcas
Il sagit du systme de calcul formel que jimplmente actuellement sous forme
dune bibliothque C++ (ce qui permettra aux programmes tiers dutiliser beau-
coup plus facilement du calcul formel quavec les systmes prcdents). Lobjectif
est davoir un systme facile programmer directement en C++, proche du langage
utilisateur, lui-mme compatible avec Maple ou MuPAD, tout cela sans trop perdre
en performances comparativement aux librairies spcialises crites en C/C++. Ce
qui explique un choix de type gnrique (gen) non orient objet, avec un champ
type et soit une donne immdiate (pour les nombres ottants par exemple), soit
un pointeur vers un objet du type correspondant au champ type pour les donnes
de taille non xe (on pourrait donc se contenter du langage C, mais le langage
C++ permet de rednir les oprateurs sur des types utilisateurs ce qui amliore
10
considrablement la lisibilit du code source). Les donnes dynamiques ne sont
pas dupliques, Giac utilise un pointeur sur un compteur de rfrence pour dtruire
ces donnes lorsquelles ne sont plus rfrences.
Les entiers en prcision arbitraire sont hrits de la biblioth` que GMP (crite
en C) du projet GNU. Les ottants en prcision arbitraire utiliseront aussi GMP
(plus prcisment MPFR). Il y a un type fraction, structure C compos dun champ
numrateur et dun champ dnominateur, et un type nombre complexe.
Les listes, vecteurs, matrices utilisent le type paramtr vector<> de la li-
brairie standard C++ (Standard Template Library). Les objets symboliques sont
des structures composs dun champ sommet qui est une fonction prenant un ar-
gument de type gen et renvoyant un rsultat de type gen, et dun champ feuille
qui est de type gen. Lorsquune fonction possde plusieurs arguments, ils sont
rassembls en une liste formant le champ feuille de lobjet symbolique. Les pro-
grammes sont aussi des objets symboliques, dont le champ sommet est la fonction
valuation dun programme. Les listes sont aussi utilises pour reprsenter vec-
teurs, matrices et polynmes en une variable en reprsentation dense, on peut y
accder par valeur (:=) ou par rfrence (=<). Ces polynmes servent eux-mmes
reprsenter des lments dune extension algbrique de Q(vus comme un couple
de polynmes P, Q, o Q est un polynome minimal irrductible coefcients en-
tiers, autrement dit P, Q vaut P() o Q() = 0), ou des lments dun corps ni
(comme ci-dessus, mais ici Q est coefcients dans Z/pZ avec p premier, cf. la
commande GF). Giac possde aussi un type pour les polynmes en reprsentation
creuse distribue en plusieurs indtermines (cf. les commandes symb2poly et
poly2symb).
Lvaluation dun objet symbolique se fait en regardant dabord si la fonction
au sommet doit valuer ou non ses arguments (autoquote), on value les arguments
si ncessaire puis on applique la fonction.
Une hypthse sur un paramtre est une valeur spciale affecte au paramtre,
valeur ignore par la routine dvaluation.
1.3 Algorithmes et complexit.
On va prsenter dans la suite quelques algorithmes que lon peut considrer
comme classiques dans le domaine du calcul formel. Avant dimplmenter ce type
dalgorithmes, on a besoin des algorithmes de base en arithmtique. Le lecteur
trouvera en appendice une brve prsentation de certains de ces algorithmes, mes
rfrences en la matire sont le livre de Henri Cohen, et les livres de Donald Knuth
(cf. appendice).
La plupart des problmes poss en calcul formel ncessitent des calculs dont
la taille croit de manire exponentielle voire doublement exponentielle en fonction
de la taille des donnes et ce mme si le rsultat est lui aussi de taille petite. Un
exemple est la rduction des systmes de plusieurs quations polynomiales (bases
de Groebner). Dans certains cas, lapplication de thories mathmatiques parfois
sophistiques permet de rduire la complexit (par exemple, M. Van Hoeij a dcou-
vert rcemment quun algorithme trs utilis en thorie des nombres, lalgorithme
LLL, permettait damliorer la complexit dune des tapes de la factorisation des
polynomes coefcients entiers sur les entiers). Heureusement, dans de nombreux
cas, on peut rduire la complexit (donc le temps de calcul) par des adaptations au
11
problme dune mme ide condition de faire des hypothses sur les donnes (au-
trement dit en abandonnant la volont dimplmenter un algorithme trs gnrique,
ou tout au moins en spcialisant des algorithmes gnriques).
Par exemple lorsquon travaille avec des entiers (ou des polynmes coef-
cients entiers, ou des matrices coefcients entiers...) on utilise souvent des algo-
rithmes modulaires et p-adiques. Comme le calcul exact ncessite presque toujours
de calculer avec des entiers, ces mthodes ont un rle central en calcul formel,
nous les prsentons donc maintenant brivement. Dans les prochaines sections,
nous utiliserons ce type de mthode, par exemple pour le calcul de PGCD ou la
factorisation de polynmes coefcients entiers.
Les mthodes modulaires consistent rduire un problme dans Z son qui-
valent dans Z/nZ pour une ou plusieurs valeurs de n, nombre premier. Le calcul
dans Z/nZ a lavantage de se faire avec des entiers dont la taille est borne. Ensuite
laide destimations priori sur la taille des solutions ventuelles du problme
initial, on reconstruit la solution au problme initial avec le thorme des restes
chinois.
Par exemple, on peut calculer un dterminant dune matrice coefcients en-
tiers en cherchant ce dterminant dans Z/nZ pour plusieurs nombres premiers n,
dont le produit est deux fois plus grand quune estimation priori de la taille du
dterminant (donne par exemple par lingalit dHadamard, cf. Cohen, p. 50).
Les mthodes p-adiques commencent de manire identique par un calcul dans
Z/nZ, on augmente ensuite la prcision de la solution en la liftant de Z/n
k
Z
vers Z/n
k+1
Z ou vers Z/n
2k
Z (lift linaire ou lift quadratique), on sarrte lorsque
k est assez grand ( laide destimations priori) et on reconstruit alors la solution
initiale. Ltape de lift est en gnral un lemme de Hensel dont on verra quelques
exemples dans les prochains articles. Lalgorithme commun au lemme de Hensel et
au thorme des restes chinois est lidentit de Bzout, que lon retrouve dailleurs
un peu partout (par exemple pour le calcul de primitives).
Illustrons cette mthode sur un exemple simple, la recherche de racines ration-
nelles dun polynme P(X) = a
d
X
d
+ + a
0
coefcients entiers ou poly-
nomiaux, avec a
d
et a
0
non nuls. Lalgorithme gnrique (assez connu) consiste
chercher les diviseurs de a
0
et de a
d
et tester toutes les fractions de ces diviseurs,
on montre en effet aisment que si X = p/q fraction irrductible est racine de P
alors q divise a
d
et p divise a
0
. Cet algorithme est trs inefcace si a
d
ou a
0
est
un grand entier (car on ne sait pas forcment le factoriser) ou sil a beaucoup de
facteurs premiers (la liste des diviseurs tester est alors trs grande).
Lorsque les coefcients de P sont entiers, la recherche prcdente revient
trouver un facteur coefcients entiers qX p de P, on peut donc rduire le
problme modulo un entier premier n qui ne divise pas a
d
: si un tel facteur existe
dans Z alors ce facteur (rduit modulo n) est un facteur de P dans Z/nZ donc P
admet une racine dans Z/nZ (puisque q est inversible modulo n car on a choisi n
premier ne divisant pas a
d
). On value maintenant P en les n lments de Z/nZ.
Sil ny a pas de 0, alors P na pas de racine rationnelle. Sil y a des racines, on va
les lifter de Z/n
k
Z dans Z/n
2k
Z.
On suppose donc que pour k 1, il existe un entier p
k
tel que
P(p
k
) = 0 (mod n
k
)
12
Il sagit de trouver un entier x tel que p
k+1
= p
k
+n
k
x vrie
P(p
k+1
) = 0 (mod n
2k
)
On applique la formule de Taylor lordre 1 pour P en p
k
, le reste est nul modulo
n
2k
, donc :
P(p
k
) +n
k
xP

(p
k
) = 0 (mod n
2k
)
soit nalement :
x =
P(p
k
)
n
k
(P

(p
k
) (mod n
k
))
1
On reconnat au passage la mthode de Newton, pour quelle fonctionne il suf-
t que P

(p
k
) ,= 0 (mod n) ce qui permet de linverser modulo n
k
(et cest ici
quintervient lidentit de Bzout). En pratique quand on factorise un polynme,
on commence par retirer les multiplicits, on peut donc supposer que P est sans
facteur multiple dans Z. Ceci nentrane pas forcment quil le reste dans Z/nZ
ce qui cre une contrainte supplmentaire sur le choix de n, savoir que P et P

restent premier entre eux dans Z/nZ (il existe forcment de tels n, par exemple n
premier plus grand que le plus grand entier intervenant dans le calcul du PGCD de
P et P

dans Z).
Reste donc revenir dans Z partir dune racine p
k
dans Z/(n
k
Z) (o on peut
choisir k). On va maintenant utiliser la reprsentation modulaire symtrique : on
prend comme reprsentant modulaire dun entier z dans Z/n
k
Z lunique entier
congru z modulo n qui est strictement compris entre n
k
/2 et n
k
/2 (si n est
pair, la deuxime ingalit est choisie large).
Si qX p est un facteur de P, alors a
d
X
a
d
q
p est encore un facteur de
P (le quotient de P par a
d
X
a
d
q
p est coefcients rationnels mais le facteur
est coefcients entiers). Si on a choisi k tel que n
k
> 2[a
d
a
0
[, lcriture en
reprsentation modulaire symtrique de a
d
X
a
d
q
p est inchange, en effet on a des
estimations priori sur les entiers p et q : [q[ [a
d
[ et [p[ [a
0
[ puisque q divise
a
d
et p divise a
0
. Comme a
d
X
a
d
q
p est gal a
d
(Xp
k
) dans Z/(n
k
Z), il nous
suft dcrire en reprsentation modulaire symtrique a
d
(X p
k
) = a
d
X p

.
Pour conclure, on sait que a
d
X p

est un multiple entier de qX p. On divise


donc le facteur a
d
X p

par le pgcd de a
d
et p

et on teste la divisibilit de P par


ce facteur rduit.
Exemple
Considrons le polynme 2X
3
X
2
X 3 qui est sans facteur carr. On ne
peut pas choisir n = 2 car on rduirait le degr, pour n = 3, on a P

= X 1
qui est facteur de P, pour n = 5, P

= 6X
2
2X 1, on vrie que P et P

sont premiers entre eux (par exemple avec GCDMOD sur une HP49 o on aura x
la variable MODULO 5).
On teste ensuite les entiers de -2 2 sur P. Seul -1 est racine modulo 5
(P(1) = 5), on va maintenant lifter p
1
= 1.
Lestimation priori est 2[a
d
[[a
0
[ = 12 donc k = 2 (5
2
= 25 > 12), une
itration sufra. On a P

(1) = 7, linverse de P

(1) (mod 5) est -2 donc :


x =
P(1)
5
(2) = (1)(2) = 2
et p
2
= 1 + 5 (2) = 11 est racine de P dans Z/25Z. On calcule ensuite
a
d
(X p
k
) = 2(X + 11) = 2X + 22 = 2X 3 en reprsentation symtrique,
13
le PGCD de 2 et -3 est 1 donc on teste le facteur 2X 3, ici il divise P donc P
admet un unique facteur entier de degr 1 qui est 2X 3.
1.4 Quelques algorithmes darithmtique de base.
Les algorithmes de multiplication et division dit rapides des entiers et poly-
nmes (Karatsuba, FFT, ...). Cf. par exemple Knuth. ou pour les entiers la
documentation de GMP, ou infra pour Karatsuba.
Au lieu de la division euclidienne, on utilise trs souvent la pseudo-division
pour les polynmes : tant donn deux polynmes A et B de degrs a et
b coefcients dans un anneau contenu dans un corps (par exemple Z), on
multiplie A par une puissance du coefcient dominant B
b
de B, plus prci-
sment par B
ab+1
b
, ce qui permet deffectuer la division par B sans que les
coefcients sortent de lanneau.
B
ab+1
b
A = BQ+R
On utilise cette mthode lorsquon peut multiplier les polynmes par des
constantes sans changer le problme (par exemple pour lalgorithme dEu-
clide).
Lalgorithme dEuclide est un algorithme gnrique de calcul de PGCD. Il
nest en gnral pas utilis tel quel. Pour les entiers on utilise une variation
adapte la reprsentation binaire des entiers (cf. Cohen ou le manuel de
GMP version 4 pour plus de dtails). Nous dcrirons des algorithmes de
PGCD plus efcaces pour les polynmes dans le prochain article.
lidentit de Bzout, aussi appele PGCD tendu. tant donn deux entiers
ou deux polynmes a et b on calcule u, v et d tels que au +bv = d. On crit
la matrice :
_
a 1 0
b 0 1
_
o on remarque que pour chaque ligne le coefcient de la 1re colonne est
gal a multipli par le coefcient de la 2me colonne additionn b mul-
tipli par le coefcient de la 3me colonne. Ce qui reste vrai si on effec-
tue des combinaisons linaires de lignes (type rduction de Gau). Comme
on travaille dans les entiers ou les polynmes, on remplace la rduction de
Gau des matrices coefcients rels par une combinaison linaire utilisant
le quotient euclidien (entier ou polynomial selon le cas) q de a par b. On
obtient alors le reste r en 1re colonne :
L
3
= L
1
qL
2
_
_
a 1 0
b 0 1
r 1 q
_
_
et on recommence jusqu obtenir 0 en 1re colonne. Lavant-dernire ligne
obtenue est lidentit de Bzout (la dernire ligne donne le PPCM de a et
b). Si lon veut linverse de a modulo b on remarque quil nest pas utile
de calculer les coefcients appartenant la 3me colonne. Enn, les lignes
intermdiaires peuvent servir reconstruire une fraction dentier reprsente
par un entier de Z/nZ lorsque le numrateur et le dnominateur sont de
valeur absolue infrieure
_
n/2.
14
Le thorme des restes chinois. Si on connat x = a (mod m) et x = b
(mod n) avec m et n premiers entre eux, on dtermine c tel que x = c
(mod mn). On a donc c = a +mu = b +nv et on applique Bzout pour
trouver u ou v, on en dduit c. En pratique, on cherche un des coefcients
de Bzout, par exemple on cherche U tel que mU +nV = 1, on a alors :
c = a +m(b a)U
Si n est petit devant m(par exemple 32 bits), U est aussi petit, on commence
par rduire b a modulo n, puis on multiplie par U, on rduit nouveau
modulo n et on multiple enn par m.
Les tests de pseudo-primalit. Il est essentiel davoir une mthode rapide
permettant de gnrer des nombres premiers pour appliquer des mthodes
modulaires et p-adiques. On utilise par exemple le test de Miller-Rabin,
qui prolonge le petit thorme de Fermat (si p est premier, alors a
p
= a
(mod p)).
1.4.1 Exemple : lalgorithme de Karatsuba
Soient P, Q deux polynmes de degrs strictement infrieur 2n. On suppose
que le cout dune opration arithmtique dans le corps des coefcients vaut 1 et on
nglige les autres oprations (on suppose par exemple que le corps des coefcients
est un corps ni). On crit
P = A+x
n
B, Q = C +x
n
D
avec A, B, C, D de degrs strictement infrieur n, on a alors :
PQ = AC +x
n
(AD +BC) +x
2n
BD
Il y a 4 produits de polynmes de degrs < n, mais au prix dadditions interm-
diaires, on peut se ramener 3 produits, en effet
(A+B)(C +D) AC BD = AD +BC
donc pour calculer le cofacteur de x
n
il suft de soustraire (A+B)(C +D) les
produits AC et BD que lon calcule par ailleurs. Soit M(n) le temps ncessaire
pour calculer le produit de 2 polynmes par cette mthode, on a alors
M(2n) = 3M(n) + 8n
o 8n reprsente le nombre dadditions ou de soustractions pour former A + B,
C + D, soustraire AC et BD, et tenir compte des "retenues" (les termes de degr
n de AC se combinent avec ceux de degr < 2n de AD +BC et les termes de
degr < 3n de x
2n
BD avec ceux de degr 2n de AD +BC). On en dduit
u
n
= M(2
n
), u
n+1
= 3u
n
+ 8 2
n
cette rcurrence se rsoud facilement par la commande
rsolve(u(n+1)=3
*
u(n)+8
*
2^n,u(n),u(0)=1)
qui donne M(2
n
) = u
n
= 8 2
n
+ 9 3
n
.
15
Asymptotiquement, M(2
n
) 9 3
n
ce qui est bien meilleur que la multiplica-
tion naive en 2 4
n
, mais pour de petites valeurs de n, la multiplication naive est
plus rapide, on utilise Karatsuba (rcursivement) uniquement pour des valeurs de
n sufsamment grandes (thoriquement lorsque 8n, le surcout d aux additions est
plus petit que la multiplication conomise, soit 8n < 2n
2
soit n > 4, en pratique
plutt pour n de lordre de quelques dizaines selon les implmentations, car nous
navons tenu compte que des oprations arithmtiques).
1.4.2 Bezout sur les entiers et les fractions continues
Il existe une variante de lidentit de Bzout prsente ci-dessus pour les en-
tiers. Soient a b > 0 deux entiers, on pose
(L
n
) au
n
bv
n
= (1)
n
r
n
o r
0
= a, r
1
= b et r
n+2
est le reste de la division euclidienne de r
n
par r
n+1
(q
n+2
le quotient), u
0
= 1, u
1
= 0, v
0
= 0, v
1
= 1. Comme prcedemment,
chaque ligne sobtient par combinaison linaire des deux prcdentes, mais cette
fois avec une addition
L
n+2
= L
n
+q
n+2
L
n+1
ce qui se traduit par :
u
n+2
= u
n
+q
n+2
u
n+1
, v
n+2
= v
n
+q
n+2
v
n+1
Les suites u
n
et v
n
sont alors strictement croissantes ( partir du rang 1 pour u
n
).
Au rang k du dernier reste non nul on a :
au
k
bv
k
= (1)
k
r
k
, r
k
= d = gcd(a, b)
et au rang suivant :
au
k+1
bv
k+1
= 0
On montre par rcurrence que
v
n
r
n+1
+v
n+1
r
n
= a
et une relation analogue pour u
n
, on en dduit alors que v
k+1
= a/d et u
k+1
= b/d
(ce sont les cofacteurs du PPCM de a et b), en particulier les coefcients de Bzout
vrient u
k
< b et v
k
< a.
On va aussi voir que u
n+2
/v
n+2
est la n-ime rduite du dveloppement en
fractions continues de a/b (donc les coefcients de Bzout se lisent sur lavant-
dernire rduite). On introduit la notation
[a
0
, a
1
, .., a
n
] = a
0
+
1
a
1
+
1
a
2
+
...
a
k
pour a
0
0, a
1
> 0, ..., a
n
> 0. On a alors :
a
b
= [q
2
, q
3
, .., q
k
]
16
En effet :
a
b
=
r
0
r
1
= q
2
+
r
2
r
1
= q
2
+
1
r
1
r
2
= ...
Dautre part, on montre par rcurrence sur n 1 que si x > 0
[q
2
, ..., q
n
, x] =
v
n
x +v
n1
u
n
x +u
n1
en effet au rang n = 1
[x] = x =
v
1
x +v
0
u
1
x +u
0
et pour linduction :
[q
2
, ..., q
n
, x] = [q
2
, ..., q
n1
, q
n
+
1
x
]
=
v
n1
(q
n
+ 1/x) +v
n2
u
n1
(q
n
+ 1/x) +u
n2
=
x(v
n1
q
n
+v
n2
) +v
n1
x(u
n1
q
n
+u
n2
) +u
n1
=
v
n
x +v
n1
u
n
x +u
n1
Donc au rang n 1 et pour x = q
n
, on obtient
[q
2
, ..., q
n
] =
v
n+1
u
n+1
1.4.3 La puissance rapide itrative
Pour calculer a
k
(mod n), on dcompose k en base 2
k =
J

j=0
k
j
2
j
, a
k
=
J

j=0
a
k
j
2
j
=

j/k
j
=0
a
2
j
On initialise une variable B 1, B vaudra a
k
(mod n) en n de calcul, on initialise
une variable k k. On calcule dans une boucle les carrs successifs de a (mod n)
que lon stocke dans une variable A (A vaudra donc successivement a (mod n), a
2
(mod n), a
4
(mod n), ...) et simultanment on teste si k
j
vaut 1 en prenant le
reste de la division par 2 de k, dans ce cas on multuplie B par A modulo n, on
divise ensuite k par 2 au sens du quotient euclidien.
rapide(a,k,n):={
local A,B;
A:=a; B:=1;
tantque k!=0 faire
si irem(k,2)==1 alors B:=irem(A
*
B,n); fsi;
k:=iquo(k,2);
A:=irem(A
*
A,n);
ftantque;
return B;
}
17
1.5 Pour en savoir plus.
Sur des aspects plus thoriques :
Knuth : TAOCP (The Art of Computer Programming), volumes 1 et suivants
Henri Cohen : A Course in Computational Algebraic Number Theory
Davenport, Siret, Tournier : Calcul formel : Systmes et algorithmes de ma-
nipulations algbriques
Sur des aspects plus pratiques, quelques rfrences en ligne, la plupart sont
accessibles gratuitement :
le code source de Giac disponible lURL :
http://www-fourier.ujf-grenoble.fr/~parisse/giac.html
le code source de GiNaC, cf. : http://www.ginac.de
le site http://www.hpcalc.org pour les calculatrices HP, on y trouve
tout, de la documentation, des mulateurs de calculatrices HP, des outils de
dveloppement pour Windows et Unix/Linux, ... Pour ce qui concerne cet
article, je conseille de lire
http://www.hpcalc.org/hp48/docs/programming/rplman.zip
le site http://www.ticalc.org, on y trouve le portage tigcc du com-
pilateur C de GNU, des mulateurs, etc. Des informations de cet article ont
leur source dans le guide du dveloppeur TI89/92
http://education.ti.com/
la librairie du systme MuPAD (archive dans le chier lib.tar des distri-
butions Unix, pour une installation par dfaut, ce chier se trouve dans le rr-
pertoire /usr/local/MuPAD/share/lib), cf. www.sciface.com
pour obtenir une licence dutilisation.
en Maple, il est possible de dcompiler une instruction Maple avec la com-
mande
eval(instruction);
aprs avoir tap
interface(verboseproc=2);
le source du plus ancien systme de calcul formel maxima (devenu logiciel
libre) pour les personnes familires du langage Lisp
http://sourceforge.net/projects/maxima
de mme pour le systme Axiom
le source de librairies plus spcialises (GMP, GP-PARI, Singular, NTL,
Zen, ALP, GAP, CoCoA, ...), rechercher ces moms sur google.
18
2 Exercices sur types, calcul exact et approch, algorithmes
de bases
Pour tlcharger et installer Xcas sur votre ordinateur, suivre les instructions
donnes sur
http://www-fourier.ujf-grenoble.fr/~parisse/giac_fr.html
Pour lancer xcas sous Unix, ouvrir un fentre terminal et taper la commande
xcas &
Lors de la premire excution, vous devrez choisir entre diffrents types de syntaxe
(compatible C, maple ou TI89). Vous pouvez changer ce choix tout moment en
utilisant le menu Conguration->mode (syntaxe).
Laide en ligne est accessible en tapant ?nom_de_commande. Dans Xcas,
vous pouvez aussi taper le dbut dun nom de commande puis la touche de tabula-
tion ( gauche du A sur un clavier francais), slectionner la commande dans la boite
de dialogues puis cliquer sur Details pour avoir une aide plus complte dans votre
navigateur. Pour plus de dtails sur linterface de Xcas, consultez le manuel (Aide-
>Interface). Si vous navez jamais utilis de logiciel de calcul formel, vous pouvez
commencer par lire le tutoriel (menu Aide->Debuter en calcul formel->tutoriel)
et faire certains des exercices proposs (des corrigs sous forme de sessions Xcas
sont dans Aide->Debuter en calcul formel->solutions)
Il peut tre interessant de tester ces exercices en parallle avec Xcas et des
calculatrices formelles....
1. Utiliser la commande type ou whattype ou quivalent pour dterminer
la reprsentation utilise par le logiciel pour reprsenter une fraction, un
nombre complexe, un ottant en prcision machine, un ottant avec 100 d-
cimales, la variable x, lexpression sin(x)+2, la fonction x->sin(x), une
liste, une squence, un vecteur, une matrice. Essayez daccder aux parties
de lobjet pour les objets composites (en utilisant op par exemple).
2. Comparer le type de lobjet t si on effectue la commande t[2]:=0; aprs
avoir purg t ou aprs avoir affect t:=[1,2,3]?
3. Comparer leffet de laffectation dans une liste et dans un vecteur ou une
matrice sur votre logiciel (en Xcas, on peut utiliser =< au lieu de := pour
stocker par rfrence).
4. Voici un programme crit en syntaxe compatible maple (menu Cfg->Mode-
>maple dans Xcas) qui calcule la base utilise pour reprsenter les ottants.
Base:=proc()
local A,B;
A:=1.0; B:=1.0;
while evalf(evalf(A+1.0)-A)-1.0=0.0 do A:=2
*
A; od;
while evalf(evalf(A+B)-A)-B<>0 do B:=B+1; od;
B;
end;
Testez-le et expliquez.
5. Dterminer le plus grand rel positif x de la forme 2
n
(n entier) tel que
(1.0 + x) 1.0 renvoie 0 sur PC avec la prcision par dfaut puis avec
Digits:=30.
19
6. Calculer la valeur de a := exp(

163) avec 30 chiffres signicatifs, puis


sa partie fractionnaire. Proposez une commande permettant de dcider si a
est un entier.
7. Dterminer la valeur et le signe de la fraction rationnelle
F(x, y) =
1335
4
y
6
+x
2
(11x
2
y
2
y
6
121y
4
2) +
11
2
y
8
+
x
2y
en x = 77617 et y = 33096 en faisant deux calculs, lun en mode appro-
ch et lautre en mode exact. Que pensez-vous de ces rsultats ? Combien
de chiffres signicatifs faut-il pour obtenir un rsultat raisonnable en mode
approch ?
8. quelle vitesse votre logiciel multiplie-t-il des grands entiers (en fonction
du nombre de chiffres) ? On pourra tester le temps de calcul du produit de
a(a + 1) o a = 10000!, a = 15000!, etc.
9. Comparer le temps de calcul de a
n
(mod m) par la fonction powmod et la
mthode prendre le reste modulo m aprs avoir calcul a
n
.
Programmez la mthode rapide et la mthode lente.
Que se passe-t-il si on essaie dappliquer lalgorithme de la puissance rapide
pour calculer (x + y + z + 1)
32
? Calculer le nombre de termes dans le
dveloppement de (x +y +z + 1)
n
et expliquez.
10. Dterminer un entier c tel que c = 1 (mod 3), c = 3 (mod 5), c = 5
(mod 7) et c = 2 (mod 1)1.
11. Programmation de la mthode de Horner
Il sagit dvaluer efcacement un polynme
P(X) = a
n
X
n
+... +a
0
en un point. On pose b
0
= P() et on crit :
P(X) b
0
= (X )Q(X)
o :
Q(X) = b
n
X
n1
+... +b
2
X +b
1
On calcule alors par ordre dcroissant b
n
, b
n1
, ..., b
0
.
(a) Donner b
n
en fonction de a
n
puis pour i n 1, b
i
en fonction de a
i
et b
i+1
. Indiquez le dtail des calculs pour P(X) = X
3
2X + 5 et
une valeur de non nulle.
(b) crire un fonction horn effectuant ce calcul : on donnera en arguments
le polynme sous forme de la liste de ces coefcients (dans lexemple
[1,0,-2,5]) et la valeur de et le programme renverra P(). (On
pourra aussi renvoyer les coefcients de Q).
(c) En utilisant cette fonction, crire une fonction qui calcule le dvelop-
pement de Taylor complet dun polynme en un point.
12. Algorithmes de base : crire des programmes implmentant
(a) le pgcd de 2 entiers
(b) lalgorithme de Bzout
(c) linverse modulaire en ne calculant que ce qui est ncessaire dans lal-
gorithme de Bzout
(d) les restes chinois
20
3 Le PGCD
Comme on la remarqu dans le premier article, lalgorithme dEuclide est in-
efcace pour calculer le pgcd de deux polynmes coefcients entiers. On va pr-
senter ici les algorithmes utiliss habituellement par les systmes de calcul formel :
sous-rsultant (PRS), modulaire (GCDMOD), p-adique (EEZGD) et heuristique
(GCDHEU). Le premier est une adaptation de lalgorithme dEuclide et sadapte
des coefcients assez gnriques. Les trois autres ont en commun dvaluer une ou
plusieurs variables du polynme (dans ce dernier cas il est ncessaire de bien dis-
tinguer le cas de polynmes plusieurs variables) et de reconstruire le pgcd par des
techniques distinctes, la plupart du temps ces algorithmes fonctionnent seulement
si les coefcients sont entiers.
Soit donc P et Q deux polynmes coefcients dans un corps. Le pgcd de
P et Q nest dni qu une constante prs. Mais lorsque les coefcients de P
et Q sont dans un anneau euclidien comme par exemple Z ou Z[i], on appelle
pgcd de P et Q un polynme D tel que P/D et Q/D soient encore coefcients
dans lanneau, et que D soit optimal, cest--dire que si un multiple D de D
vrie P/D et Q/D sont coefcients dans lanneau, alors est inversible.
La premire tape dun algorithme de calcul de pgcd consiste donc diviser par le
pgcd des coefcients entiers de chaque polynme.
Exemple : P = 4X
2
4 et Q = 6X
2
+ 12X + 6. Le polynme X + 1 est
un pgcd de P et Q puisquil est de degr maximal divisant P et Q mais le pgcd de
P et Q est 2(X + 1). Remarquons quavec notre dnition 2(X + 1) convient
aussi. Par convention on appelera pgcd le polynme ayant un coefcient dominant
positif.
Dnition : On appelle contenu c(P) dun polynme P le pgcd des coefcients
de P. On dnit alors la partie primitive de P : pp(P) = P/c(P). Si c(P) = 1, on
dit que P est primitif. On montre que :
D = pgcd(P, Q) = pgcd(c(P), c(Q))pgcd(pp(P), pp(Q))
3.1 Le sous-rsultant.
La premire ide qui vient lesprit pour amliorer lefcacit de lalgorithme
dEuclide consiste viter les fractions qui sont cres par les divisions eucli-
diennes. On utilise cet effet la pseudo-division : au lieu de prendre le reste R de
la division euclidienne du polynme P par Q, on prend le reste de la division de
Pq
+1
par Q, o q dsigne le coefcient dominant de Q et la diffrence entre le
degr de P et de Q.
Exercice : En utilisant votre systme de calcul formel prfr, calculez les
restes intermdiaires gnrs dans lalgorithme dEuclide lorsquon utilise la pseudo-
division par exemple pour les polynmes P(x) = (x+1)
7
(x1)
6
et sa drive.
Une solution avec giac/xcas :
// -
*
- mode:C++ -
*
- a,b 2 polynomes -> pgcd de a et b
pgcd(a,b):={
local P,p,Q,q,R,g,h,d;
// convertit a et b en polynomes listes et extrait la partie primitive
P:=symb2poly1(a);
21
p:=lgcd(P); // pgcd des elements de la liste
P:=P/p;
Q:=symb2poly1(b);
q:=lgcd(Q);
Q:=Q/q;
if (size(P)<size(Q)){ // echange P et Q
R:=P; P:=Q; Q:=R;
}
// calcul du contenu du pgcd
p:=gcd(p,q);
g:=1;
h:=1;
while (size(Q)!=1){
q:=Q[0]; // coefficient dominant
d:=size(P)-size(Q);
R:=rem(q^(d+1)
*
P,Q);
if (size(R)==0) return(p
*
poly12symb(Q/lgcd(Q),x));
P:=Q;
Q:=R;
// ligne suivante a decommenter pour prs
// Q:=R/(g
*
h^d);
print(Q);
// ligne suivante a decommenter pour prs
// g:=q; h:=q^d/h^(d-1);
}
return(p);
}
On saperoit que les coefcients croissent de manire exponentielle. La deuxime
ide qui vient naturellement est alors chaque tape de rendre le reste primitif,
donc de diviser R par le pgcd de ces coefcients. Cela donne un algorithme plus
efcace, mais encore assez peu efcace car chaque tape on doit calculer le pgcd
de tous les coefcients, on peut imaginer le temps que cela prendra en dimension
1 et fortiori en dimension suprieure. Lidal serait de connaitre lavance une
quantit sufsamment grande qui divise tous les coefcients du reste.
Cest ici quintervient lalgorithme du sous-rsultant : aprs chaque pseudo-
division euclidienne, on exhibe un coefcient "magique" qui divise les coefcients
du reste. Ce coefcient nest pas le pgcd mais il est sufsamment grand pour quon
vite la croissance exponentielle des coefcients.
Algorithme du sous-rsultant
Arguments : 2 polynmes P et Q primitifs. Valeur de retour : le pgcd de P et
Q.
Pour calculer le coefcient "magique" on utilise 2 variables auxiliaires g et h
initialises a 1.
Boucle effectuer tant que Q est non nul :
on note =degre(P)-degre(Q) et q le coefcient dominant de Q
on effectue la division euclidienne (sans fraction) de q
+1
P par Q, soit R le
reste
22
Si R est constant, on sort de lalgorithme en renvoyant 1 comme pgcd
on recopie Q dans P puis R/(gh

) dans Q
on recopie q dans g et h
1
q

dans h.
Si on sort normalement de la boucle, Q est nul, on renvoie donc la partie primitive
de P qui est le pgcd cherch.
Pour tester lalgorithme avec xcas, il suft de dcommenter les deux lignes
Q:=R/(g
*
hd); et g:=q; h:=qd/h(d-1); ci-dessus.
La preuve de lalgorithme est un peu longue et par ailleurs bien explique dans
le 2me tome de Knuth (The Art of Computer Programming, Semi-numerical Al-
gorithms), on y renvoie donc le lecteur intress. Lide gnrale (et lorigine du
nom de lalgorithme) est de considrer la matrice de Sylvester des polynmes de
dpart P et Q (celle dont le dterminant est appel rsultant de P et Q) et de
traduire les pseudo-divisions qui permettent de calculer les restes successifs du
sous-rsultant en opration de ligne sur ces matrices. On dmontre alors que les
coefcients de R diviss par gh

peuvent tre interprts comme des dterminants


de sous-matrices de la matrice de Sylvester aprs rduction et cest cela qui permet
de conclure quils sont entiers.
Par exemple, supposons que P = R
0
, Q = R
1
, R
2
... diminuent de 1 en de-
gr chaque division (cest le cas gnrique dans le droulement de lalgorithme
dEuclide). Dans ce cas, = 1, il sagit par exemple de montrer que le reste R
3
de Q = R
1
par R
2
est divisible par le carr du coefcient dominant de Q = R
1
.
Voyons comment on obtient les coefcients de R
3
partir de la matrice de Sylves-
ter de P et Q. Prenons la sous-matrice constitue des 2 premires lignes de P et
des 3 premires lignes de Q et rduisons-la sous forme chelonne sans introduire
de dnominateur.
_
_
_
_
_
_
p
n
p
n1
p
n2
p
n3
...
0 p
n
p
n1
p
n2
...
q
n1
q
n2
q
n3
q
n4
...
0 q
n1
q
n2
q
n3
...
0 0 q
n1
q
n2
...
_
_
_
_
_
_
On effectue L
1
q
n1
L
1
p
n
L
3
et L
2
q
n1
L
2
p
n
L
4
, ce qui correspond
llimination du terme en x du quotient de P par Q
_
_
_
_
_
_
0 q
n1
p
n1
p
n
q
n2
... ... ...
0 0 q
n1
p
n1
p
n
q
n2
... ...
q
n1
q
n2
q
n3
q
n4
...
0 q
n1
q
n2
q
n3
...
0 0 q
n1
q
n2
...
_
_
_
_
_
_
on effectue ensuite
L
1
q
n1
L
1
(q
n1
p
n1
p
n
q
n2
)L
4
L
2
q
n1
L
2
(q
n1
p
n1
p
n
q
n2
)L
5
23
ce qui correspond llimination du terme constant du quotient de P par Q, on
obtient
_
_
_
_
_
_
0 0 r
2,n2
... ...
0 0 0 r
2,n2
...
q
n1
q
n2
q
n3
q
n4
...
0 q
n1
q
n2
q
n3
...
0 0 q
n1
q
n2
...
_
_
_
_
_
_
si on enlve les lignes 3 et 4, et les colonnes 1 et 2, on obtient (aprs changes de
lignes) une sous-matrice de la matrice de Sylvester de Q et R
2
_
_
q
n1
q
n2
...
r
2,n2
... ...
0 r
2,n2
...
_
_
On recommence les oprations de rduction de cette sous-matrice correspondant
la division euclidienne de Q par R
2
, on obtient
_
_
0 0 r
3,n3
r
2,n2
... ...
0 r
2,n2
...
_
_
puis aprs suppression des colonnes 1 et 2 et des lignes 2 et 3 la ligne des coef-
cients de R
3
.
Supposons quon se limite ds le dbut de la rduction ne garder que les
colonnes 1 4 et une 5-ime colonne parmi les suivantes, on obtient la n de
la rduction une matrice 1,1 qui contient un des coefcients de R
3
(selon le choix
de la 5-ime colonne). Donc ce coefcient est gal au dterminant de la matrice
1,1 qui est gal, au signe prs, au dterminant de la matrice 3,3 dont il est issu
par notre rduction (en effet, dans la 2ime partie de la rduction, on a multipli
deux fois L
1
par r
2,n2
, mais on doit ensuite diviser le dterminant par r
2
2,n2
pour liminer les colonnes 1 et 2). Quant au dterminant de la matrice 3,3, il se
dduit du dterminant de la matrice 5,5 par multiplication par q
4
n1
(2 lignes ont
t multiplies 2 fois par q
n1
) et division par q
2
n1
(limination des colonnes 1 et
2). Au nal, tout coefcient de R
3
est gal au produit dun dterminant 5,5 extrait
de la matrice de Sylvester de P et Q par q
2
n1
, qui est justement le coefcient
magique par lequel on divise le reste de R
1
= Q par R
2
lors de lalgorithme du
sous-rsultant.
3.2 Le pgcd en une variable
.
3.2.1 Le pgcd heuristique.
On suppose ici que les coefcients sont entiers ou entiers de Gauss. On peut
donc se ramener au cas o les polynmes sont primitifs.
Lide consiste valuer P et Qen un entier z et extraire des informations du
pgcd g des entiers P(z) et Q(z). Il faut donc un moyen de remonter de lentier g
un polynme G tel que G(z) = g. La mthode consiste crire en base z lentier
g, avec une particularit dans les divisions euclidiennes successives on utilise le
24
reste symtrique (compris entre z/2 et z/2). Cette criture donne les coefcients
dun polynme G unique. On extrait ensuite la partie primitive de ce polynme G.
Lorsque z est assez grand par rapport aux coefcients des polynmes P et Q, si
pp(G) divise P et Q, on va montrer que le pgcd de P et de Q est D = pp(G).
On remarque tout dabord que d := D(z) divise g. En effet D divise P et Q
donc pour tout entier (ou entier de Gauss) z, D(z) divise P(z) et Q(z). Il existe
donc une constante a telle que
g = ad
On a aussi pp(G) divise D. Il existe donc un polynme C tel que :
D = pp(G)C
Nous devons prouver que C est un polynme constant. On suppose dans la suite
que ce nest pas le cas. Evaluons lgalit prcdente au point z, on obtient
d =
g
c(G)
C(z)
Finalement
1 =
a
c(G)
C(z)
La procdure de construction de G nous donne une majoration de ces coefcients
par [z[/2, donc de c(G) par [z[/2, donc C(z) divise un entier de module plus petit
que [z[/2, donc
[C(z)[
[z[
2
On considre maintenant les racines complexes z
1
, . . . ., z
n
du polynme C (il en
existe au moins une puisquon a suppos C non constant). On a :
C(X) = c
n
(X z
1
) . . . .(X z
n
)
Donc, comme c
n
est un entier (ou entier de Gauss) non nul, sa norme est suprieure
ou gale 1 et :
[C(z)[
n

j=1
([z[ [z
j
[)
Il nous reste majorer les racines de C pour minorer [C(z)[. Comme C divise D
il divise P et Q donc les racines de C sont des racines communes P et Q. On va
appliquer le :
Lemme 1 Soit x une racine complexe dun polynme P = a
n
X
n
+. . . . +a
0
.
Alors
[x[ <
[P[
[a
n
[
+ 1, [P[ = max
0in
([a
i
[)
Application du lemme C(X) : on a 1/[c
n
[ 1 donc si on a choisi z tel que
[z[ 2 min([P[, [Q[) + 2, alors pour tout j, [z
j
[ < [z[/2 donc
[C(z)[ >
_
[z[
2
_
n
qui contredit notre majoration de [C(z)[.
25
Thorme 1 Soit P et Q deux polynmes coefcients entiers. On choisit un en-
tier z tel que [z[ 2 min([P[, [Q[) + 2, si la partie primitive du polynme G
reconstruit partir du pgcd de P(z)etQ(z) par criture en base z (avec comme
reste euclidien le reste symtrique) divise P et Q alors cest le pgcd de P et Q.
Pour nir la dmonstration du thorme, il nous faut encore montrer le lemme.
On a
a
n
x
n
= a
n1
x
n1
+. . . . +a
0
Donc
[a
n
[[x[
n
[P[(1 +. . . . +[x[
n1
) = [P[
[x[
n
1
[x[ 1
Ici on peut supposer que [x[ 1, sinon le lemme est dmontr, donc [x[ 1 est
positif et
[a
n
[([x[ 1) [P[
[x[
n
1
[x[
n
[x[ 1 <
[P[
[a
n
[
Remarques
Le thorme publi par Char, Geddes et Gonnet porte sur des coefcients
entiers et cest comme cela quil est utilis par les systmes de calcul for-
mel (en commenant historiquement par Maple). Peu de systmes lutilisent
pour les polynmes coefcients entiers de Gauss. On peut dailleurs g-
nraliser le thorme dautres types de coefcients, condition davoir un
anneau euclidien plong dans C avec une minoration sur la valeur absolue
des lements non nuls de lanneau.
Nous navons jusqu prsent aucune certitude quil existe des entiers z tels
que la partie primitive de G divise P et Q. Nous allons montrer en utili-
sant lidentit de Bzout que pour z assez grand cest toujours le cas. Plus
prcisment, on sait quil existe deux polynmes U et V tels que
PU +QV = D
Attention toutefois, U et V sont coefcients rationnels, pour avoir des co-
efcients entiers, on doit multiplier par une constante entire , donc en
valuant en z on obtient lexistence dune galit coefcients entiers
P(z)u +Q(z)v = D(z)
Donc le pgcd g de P(z) et Q(z) divise D(z) = d. Comme g est un
multiple de d, on en dduit que g = d, o est un diviseur de . Si on a
choisi z tel que
[z[ > 2[D[[[
alors [z[ > 2[D[[[ donc lcriture symtrique en base z de g est G = D.
Donc la partie primitive de G est D, le pgcd de P et Q.
Exemple 1 Si P
0
= 6(X
2
1) et Q
0
= 4(X
3
1).
Le contenu de P
0
est 6, celui de Q
0
est 4.
On a donc pgcd des contenus = 2, P = X
2
1, Q = X
3
1. La valeur initiale de
z est donc 21+2 = 4. On trouve P(4) = 15, Q(4) = 63. Le pgcd entier de 15 et
63 est 3 que nous crivons symtriquement en base 4 sous la forme 3 = 1 4 1,
donc G = X 1, sa partie primitive est X 1. On teste si X 1 divise P et Q,
cest le cas, donc cest le pgcd de P et Q et le pgcd de P
0
et Q
0
est 2(X 1).
26
Algorithme gcdheu
En arguments deux polynmes P
0
et Q
0
coefcients entiers ou entiers de Gauss.
Retourne le pgcd de P
0
et Q
0
ou faux en cas dchec.
1. Calculer le contenu de P
0
et Q
0
. Vrier que les coefcients sont entiers de
Gauss sinon retourner faux.
2. Extraire la partie primitive P de P
0
et Q de Q
0
, calculer le pgcd c des conte-
nus de P
0
et Q
0
3. Dterminer z = 2 min([P[, [Q[) + 2.
4. Dbut de boucle : initialisation du nombre dessais 1, test darrt sur un
nombre maximal dessais, avec changement de z entre deux itrations (par
exemple z 2z).
5. Calculer le pgcd g de P(z) et Q(z) puis son criture symtrique en base z
dont on extrait la partie primitive G.
6. Si GnedivisepasP passer litration suivante. De mme pour Q.
7. Retourner cG
8. Fin de la boucle
9. Retourner faux.
On remarque au passage quon a calcul le quotient de P par G et le quotient de Q
par Glorsque la procdure russit. On peut donc passer la procdure gcdheu deux
paramtres supplmentaires par rfrence, les deux polynmes que lon affectera
en cas de succs, ce qui optimise la simplication dune fraction de 2 polynmes.
3.2.2 Le pgcd modulaire
On part du fait que si D est le pgcd de P et Q dans Z (ou Z[i]) alors aprs
rduction modulo un nombre premier n qui ne divise pas les coefcients dominants
de P et Q, D divise le pgcd G de P et Q dans Z/nZ (par convention, le pgcd dans
Z/nZ est normalis pour que son coefcient dominant vaille 1). Comme on calcule
G dans Z/nZ, les coefcients des restes intermdiaires de lalgorithme dEuclide
sont borns, on vite ainsi la croissance exponentielle des coefcients. Il faudra
ensuite reconstruire D partir de G.
On remarque dabord que si on trouve G = 1, alors P et Q sont premiers entre
eux. En gnral, on peut seulement dire que le degr de G est suprieur ou gal
au degr de D. En fait, le degr de G est gal au degr de D lorsque les restes de
lalgorithme dEuclide (calcul en effectuant des pseudo-divisions, cf. lexercice
1) ont leur coefcient dominant non divisible par n. Donc plus n est grand, plus la
probabilit est grande de trouver G du bon degr.
Dans la suite, nous allons dterminer une borne b priori majorant les coef-
cients de D. On utilisera ensuite la mme mthode que dans lalgorithme modulaire
de recherche de racines videntes : on multiplie G dans Z/nZ par le pgcd dans Z
des coefcients dominants p et q de P et Q. Soit

D = pgcd(p, q)G le rsultat
crit en reprsentation symtrique. Si n bpgcd(p, q) et si G est du bon degr, on
montre de la mme manire que D =

D. Comme on ne connait pas le degr de D,
on est oblig de tester si

D divise P et Q. Si cest le cas, alors

D divise D donc
27

D = D puisque degre(

D) = degre(G) degre(D). Sinon, n est un nombre pre-
mier malchanceux pour ce calcul de pgcd (degre(G) degre(D)), il faut essayer
un autre premier.
Remarque : On serait tent de dire que les coefcients de D sont borns par
le plus grand coefcient de P. Cest malheureusement faux, par exemple (X+1)
2
dont le plus grand coefcient est 2 divise (X + 1)
2
(X 1) dont le plus grand
coefcient (en valeur absolue) est 1.
Soit P =

p
i
X
i
un polynme coefcients entiers. On utilise la norme
euclidienne
[P[
2
=

[p
i
[
2
(1)
On tablit dabord une majoration du produit des racines de norme suprieure 1
de P laide de [P[. Ensuite si D est un diviseur de P, le coefcient dominant d de
D divise le coefcient dominant p de P et les racines de D sont aussi des racines
de P. On pourra donc dterminer une majoration des polynmes symtriques des
racines de D et donc des coefcients de D.
Lemme 2 Soit A =

a
j=0
a
j
X
j
un polynme et C. Alors
[(X )A[ = [(X 1)A[
Pour prouver le lemme 2, on dveloppe les produits de polynmes. On pose
a
1
= a
a+1
= 0 et on note 1 la partie relle.
[(X )A[
2
=
a+1

j=0
[a
j1
a
j
[
2
=
a+1

j=0
[a
j1
[
2
+[[
2
[a
j
[
2
21(a
j1
a
j
)
[(X 1)A[
2
=
a+1

j=0
[a
j1
a
j
[
2
=
a+1

j=0
[[
2
[a
j1
[
2
+[a
j
[
2
21(a
j1
a
j
)
Les deux donnent bien le mme rsultat.
Soit P(X) = p

(X
j
) la factorisation de P sur C. On introduit le poly-
nme

P = p

j/|
j
|1
(X
j
)

j/|
j
|<1
(
j
X 1)
qui daprs le lemme a la mme norme que P. La norme de P majore donc le
coefcient constant de

P do :

j/|
j
|1
[
j
[
[P[
[p[
(2)
On remarque que (2) reste vraie si on considre les racines
j
de norme plus grande
que 1 dun diviseur D de P puisque le produit porte alors sur un sous-ensemble.
On crit maintenant lexpression des coefcients d
j
de D laide des racines
j
de
D :
[d
mj
[ = [d[

choixdejracinesparmilesmracinesdeD

k
racineschoisies

28
Pour majorer [d
mj
[, on commence par majorer [
k
[ par
k
= max(1, [
k
[). On
est donc ramen majorer

j,m
() =

choixdejparmimvaleurs
k

k
choix

k
avec pour hypothse une majoration de M =

m
k=1

k
donne par la relation
(2). Pour cela, on cherche le maximum de
j,m
() sous les contraintes M x et

k
1.
On va montrer que le maximum ne peut tre atteint que si lun des
k
= M
(et tous les autres
k
= 1). Sinon, quitte rordonner supposons que les
k
sont
classs par ordre croissant. On a donc
m1
,= 1, on pose

k
=
k
pour k m2,

m1
= 1 et

m
=
m1

m
. Comparons
j,m
() et
j,nm
(

). Si le choix de j
parmi m comporte k = m 1 et k = m, le produit est inchang. Sinon on a la
somme de deux produits, lun contenant k = m1 et lautre k = m. On compare
donc B(
m1
+
m
) et B(1+
m1

m
) avec B =

k
resteduchoix

k
. Comme
1 +
m1

m

m1
+
m
puisque la diffrence est le produit (1
m
)(1
m1
) de deux nombres positifs,
on arrive la contradiction souhaite.
Ensuite on dcompose les choix de
m,j
en ceux contenant M et des 1 et ceux
ne contenant que des 1, do la majoration

j,m
()
_
m1
j 1
_
M +
_
m1
j
_
et nalement
[d
mj
[ [d[
__
m1
j 1
_
[P[
[p[
+
_
m1
j
__
(3)
On peut en dduire une majoration indpendante de j sur les coefcients de D,
en majorant [d[ par [p[ (puisque d divise p) et les coefcients binomiaux par 2
m1
(obtenue en dveloppant (1 + 1)
m1
). Do le
Thorme 2 (Landau-Mignotte) Soit P un polynme coefcients entiers (ou en-
tiers de Gauss) et D un diviseur de P de degr m. Si [P[ dsigne la norme eucli-
dienne du vecteur des coefcients de P et p le coefcient dominant de P alors les
coefcients d
j
de D satisfont lingalit
[d
j
[ 2
m1
([P[ +[p[) (4)
Avec cette estimation, on en dduit que si n est un premier plus grand que
min
_
2
degre(P)1
([P[ +[p[), 2
degre(Q)1
([Q[ +[q[)
_
, (5)
alors le pgcd trouv dans Z/nZ va se reconstruire en un pgcd dans Z si son degr
est le bon.
Malheureusement la borne prcdente est souvent trs grande par rapport aux
coefcients du pgcd et calculer dans Z/nZ savrera encore inefcace (surtout si
29
le pgcd est 1). Cela reste vrai mme si on optimise un peu la majoration (5) en
repartant de (3).
Lide est donc de travailler modulo plusieurs nombres premiers plus petits et
reconstruire le pgcd des 2 polynmes coefcients entiers partir des pgcd des
polynmes dans Z/nZ et du thorme des restes chinois. En pratique on prend des
nombres premiers infrieurs la racine carre du plus grand entier hardware de la
machine (donc plus petits que 2
16
sur une machine 32 bits) ce qui permet dutiliser
larithmtique hardware du processeur sans risque de dbordement.
Algorithme du PGCD modulaire en 1 variable :
En argument : 2 polynmes primitifs P et Q coefcients entiers. Le rsultat
renvoy sera le polynme pgcd.
Variable auxiliaire : un entier N initialis 1 qui reprsente le produit des
nombres premiers utiliss jusquici et un polynme H initialis 0 qui reprsente
le pgcd dans Z/NZ.
Boucle innie :
1. Chercher un nouveau nombre premier n qui ne divise pas les coefcients
dominants p et q de P et Q
2. Calculer le pgcd G de P et Q dans Z/nZ. Si G=1, renvoyer 1.
3. Si H = 0 ou si le degr de G est plus petit que le degr de H, recopier G
dans H et n dans N, passer la 6me tape
4. Si le degr de G est plus grand que celui de H passer litration suivante
5. Si le degr de G est gal au degr de H, en utilisant le thorme des restes
chinois, calculer un polynme

H tel que

H = H modulo N et

H = G
modulo n. Recopier

H dans H et nN dans N.
6. Ecrire pgcd(p, q)H en reprsentation symtrique. Soit

H le rsultat rendu
primitif. Tester si

H divise P et Q. Si cest le cas, renvoyer

H, sinon passer
litration suivante.
Finalement on na pas utilis b, la borne de Landau-Mignotte. On peut penser que
ltape 6 ne devrait tre effectue que lorsque N est plus grand que pgcd(p, q)b.
En pratique, on effectue le test de ltape 6 plus tt parce que les coefcients du
pgcd sont rarement aussi grand que b. Mais pour viter de faire le test trop tt,
on introduit une variable auxiliaire H

qui contient la valeur de H de litration


prcdente et on ne fait le test que si H

= H (ou bien sr si on a dpass la


borne).
Remarque :
Lalgorithme ci-dessus fonctionne galement pour des polynmes plusieurs
variables.
Exemple 1 :
Calcul du pgcd de (X + 1)
3
(X 1)
4
et (X
4
1). Prenons pour commencer
n = 2. On trouve comme pgcd X
4
+1 (en effet 1 = 1 donc on cherchait le pgcd
de (X +1)
7
et de X
4
+1 = (X +1)
4
). On teste si X
4
+1 divise P et Q, ce nest
pas le cas donc on passe au nombre premier suivant. Pour n = 3, on trouve X
2
1.
Donc n = 2 ntait pas un bon nombre premier pour ce calcul de pgcd puisquon
a trouv un pgcd de degr plus petit. On teste si X
2
1 divise P et Q, cest le cas
ici donc on peut arrter, le pgcd cherch est X
2
1.
Exemple 2 :
30
Calcul du pgcd de (X + 1)
3
(X 1)
4
et (X
4
1)
3
. Pour n = 2, on trouve
un polynme de degr 7. Pour n = 3, on trouve X
6
1 donc n = 2 tait une
mauvaise rduction. Comme X
6
1 ne divise pas P et Q, on passe n = 5. On
trouve X
6
+2X
4
2X
2
1. On applique le thorme des restes chinois qui va nous
donner un polynme dans Z/15Z. On cherche donc un entier congru 2 modulo
5 et 0 modulo 3, -3 est la solution (crite en reprsentation symtrique), donc le
polynme modulo 15 est X
6
3X
4
+3X
2
1 = (X
2
1)
3
. Ce polynme divise
P et Q, cest donc le pgcd de P et de Q.
3.3 Le pgcd plusieurs variables.
3.3.1 Le pgcd heuristique.
On suppose comme dans le cas une variable que les polynmes sont primitifs,
donc quon a simpli les polynmes par le pgcd entier de leurs coefcients entiers.
Le principe est identique celui du PGCD 1 variable, on value les deux
polynmes P et Q de k variables X
1
, . . . ., X
k
en un X
k
= z et on calcule le
pgcd g des 2 polynmes P(z) et Q(z) de k 1 variables. On remonte ensuite
un polynme G par criture symtrique en base z de g et on teste si pp(G) divise
P et Q. Il sagit nouveau de montrer que si z est assez grand, alors pp(G) est
le pgcd cherch. On sait que d = D(z) divise g. Il existe donc un polynme a de
k 1 variables tel que g = ad. On sait aussi que pp(G) divise D, donc il existe un
polynme C de k variables tel que D = C pp(G). On value en z et on obtient
d = C(z)g/c(G), o c(G) est un entier, donc
c(G) = a C(z)
Comme c(G) est un entier, a et C(z) sont des polynmes constants. Comme pr-
cdemment, on a aussi [C(z)[ [z[/2 puisque [c(G)[ [z[/2.
Premier cas : si C ne dpend que de la variable X
k
. On continue le raison-
nement comme dans le cas unidimensionnel.
Deuxime cas : si C dpend dune autre variable, par exemple X
1
. On re-
garde le coefcient de plus haut degre de C par rapport a X
1
. Ce coef-
cient divise le coefcient de plus haut degre de P et de Q par rapport a X
1
.
Comme C(z) est constant, on en deduit que le coefcient de plus haut degre
de P et Q par rapport a X
1
est divisible par X
k
z donc le coefcient de
plus bas degre en X
k
de ces coefcients de plus haut degre est divisible par
z, ce qui contredit la majoration de ce coefcient.
En pratique, cet algorithme ncessite le calcul rcursif de pgcd sans garantie de
russite. On lvite donc sil y a beaucoup de variables (la limite est par exemple
de 5 pour MuPAD).
3.3.2 Le pgcd modulaire multivariables.
Ici, on travaille modulo X
n
, o X
1
, . . . ., X
n
dsignent les variables des
polynmes. On considre donc deux polynmes P et Q comme polynmes de la
variables X
n
avec des coefcients dans Z[X
1
, . . . ., X
n1
]. On value en X
n
= ,
on obtient deux polynmes en n 1 variables dont on calcule le pgcd (rcursive-
ment).
31
Il sagit de reconstruire le pgcd par interpolation. Tout dabord, on a une borne
vidente sur le degr du pgcd par rapport la variable X
n
, cest le minimum
des degrs par rapport X
n
des polynmes P et Q. A premire vue, il suft donc
dvaluer les polynmes en + 1 points .
Il faut toutefois prendre garde aux mauvaises valuations et la normalisation
des pgcd avant dinterpoler. En effet, si D(X
1
, . . . ., X
n
) dsigne le pgcd de P et Q
et G(X
1
, . . . ., X
n1
) le pgcd de P(X
1
, . . . ., X
n1
, ) et de Q(X
1
, . . . ., X
n1
, ),
on peut seulement dire D(X
1
, . . . ., X
n1
, ) divise G. Plusieurs cas sont donc
possibles lorsquon value en un nouveau point :
lun des degrs de G est plus petit que le degr du polynme D

reconstruit
par interpolation jusque l. Dans ce cas, toutes les valuations qui ont conduit
reconstruire D

taient mauvaises. Il faut recommencer linterpolation


zro ou partir de G (si tous les degrs de G sont infrieurs ou gaux aux
degrs du D

reconstruit).
lun des degrs de G est plus grand que le degr du D

reconstruit jusque l.
Il faut alors ignorer .
Tous les degrs de G sont gaux aux degrs du D

reconstruit jusque l.
Dans ce cas, G est un multiple entier du polynme D

reconstruit jusque
l et valu en X
n
= . Si on suppose quon a pu sarranger pour que ce
multiple soit 1, on ajoute le point aux points dvaluation prcdents
j
en posant :
D

= D

+ (GD

j
(X
n

j
)

j
(
j
)
On voit que les mauvaises valuations se dtectent simplement par les degrs. Pour
la normalisation, on utilise une petite astuce : au lieu de reconstruire lepgcdD, on
va reconstruire un multiple du pgcd D (ce multiple appartiendra Z[X
n
]). On voit
maintenant P et Q comme des polynmes en n 1 variables X
1
, . . . ., X
n1
co-
efcients dans Z[X
n
]. Alors lcoeff(D), le coefcient dominant de D (relativement
lordre lexicographique sur les variables X
1
, ..., X
n1
), est un polynme en X
n
qui divise le coefcient dominant de P et de Q donc divise le coefcient domi-
nant du pgcd des coefcients dominants de P et de Q. On va donc reconstruire le
polynme :
D

= D
(X
n
)
lcoeff(D)(X
n
)
, (X
n
) = pgcd(lcoeff(P)(X
n
), lcoeff(Q)(X
n
))
cest--dire D multipli par un polynme qui ne dpend que de X
n
.
Revenons G en un point de bonne valuation. Cest un multiple entier de
D(X
1
, . . . ., X
n1
, ) :
G = D(X
1
, . . . ., X
n1
, )
Donc, comme polynmes de X
1
, ..., X
n1
coefcients dans Z[X
n
] ou dans Z,
lcoeff(G) = lcoeff(D)
|X
n
=
. Comme lcoeff(D) divise (X
n
), il en est de mme
en X
n
= donc lcoeff(G) divise (). On en dduit que ()G qui est divi-
sible par () est divisible par lcoeff(G). On va donc considrer le polynme
()G/lcoeff(G) : ses coefcients sont entiers et son coefcient dominant est
() = lcoeff(D

(X
1
, . . . ., X
n1
, ))
32
donc
()G/lcoeff(G) = D

(X
1
, . . . ., X
n1
, )
Algorithme du pgcd modulaire plusieurs variables (interpolation dense) :
Arguments : 2 polynmes primitifs P et Q de n variables X
1
, . . . ., X
n
coef-
cients entiers. Renvoie le pgcd de P et Q.
1. Si n = 1, renvoyer le pgcd de P et Q en une variable.
2. Test rapide de pgcd trivial par rapport X
n
. On cherche des n 1-uplets
tels que P(, X
n
) et Q(, X
n
) soient de mme degr que P et Qpar rapport
la variable X
n
. On calcule le pgcd G de ces 2 polynmes en une variable.
Si le pgcd est constant, alors on retourne le pgcd des coefcients de P et Q.
3. On divise P et Qpar leur contenu respectifs vu comme polynmes en X
1
, . . . ., X
n1
coefcients dans Z[X
n
], on note C(X
n
) le pgcd des contenus. On calcule
aussi le pgcd (X
n
) des coefcients dominants de P et de Q.
4. On initialise D

le pgcd reconstruit 0, I(X


n
) le polynme dinterpolation
1, = (
1
, ...,
n1
) la liste des degrs partiels du pgcd par rapport
X
1
, . . . ., X
n1
au minimum des degrs partiels de P et Q par rapport
X
1
, . . . ., X
n1
, e le nombre dvaluation 0 et E lensemble des points
dinterpolation la liste vide.
5. Boucle innie :
Faire =entier alatoire nappartenant pas E jusqu ce que
degre(P(X
1
, . . . ., X
n1
, ))=degre
X
n
(P(X
1
, . . . ., X
n
)
degre(Q(X
1
, . . . ., X
n1
, )) = degre
X
n
(Q(X
1
, . . . ., X
n
))
Calculer le pgcd G(X
1
, . . . ., X
n1
) en n1 variables de P(X
1
, . . . ., X
n1
, )
et Q(X
1
, . . . ., X
n1
, ).
Si degre(G)
i
<
i
pour un indice au moins. Si degre(G) , on pose
= degre(G), D

= G
()
lcoeff(G)
, I = X
n
, e = 1 et E = [], sinon
on pose = min(, degre(G)), D

= 0, I = 1, e = 0, E = []. On passe
litration suivante.
Si degre(G) > , on passe litration suivante.
Si degre(G) = , on interpole :
G := G
()
lcoeff(G)
D

:= D

+
I(X
n
)

j
E
(
j
)
(GD

(X
1
, . . . ., X
n1
, ))
I := I (X
n
)
e := e + 1 et ajouter E
Si e est strictement plus grand que le minimum des degrs partiels de P
et Q par rapport X
n
, on pose

D la partie primitive de D

(vu comme
polynme coefcients dans Z[X
n
]), on teste si P et Q sont divisibles
par

D, si cest le cas, on renvoie D = C(X
n
)

D
On observe que dans cet algorithme, on fait le test de divisibilite de

D par P et
Q. En effet, mme aprs avoir valu en sufsamment de points, rien nindique
que tous ces points sont des points de bonne valuation. En pratique cela reste
extrmement improbable. En pratique, on teste la divisibilit plus tt, ds que D

nest pas modi par lajout dun nouveau point la liste des
j
.
33
Il existe une variation de cet algorithme, appel SPMOD (sparse modular), qui
suppose que seuls les coefcients non nuls du pgcd en n 1 variables sont encore
non nuls en n variables (ce qui a de fortes chances dtre le cas). Ltape dinter-
polation est alors remplace par la rsolution dun sous-systme dun systme de
Vandermonde. Cette variation est intressante si le nombre de coefcients non nuls
en n 1 variables est petit devant le degr. Si elle choue, on revient linterpola-
tion dense.
Notons enn quon peut appliquer cette mthode lorsque les coefcients de
P et Q sont dans Z/nZ mais il faut alors vrier quon dispose de sufsamment
de points dinterpolation. Ce qui en combinant avec lalgorithme modulaire une
variable donne un algorithme doublement modulaire pour calculer le pgcd de 2 po-
lynmes coefcients entiers. Cest cette mthode quutilise par exemple MuPAD
(en essayant dabord SPMOD puis linterpolation dense).
Exemple :
Dans cet exemple, on donne F et G sous forme factorise, le but tant de faire
comprendre lalgorithme. En utilisation normale, on nexcuterait cet algorithme
que si F et G taient dvelopps.
P = ((x+1)y +x
2
+1)(y
2
+xy +1), Q = ((x+1)y +x
2
+1)(y
2
xy 1).
Prenons x comme variable X
1
et y comme variable X
2
. Les coefcients domi-
nants de P et Q sont respectivement y et y donc = y.
En y = 0, P(x, 0) = x
2
+ 1 nest pas du bon degr.
En y = 1, P(x, 1) = (x+x
2
+2)(x+2) et Q(x, 1) = (x+x
2
+2)(x) sont
du bon degr. Leur pgcd est G = x
2
+ x + 2, (1) = 1, donc D

= x
2
+ x + 1.
On teste la divisibilit de P par D

, le teste choue.
En y = 2, P(x, 2) = (x
2
+2x+3)(2x+5) et Q(x, 2) = (x
2
+2x+3)(2x+3)
donc G = x
2
+ 2x + 3, (2) = 2. On interpole :
D

= x
2
+x+2+
y 1
2 1
(2(x
2
+2x+3)(x
2
+x+2)) = y(x
2
+3x+4)(2x+2)
On teste la divisibilit de P par D

, le test choue.
En y = 3, P(x, 3) = (x
2
+3x+4)(3x+10) et Q(x, 3) = (x
2
+3x+4)(3x+
8) donc G = x
2
+ 3x + 4, (3) = 3. On interpole :
D

= y(x
2
+ 3x + 4) (2x + 2) +
(y 2)(y 1)
(3 2)(3 1)
_
3(x
2
+ 3x + 4) (3(x
2
+ 3x + 4) (2x + 2))
_
donc
D

= y(x
2
+3x+4)(2x+2)+
(y 2)(y 1)
2
(2x2) = x
2
y+xy
2
+y
2
+y
On divise D

par son contenu et on trouve x


2
+xy +y + 1 qui est bien le pgcd de
P et Q.
3.3.3 EZGCD.
Il sagit dune mthode p-adique. On value toutes les variables sauf une,
on calcule le pgcd en une variable et on remonte au pgcd variable par variable
34
(EEZGCD) ou toutes les variables simultanment (EZGCD) par un lemme de Hen-
sel. Il semble quil est plus efcace de remonter les variables sparment.
Soit donc F et Gdeux polynmes primitifs dpendant des variables X
1
, . . . , X
n
de pgcd D, on xe une des variables quon appelera X
1
dans la suite. Soient
lcoeff(F) et lcoeff(G) les coefcients dominants de F et G par rapport X
1
. On
value F et G en un n 1 uplet b tel que le degr de F et G par rapport X
1
soit
conserv aprs evaluation en b. On suppose que D
b
(X
1
) = pgcd(F(b), G(b)) a le
mme degr que D(b). On a donc lgalit :
(F lcoeff(F))(b) =
_
D
b
lcoeff(F(b))
lcoeff(D
b
)
_

_
F(b)
D
b
lcoeff(F)(b)
lcoeff(
F(b)
D
b
)
_
et de mme en remplaant F par G.
Pour pouvoir lifter cette galit (cest--dire gnraliser plusieurs variables),
il faut que D
b
et
F(b)
D
b
soient premiers entre eux. Sinon, on peut essayer de lifter
lgalit analogue avec G. En gnral, on montre quil existe un entier j tel que D
b
et
F(b)+jG(b)
D
b
soient premiers entre eux. En effet, sinon au moins un des facteurs
irrductibles de D
b
va diviser
F(b)+jG(b)
D
b
pour deux valeurs distinctes de j et va
donc diviser la fois
F(b)
D
b
et
G(b)
D
b
en contradiction avec la dnition de D
b
=
pgcd(F(b), G(b)). On lifte alors lgalit obtenue en remplaant F par (F + kG)
ci-dessus. Dans la suite, on suppose quon peut prendre j = 0 pour allger les
notations.
On va aussi supposer que b = 0. Sinon, on fait un changement dorigine sur les
polynmes F et G pour que b = 0 convienne, on calcule le pgcd et on lui applique
la translation dorigine oppose.
On adopte ensuite la notation suivante : si k est un entier, on dit quun poly-
nme P est un O(k) si la valuation de P vu comme polynme en X
2
, . . . ., X
n

coefcients dans Z[X
1
] est suprieure ou gale k, ou de manire quivalente si
P(X
1
, hX
2
, . . . ., hX
n
) = O
h0
(h
k
)
Lgalit lifter se rcrit donc :
Flcoeff(F) = P
0
Q
0
+O(1)
o P
0
=D
b
lcoeff(F(b))
lcoeff(D
b
)
et Q
0
=
F(b)
D
b
lcoeff(F)(b)
lcoeff(
F(b)
D
b
)
sont premiers entre eux et de
degr 0 par rapport aux variables X
2
, . . . ., X
n
. Cherchons P
1
= O(1) et Q
1
=
O(1) de degr 1 par rapport aux variables X
2
, . . . ., X
n
tels que
Flcoeff(F) = (P
0
+P
1
)(Q
0
+Q
1
) +O(2)
Il faut donc rsoudre
Flcoeff(F) P
0
Q
0
= P
0
Q
1
+Q
0
P
1
+O(2)
On peut alors appliquer lidentit de Bzout qui permet de dterminer des po-
lynmes P
1
et Q
1
satisfaisant lgalit ci-dessus (avec comme reste O(2) nul)
puisque P
0
et Q
0
sont premiers entre eux. De plus, on choisit P
1
et Q
1
tels que
degre
X
1
P
1
degre
X
1
(F)degre(Q
0
) = degre(P
0
) et degre
X
1
(Q
1
) degre(Q
0
)
35
et lcoeff
X
1
(P
0
+ P
1
) + O(2) = lcoeff
X
1
(Q
0
+ Q
1
) + O(2) = lcoeff
X
1
(F). On
tronque ensuite P
1
et Q
1
en ne conservant que les termes de degr 1 par rapport
X
2
, . . . ., X
n
.
On trouve de la mme manire par rcurrence P
k
et Q
k
homognes de degr k
par rapport X
2
, . . . ., X
k
, de degr par rapport X
1
respectivement infrieur aux
degrs de Q
0
et de P
0
et tels que
Flcoeff(F) = (P
0
+. . . . +P
k
)(Q
0
+. . . . +Q
k
) +O(k + 1) (6)
et lcoeff(F) = lcoeff
X
1
(P
0
+ . . . . + P
k
) + O(k + 1) = lcoeff
X
1
(Q
0
+ . . . . +
Q
k
) +O(k + 1).
Si on est bien en un point de bonne valuation et si k est plus grand que le
degr total (par rapport aux variables X
2
, . . . ., X
n
) du polynme Flcoeff(F) on
va vrier que P
0
+ . . . . + P
k
= D
lcoeff(F)
lcoeff(D)
. En effet, si on a deux suites de
polynmes P et P

et Q et Q

satisfaisant (6) avec les mme termes de degr zro


P
0
et Q
0
, alors en prenant la diffrence, on obtient :
(P
0
+P
1
. . .+P
k
)(Q
0
+Q
1
. . .+Q
k
) = (P
0
+P

1
. . .+P

k
)(Q
0
+Q

1
. . .+Q

k
)+O(k+1)
On gale alors les termes homognes de degr j, pour j = 1, on obtient P
0
(Q
1

1
) = Q
0
(P
1
P

1
), donc Q
0
divise Q
1
Q

1
qui est de degr strictement infrieur
au degr de Q
0
par rapport X
1
(car on a lingalit large et les termes de plus haut
degr sont gaux), donc Q
1
= Q

1
et P
1
= P

1
. On montre de la mme manire que
Q
j
= Q

j
et P
j
= P

j
. Lcriture est donc unique, cest donc lcriture en polynme
homogne de degr croissant de D
lcoeff(F)
lcoeff(D)
que lon reconstruit.
Cet algorithme permet donc de reconstruire D, il suft de tester chaque
tape si P
0
+. . . . +P
k
divise Flcoeff(F). On appelle cette mthode de remonte
lemme de Hensel linaire. Il existe une variante dite lemme de Hensel quadra-
tique qui consiste passer de O(k) O(2k). Elle ncessite toutefois un calcul
supplmentaire, celui de lidentit de Bzout O(2k) prs pour les polynmes
P
0
+. . . . +P
k1
et Q
0
+. . . . +Q
k1
. Ce calcul se fait galement par lifting.
Algorithme EZGCD (Hensel linaire)
Arguments : 2 polynmes F et G coefcients entiers et primitifs. Renvoie le
pgcd de F et G ou false.
1. Evaluer F et G en (X
2
, . . . ., X
n
) = (0, . . . ., 0), vrier que les coefcients
dominants de F et de G ne sannulent pas. Calculer le pgcd D
b
de F(0) et
de G(0). Prendre un autre point dvaluation au hasard qui nannule pas les
coefcients dominants de F et de G et vrier que le pgcd a le mme degr
que D
b
. Sinon, renvoyer false (on peut aussi faire une translation dorigine de
F et de G en un autre point mais cela diminue lefcacit de lalgorithme).
2. On note lcF et lcG les coefcients dominants de F et de G par rapport X
1
.
3. Si degre(F) degre(G) et degre(D
b
) = degre(G) et F divise G renvoyer
F
4. Si degre(G) < degre(F) et degre(D
b
) = degre(F) et G divise F renvoyer
G
5. Si degre(F) = degre(D
b
) ou si degre(G) = degre(D
b
) renvoyer false
36
6. Boucle innie sur j entier initialis 0, incrment de 1 chaque itration :
si pgcd(D
b
,
F(0)+jG(0)
D
b
) = C constant, alors arrter la boucle
7. Lifter lgalit (F + jG)(lcF + jlcG)(0) =
_
D
b
(lcF+jlcG)(0)
lcoeff(D
b)
_
. . . . par
remonte de Hensel linaire ou quadratique. Si le rsultat est false, renvoyer
false. Sinon renvoyer le premier polynme du rsultat divis par son contenu
vu comme polynme en X
1
coefcients dans Z[X
2
, . . . ., X
n
].
Remonte de Hensel linaire :
Arguments : F un polynme, lcF=lcoeff(F) son coefcient dominant, P
0
un
facteur de F(0) ayant comme coefcient dominant lcF(0) et dont le cofacteur Q
0
est premier avec P
0
.
Renvoie deux polynmes P et Q tels que FlcF = PQ et P(0) = P
0
et
lcoeff(P) = lcoeff(Q) = lcF.
1. Soit G = FlcF, , Q
0
= G(0)/P
0
, P = P
0
, Q = Q
0
.
2. Dterminer les deux polynmes U et V de lidentit de Bzout (tels que
P
0
U +Q
0
V = d o d est un entier).
3. Boucle innie avec un compteur k initialis 1, incrment de 1 chaque
itration
Si k > degre
X
2
,....,X
n
(G), renvoyer false.
Si P divise G, renvoyer P et G/P.
Soit H = GPQ = O(k). Soit u = U
H
d
et v = V
H
d
, on a P
0
u+Q
0
v =
H
Remplacer v par le reste de la division euclidienne de v par P
0
et u par le
reste de la division euclidienne de u par Q
0
. La somme des deux quotients
est gale au quotient euclidien de H par P
0
Q
0
, cest--dire au coefcient
dominant de H divis par le produit des coefcients dominants de P
0
et
Q
0
(qui sont gaux) donc on a lgalit :
P
0
u +Q
0
v = H
lcoeff(H)
lcoeff(P
0
)
2
P
0
Q
0
Soit = (lcoeff(F)lcoeff(P))/lcoeff(P
0
) et = (lcoeff(F)lcoeff(Q))/lcoeff(P
0
).
On ajoute P
0
v, ainsi lcoeff(P +v) = lcoeff(F) +O(k + 1) et Q
0

u, ainsi lcoeff(Q +u) = lcoeff(F) +O(k + 1)
Remarque : on montre alors que + =
lcoeff(H)
lcoeff(P
0
Q
0
)
+ O(k + 1) donc
P
0
u +Q
0
v = H +O(k + 1) en utilisant les proprits :
lcoeff(F) = lcoeff(P) +O(k) = lcoeff(Q) +O(k) = lcoeff(P
0
) +O(1)
Rduire u et v en liminant les termes de degr strictement suprieur k
par rapport X
2
, . . . ., X
n
. Sil reste un coefcient non entier, renvoyer
false
Remplacer P par P +v et Q par Q+u, passer litration suivante.
Exemple :
F = ((x+1)y +x
2
+1)(y
2
+xy +1), G = ((x+1)y +x
2
+1)(y
2
xy 1)
On a F(0, y) = (y + 1)(y
2
+ 1) et G(0, y) = (y + 1)(y
2
1), le pgcd est
donc D
b
= (y + 1). On remarque que D
b
est premier avec le cofacteur de F mais
37
pas avec le cofacteur de G. Si on value en un autre point, par exemple x = 1, on
trouve un pgcd D
1
de mme degr, donc 0 est vraissemblablement un bon point
dvaluation (ici on en est sr puisque le pgcd de F et G se calcule vue...). On a
lcoeff(F) = x+1, on va donc lifter G = ((x+1)y+x
2
+1)(y
2
+xy+1)(x+1) =
PQ o P
0
= (y + 1) et Q
0
= (y
2
+ 1).
On calcule les polynmes de lidentit de Bzout U = (1 y) et V = 1 avec
d = 2, puis lordre k = 1 :
H = GP
0
Q
0
= (2y
3
+ 2y
2
+ 3y + 1)x +O(2)
donc u = reste(UH/d, Q
0
) = xy et v = reste(V H/d, P
0
) = x.
Donc Q
1
= xy+Q
0
avec = (x+11)/lcoeff(P
0
) = x et Q
0
+Q
1
= (y
2
+
1)(x+1) +xy. De mme, P
1
= x+P
0
, avec = (x+1 1)/lcoeff(P
0
) = x
donc P
0
+ P
1
= (y + 1)(x + 1) x. On remarque que P
0
+ P
1
et Q
0
+ Q
1
sont
bien O(2) prs les facteurs de Flcoeff(F) :
P = (x+1)y+x
2
+1 = P
0
+P
1
+O(2), Q = (x+1)(y
2
+xy+1) = Q
0
+Q
1
+O(2)
Une deuxime itration est ncessaire. On calcule
H = G(P
0
+P
1
)(Q
0
+Q
1
) = (2y
2
+y + 1)x
2
+O(3)
puis reste(UH/d, Q
0
) = yx
2
et reste(V H/d, P
0
) = x
2
. Ici les coefcients et
sont nuls car lcoeff(F) na pas de partie homogne de degr 2. On trouve alors
P = P
0
+ P
1
+ P
2
et Q = Q
0
+ Q
1
+ Q
2
. Pour calculer le pgcd, il suft de
calculer la partie primitive de P vu comme polynme en y, ici cest encore P car
le contenu de P est 1 (remarque : pour Q le contenu est x + 1).
On trouve donc P comme pgcd.
3.4 Quel algorithme choisir ?
Il est toujours judicieux de faire une valuation en quelques n 1 uplets pour
traquer les pgcd triviaux. (E)EZGCD sera efcace si (0,...,0) est un point de bonne
valuation et si le nombre de remontes ncessaires pour le lemme de Hensel est
petit donc pour les pgcd de petit degr, GCDMOD est aussi efcace si le degr du
pgcd est petit. Le sous-rsultant est efcace pour les pgcd de grand degr car il y
a alors peu de divisions euclidiennes effectuer et les coefcients nont pas trop
le temps de croitre. SPMOD est intressant pour les polynmes creux de pgcd non
trivial creux. GCDHEU est intressant pour les problmes relativement petits.
Avec des machines multiprocesseurs, on a probablement intrt lancer en
parallle plusieurs algorithmes et sarrter ds que lun deux recontre le succs.
3.5 Pour en savoir plus.
Parmi les rfrences cites dans le premier article, ce sont les livres de Knuth,
H. Cohen, et Davenport-Siret-Tournier qui traitent des algorithmes de pgcd. On
peut bien sr consulter le source de son systme de calcul formel lorsquil est
disponible :
38
pour MuPAD sur un systme Unix, depuis le rpertoire dinstallation de Mu-
PAD (en gnral /usr/local/MuPAD) aprs avoir dsarchiv le chier
lib.tar du rpertoire share/lib par la commande
cd share/lib && tar xvf lib.tar
on trouve les algorithmes de calcul de PGCD dans le rpertoire
share/lib/lib/POLYLIB/GCD
Pour lalgorithme EZGCD, je me suis inspir de limplmentation de Singu-
lar (logiciel libre disponible www.singular.uni-kl.de)
Sur le web on trouve quelques articles en lignes sur le sujet en cherchant les mots
clefs GCDHEU, EZGCD, SPMOD sur un moteur de recherche, il y a par exemple
une description un peu diffrente du pgcd heuristique sur :
www.inf.ethz.ch/personal/gonnet/CAII/HeuristicAlgorithms/node1.html
et un article de comparaison de ces algorithmes par Fateman et Liao (dont la rf-
rence bibliographique est Evaluation of the heuristic polynomial GCD. in : ISSAC
pages 240247, 1995). Quelques autres rfrences :
K.O.Geddes et al "Alg. for Computer Algebra", Kluwer 1992.
pour GCDHEU Char, Geddes, Gonnet, Gcdheu : Heuristic polynomial gcd
algorithm based on integer gcd computation, in : Journal of Symbolic Com-
putation, 7 :3148, 1989.
pour SPMOD "Probabilistic Algorithms for Sparse Polynomials", in : Sym-
bolic & Algebraic Comp. (Ed E.W.Ng), Springer 1979, pp216,
4 Le rsultant
Il sagit dun point de vue dalgbre linaire sur le PGCD. Considrons deux
polynmes A et B de degrs p et q et de pgcd D et lidentit de Bzout correspon-
dante :
AU +BV = D (7)
avec degr(U) < q et degr(V ) < p. Imaginons quon cherche U et V en oubliant
quil sagit dune identit de Bzout, en considrant simplement quil sagit dun
problme dalgbre linaire de p + q quations (obtenues en dveloppant et en
identiant chaque puissance de X de 0 p + q 1) p + q inconnues (les p
coefcients de V et les q coefcients de U) On sait que A et B sont premiers entre
eux si et seulement si ce problme dalgbre linaire a une solution pour D = 1.
Donc si le dterminant du systme est non nul, alors A et B sont premiers entre
eux. Rciproquement si A et B sont premiers entre eux, le systme a une solution
unique non seulement avec comme second membre 1 mais avec nimporte quel
polynme de degr infrieur p +q, donc le dterminant du systme est non nul.
Dnition :
On appelle rsultant de A et B le dterminant de ce systme (7). Il sannule si
et seulement si A et B ne sont pas premiers entre eux (ont au moins une racine
commune). On appelle matrice de Sylvester la transpose de la matrice du systme
39
(les inconnues tant par ordre dcroissant les coefcients de U et V )
M(A, B) =
_
_
_
_
_
_
_
_
_
_
_
_
a
a
a
a1
. . . . . . a
0
0 . . . 0
0 a
a
. . . . . . a
1
a
0
. . . 0
.
.
.
.
.
.
0 0 . . . a
0
b
b
b
b1
. . . b
0
0 0 . . . 0
.
.
.
.
.
.
0 0 . . . b
0
_
_
_
_
_
_
_
_
_
_
_
_
(cette matrice contient b =degr(B) lignes de coefcients du polynme Aet a =degr(A)
lignes de coefcients du polynme B)
Lien avec lalgorithme du sous-rsultant (calcul de PGCD)
On peut calculer le dterminant avec la suite des restes de divisions euclidiennes
de la manire suivante, on part de la pseudo-division de A par B :
b
ab+1
b
A = BQ+R
on effectue alors sur chaque ligne contenant les coefcients de A la manipulation
de ligne correspondante, cest--dire multiplier la ligne par b
ab+1
b
et soustraire (q
0
fois la ligne de B terminant dans la mme colonne+q
1
fois la ligne de B terminant
une colonne avant+...). Toutes les lignes contenant les coefcients de A ont t
remplaces par des lignes contenant les coefcients de R. Ces lignes contiennent
k zros initiaux avec k 1, ce qui permet de rduire le dterminant celui de la
matrice de Sylvester de R et B ( un coefcient multiplicatif prs qui vaut b
k
b
par
rapport au prcdent donc b
kb(ab+1)
b
par rapport au dterminant de dpart). On
change ensuite R et B ce qui change ventuellement le signe et on continue en
faisant les divisions euclidiennes de lalgorithme du sous-rsultant (cf. Knuth o on
utilise la matrice de Sylvester pour prouver que lalgorithme du sous-rsultant est
correct). Rappelons que le sous-rsultant dnit les suites A
k
(A
0
= A, A
1
= B),
d
k
le degr de A
k
,
k
= d
k
d
k+1
, g
k
(g
0
= 1, si k ,= 0, g
k
coefcient dominant
de A
k
) h
k
(h
0
= 1, h
k+1
= h
1
k
k
g

k
k+1
) et
g

k1
+1
k
A
k1
= A
k
Q
k+1
+g
k1
h

k1
k1
A
k+1
Thorme 3 Le rsultant est gal au signe prs au coefcient h
k
o k correspond
au reste A
k
constant (en supposant que le rsultant soit non nul).
Preuve
La transcription de lgalit prcdente sur les rsultants donne par la mthode
ci-dessus :
g
(
k1
+1)d
k
k
Res(A
k1
, A
k
) = g
d
k1
d
k+1
k
Res(g
k1
h

k1
k1
A
k+1
, A
k
)
= g
d
k1
d
k+1
k
(g
k1
h

k1
k1
)
d
k
Res(A
k+1
, A
k
)
On en dduit que :
Res(A
k1
, A
k
)
g
d
k
k1
h
d
k1
1
k1
= g
d
k1
d
k+1
(
k1
+1)d
k
k
h

k1
d
k
+1d
k1
k1
Res(A
k+1
, A
k
)
40
On observe que :
h

k1
d
k
+1d
k1
k1
= h
(
k1
1)(d
k
1)
k1
=
_
h

k1
1
k1
_
d
k
1
=
_
g

k1
k
h
k
_
d
k
1
donc :
Res(A
k1
, A
k
)
g
d
k
k1
h
d
k1
1
k1
= g
d
k1
d
k+1
(
k1
+1)d
k
k
_
g

k1
k
h
k
_
d
k
1
Res(A
k+1
, A
k
)
= g
d
k1
d
k+1
d
k

k1
k
_
1
h
k
_
d
k
1
Res(A
k+1
, A
k
)
=
Res(A
k+1
, A
k
)
g
d
k+1
k
h
d
k
1
k
Donc en valeur absolue
[
Res(A
0
, A
1
)
g
d
1
0
h
d
0
1
0
[ = [
Res(A
k1
, A
k
)
g
d
k
k1
h
d
k1
1
k1
[
En prenant le rang k tel que A
k
est constant, on a d
k
= 0 et le rsultant est gal
g
d
k1
k
, on obtient donc :
[Res(A
0
, A
1
)[ = [
g
d
k1
k
h
d
k1
1
k1
[
Comme ici
k1
= d
k1
, le terme de droite est [h
k
[.
Remarque
On peut calculer au fur et mesure le signe du rsultant en tenant compte des
degrs de A
k
pour inverser lordre de A
k1
et A
k
dans le rsultant.
Utilisation
La valeur du rsultant est trs utile pour savoir si 2 polynmes dpendant de para-
mtres sont premiers entre eux en fonction de la valeur des paramtres. En effet, la
fonction gcd dun logiciel de calcul formel calculera le PGCD par rapport toutes
les variables en incluant les paramtres. En cherchant quand le rsultant sannule
en fonction des paramtres on obtient un autre type dinformation.
Exemple :
Chercher quand le polynne P = x
3
+ px + q possde une racine multiple en
fonction de p et q. On calcule le rsultant de P et P

et on trouve 4p
3
+27q
2
, donc
P a une racine multiple si et seulement si 4p
3
+ 27q
2
= 0.
Remarque :
Comme le coefcient dominant de P

est un multiple du coefcient dominant de


P, le rsultant de P et P

est divisible par le coefcient dominant de P, on appelle


le quotient discriminant.
5 Localisation des racines : les suites de Sturm.
Lalgorithme du sous-rsultant appliqu un polynme sans racine multiple P
et sa drive permet, condition de changer les signes dans la suite des restes,
41
de connaitre le nombre de racines relles dun polynme coefcients rels dans
un intervalle. Ceci est tr utile pour par exemple simplier des valeurs absolues de
polynmes dans un intervalle.
On dnit donc la suite de polynmes A
0
= P, A
1
= P

, ..., A
k
, 0 par :
A
i
= A
i+1
Q
i+2
A
i+2
(8)
avec A
k
, le dernier reste non nul, un polynme constant puisque P na pas de
racine multiple. On utilise plutot lalgorithme du sous-rsultant que lalgorithme
dEuclide, il faut alors sassurer que les signes de A
i
et A
i+2
sont opposs lorsque
A
i+1
sannule quitte changer le signe de A
i+2
en fonction du signe du coefcient
dominant de A
i+1
, de la parit de la diffrence des degrs et du signe du coefcient
gh
1
.
On dnit s(a) comme tant le nombre de changements de signes de la suite
A
i
(a) en ignorant les 0. On a alors le
Thorme 4 Le nombre de racines relles de A
0
= P sur lintervalle ]a, b] est
gal s(a) s(b).
Preuve
Par continuit de la suite des polynmes, s ne peut varier que si lun des polynmes
sannule. On considre la suite des signes en un point : elle ne peut contenir deux
0 successifs (sinon toute la suite vaudrait 0 en ce point en appliquant (8), or A
k
est
constant non nul). Elle ne peut pas non plus contenir +,0,+ ni -,0,- cause de la
convention de signe sur les restes de (8). Donc une racine b de A
i
pour 0 < i < k,
ninue pas sur la valeur de s au voisinage de b (il y a toujours un changement de
signe entre les positions i1 et i+1). Comme A
k
est constant, seules les racines de
A
0
= P sont susceptibles de faire varier s. Comme A
1
= P

, le sens de variations
de A
0
au voisinage dune racine de A
0
est dtermin par le signe de A
1
, donc les
possibilits sont -,+ vers +,+ ou +,- vers -,-, ce qui diminue s dune unit.
Remarques
On peut localiser les racines relles par dichotomie : on sait que toutes les
racines sont situes dans lintervalle [C, C] avec C = [P[

/[lcoeff(P)[.
On coupe lintervalle en deux, on calcule le nombre de racines dans chaque
partie, et on continue en conservant uniquement les intervalles contenant au
moins une racine. Lorsquun intervalle contient une seule racine, on passe
la dichotomie classique (changement de signe), ou la mthode de New-
ton (avec valuation exacte du polymme et arrondi du dnominateur une
puissance de 2). Cest ce qui est utilis par linstruction realroot de Giac.
Il existe un autre algorithme de localisation de racines relles d Vincent,
Collins et Akritas. Un tudiant dAkritas travaille sur une implmentation
C++ de cet algorithme dans Giac.
Ces suites se gnrallisent dans le plan complexe, on peut dterminer le
nombre de racines contenues dans un rectangle du plan complexe (cf. par
exemple larticle de Mickael Eiserman sur www-fourier.ujf-grenoble.fr/~eiserm).
Malheureusement, il faut calculer une nouvelle suite de Sturm pour chaque
rectangle (alors que dans R on peut rutiliser la mme suite de Sturm). Ce
qui est donc beaucoup plus couteux, en pratique on ne peut gure aller au-
del du degr 10 avec linstruction complexroot de Giac, analogue de
realroot.
42
Une autre mthode dans le cas complexe, peut-tre plus prometteuse, consis-
terait utiliser un hybride numrique-exact. Les racines dun polynme
sont aussi les valeurs propres complexes de sa matrice companion M. On
peut alors par une mthode itrative (on pose A
0
= M, puis on factorise
A
n
= QR par la mthode de Hessenberg et on dnit A
n+1
= RQ), fac-
toriser cette matrice sous forme de Schur : M = P
1
SP o P est unitaire
et S diagonale suprieure aux erreurs darrondis prs. En approchant P par
une matrice exacte P

, on peut essayer de controler la localisation des va-


leurs propres de M partir des coefcients diagonaux de S et de la taille des
coefcients sous-diagonaux de P

MP
1
.
43
6 Exercices (PGCD, rsultant, ...)
6.1 Instructions
Les instructions arithmtiques sont en gnral dans la librairie standard. Elles
sont dans les menus Cmds->Integer et Cmds->Polynomes de Xcas. Certaines de
ces instructions sont dans la librairie numtheory (en maple) ou numlib (en
MuPAD) (utilisez ?numtheory ou ?numlib pour avoir la liste des fonctions
de ces librairies), pour viter de taper numlib:: ou numtheory:: chaque
fois, on peut lancer en maple la commande with(numtheory); ou en MuPAD
export(numlib);.
6.1.1 Entiers
chrem (en MuPAD numlib::ichrem) : restes chinois (entier)
divisors (en maple numtheory::divisors, en MuPADnumlib::divisors) :
liste des diviseurs dun entier
gcd, lcm : PGCD et PPCM
igcdex : Bzout pour des entiers
iquo et irem quotient et reste de la division euclidienne de deux entiers
isprime test de primalit. En maple et MuPAD, il sagit dun test de
pseudo-primalit. En Xcas, utiliser is_pseudoprime pour effectuer un
test plus rapide de pseudo-primalit.
mods : reste euclidien symtrique
nextprime et prevprime (en MuPADnumlib::prevprime) : nombre
premier suivant ou prcdent
powmod(a,b,n) (Xcas), a &^ b mod n (Maple), powermod(a,b,n)
(Mupad) : calcul de a
b
(mod n) par lalgorithme de la puissance rapide
6.1.2 Polynmes
On peut reprsenter les polynmes par leur criture symbolique (par exemple
x^2+1), ou par des listes (reprsentation dense ou creuse, rcursive ou distribue).
Xcas, Maple et MuPAD acceptent la reprsentation symbolique. Xcas propose
deux types de reprsentation, dense une variable (poly1[ ]), ou distribue
(%%%{ }%%%) et des instructions de conversion (poly2symb et symb2poly)
entre reprsentations. MuPAD propose galement une reprsentation non symbo-
lique, cf. la documentation ?poly. Lintrt dune reprsentation non symbolique
est lefcacit des oprations polynomiales, (et la possibilit de chronomtrer des
oprations comme le produit de 2 polynmes).
Les instructions qui suivent utilisent la reprsentation symbolique, certaines
acceptent les autres reprsentations.
coeff coefcient(s) dun polynme,
coeffs liste des coefcients dun polynme ( dvelopper auparavant, en
mupad on utilise coeff)
content contenu (pgcd des coefcients)
degree degr
divide division euclidienne,
gcd, lcm PGCD et PPCM
44
gcdex Bzout,
genpoly (en MuPAD numlib::genpoly) : cre un polynme partir
de la reprsentation z-adique dun entier (utile pour le PGCD heuristique)
icontent : contenu entier pour un polynme plusieurs variables
indets : liste des noms de variables dune expression
lcoeff : coefcient dominant dun polynme
ldegree : valuation
(MuPAD) multcoeffs multiplie les coefcients dun polynme
(MuPAD) pdivide pseudo-division
(MuPAD) poly(expr,[var],coeff) cre un polynme partir de
lexpression symbolique expr par rapport une variable ou une liste de
variables var, on peut indiquer dans quel anneau vivent les coefcients (par
exemple dans Z/13Z avec comme 3me argument IntMod(13))
primpart : partie primitive dun polynme
quo, rem (xcas et Maple) quotient et reste euclidien (en MuPAD utiliser les
options Quo et Rem de divide)
tcoeff : coefcient de plus bas degr dun polynme
interp (MuPAD interpolate) : interpolation de Lagrange
convert(.,sqrfree) (MuPAD polylib::sqrfree) : dcomposi-
tion en facteurs nayant pas de racine multiples
convert(.,parfrac) (MuPAD polylib::partfrac) : dcompo-
sition en lments simples
resultant (MuPAD polylib::resultant) : calcule le rsultant de
2 polynmes par rapport une variable.
Notez aussi que le menu Exemples->poly->pgcd.xws de Xcas contient
des exemples de programmes de calcul de pgcd de type Euclide.
6.1.3 Calculs modulo n
Pour travailler dans Z/nZ[X] :
avec Xcas on utilise la notation % comme en C, par exemple gcd(P % 3,
Q % 3). On peut aussi utiliser la notation Maple en mode syntaxe Maple
(cf. ci-dessous)
avec Maple, on utilise les formes inertes des instructions (qui renvoient lins-
truction non value), dont le nom est le mme que le nom de commande ha-
bituel mais prcd par une majuscule, puis on indique mod n, par exemple
Gcd(P,Q) mod 11.
avec MuPAD, on dsigne le type des coefcients par exemple par IntMod(13)
puis on construit des objets ayant des coefcients de ce type (par exemple des
polynmes, cf. infra). Par exemple poly(x^2+1,[x],IntMod(13)).
6.2 Exercices PGCD
1. Calculez le pgcd de x
202
+ x
101
+ 1 et sa drive modulo 3 et modulo 5.
Conclusion ?
2. P = 51x
3
35x
2
+ 39x 115 et Q = 17x
4
23x
3
+ 34x
2
+ 39x 115.
Calculez le pgcd de P et Q modulo 5, 7 et 11. En dduire le pgcd de P et Q
45
par le thorme des restes chinois. Pourquoi ne doit-on pas essayer modulo
17 ?
3. crire un programme qui dtermine le degr probable du pgcd de 2 poly-
nmes en une variable en utilisant le pgcd modulaire (on considre le degr
probable dtermin lorsquon trouve deux nombres premiers ralisant le mi-
nimum des degrs trouvs)
4. Dtaillez lalgorithme du PGCD heuristique pour les polynmes P = (x +
1)
7
(x 1)
6
et sa drive. Comparez avec lalgorithme dEuclide naf.
5. crire un programme mettant en oeuvre le pgcd heuristique pour des poly-
nmes une variable.
6. On veut comprendre comment un logiciel de calcul formel calcule
_
x
6
+ 2
(x
3
+ 1)
2
dx
On se ramne dabord une fraction propre (numrateur N de degr inf-
rieur au dnominateur), Soit P = X
3
+ 1, calculez le PGCD de P et P

,
puis deux polynmes U et V tels que :
N = UP +V P

On dcompose alors lintgrale en deux morceaux :


_
N
P
2
=
_
U
P
+
_
V
P

P
2
Faites une intgration par parties sur le deuxime terme et en dduire la
valeur de lintgrale du dpart.
7. crire un programme mettant en oeuvre lalgorithme modulaire de calcul du
PGCD.
8. crire un programme qui dtermine le degr probable du PGCD par rap-
port toutes les variables de 2 polynme plusieurs variables en utilisant
lvaluation en toutes les variables sauf une.
9. Calculer le pgcd par une mthode modulaire de (xy x + 1)(xy +x
2
+ 1)
et (xy x y)(xy x + 1)
6.3 Exercices (rsultant)
1. Pour quelles valeurs de p le polynme X
5
+ X
3
pX + 1 admet-il une
racine multiple ?
2. Rsoudre le systme en liminant successivement les variables grce au r-
sultant :
_
_
_
a
3
+b
3
+c
3
= 8
a
2
+b
2
+c
2
= 6
a +b + 2c = 4
3. Donner le dtail des calculs avec Bzout de la dcomposition en lments
simples de :
1
(x
2
1)
2
(x + 2)
46
puis calculer le coefcient de x
n
du dveloppement en sries entires de
cette fraction en 0.
4. Calculer
_
1 x
2
1 +x
4
dx
en utilisant le rsultant pour calculer les logarithmes.
5. En utilisant uniquement linstruction de calcul de PGCD dterminer la mul-
tiplicit maximale dun facteur irrductible de x
14
x
13
14x
12
+12x
11
+
78x
10
54x
9
224x
8
+116x
7
+361x
6
129x
5
330x
4
+72x
3
+160x
2

16x 32
6.4 Exercice (Bzout modulaire)
Soit A et B deux polynmes coefcients entiers et premiers entre eux. Soit
c Z

le rsultant de A et B, on va calculer les polynmes U et V de lidentit de


Bzout
AU +BV = c, deg(U) < deg(B), deg(V ) < deg(A) (9)
par une mthode modulaire.
1. Montrer, en utilisant les formules de Cramer, que les coefcients de U et V
sont des entiers de valeur absolue infrieure ou gale la borne de Hadamard
h de la matrice de Sylvester de A et B (dont le dterminant est c, le rsultant
de A et B). Calculer h en fonction de la norme euclidienne de A, B et de
leurs degrs.
2. On calcule c Z

puis on rsoud (9) dans Z/p


i
Z[X] pour plusieurs nombres
premiers p
i
(choisis si possible infrieurs

2
31
pour des raisons defca-
cit), puis on calcule par le thorme des restes chinois (9) dans Z/

p
i
Z[X].
Donner une minoration de

i
p
i
faisant intervenir h qui permette de garan-
tir que lcriture en reprsentation symtrique de (9) dans Z/

p
i
Z[X] est
identique (9) dans Z[X].
3. Application : rsoudre de cette manire lquation de Bzout pour
A = (X + 1)
4
(X 3), B = (X 1)
4
(X + 2)
(vous pouvez utiliser sans justications linstruction de calcul de rsultant,
des coefcients de Bzout dans Z/p
i
Z[X] et de reste chinois de votre logi-
ciel).
4. crire une fonction mettant en oeuvre cet algorithme.
5. Que pensez-vous de lintrt de cet algorithme par rapport lalgorithme
dEuclide tendu dans Z[X] ?
6.5 Exercice (Gomtrie et rsultants).
On cherche une relation algbrique entre les coordonnes de 4 points A, B, C, D
qui traduise le fait que ces 4 points sont cocycliques. Cette condition tant inva-
riante par translation, on cherche une relation entre les 6 coordonnes des 3 vec-
teurs v
1
= (x
1
, y
1
), v
2
= (x
2
, y
2
) et v
3
= (x
3
, y
3
) dorigine A et dextrmit B,
C et D. On peut supposer quitte translater que le centre du cercle est lorigine, on
47
a donc 5 paramtres : le rayon du cercle R et les 4 angles des points sur le cercle

0
,
1
,
2
et
3
. La relation cherche va sobtenir en liminant les 5 paramtres des
expressions des 6 coordonnes en fonction de ces paramtres.
1. Exprimer les 6 coordonnes en fonction de Ret a = tan(
0
/2), b = tan(
1
/2),
c = tan(
2
/2) et d = tan(
3
/2). On obtient ainsi 6 quations, par exemple
les deux premires sont de la forme
x
1
F(R, a, b) = 0, y
1
G(R, a, b) = 0
o F et G sont deux fractions rationnelles.
2. En rduisant au mme dnominateur, calculer 6 polynmes, fonction de
x
1
, y
1
, x
2
, y
2
, x
3
, y
3
, R, a, b, c, d, qui doivent sannuler pour que les points
soient cocycliques (Vous pouvez utiliser linstruction numer pour obtenir le
numrateur dune fraction rationnelle).
3. liminer b des polynmes contenant x
1
et y
1
et factoriser le polynme ob-
tenu, faire de mme avec c, x
2
et y
2
et d, x
3
et y
3
, en dduire (en supposant
que les points sont tous distincts) 3 polynmes en x
1
, y
1
, x
2
, y
2
, x
3
, y
3
, R, a
qui sannulent.
4. liminer R et a, en dduire la relation cherche.
5. Vrier que cette relation est quivalente la nullit de la partie imaginaire
du birapport des afxes , , , des 4 points :

_




_
= 0
6.6 Dcalage entier entre racines.
Soit P un polynme coefcients entiers sans racines multiples. On dira que
P a la proprit J si deux des racines de P sont dcales dun entier. En dautres
termes, si r
1
, ..., r
n
dsignent les racines complexes distinctes de P, P possde la
proprit J sil existe au moins un entier parmi les diffrences r
i
r
j
pour i ,= j.
1. Soit
R(t) = resultant
x
(P(x), P(x +t))
Montrer que R est coefcients entiers. Montrer que la proprit J est qui-
valente la proprit R possde une racine entire non nulle. On va main-
tenant construire un algorithme dterminant les racines entires du polynme
R.
2. Aprs division de R par une puissance de t, on peut supposer que R a un
coefcient constant non nul. Aprs division de R par son contenu, on peut
aussi supposer que le contenu de R est 1. En effectuant ensuite une factori-
sation square-free de R, on peut se ramener au cas o R et R

sont premiers
entre eux. Soit a une racine de R.
(a) Donner une majoration de [a[ en fonction du coefcient constant de R.
(b) Soit p un nombre premier ne divisant pas le coefcient dominant de R
et tel que R et R

soient premiers entre eux modulo p. On peut calculer


a partir dune racine de R modulo p en la remontant modulo p
k
pour k assez grand (algorithme p-adique). Pour quelle valeur de k peut-
on reconstruire toutes les racines entires de R?
48
(c) Comparer lalgorithme ci-dessus avec les algorithmes suivants : la fac-
torisation de R sur Z, la recherche numrique des racines complexes
de R, la recherche des racines entires de R parmi les diviseurs entiers
du coefcient constant de R et leurs opposs.
3. Une fois les racines entires de R connues, comment peut-on en dduire les
facteurs de P dont les racines diffrent de cet(ces) entier(s) ?
4. Soit
P(x) = x
6
+ 9x
5
+ 29x
4
+ 41x
3
+ 37x
2
+ 59x + 31
Montrer que P a la proprit J. Calculer la ou les racines entires de R et
donner la factorisation correspondante de P.
5. crire un programme qui effectue cet algorithme sur un polynme quel-
conque. On pourra utiliser la fonction rationalroot de Xcas pour d-
terminer les racines entires de R.
6. Application : on cherche calculer
n

k=1
9x
2
27x 30
P(x)
(10)
Dcomposer cette fraction en lments simples (donner le dtail des cal-
culs en utilisant la factorisation prcdente et lidentit de Bezout abcuv en
Xcas).
7. Calculer la somme prcdente (10). On pourra remarquer que pour k entier
strictement positif,
1
f(x+k)

1
f(x)
sexprime comme une somme de diff-
rences
1
f(x+j+1)

1
f(x+j)
.
8. crire un programme effectuant ce calcul avec une fraction quelconque,
lorsque cela est possible.
49
7 Factorisation
On prsente ici quelques algorithmes utiliss pour factoriser un polynme
coefcients entiers. Pour un polynme en une variable, cele se fait en plusieurs
tapes : on commence par se ramener un polynme P dont tous les facteurs sont
de multiplicit un, ensuite on factorise P dans Z/pZ (par la mthode de Berlekamp
ou Cantor-Zassenhauss), puis on remonte Z/p
k
Z pour k sufsamment grand (en
fonction de la borne de Landau sur les facteurs de P), et on recombine enn les
facteurs modulaires pour trouver les facteurs de P. Lorsque P plusieurs variables,
on utilise une mthode analogue celle permettant de trouver le pgcd de polynmes
plusieurs variables.
Rappel
Le pgcd des coefcients dun polynme est appel contenu de ce polynme. Un
polynme est dit primitif si son contenu est gal 1.
7.1 Les facteurs multiples
tant donn un polynme P coefcients entiers, on cherche crire :
P =
n
k=1
P
k
k
o les P
k
nont pas de facteurs multiples et sont premiers entre eux deux deux.
Comme on est en caractristique 0, cela revient dire que pgcd(P
k
, P

k
) = 1 et
pgcd(P
k
, P
j
) = 1. Bien entendu on va utiliser la drive de P dans lalgorithme
de recherche des P
k
:
P

=
n

k=1
kP

k
P
k1
k

j=k
P
j
j
Soit G le pgcd de P et de P

. On a :
G =
n
k=1
P
k1
k
,
en effet G divise P et P

:
W
1
=
P
G
=
n
k=1
P
k
, Z
1
=
P

G
=
n

k=1
kP

j=k
P
j
il sagit de vrier que W
1
et Z
1
sont premiers entre eux. Soit F un facteur irr-
ductible du pgcd de W
1
et Z
1
, alors F divise lun des P
k
, appelons P
l
ce facteur.
Comme F divise
j=k
P
j
si k ,= l, on en dduit que F divise le dernier terme de la
somme de Z
1
, cest--dire que F divise lP

j=l
P
j
donc F divise P

l
puisque les
P
k
sont premiers entre eux. Donc P
l
et P

l
ont un facteur en commun, ce qui est
contraire aux hypothses.
On pose alors :
Y
1
= Z
1
W

1
=

k>1
(k 1)P

j=k
P
j
On dnit alors par rcurrence des suites de polynmes W
n
, Y
n
et G
m
par :
G
m
= pgcd(W
m
, Y
m
)
W
m+1
= W
m
/G
m
et Y
m+1
= Y
m
/G
m
W

m+1
50
On va montrer que P
m
= G
m
. Commenons au rang n = 1, on voit que P
1
divise
Y
1
(puisquil est commun tous les
j=k
P
j
car k > 1) et divise W
1
. Et cest le seul
facteur commun, car tout autre facteur irrductible serait un diviseur dun P
l
pour
l > 1, donc diviserait (l 1)P

j=l,j>1
P
j
, donc diviserait P

l
. Le raisonnement
en un rang quelconque est identique, les polynmes sont donns par :
G
m
= P
m
, W
m
=
k>=m
P
k
, Y
m
=

k>m
(k m)P

jm,j=k
P
j
Lorsquon programme cet algorithme, le test darrt est G
m
= 1.
Square-free factorisation (Algorithme de Yun)
Argument : un polynme primitif P coefcients entiers (ou dans Z[i] ou dans un
corps de caractristique nulle).
Valeur renvoye : une liste de polynmes P
m
telle que P =
n
k=1
P
k
k
.
1. Initialiser la liste rsultat liste vide.
2. Initialiser W P et Y P

. Calculer le pgcd G de W et Y et simplier W


et Y par leur pgcd puis poser Y = Y W

.
3. Boucle tant que Y ,= 0.
4. Calculer le pgcd G de W et Y . Ajouter G la liste rsultat.
5. Simplier W et Y par G, puis poser Y = Y W

et passer litration
suivante.
Remarque : lorsquon veut factoriser un polynme coefcients modulaires, il
faut aussi se ramener un polynme sans facteurs multiples mais on ne peut pas
utiliser cet algorithme tel quel car la caractristique du corps nest pas nulle.
Exemple :
Factorisation sans facteurs multiples de P(X) = (X
3
1)(X + 2)
2
(X
2
+ 3)
3
.
En mode interactif avec un logiciel de calcul formel, effectuons ltape dinitiali-
sation :
W:=normal((x^3-1)
*
(x+2)^2
*
(x^2+3)^3);
Y:=diff(W,x);
G:=gcd(W,Y);
x^5+2
*
x^4+6
*
x^3+12
*
x^2+9
*
x+18
W:=normal(W/G);
x^6+2
*
x^5+3
*
x^4+5
*
x^3+-2
*
x^2+-3
*
x-6
Y:=normal(Y/G);
Y:=normal(Y-diff(W,x));
5
*
x^5+8
*
x^4+3
*
x^3+-5
*
x^2+-8
*
x-3
On vrie bien que W = (x + 2) (x
3
1) (x
2
+ 3) est le produit des facteurs
P
i
. On entame maintenant la boucle :
G:=gcd(W,Y);
x^3-1 -> P1
Y:=normal(Y/G);
W:=normal(W/G);
Y:=normal(Y-diff(W,x));
51
2
*
x^2+4
*
x
G:=gcd(W,Y);
x+2 -> P2
Y:=normal(Y/G);
W:=normal(W/G);
Y:=normal(Y-diff(W,x));
0
G:=gcd(W,Y);
x^2+3 -> P3
puis W = 1 et Y = 0 et le prochain G vaut 1, on a bien trouv tous les facteurs P
i
.
7.2 Factorisation en une variable
On suppose maintenant quon veut factoriser un polynme P sans facteur mul-
tiple (et primitif). En gnral on commence par simplier P par ses facteurs li-
naires (dtects avec lalgorithme prsent dans le premier article de cette srie).
On commence par chercher un nombre premier p tel que P dans Z/pZ conserve
le mme degr et reste sans facteur multiple (donc pgcd(P, P

)=1 dans Z/pZ), ce


qui est toujours possible (il suft de prendre p plus grand que le plus grand entier
apparaissant dans lalgorithme du sous-rsultant pour calculer le pgcd de P et P

dans Z).
Convention
Tous les polynmes ayant leurs coefcients dans un corps ni sont supposs avoir
comme coefcient dominant 1 lorsque le choix existe (par exemple les facteurs
dun polynme modulo p).
7.2.1 Factorisation dans Z/pZ[X]
On suppose quon a un polynme P coefcients dans Z/pZ sans facteur
multiple. Il sagit de factoriser P dans Z/pZ[X]. Il existe essentiellement deux
stratgies, lune commence par factoriser par groupes de facteurs de mme degr
puis casse les facteurs et lautre plus directe base dalgbre linaire modulaire
(mthode de Berlekamp). Dans les deux cas, on utilise le fait que si F est un poly-
nme, alors les polynmes coefcients dans Z/pZ modulo F forment un anneau
A qui est aussi un espace vectoriel sur Z/pZ de dimension le degr de F (si F est
irrductible, alors A est un corps). On sintresse alors aux proprits de lapplica-
tion : x A x
p
. On observe dabord que cette application est une application
linaire. Cela dcoule du petit thorme de Fermat pour (x) = (x) et de la
formule de Newton et de la primalit de p pour (x +y) = (x) +(y).
Calcul de
Pour mettre en oeuvre ces algorithmes, on commence par dterminer la matrice
de lendomorphisme : x x
p
dans Z/pZ[X] (mod P(X)) muni de sa base
canonique 1, X, ..., X
deg(P)1
.
7.2.2 Distinct degree factorization
Cette mthode consiste dtecter les groupes de facteurs ayant un degr donn
(distinct degree factorization). Si ncessaire, on utilise ensuite un autre algorithme
52
pour casser ces groupes. On utilise ici les proprits des itres de lapplication
linaire sur des espaces vectoriels de corps de base Z/pZ. On va dterminer le
produit P
k
de tous les facteurs de P de degr k en calculant le pgcd de P et de
X
(p
k
)
X dans Z/pZ[X].
Pour k = 1, X
p
X est le produit des X k pour tout k Z/pZ par le petit
thorme de Fermat (k
p
= k (mod p)), donc le pgcd de P et de X
(p
1
)
X dans
Z/pZ[X] est le produit des facteurs de P de degr 1.
Pour k > 1, le raisonnement se gnralise de la manire suivante : on consi-
dre un facteur irrductible F(X) de P de degr k et le corps K = (Z/pZ)[Y ]
(mod F(Y )). Le corps K est un corps ni, cest aussi un espace vectoriel sur
Z/pZ de dimension k, donc K possde p
k
lments et K

est un groupe multipli-


catif p
k
1 lments, donc tout lment de K

vrie lquation x
p
k
1
= 1 donc
tout lment de K vrie x
(p
k
)
= x. En particulier pour x = Y (mod F(Y )) on
trouve que Y
(p
k
)
= Y (mod F(Y )) donc F(X) divise X
(p
k
)
X dans Z/pZ.
Rciproquement, si on se donne un facteur irrductible F qui divise X
p
k
X,
soit K le corps correspondant F, alors le noyau de lapplication linaire
x K x
p
k
x K
est K tout entier, car Y = Y
p
k
(mod F) entraine (Y
2
)
(p
k
)
= Y
2p
k
= (Y
p
k
)
2
=
Y
2
(mod F) et de mme pour les autres puissances de Y qui, avec Y
0
= 1 ga-
lement dans le noyau, forment une base de lespace vectoriel K sur Z/pZ. Donc
le nombre dlments de K est infrieur ou gal au degr du polynme X
p
k
X
(puisque X
(p
k
)
X est divisible par X x pour tout x K), donc le degr de F
est infrieur ou gal k.
Donc P
k
est gal au pgcd de P/
j<k
P
j
avec X
p
k
X.
Algorithme distinct degree factorization
Argument : un polynme P coefcients entiers sans facteur multiple et primitif.
Valeur renvoye : la liste L des produits des facteurs irrductibles et du degr cor-
respondant de P (ordonn par ordre croissant de degr).
On commence par initialiser L vide et un polynme auxiliaire Q X (il contien-
dra les valeurs de X
p
k
X (mod P)), on fait une boucle indnie sur k commen-
ant 1 et incrment de 1 chaque itration
Si k est strictement plus grand que le degr de P divis par 2, on rajoute le
couple (P,degre(P)) L et on renvoie L
On remplace Q par Q
p
(mod P) en utilisant le calcul de modulo P
On calcule le pgcd G de QX et de P.
Si G vaut 1, on passe litration suivante
On rajoute le couple (G,k) la liste L et on remplace P par le quotient de P
par G.
Exemple :
Factorisation en degr distincts de (X
3
+ X + 1)(X
4
X + 1) dans Z/5Z. On
regarde dabord si P reste sans facteur multiple aprs rduction modulo 5.
P:=normal((x^3+x+1)
*
(x^4-x+1) mod 5);
gcd(P,diff(P,x));
1 mod 5 -> ok P est sans facteur multiple
P1:=gcd(P,(x^5-x)mod 5);
(1 mod 5)
*
x -2 mod 5 -> P1
53
P:=normal(P/P1);
P2:=gcd(P,(x^(5^2)-x)mod 5);
1 mod 5 -> pas de facteur de degre 2
P3:=gcd(P,(x^(5^3)-x)mod 5);
(x^6+2
*
x^5+x^2+x+2) mod 5
Donc P admet 3 facteurs dans Z/5Z : un de degr 1 (x 2) et deux de degr 3
(dont le produit est x
6
+ 2x
5
+x
2
+x + 2).
Le mme calcul dans Z/7Z donne
P:=normal((x^3+x+1)
*
(x^4-x+1) mod 7);
gcd(P,diff(P,x));
1 mod 7 -> ok P est sans facteur multiple
P1:=gcd(P,(x^7-x)mod 7);
1 mod 7
P2:=gcd(P,(x^(7^2)-x)mod 7);
1 mod 7
P3:=gcd(P,(x^(7^3)-x)mod 7);
(x^3+x+1) mod 7
donc P possde un facteur de degr 3 modulo 7, donc le facteur restant de degr 4
est forcment irrductible.
On remarque sur cet exemple que 7 est plus intressant que 5, car la factorisa-
tion modulo 7 donne moins de facteurs ( recombiner pour trouver la factorisation
dans Z) et la factorisation est complte modulo 7 alors que modulo 5 il faut casser
le facteur de degr 6 en deux facteurs de degr 3. La plupart des algorithmes de
factorisation effectuent la factorisation en degr distinct modulo plusieurs entiers
(ce qui peut de plus tre paralllis) et choisissent le meilleur.
7.2.3 La mthode de Cantor-Zassenhaus
Cet algorithme sert casser des groupes de facteurs de mme degr, cest une
mthode probabiliste. On suppose donc quon a un produit P dau moins deux
facteurs irrductibles de degr d casser. Soit D lun des polynmes irrductibles
de degr d coefcients dans Z/pZ, et soit K = Z/pZ[Y ] (mod D(Y )), on a :
X
p
d
X =
K
(X )
puisque le corps K possde p
d
lments tous racines de lquation X
p
d
= X.
On considre un polynme T non constant, et le polynme T
p
d
T. En rem-
plaant X par T ci-dessus, on en dduit :
T
p
d
T =
K
(T )
Donc pour tout lment K = Z/pZ[Y ] (mod D(Y )), on a
(T
p
d
T)() =
K
(T() ) = 0
Donc T
p
d
T est divisible par X
p
d
X (puisque toutes les racines du second sont
racines du premier), donc est divisible par tout polynme irrductible de degr
infrieur ou gal d coefcients dans Z/pZ. Comme
T
p
d
T = T(T
p
d
1
2
1)(T
p
d
+1
2
1) (11)
54
et que ces trois facteurs sont premiers entre eux, on en dduit que tout polynme
irrductible de degr infrieur ou gal d coefcients dans Z/pZ divise lun des
trois facteurs ci-dessus. Pour casser P, lide consiste alors calculer le pgcd de P
et T
p
d
1
2
1 pour un polynme pris au hasard. On sait que P divise le produit des
3 termes de (11), et on espre que les facteurs irrductibles de P ne diviseront pas
tous le mme terme.
On va montrer que si T est un polynme de degr 2d1 choisi au hasard, la
probabilit que deux facteurs irrductibles de P ne divisent pas T
p
d
T est proche
de 0.5. Soient donc A et B deux facteurs irrductibles de P de degr d. Daprs
lidentit de Bzout, tout polynme T de degr 2d1 scrit de manire unique
sous la forme :
T = AU +BV (12)
avec degre(U d 1) et degre(V d 1) et rciproquement une combinaison
linaire de cette forme est un polynme de degr 2d 1. Choisir T au hasard
revient donc choisir un couple (U, V ) de polynmes coefcients dans Z/pZ
au hasard et de manire indpendante. Dautre part, A et B tant de degr d, on
sait que dans K = Z/pZ[Y ] (mod D(Y )) ces polynmes admettent d racines.
Soit donc [respectivement ] une racine de A [resp. B] dans K. Alors A divise
T
p
d
1
2
1 si et seulement si T()
p
d
1
2
= 1 (et de mme pour B et ) car T
p
d
1
2
1
a ses coefcients dans Z/pZ (et non dans K). En appliquant (12), Adivise T
p
d
1
2

1 si et seulement si :
B()
p
d
1
2
V ()
p
d
1
2
= 1
Le premier terme de cette galit est une constante gale 1 ou -1, le second a
une probabilit proche de 0.5 (gale
p
d
1
2p
d
) de valoir 1 ou -1 car, comme A est
irrductible, V () dcrit K lorsque V dcrit les polynmes de degr d 1. De
mme, B a une probabilit proche de 0.5 de diviser T
p
d
1
2
1, et ces 2 probabilits
sont indpendantes puisque U et V le sont, donc la probabilit que soit A soit B
divise divise T
p
d
1
2
1 est proche de 0.5.
Algorithme de Cantor-Zassenhaus
Argument : Un polynme P coefcients dans Z/pZ de degr k dont tous les fac-
teurs irrductibles sont de degr d.
Valeur renvoye : la liste des facteurs irrductibles de P.
Si k = d renvoyer une liste contenant P.
Dterminer un polynme T alatoire de degr infrieur ou gal 2d 1 et
de coefcient dominant 1. Calculer le pgcd D de P et de T
(p
d
1)/2
1. Si
le degr de T est gal 0 ou k recommencer cette tape.
Appeler rcursivement cet algorithme avec T et P/T et renvoyer la liste
runion des deux listes renvoyes.
Exemple :
Cassons le polynme de degr 6 obtenu dans lexemple prcdent (modulo 5).
Donc P := (x
6
+2x
5
+x
2
+x+2) (mod 5) et d = 3, 2d1 = 5, (p
d
1)/2 = 62.
On choisit au hasard un polynme de degr infrieur ou gal 5, par exemple
T = x
4
x
3
+x+1, puis on calcule T
62
modulo P ce qui donne (x
5
+x
3
+x
2
+1)
(mod 5) puis le pgcd de T
62
1 et de P qui vaut x
3
+x +1 (mod 5), on a donc
55
cass P en deux. En prenant T := x
4
x
3
+x +2, on trouve T
62
= 1 (mod P),
donc ce T naurait pas permis de casser P.
7.2.4 La mthode de Berlekamp
Cette mthode permet de factoriser un polynme sans facteurs multiples, elle
peut aussi servir casser des groupes de facteurs de mme degr. Ici on travaille
dans lanneau des polynmes coefcients dans Z/pZ modulo le polynme P et
on sintresse au noyau de Id (o : x x
p
). On suppose que P =
n
j=1
F
j
o les F
j
sont irrductibles et premiers entre eux. On va montrer que le noyau de
Id est compos des polynmes Q tels que Q (mod F
j
) est constant (dans
Z/pZ) pour tout j.
Si Q (mod F
j
) = s
j
Z/pZ, alors Q
p
(mod F
j
) = s
p
j
= s
j
, donc par le
thorme des restes chinois, Q = Q
p
(mod P).
Rciproquement, si Q
p
Q = 0 (mod P), en utilisant la factorisation :
X
p
X =
jZ/pZ
(X j)
on en tire P divise Q
p
Q =
jZ/pZ
(Q(X)j), donc F
j
divise lun des facteurs
et Q(X) (mod F
j
) Z/pZ. Le noyau de Id est donc un espace vectoriel de
dimension n, le nombre de facteurs irrductibles de P et possde donc p
n
lments
(en effet pour tout n uplet de s
j
, on peut construire un polynme Q du noyau par
le thorme des restes chinois en posant Q (mod F
j
) = s
j
).
Lintrt du noyau de Id est quon peut le calculer sans connaitre les F
j
.
Une fois ce calcul fait, voyons comment on peut remonter aux F
j
. On connait
dj la dimension du noyau donc le nombre de facteurs irrductibles. De plus, on
remarque que le polynome constant est un lment du noyau quon appellera T
1
, on
note alors T
2
, ..., T
n
les autres polynmes du noyau. Ensuite, on calcule le pgcd de
P avec T
2
jT
1
pour j Z/pZ. On sait que T
2
= s
2,j
(mod F
j
), donc ce pgcd
est gal au produit des facteurs F
j
tels que s
2,j
= jT
1
. Lun au moins des pgcd
calculs est non trivial car sinon T
2
= T
1
(mod F
j
) pour tout j donc T
2
= T
1
. Si
on a de la chance tous les s
2,j
seront distincts et les pgcd non triviaux de P avec
T
2
jT
1
donneront les F
k
. Sinon il faudra continuer avec T
3
jT
1
etc.
Exemple :
Revenons sur la factorisation de P := (x
6
+2x
5
+x
2
+x+2) (mod 5). Commen-
ons par calculer la matrice de dans la base 1, x, x
2
, ..., x
5
. On a videmment
(1) = 1 et (x) = x
5
, puis (x
2
) = x
10
= x
5
+x
4
2x
3
+x (mod P), puis en
multipliant par x
5
et en divisant par P, (x
3
) = x
4
+ 2x
3
, de la mme manire
on obtient (x
4
) = x
5
+2x
4
+x
3
x
2
2 et (x
5
) = x
3
+x
2
x. La matrice
de est donc :
M =
_
_
_
_
_
_
_
_
1 0 0 0 2 0
0 0 1 0 0 1
0 0 0 0 1 1
0 0 2 2 1 1
0 0 1 1 2 0
0 1 1 0 1 0
_
_
_
_
_
_
_
_
On calcule ensuite le noyau de Id (comme matrice coefcients dans Z/5Z),
on obtient une base du noyau en prenant par exemple les vecteurs (1, 0, 0, 0, 0, 0)
56
et (0, 0, 1, 1, 0, 1). Donc le polynme P possde 2 facteurs dans Z/5Z[X].
Pour dterminer les facteurs, on calcule le pgcd de P avec le polynme T
2
s o
T
2
= x
5
x
3
x
2
correspond au 2me vecteur de la base du noyau. On obtient
pour s = 0 un pcgd non trivial (x
3
+x+1), ce qui permet de calculer les 2 facteurs.
Si on avait essay dautres valeurs de s, pour s = 1 on obtient comme pgcd 1, pour
s = 2 on trouve le 2me facteur x
3
+ 2x
2
x + 2.
7.2.5 Remonte (Hensel)
Il sagit de passer dune factorisation de P dans Z/pZ[X] une factorisation
de P dans Z/p
k
Z[X], la mthode est analogue celle de lalgorithme EZGCD de
calcul de pgcd de polynmes.
On suppose donc que
P =
n
j=1
P
j
(mod p)
o les P
j
sont premiers entre eux deux deux dans Z/pZ. Il sagit de trouver des
polynmes P
j,k
= P
j
(mod p) tels que
P =
n
j=1
P
j,k
(mod p
k
)
Commenons par le cas k = 2. On pose
P
j,2
= P
j
+pQ
j
= P
j
(mod p)
On a alors :
P =
n
j=1
P
j,2
(mod p
2
) =
n
j=1
(P
j
+pQ
j
) (mod p
2
)
=
n
j=1
P
j
+p
n

j=1
Q
j

k=j
P
k
(mod p
2
)
Donc :
n

j=1
Q
j

k=j
P
k
=
P
n
j=1
P
j
p
(mod p)
On est ramen rsoudre une identit de Bzout gnralise. On montrera dans
lappendice le :
Thorme 5 (Identit de Bzout gnralise) Soit P
1
, ..., P
n
(n 2) des poly-
nmes premiers entre eux deux deux modulo p. Alors pour tout polynme Q, il
existe des polynmes Q
1
, ..., Q
n
tels que :
n

j=1
Q
j

k=j
P
k
= Q (mod p)
On a donc russi remonter lgalit P = P
j
(mod p) P = P
j,2
(mod p
2
). Le passage de P = P
j,l
(mod p
l
) P = P
j,l+1
(mod p
l+1
) est
identique, on a :
P
j,l+1
= P
j,l
+p
l
Q
j
57
o les Q
j
sont les solutions de lidentit de Bzout gnralise avec :
Q =
P
n
j=1
P
j,l
p
l
Lorsquon programme cet algorithme (cf. lappendice), on calcule une fois
pour toutes les solutions de lidentit de Bzout pour Q = 1, et on multiplie par Q.
Algorithme de remonte de Hensel linaire
Arguments : Un polynme P coefcients entiers, la liste L = P
j
de ses fac-
teurs dans Z/pZ[X]
Valeur renvoye : la liste des facteurs de P dans Z/p
l
Z[X]
On calcule la borne de Landau-Mignotte
6
pour les facteurs de P, on multiplie par
le coefcient dominant de P et on calcule l tel que p
l
est strictement plus grand que
deux fois cette quantit. On calcule aussi les polynmes Q
j
de lidentit de Bzout
gnralise pour Q = 1
Puis on fait une boucle pour k variant de 2 l :
On dtermine P
j
P
j
(mod p
k
), on divise par p
k1
et on place le rsultat
dans Q
On multiplie les polynmes Q
j
de lidentit de Bzout gnralise (corres-
pondants au polynme 1) par Q et on dtermine le reste de la division eu-
clidienne de QQ
j
par P
j
, on multiplie par p
k1
et on ajoute le rsultat
P
j
.
Il existe une version quadratique de cette mthode. On passe alors de P =
P
j,l
(mod p
l
) P = P
j,2l
(mod p
2l
). Pour cela, il faut trouver les polynmes
Q
j
solutions de lquation :
n

j=1
Q
j

k=j
P
k,l
= Q (mod p
l
)
Pour l = 1, cest lidentit de Bzout gnralise, mais ce nest plus le cas pour
l > 1. En fait, on rsout cette galit en remontant lidentit de Bzout quadrati-
quement, plus prcisment pour trouver les S
j
solutions de
n

j=1
S
j

k=j
P
k,2l
= Q (mod p
2l
)
on pose S
j
= Q
j
+p
l
R
j
, il sagit donc de trouver les R
j
solutions de
n

j=1
(Q
j
+p
l
R
j
)
k=j
P
k,2l
= Q (mod p
2l
)
soit :
n

j=1
R
j

k=j
P
k,l
=
Q

n
j=1
Q
j

k=j
P
k,l
p
l
(mod p
l
)
on en dduit les R
j
.
6. Rappelons quil sagit dune majoration sur la valeur absolue des coefcients des facteurs de
P
58
Algorithme de remonte de Hensel quadratique
Arguments et valeur renvoye identiques lalgorithme de remonte de Hensel
linaire ci-dessus.
On commence comme dans le cas linaire par calculer les coefcients de lidentit
de Bzout gnralise pour Q = 1 et la valeur de l telle que p
2
l
soit suprieur
deux fois la borne de Landau des facteurs de P fois le coefcient dominant de P.
On fait une boucle sur k variant de 1 l :
On calcule P
j
P
j
(mod p
2
k
), on divise par p
2
k1
et on place le rsultat
dans Q
On multiplie par Q les polynmes Q
j
de lidentit de Bzout gnralise
(avec comme second membre le polynme 1), on calcule le reste euclidien
du rsultat par P
j
(modulo p
2
k1
), on multiplie par p
2
k1
et on ajoute P
j
(avec les notations prcdentes, on passe ainsi des P
j,2
k1 aux P
j,2
k)
Si k = l on renvoie la liste des P
j
On calcule 1

j
Q
j

k=j
P
k
(mod p
2
k
), on divise par p
2
k1
et on place
le rsultat dans Q
On multiplie par Q les polynmes Q
j
de lidentit de Bzout, gnralise et
on calcule le reste euclidien du rsultat par P
j
(modulo p
2
k1
), on multiplie
par p
2
k1
et on ajoute Q
j
(ce qui ajuste les polynmes Q
j
qui vrient
maintenant lidentit de Bzout modulo p
2
k
)
Remarque
Pendant ltape de remonte de Hensel, une optimisation classique consiste tes-
ter la divisibilit dans Z du polynme P par le facteur lift P
j
(
7
) lorsquil na
pas subi de modication pendant 2 tapes successives (autrement dit lorsque P
j
(mod p
l
) = P
j
(mod p
l+1
) (ou (mod p
2l
) pour le lift quadratique). Si la divi-
sion est exacte, on obtient un facteur irrductible de P dans Z. On recalcule alors
la borne de Landau de P/P
j
pour diminuer le nombre ditrations effectuer dans
cette tape.
Exemple :
Reprenons le polynme P(X) = (X
3
+X +1)(X
4
X +1) et supposons quon
ait choisi de le factoriser modulo 5 puis de remonter. On a 3 facteurs a = x 2,
b = x
3
+ x + 1 et c = x
3
+ 2x
2
x + 2. Si on dveloppe P, on trouve 6
coefcients non nuls de valeur absolue 1, on peut calculer la borne de Landau-
Mignotte correspondante sur les coefcients dun facteur entier : 2
5
(
_
(6) + 1)
soit un peu plus de 110, il suft donc deffectuer 3 tapes de remonte linaire
(5
4
= 625 > 111/2). On commence par trouver 3 polynmes A, B, C tels que
A(x
3
+x + 1)(x
3
+ 2x
2
x + 2) +B(x 2)(x
3
+ 2x
2
x + 2)+
+C(x 2)(x
3
+x + 1) = 1 (mod 5)
On commence par rsoudre D(x
3
+ 2x
2
x + 2) + C(x 2)(x
3
+ x + 1) = 1
(mod 5), on trouve C = 2x
2
2 et D = 2x
3
2x
2
+2x+1. Puis on calcule Aet
B en rsolvant E(x
3
+x+1) +F(x2) = 1 qui donne E = 1 et F = x
2
2x
quon multiplie par D, donc A = D et B = 2x
5
+ x
4
+ 2x
3
2x. Ce qui donne
lidentit de Bzout gnralise.
Passons aux calculs de remonte. On a abc = x
7
4x
5
+5x
4
+9x
3
x
2
4
et P = x
7
+x
5
+x
3
x
2
+ 1, donc Q = (P abc)/5 = x
5
x
4
+ 2x
3
+ 1. On
7. Plus exactement, on multiplie P
j
par le coefcient dominant de P modulo p
l
59
pose alors
a
1
= a + 5 (QA (mod a)) (mod 25),
b
1
= b + 5 (QB (mod b)) (mod 25),
c
1
= c + 5 (QC (mod c)) (mod 25)
donc :
a
1
= a + 5 (2), b
1
= b + 5 0, c
1
= c + 5 (2x
2
x)
En principe, on continue encore 2 itrations de la mme manire. La 2me itration
donne :
Q = (P a
1
b
1
c
1
)/25 = 6x
5
3x
4
+ 7x
3
+ 3x
2
2x + 1
a
2
= a
1
+ 25 (QA (mod a)) (mod 125),
b
2
= b
1
+ 25 (QB (mod b)) (mod 125),
c
2
= c
1
+ 25 (QC (mod c)) (mod 125)
donc :
a
2
= a
1
+25(1) = x37, b
2
= b
1
= b, c
2
= c
1
+25(x
2
+1) = x
3
+37x
2
6x+27
On peut aussi observer que b
1
= b, ceci laisse penser que b est un facteur de P
dans Zce quon vrie en effectuant la division euclidienne de P par b = x
3
+x+1.
Comme elle tombe juste, on est ramen factoriser x
4
x + 1 et donc remonter
la factorisation de ac. La borne de Landau diminue 8(

3 + 1) puisque le degr
est 4 et la norme euclidienne du polynme est

3. Il suft alors de remonter dans


Z/125Z au lieu de Z/625Z (on gagne ainsi une itration).
7.2.6 Combinaison de facteurs
Lorsquon a les facteurs de P dans Z/p
k
Z[X] avec p
k
plus grand que le pro-
duit du coefcient dominant de P multipli par la borne de Landau-Mignotte sur
les coefcients de P, on commence par tester la divisibilit dans Z[X] de P par
chaque facteur trouv multipli par le coefcient dominant de P. Si la division est
exacte, on a un facteur irrductible, mais si elle nest pas exacte il peut se produire
quun facteur irrductible de P dans Z[X] soit un produit de deux, voir plusieurs,
facteurs modulaires. Il faut donc tester la divisibilit de P dans Z[X] par toutes les
combinaisons possibles de produits de facteurs modulaires (toujours multipli par
le coefcient dominant de P). Cette tape peut tre exponentiellement longue si le
nombre de facteurs modulaires est grand et si par exemple P est irrductible, bien
que les cas soient trs rares.
Algorithme de recombinaison
Arguments : un polynme coefcients entiers, primitif et sans facteur multiple
P de coefcient dominant p
n
, la liste L des facteurs de P dans Z/p
l
Z[X] pour l
assez grand et p
l
Valeur de retour : la liste F des facteurs de P dans Z.
Initialiser F vide, initialiser le nombre de facteurs combine c 1, entamer une
boucle innie :
60
Si c est strictement suprieur au cardinal de Ldivis par 2, ajouter le quotient
de P par le produit des facteurs de F F et retourner F
Initialiser un vecteur v = (v
1
, ..., v
c
) c composantes la valeur (1, ..., c)
Boucle indnie intrieure :
1. Faire le produit des facteurs de F dindice v, multiplier par p
n
dans
Z/p
l
Z, crire le facteur en reprsentation symtrique, le rendre primitif
et tester si cest un facteur de P dans Z.
2. Si on a trouv un facteur, le rajouter la liste F et supprimer les indices
de v de la liste L, terminer cette boucle intrieure.
3. Sinon, incrmenter v de la manire suivante :
On fait une boucle sur un index m initialis la taille de v, diminuant
de 1 chaque itration : on ajoute 1 llement de v dindice m, si
llment obtenu est infrieur ou gal au cardinal de L + m n, on
arrte cette boucle, sinon on passe litration suivante. Si m = 0 la
n de la boucle, v ne peut pas tre incrment.
4. Si v ne peut tre incrment, on incrmente c et on termine la boucle
intrieure.
5. Sinon on fait une boucle nouveau sur m en partant de la valeur ac-
tuelle incrmente de 1, et tant que m n on pose v
m
= v
m1
+ 1.
Puis on passe litration suivante de la boucle intrieure.
Il existe diffrentes mthodes qui amliorent la complexit de cette tape :
La recherche des degr possibles de facteurs fonde sur la factorisation en
degrs distincts pour diffrents nombres premiers permet dviter des tests
de division si une combinaison de facteurs est dun degr exclu par la facto-
risation pour dautres nombres premiers.
Le test de divisibilit du coefcient dominant ou du coefcient constant per-
met aussi dviter des divisions compltes de polynmes.
Mais ces astuces nvitent pas lnumration de toutes les combinaisons possibles
de facteurs et donc la complexit exponentielle. Lorsque les combinaisons dun
petit nombre de facteurs (par exemple 3) chouent, les systmes rcents utilisent
lalgorithme knapsack de Van Hoeij bas sur lalgorithme LLL (recherche de base
dun rseau ayant des vecteurs de petite norme) qui permet deliminer complte-
ment cette complexit exponentielle.
Exemple :
Toujours le mme exemple, il nous restait deux facteurs dans Z/125Z, le facteur
x
3
+ x + 1 ayant t dtect comme un facteur de P = x
7
+ x
5
+ x
3
x
2
+ 1
dans Z. On teste chacun des facteurs a
2
= x 37 et c
2
= x
3
+ 37x
2
6 x + 27
sparment, sans succs. On les multiplie alors modulo 125, ce qui donne x
4

x + 1 en reprsentation symtrique qui est bien un facteur de P (donc un facteur


irrductible).
7.3 Factorisation plusieurs variables
Comme pour le PGCD en plusieurs variables, on se ramne dabord en une
variable, en gnral on value toutes les variables sauf celle correspondant au de-
gr partiel le plus faible. On factorise ensuite en une variable puis on remonte. A
chaque tape de remonte, il peut tre nouveau ncessaire de combiner plusieurs
61
facteurs. Diffrentes stratgies existent, comme pour le PGCD : factorisarion heu-
ristique (avec reconstruction z-adique), remonte variable par variable ou toutes les
variables en mme temps comme dans EZGCD. On va prsenter ici plus en dtails
lalgorithme de factorisation heuristique.
Soit P un polynme en X
1
, ..., X
n
coefcients entiers avec n > 1, on choisit
une des variables par exemple X
n
, quon notera X dans la suite. On considre
P comme un polynme en X
1
, ..., X
n1
coefcients dans Z[X]. On suppose
que P est primitif (quitte extraire son contenu qui est dans Z[X]). On calcule
ensuite P(z) pour un entier z tel que
8
[z[ 2[P[ + 2. On factorise P(z) dans
Z[X
1
, ..., X
n1
] :
P(z)(X
1
, ..., X
n1
) = c(z)
k
j=1
p
j
(X
1
, ..., X
n1
) (13)
o c est le contenu du polynme P(z) (comme polynme en n 1 variables
coefcients entiers). Il sagit de reconstruire les facteurs de P partir des p
j
et de
c. Deux problmes se posent alors, celui de la recombinaison possible de plusieurs
facteurs p
j
pour obtenir un facteur irrductible de P, et lexistence dun facteur
entier du contenu c combiner avec un ou plusieurs p
j
pour obtenir ce facteur
irrductible. Plus prcisment, si P
k
est un facteur irrductible de P, on a :
P
k
(z) = d(z)
certains j
p
j
, o d(z) divise c(z) (14)
On a le :
Thorme 6 Soit P(X
1
, ..., X
n1
, X) un polynme coefcients entiers ayant
au moins 2 variables. On suppose que P est primitif vu comme polynme en les
variables X
1
, ..., X
n1
coefcients dans Z[X]. Il existe une majoration C du
contenu [c(z)[ de P valu en X = z (plus prcisment on peut trouver un entier
C tel que c(z) divise C).
Il existe un nombre ni de z tels que lun des facteurs irrductibles P
k
de P valu
en X = z soit rductible (cest--dire tels que (14) admette plusieurs facteurs p
j
distincts)
Preuve
Pour dterminer C, on remarque que les facteurs du contenu de P(z) sont des
facteurs communs des coefcients de P valus en z vu comme polynme en
X
1
, ..., X
n1
coefcients dans Z[X]. Donc c(z) divise le gnrateur de lidal en-
gendr par ces coefcients (ce gnrateur est un polynme de Z[X] qui est constant
car on a suppos P primitif), on peut aussi dire que deux au moins des coefcients
dans Z[X] de P sont premiers entre eux, alors c(z) divise le coefcient de lidentit
de Bzout de ces 2 coefcients vu comme polynmes en X.
Considrons maintenant un facteur irrductible P
k
de P de degr d par rapport
X. Pour X
1
, ..., X
n1
xs, on factorise P
k
sur C :
P
k
(X) = p
k

d
j=1
(X z
j
)
On va maintenant se restreindre un domaine des X
1
, ..., X
n1
sur lequel les z
j
ont
une dpendance analytique par rapport X
1
, ..., X
n1
. Pour cela on veut appliquer
le thorme des fonctions implicites pour dterminer z
j
au voisinage dune solution
8. Ici |P| dsigne le plus grand coefcient de P en valeur absolue
62
donne. On calcule donc la drive P

k
de P
k
par rapport X. On sait que P na
pas de facteurs multiples, donc P
k
et P

k
sont premiers entre eux, donc daprs
lidentit de Bzout, il existe un polynme non nul D dpendant de X
1
, ..., X
n1
et deux polynmes U et V dpendant de X
1
, ..., X
n1
, X tels que :
UP
k
+V P

k
= D
Si D(X
1
, ..., X
n1
) ne sannule pas, on va pouvoir appliquer le thorme des fonc-
tions implicites. On se xe x
1
, .., x
n1
, on calcule dans C les racines z
j
du poly-
nme P(x
1
, .., x
n1
, X) pour une solution z
j
telle que P(x
1
, .., x
n1
, z
j
) = 0,
comme D est non nul, on a P

(x
1
, ..., x
n1
, z
j
) ,= 0, donc on peut crire au voisi-
nage de (x
1
, .., x
n1
)
z
j
= z
j
(X
1
, ..., X
n1
), P(X
1
, ..., X
n1
, z
j
) = 0
avec des fonctions z
j
analytiques. Si Dest constant, Dne sannule pas, sinon quitte
permuter les variables, on peut supposer que le degr de D par rapport X
1
est
non nul. On peut alors se restreindre une zone X
1
>> X
2
>> .. >> X
n1
>>
1 o D sera non nul ce qui permet de suivre analytiquement les z
j
.
Supposons maintenant quil existe un nombre inni de z tels P
k
(z) soit rduc-
tible. Alors il existe un ensemble inni Z de ces valeurs de z pour lesquels lun des
facteurs coefcients entiers f
j
de P
k
(z) correspond un mme sous-ensemble R
des racines z
j
de P
k
et un mme contenu c (puisquil y a un nombre ni de com-
binaisons possibles des racines en facteur et un nombre ni de diviseurs possibles
du contenu de P
k
). Pour z Z, on a :
f
j
(X
1
, ..., X
n
, z) = c
lR
(z z
j
), f
j
Z[X
1
, ..., X
n1
]
Soit L(X) le polynme obtenu par interpolation de Lagrange en cardinal(R) + 1
points z de Z, gal f
j
en X = z. Pour des raisons de degr, on a :
L = c
lR
(X z
j
)
donc L est un facteur de P. De plus L est un polynme en X
1
, ..., X
n1
, X coef-
cients rationnels (par construction). Ceci vient en contradiction avec lhypothse
P
k
irrductible, car on a construit un facteur de P
k
coefcients rationnels L de
degr strictement infrieur.
Corollaire
Pour z assez grand, la reconstruction z-adique de c(z)p
j
(z) est un polynme dont
la partie primitive est un facteur irrductible de P.
Preuve du corollaire
On prend z assez grand pour que tous les facteurs irrductibles de P valus en
z aient un seul facteur polynomial (i.e. soient de la forme d(z)p
j
(z)). Quitte
augmenter z, on peut supposer que [z[ > 2CL o C est la majoration de [c(z)[ et
L est la borne de Landau sur les facteurs de P. Alors la reconstruction z-adique de
c(z)p
j
(z) est c(z)/d(z)P
j
, donc sa partie primitive est un facteur irrductible de
P.
Algorithme de factorisation heuristique plusieurs variables
Argument : un polynme P primitif en au moins 2 variables.
Valeur renvoye : les facteurs irrductibles de P
63
Choisir la variable X par rapport laquelle P est de plus bas degr puis factoriser
le contenu de P vu comme polynme coefcients dans Z[X]. Initialiser un entier
z 2[P[ + 2 (o [P[ est le plus grand coefcient entier de P en valeur absolue) et
une liste L la factorisation de du contenu de P.
Boucle indnie :
Si P = 1 renvoyer la liste L des facteurs de P.
Tant que pgcd(P(z), P

(z)) = 0 incrmenter z de 1.
Factoriser P(z) = c(z)p
j
Pour tous les facteurs p
j
, dterminer le polynme P
j
tel que c(z)p
j
= P
j
(z)
par remonte z-adique (avec les coefcients de P
j
crit en reprsentation
symtrique, de valeur absolue plus petite que [z[/2). Tester si la partie pri-
mitive de P
j
divise P. Si oui, rajouter un facteur irrductible la liste L, et
diviser P par ce facteur.
Augmenter z, par exemple remplacer z par la partie entire de

2z.
7.4 Preuve de lidentit de Bzout gnralise
Elle se fait par rcurrence. Pour n = 2, cest lidentit de Bzout usuelle. Pour
passer du rang n 1 au rang n, on isole P
n
dans lidentit rsoudre :
_
_
n1

j=1
Q
j
(
1kn1,k=j
P
k
)
_
_
P
n
+Q
n

kn1
P
k
= Q (mod p)
Comme P
n
est premier avec
kn1
P
k
, en appliquant Bzout, on trouve deux
polynmes Q
n
et R
n
tels que :
R
n
P
n
+Q
n

kn1
P
k
= Q (mod p) (15)
Il reste rsoudre
n1

j=1
Q
j

1kn1,k=j
P
k
= R
n
(mod p)
ce que lon peut faire par hypothse de rcurrence.
7.5 Algorithme de Bzout gnralis
Arguments : une liste P
1
, ..., P
n
de polynmes premiers entre eux 2 2 et un
polynme Q coefcients dans Z/pZ
Valeur renvoye : la liste de polynmes Q
1
, ..., Q
n
tels que
n

j=1
Q
j

k=j
P
k
= Q (mod p)
On peut commencer par calculer le produit de tous les P
k
puis faire une boucle sur
j pour calculer les produits des P
k
pour k ,= j en divisant le produit complet par P
j
(on fait ainsi n1 multiplications et n divisions au lieu de n(n1) multiplications).
Boucle indnie sur n dcrment de 1 par itration :
64
Si n = 2, on rajoute la liste rsultat les polynmes Q
1
et Q
2
de lalgorithme
de Bzout usuel et on renvoie la liste
Sinon, on calcule les polynmes R
n
et Q
n
vriant (15), on rajoute Q
n
en
dbut de liste, on remplace Q par R
n
.
Remarquons que lorsque nous utiliserons cet algorithme, Qsera la diffrence entre
deux polynmes de mme degr (le degr de P) et de mme coefcient dominant
1, on peut donc remplacer les Q
i
par le reste euclidien de Q
i
par P
i
sans changer
lgalit.
7.6 Pour en savoir plus
Pour factoriser des polynmes ayant des coefcients dans des extensions alg-
briques, il existe un algorithme assez simple, lalgorithme de Trager, qui nest pas
forcment le plus performant (la recherche est encore active dans ce domaine), cf.
le livre de Henri Cohen pp. 142-144.
Pour factoriser sur des corps nis, on peut consulter la thse de Bernardin dis-
ponible sur le web (http://www.bernardin.lu).
On peut aussi consulter le code source de Mupad, les routines de factorisation
se trouvent dans le rpertoire lib/POLYLIB/FACLIB aprs avoir dsarchiv la
lib.tar. Le point dentre pour factoriser des polynmes plusieurs variables
sur Z est le chier mfactor.mu, on observera que lalgorithme utilis par Mupad
est assez diffrent de celui quon a dtaill dans la section prcdente.
65
7.7 Exercices (factorisation des polynmes)
1. Dterminer le nombre de racines de x
7
+x
4
+ 12x 5 comprises entre 0
et 6 (en utilisant les suites de Sturm, on donnera les dtails des calculs).
2. crire un programme calculant la suite de Sturm dun polynme suppos
squarefree (on peut tester avec sqrfree), en utilisant lalgorithme dEu-
clide.
3. Trouver les facteurs de degr 1 sils existent de 3x
5
+25x
4
+67x
3
+77x
2
+
55x+13 en remontant ses racines dans Z/pZ[X] pour p premier bien choisi.
4. Factoriser le polynme x
5
+x + 1 par la mthode de Berlekamp.
5. Calculer avec un logiciel les valeurs numriques des racines complexes de
P(x) = x
5
+x +1. Trouver les combinaisons de racines dont la somme est
entire (aux arrondis prs). En dduire la factorisation en facteurs irrduc-
tibles sur Z de P.
6. Factorisation numrique sur C. crire un programme qui calcule une racine
dun polynme coefcients complexes en utilisant une mthode itrative
de type mthode de Newton (avec ventuellement un prfacteur lorsquon
dbute la recherche). Les polynmes seront reprsents par la liste de leurs
coefcients et lvaluation faite par la mthode de Horner. Trouver ensuite
toutes les racines du polynme en liminant la racine trouve (toujours avec
Horner). Trouver les combinaisons de racines correspondant un facteur
coefcients entiers.
7. Mme question pour les facteurs de degr 2 dun polynme coefcients
rels sans racines relles en utilisant la mthode de Bairstow dcrite ci-
dessous.
On cherche un facteur F = x
2
+ sx + p de P, on calcule le quotient et le
reste de la division P = FQ + R par une mthode de type Horner, il sagit
de rendre R (vu comme un vecteur 2 composantes) nul. On calcule donc

s,p
R (en cherchant le quotient et le reste de xQ et Q par F, pourquoi ?) et
on pose :
(s, p)
n+1
= (s, p)
n
(
s,p
R)
1
R(s, p)
n
o est un prfacteur compris entre 0 et 1 et ajust 1 lorsquon est proche
du facteur.
8. Soit p un entier premier et P un polynme coefcients dans Z/pZ. On a la
relation
gcd(X
p
k
X, P) =

f|P,deg(f)|k
f, f irrductible
En utilisant cette relation, dterminer les degrs des facteurs de
(x
3
+x + 1)(x
4
+x + 1)
modulo 5 et 7 (sans utiliser la commande factor). Peut-on en dduire que
x
3
+x + 1 et x
4
+x + 1 sont irrductibles sur Z?
9. Utiliser les options verbose de votre logiciel de calcul formel pour factori-
ser x
202
+x
101
+ 1 et vriez que vous avez compris la mthode utilise.
66
10. Montrer que 2x+x
2
y+x
3
+2x
4
+y
3
+x
5
est irrductible sur Z sans utiliser
linstruction factor 2 variables (on pourra factoriser pour quelques valeurs
de x ou de y)
11. Que se passe-t-il lorsquon excute lalgorithme de Yun dans Z/nZ?
12. Dterminer les degrs des facteurs de (x
3
+x +1)(x
4
+x +1) modulo 5 et
7 (sans utiliser la commande factor). Peut-on en dduire que x
3
+ x + 1 et
x
4
+x + 1 sont irrductibles sur Z?
13. Utiliser les options verbose de votre logiciel de calcul formel pour factori-
ser x
202
+x
101
+ 1 et vriez que vous avez compris la mthode utilise.
14. Montrer que 2x+x
2
y+x
3
+2x
4
+y
3
+x
5
est irrductible sur Z sans utiliser
directement linstruction factor (on pourra factoriser pour quelques valeurs
de x ou de y)
67
8 Intgration
8.1 Introduction
Que peut-on esprer dun systme de calcul formel lorsquil sagit de calcu-
ler une primitive ? Tout dabord, on peut esprer quil sache rsoudre ce que lon
donne en exercice nos tudiants ! Ceci suppose donc de connaitre quelques m-
thodes classiques, par exemple : intgration de polynmes ( !), polynmes multi-
plis par exponentielle ou/et fonctions trigonomtriques, de polynmes trigonom-
triques par linarisation, de fractions rationnelles, de fractions trigonomtriques, de
fractions de racines carres de polynmes du second ordre, de fonctions sy rame-
nant par une ou plusieurs intgrations par parties ou par changement de fonction
(par exemple reconnaissance de formes F(u)u

) ou par changement de variables,


etc.
Mais au-del de ces mthodes (qui ont lavantage de la rapidit mais tiennent
parfois plus de la recette de cuisine que de lalgorithme...), on peut se demander si
la primitive dune fonction donne peut ou non sexprimer en terme des fonctions
lmentaires. Par exemple, tout le monde sait que la fonction e
x
2
nadmet pas
de primitive simple, encore faut-il donner un sens mathmatique prcis cette
afrmation. Ceci ncessite de donner une dnition rigoureuse du terme fonction
lmentaire. On peut alors appliquer un algorithme dvelopp par Risch (pour les
extensions dites transcendantes, obtenue par ajout des fonctions exponentielle et
logarithme) qui permet de rpondre la question : il sagit vu de trs loin dune
extension de lalgorithme dintgration des fractions rationnelles.
Cet article se dcompose en deux parties principales :
la section 8.2 prsente les dnitions de fonctions lmentaires, de tour de
variables, et donne deux thormes, le thorme de structure de Risch qui
permet dcrire une fonction contenant des exponentielles et des logarithmes
comme une fonction lmentaire par rapport une tour de variable, et le
thorme de Liouville qui donne la forme que peut prendre une primitive
dune fonction lmentaire lorsquelle est aussi lmentaire.
la section 8.3 dcrit lalgorithme dintgration de Risch permettant de d-
cider si une fonction lmentaire donne possde ou non une primitive l-
mentaire et de la calculer dans le premier cas. Nous ne prsentons ici lalgo-
rithme de Risch que pour les extensions transcendantes pures (ln et exp).
Le lecteur intress par le cas des extensions algbriques pourra consulter la thse
de Trager. Pour les extensions plus gnrales (incluant en particulier les fonctions
tangente, arctangente), la rfrence est le livre de Bronstein donne en section 8.4.
8.2 Fonctions lmentaires
8.2.1 Extensions transcendantes, tour de variables
On se donne une expression f(x) dpendant de la variable x que lon souhaite
intgrer par rapport x. Lalgorithme de Risch sapplique cette expression si on
peut lcrire comme une fraction rationnelle plusieurs variables algbriquement
indpendantes
x, f
1
(x), f
2
(x, f
1
(x)), ..., f
n
(x, f
1
(x), f
2
(x, f
1
(x)), ..., f
n1
(x, f
1
(x), ..., f
n2
(x)))
68
o les f
i
sont soit lexponentielle soit le logarithme dune fraction rationnelle (le
corps de base appel aussi corps de constantes ici est soit C, soit une extension al-
gbrique de Qou une extension algbrique dun corps de fractions rationnelles sil
y a des paramtres). On appelle tour de variables la suite des x, f
1
, ..., f
n
(chaque
tage est donc une exponentielle dune fraction rationnelle ou le logarithme dune
fraction rationnelle dpendant des tages prcdents) et on dira que f est une fonc-
tion lmentaire par rapport cette tour de variables.
Lintrt de lcriture dune expression sous forme de tour est quelle est stable
par drivation : si on drive par rapport x une fonction lmentaire dpendant
dune tour de variables, on obtient encore une fonction lmentaire dpendant de
la mme tour de variables. Autrement dit, lensemble des fonctions lmentaires
pour une tour xe est un corps diffrentiel.
Exemples :
e
x
2
est bien dans ce cas, pour n = 1, f
1
est lexponentielle de x
2
qui est
algbriquement indpendant de x. Les fonctions (2x
2
1)e
x
2
ou x/(e
x
2
1)
sont aussi lmentaires par rapport la tour de variables x, e
x
2
.
xln(x) exp(x) est lmentaire par rapport la tour x, ln(x), exp(x), mais
aussi par rapport la tour x, exp(x), ln(x).
xe
xln(x)
est lmentaire, en prenant n = 2, f
1
= ln(x) et f
2
= e
xf
1
.
x
n
= e
nln(x)
, o n est un paramtre, convient avec comme tour x, ln(x), e
nln(x)
e
ln(x)
ne convient pas car il nest pas algbriquement indpendant de x, ln(x)
mais on peut le rcrire sous une forme acceptable puisque e
ln(x)
= x.
e
ln(x)/2
ne convient pas non plus car son carr est gal x. Une rcriture
ne suft pas, cet exemple est bien sr une extension algbrique et non trans-
cendante.
Dans la suite, on va sintresser aux tours de variables dans lesquelles on a
effectu des simplications videntes. On limine les ln exp de la manire sui-
vante : si f
k
= ln(g
k
), on regarde si g
k
vu comme fraction en f
1
, ..., f
k1
possde
un facteur f
m
j
(avec m Z) lorsque f
j
= exp(g
j
) est une exponentielle. Si cest
le cas, on a f
k
= mg
j
+ ln(g
k
/g
m
j
). On change alors de tour en remplaant f
k
par

f
k
= ln(g
k
/g
m
j
) = f
k
mg
j
. On limine aussi les exp ln, si f
k
= exp(g
k
), pour
j < k si f
j
est un logarithme, on regarde si c
j
=
f
j
g
k
[
f
j
=0
est un entier, si cest
le cas on remplace f
k
par

f
k
= f
k
/g
c
j
k
.
Exemples :
ln(
e
x
2
+ 1
e
x
2
) x
2
+ ln(e
x
2
+ 1)
e
3 ln(x)+ln(x)
2
+5
x
3
e
ln(x)
2
+5
8.2.2 Thorme de structure de Risch
On voit donc quil est ncessaire de disposer dun algorithme pour dcider
si des exponentielles et logarithmes sont algbriquement indpendants. Cet algo-
rithme est bas sur un thorme de structure d Risch :
Thorme 7 Soit f = ln(g(x)) le logarithme dune fonction lmentaire g par
rapport une tour de variables T, alors soit f est algbriquement indpendant
des variables de T, soit f est lmentaire et plus prcisment combinaison linaire
rationnelle des logarithmes et des arguments des exponentielles de la tour T.
69
Soit f = exp(g) lexponentielle dune fonction lmentaire g par rapport une
tour de variables T, alors soit f est algbriquement indpendante des variables
de T, soit il existe n tel que f
n
soit lmentaire par rapport T (on peut alors
appliquer le cas prcdent ng = ln(f
n
))
Dmonstration :
Commenons par le cas de lexponentielle. On considre le polynme minimal de
f = exp(g) :
a
n
f
n
+... +a
0
= 0, a
n
,= 0, a
0
,= 0
o les a
i
sont des fractions rationnelles en T. On drive et on applique f

= g

f :
(a

n
+na
n
g

)f
n
+... + (a

k
+ka
k
g

)f
k
+... = 0
cest un multiple du polynme minimal donc il existe une fraction rationnelle C
(par rapport la tour de variables) telle que :
k, (a

k
+ka
k
g

) = Ca
k
Comme a
n
,= 0, cela entraine a

n
/a
n
+ ng

= C. Le coefcient constant a
0
est
aussi non nul, donc a

0
/a
0
= C et
ng

= a

0
/a
0
a

n
/a
n
ng = ln(
a
0
a
n
) +k
o k est constant, donc f
n
= exp(ng) = e
k
a
0
/a
n
est lmentaire.
Passons au cas du logarithme, supposons que f = ln(g) dpende algbrique-
ment de la tour T, on va commencer par montrer que f est lmentaire. On crit :
a
n
f
n
+... +a
0
= 0
o les a
i
sont des fractions rationnelles en T. On drive en appliquant f

= g

/g :
a

n
f
n
+ (na
n
f

+a

n1
)f
n1
... +a
1
f

+a

0
Comme f

est une fraction rationnelle en T, le polynme a

n
X
n
+ (na
n
f

+
a

n1
)X
n1
+ ... + a
1
f

+ a

0
qui annule f doit tre un multiple du polynme
minimal de f, il existe donc une fraction rationnelle C par rapport T telle que :
a

n
= Ca
n
(na
n
f

+a

n1
) = Ca
n1
...
On en dduit f

:
f

=
a

n
a
n
a
n1
a

n1
na
n
=
_
a
n1
na
n
_

donc il existe une constante c telle que :


f =
a
n1
na
n
+c
donc f est lmentaire par rapport la mme tour T que g.
Montrons maintenant quun logarithme f = ln(g) qui est lmentaire par rap-
port une tour de variable T est combinaison linaire coefcients rationnelles
70
des logarithmes et des arguments des exponentielles de T
9
. Soit X la dernire va-
riable de la tour T. On factorise maintenant le numrateur et le dnominateur de
g en

j
P
j
j
o les P
j
sont sans facteurs multiples et premiers entre eux 2 2 (par
rapport X), il existe C indpendant de X tel que :
g = C

jZ
P
j
j
ln(g) = ln(C) +

jZ
j ln(P
j
) (16)
Alors f

= ln(C)

j
jP

j
/P
j
donc

P
j
f

est un polynme en X. Soit N/D


la fraction irrductible reprsentant f, on a :
f

=
N

D ND

D
2
on vient donc de montrer que :
_
_

j
P
j
_
_
N

D ND

D
2
est un polynme en X (17)
Soit P un facteur irrductible de D de multiplicit k tel que D = P
k
Q (donc P
premier avec Q, mais P est aussi premier avec N car f = N/D est irrductible).
Alors en simpliant numrateur et dnominateur par P
k1
, on a :
_
_

j
P
j
_
_
N

PQN(kP

Q+PQ

)
P
k+1
Q
2
est un polynme en X. (18)
On en dduit, aprs simplication dau plus un facteur P au dnominateur avec
lun des P
j
, que P
k
divise N

PQN(kP

Q+PQ

) donc P divise P

. Ceci nest
possible que si P = 1 (et donc le dnominateur de f est gal 1) ou si la variable
X est une exponentielle et P = X.
Montrons que ce deuxime cas est en fait exclus : en effet si P = X = exp(Y )
est une exponentielle, on a alors D = X
k
et Q = 1. Comme P

= Y

X, (18)
devient :
_
_

j
P
j
_
_
X(N

kNY

)
X
k+1
est un polynme en X
Comme X ne divise pas N, N possde donc un coefcient constant a
0
non nul.
Le coefcient constant de N

kNY

est a

0
ka
0
Y

. Si ce terme tait nul alors


a

0
= ka
0
Y

donc a
0
= c exp(kY ) = cX
k
or a
0
ne dpend pas de X donc c = 0
donc a
0
= 0, absurde. Donc X ne divise pas N

kNY

. Comme X
k+1
divise

P
j
X(N

kNY

), on en dduit que X
k
divise un des P
j
. Donc k = 1 et
P
j
= XQ
j
. Revenons maintenant (16), on a :
f = ln(g) = ln(C) +j ln(XQ
j
) +

l=j
l ln(P
l
)
on drive :
f

= ln(C)

+jY

+j
Q

j
Q
j
+

l=j
l
P

l
P
l
9. cette preuve peut tre saute en premire lecture
71
on voit quil nest plus ncessaire de multiplier f

par P
j
pour avoir un polynme,
multiplier par Q
j
suft, plus prcisment
_
_

l=j
P
l
_
_
Q
j
N

D ND

D
2
est un polynme en X.
donc X
k+1
divise
_

l=j
P
l
_
Q
j
X(N

kNY

) ce qui est impossible.


Donc D = 1 dans tous les cas et on a f = N. Donc
f

= N

= ln(C)

j
jP

j
/P
j
est un polynme par rapport X
On en dduit que les P
j
ne dpendent pas de X sauf si X est une exponentielle et
P
j
= X. Dans les deux cas N

ne dpend pas de X donc le polynme N est de


degr 0 ou 1 en X (si X est une exponentielle, N est forcment de degr 0)
Si X = exp(Y ) est une exponentielle (avec Y lmentaire ne dpendant pas
de X), alors f = N est indpendant de X. On retire jY f et on divise g par
X
j
(en posant j = 0 si aucun des P
j
nest gal X), qui devient indpendant
de X, on conserve ainsi lgalit f = ln(g) mais avec une variable de moins
dans la tour de variables par rapport laquelle f et g sont lmentaires.
Si X nest pas une exponentielle, N = cX + d avec c dans le corps de
constantes, et d indpendant de X. Si X = x, on a g = exp(cx+d) qui nest
rationnel que si c = 0. On a alors d donc f et g constants. Si X = ln(Y ) est
un logarithme (avec Y lmentaire ne dpendant pas de X), alors j, P
j
= 1
donc g est lmentaire indpendante de X. On a alors :
f = N = c ln(Y ) +d = ln(g)
avec c dans le corps des constantes, d et g lmentaires indpendants de X.
On cherche maintenant la fonction lmentaire d. Cette fonction nest pas le
logarithme dune fonction lmentaire en gnral car c nest pas forcment
entier, mais d

a les mmes proprits que la drive du logarithme dune


fonction lmentaire. On peut donc reprendre le mme raisonnement mais
avec une variable de moins dans la tour de variables. Si la tour quon a choi-
sie est normalise, alors Y ne contient au numrateur et au dnominateur
aucune puissance dune exponentielle dune variable de la tour donc le po-
lynme P
j
du cas prcdent ne peut provenir de Y ce qui entraine que j est
bien entier dans le cas prcdent (bien que c ne le soit pas forcment).
Aprs avoir fait une rcurrence sur le nombre de variables de la tour, on a donc
f qui sexprime comme combinaison linaire coefcients entiers des arguments
g
k
des variables exponentielles f
k
= exp(g
k
) de la tour et coefcients a priori
quelconque des variables logarithmes f
l
= ln(g
l
) de la tour :
f =

k
j
k
g
k
+

l
x
l
ln(g
l
) = ln(g)
Comme g est lmentaire, h = g/

k
exp(g
k
)
j
k
est lmentaire de logarithme

l
x
l
ln(g
l
). Montrons que si les arguments des ln sont des polynmes sans fac-
teurs multiples, alors les x
l
sont entiers. Rappelons que les ln(g
l
) sont algbri-
quement indpendants, on peut donc construire des polynmes irrductibles I
l
par
72
rapport aux variables de la tour tels que I
l
divise une fois g
l
mais ne divise pas les
g
k
prcdents. Soit h =

jZ
P
j
j
la factorisation sans facteurs multiples de h. On
drive alors ln(h) ce qui donne :

l
x
l
g

l
/g
l
=

j
jP

j
/P
j
o

j
P
j
j
est la dcomposition sans facteurs multiples de h. Comme I
l
divise un
et un seul des P
j
on en dduit que x
l
est gal au j correspondant et est donc
entier. (Remarque : si on nimpose pas aux arguments des logarithmes dtre des
polynmes sans facteurs carrs, on obtiendrait ici des coefcients rationnels).
En pratique :
On peut effecter lalgorithme de la manire suivante :
on cherche les variables gnralises de lexpression qui dpendent de x.
On ajoute les variables gnralises en commenant par la moins longue
Si cest un logarithme, on extrait les puissances des exponentielles prc-
dentes dont il dpend. On cherche des relations entre fonctions ln en les r-
crivant comme combinaison linaire de ln indpendants. Pour avoir des ln
indpendants, on se ramne dabord des polynmes sans facteurs multiples
en utilisant la relation ln(a/b) = ln(a) ln(b) et en crivant la factorisa-
tion sans facteurs multiples de chaque polynme argument, puis on extrait
le PGCD 2 2 des arguments de logarithmes jusqu obtenir des arguments
de ln premiers entre eux.
Si cest une exponentielle, on teste si son argument est combinaison linaire
coefcients rationnels :
des arguments des exponentielles prcdentes,
des ln des logarithmes prcdents,
de ln(x) et de i .
Pour cela on substitue les ln par des indtermines, et on drive une fois
par rapport cette indtermine, le rsultat doit tre un rationnel, pour les
variables exponentielles, il faut rduire au mme dnominateur et rsoudre
le systme linaire obtenu en identiant les coefcients du numrateur. Si
lexponentielle est indpendante des prcdentes, on extrait de lexponen-
tielle rajouter la partie linaire de la dpendance en les ln prcdents si le
coefcient correspondant est entier. Par exemple, on rcrit :
xe
2 ln(x)+ln(x)
2
= x
3
e
ln(x)
2
Remarque
On nest pas oblig de se limiter aux seules fonctions logarithmes et exponentielles,
lessentiel est de pouvoir tester lindpendance algbrique des expressions cres.
Pour viter davoir introduire des exponentielles et logarithmes complexes dans
une expression relle, on peut autoriser par exemple des extensions en tangente ou
en arctangente.
8.2.3 Thorme de Liouville
On a vu que la drive dune fonction lmentaire dpendant dune tour de
variables est une fonction lmentaire dpendant de la mme tour de variables.
73
Rciproquement, supposons quune fonction lmentaire admette une primitive qui
soit lmentaire, cest--dire quelle doit tre une fraction rationelle par rapport
une tour de variables mais pas forcment identique celle de dpart. Alors, si une
telle criture existe, des termes logarithmiques prs, elle ne peut dpendre que de
la mme tour de variables, plus prcisment on a le thorme de Liouville :
Thorme 8 Soit f une fonction lmentaire par rapport une tour de variables
T et un corps de constantes K admettant une primitive lmentaire F. Alors il
existe un nombre ni de constantes c
1
, ..., c
n
et de fonctions lmentaires v
1
, ..., v
n
par rapport T avec comme corps de constantes une extension algbrique K

de
K tel que F

k
c
k
ln(v
k
) soit lmentaire par rapport T et K.
Preuve :
10
Soit f lmentaire de tour T
1
(corps K) et F sa primitive suppose lmentaire de
tour T
2
et de corps K

une extension algbrique de K. On commence par rajouter


aprs les lements de T
1
les lements ncessaires de T
2
pour obtenir une tour T par
rapport laquelle f et F sont lmentaires (plus prcisment F sera lmentaire
quitte autoriser des puissances fractionnaires des variables exponentielles de T
1
).
Le thorme de structure de Risch permet de faire cela, en effet on regarde pour
chaque lment de T
2
sil est algbriquement indpendant des lments de T
1
ou
non. Sil lest, on le rajoute la tour T, sil ne lest pas alors dans le cas dun loga-
rithme il est lmentaire et dans le cas dune exponentielle, une de ses puissances
est lmentaire. Donc F est bien une fraction rationnelle par rapport aux lments
logarithmiques de T
1
, aux racines n-ime des lments exponentiels de T
1
et des
lments de T
2
dans cet ordre (le corps des constantes tant K

).
Premire tape :
Commenons par les lments restant de T
2
. Soit X
k
llment au sommet de la
tour T. La drive f de F par rapport X
k
ne dpend pas de X
k
. Donc soit F
ne dpend pas de X
k
et on passe la variable suivante, soit X
k
= ln(v
k
) est un
logarithme et F = c
k
ln(v
k
) + d
k
avec c
k
K

et v
k
et d
k
indpendants de X
k
.
Sil ny a pas dautres lments restants de T
2
, on passe la 2me tape. Sinon soit
X
k1
la variable suivante (juste en-dessous de X
k
dans la tour). En drivant, on a :
F

= c
k
v

k
v
k
+d

k
= f
Supposons que v
k
dpende de X
k1
, on fait alors un raisonnement analogue
celui de la preuve du thorme de structure de Risch, en dcomposant v
k
en pro-
duit/quotient de facteurs sans multiplicits v
k
=

P
j
j
et en crivant d
k
= N/D
on a :
_
_

j
P
j
_
_
N

D ND

D
2
est un polynme en X
k1
. On en dduit comme prcdemment que D = 1,
N

= d

k
est indpendant de X
k1
. Comme on a suppos que v
k
dpend de X
k1
,
X
k1
= exp(Y
k1
) est alors une exponentielle, N = d
k
ne dpend pas de X
k1
et
lun des P
j
= X
k1
(sinon tous les P
j
seraient constants en X
k1
donc v
k
aussi).
On limine alors la variable X
k1
en crivant ln(v
k
) = jY
k1
+ln(w
k
), avec Y
k1
et w
k
lmentaires et indpendants de X
k1
.
10. Peut tre omise en premire lecture
74
Si v
k
est indpendant de X
k1
, alors d

k
aussi donc soit d
k
est indpendant
de X
k1
et on passe la variable suivante, soit X
k1
est un logarithme et d
k
=
c
k1
ln(v
k1
) + d
k1
. En continuant pour toutes les variables restantes de T
2
, on
obtient
F =

k
c
k
ln v
k
+d
avec d et v
k
lmentaires pour T
1
(avec exponentielles modies en en prenant une
racine n-ime) et K

.
Deuxime tape Il sagit de montrer que pour les exponentielles, il nest en fait
pas ncessaire de prendre de racines n-ime. La comprhension de cette tape de-
mande un peu de familiarit avec lalgorithme de Risch (cf. infra). On va faire
la preuve pour la variable au sommet de la tour T
1
si cest une exponentielle.
On verra dans le droulement de lalgorithme de Risch que pour les autres va-
riables, il y a appel rcursif de lalgorithme dintgration, donc traiter la variable
au sommet sufra. Soit donc exp(Y ) la variable au sommet de la tour T
1
, on note
X = exp(Y/n) la racine n-ime de cette variable qui est utilise pour exprimer
F =

c
k
ln v
k
+ N/D comme une fraction rationnelle en X alors que f = F

est une fraction rationnelle en X


n
. On a donc :

c
k
v

k
v
k
+
N
D

= f = fraction rationnelle en (X
n
)
Notons que le fait que X soit une exponentielle est essentiel, car par exemple lin-
tgrale dune fraction rationnelle dpendant de x
n
comme x
3
ou 1/(x
3
1) ne
sexprime pas en fonction de x
3
. On traite dabord la partie polynomiale gnrali-
se de f en X
n
:

jZ
a
j
(X
n
)
j
Son intgrale est un polynme gnralis, ventuellement dpendant de X, soit

jZ
A
j
X
j
. On drive, et on obtient pour k non multiple de n, A
k
Y/n +A

k
= 0
dont A
k
= 0 est solution. La partie polynme gnralis ne dpend donc que de
X
n
. On effectue aussi les intgrations par parties pour rduire le dnominateur de
f un polynme sans facteurs multiples (rduction de Hermite), ce qui se fait en
introduisant des fractions rationnelles en X
n
uniquement. Reste la partie logarith-
mique. On utilise le critre du rsultant, les coefcients des logarithmes sont les
racines c
k
du polynme en t
Res
X
(D, N tD

)
o ces racines doivent tre indpendantes de x (puisque F existe) et les v
k
corres-
pondants sont gaux
gcd(D, N c
k
D

)
Or comme X est une exponentielle, D

est un polynme en X
n
, de mme que D
et N, donc v
k
est un polynme en X
n
.
Troisime tape Il reste enn montrer que seuls les c
k
et v
k
ncessitent une
extension algbrique de K. Ceci est encore une consquence de lalgorithme de
Risch, la construction de la partie polynomiale (ventuellement gnralise) et de
la partie fractionnaire ne font en effet intervenir que des coefcients dans le corps
K.
75
8.3 Lalgorithme de Risch
On suppose dans la suite quon sest ramen une fraction rationnelle par rap-
port une tour de variables (o on a effectu les simplications videntes ln exp,
ainsi que exp ln, dans le premier cas en extrayant les facteurs vidents en les
variables prcdentes exponentielles, dans le deuxime cas en extrayant la partie
linaire coefcient entier en les variables logarithmes prcdentes). On note X
la variable au sommet de la tour et N
0
/D
0
lcriture de la fonction lmentaire
comme fraction irrductible avec N
0
et D
0
polynmes en X.
Exemples
_
(2x
2
+ 1)e
x
2
X = e
x
2
N
0
= (2x
2
+ 1)X, D
0
= 1
_
xln(x)
x + ln(x)
X = ln(x) N
0
= xX, D
0
= x +X
La premire tape va consister se ramener un dnominateur sans facteurs
multiples. Elle est analogue au cas des fractions rationnelles de x et est base sur
lidentit de Bzout entre P et P

vu comme polynmes en la variable du haut


de la tour. Il apparait toutefois une difcult pour les extensions exponentielles,
savoir que X = e
f
et X

= f

X ne sont pas premiers entre eux comme polynmes


en X, on devra traiter le ple 0 dune fraction rationnelle en une exponentielle X
comme on traite lintgration dun polynme en x. Si P est sans facteurs multiples
et premier avec X, alors P(X) et P(X)

= f

XP

(X) vu comme polynmes en


X nont pas de facteurs en commun.
On commence donc, si X est une exponentielle et D
0
un multiple de X, par
appliquer Bzout pour dcomposer la fraction N
0
/D
0
en :
N
0
D
0
=
N
1
D
1
+
P
X
k
, gcd(X, D
1
) = 1, D
0
= X
k
D
1
On isole aussi la partie polynmiale en effectuant la division euclidienne de N
0
par
D
0
(ou de N
1
par D
1
si X est une exponentielle), on obtient alors une criture sous
la forme :
N
D
+

j
a
j
X
j
o la somme sur j est nie et porte sur des entiers positifs ou nul si X nest pas
une exponentielle, ou sur des entiers relatifs si X est une exponentielle.
On effectue la mme criture sur la partie fractionnaire de F, et en identi-
ant les parties polynomiales et ventuellement la partie polaire en 0 si X est une
exponentielle, on peut sparer lintgration en 2 parties : intgration de la partie
polynomiale (gnralise) et intgration de la partie fractionnaire propre.
Exemples
(2x
2
+ 1)e
x
2
= 0 + (2x
2
+ 1)X est un polynme,

xln(x)
x + ln(x)
=
xX
x +X
=
x
2
x +X
+x
la partie polynomiale est x (de degr 0 en X), la partie fractionnaire est
x
2
/(x +X)
76

x(e
2x
+ 1)
e
x
(e
x
+ 1)
2
=
x(X
2
+ 1)
X(X + 1)
2
=
2x
(X + 1)
2
+xX
1
la partie polynme gnralis est xX
1
8.3.1 Intgration dune fraction propre
8.3.2 Rduction sans facteurs multiples
On factorise D en

i
P
i
i
avec P
i
sans facteurs multiples (et les P
i
premiers
entre eux 2 2) et on dcompose en lments simples relativement cette factori-
sation (en appliquant Bzout) :
N
D
=

i>0
N
i
P
i
i
Pour chaque polynome P
i
, on applique Bzout P
i
et P

i
:
N
i
= A
i
P
i
+B
i
P

i

N
i
P
i
i
=
A
i
P
i1
i
+
B
i
P

i
P
i
i
on intgre par parties le second terme
_
N
i
P
i
i
=
_
A
i
P
i1
i

B
i
(i 1)P
i1
i
+
_
B

i
(i 1)P
i1
i
on rassemble les deux intgrales ayant P
i1
i
au dnominateur et on recommence
jusqu avoir une puissance 1 au dnominateur. Il reste alors intgrer une somme
de fractions du type N/D avec D et D

premiers entre eux.


Exemple
On reprend le dernier exemple de la section prcdente pour liminer la puissance
2 au dnominateur : N
2
= 2x et P
2
= (X + 1) avec X = e
x
. On a P

2
= X, donc
A
2
= 2x et B
2
= 2x :
_
2x
(X + 1)
2
=
_
2x
P
2
+
_
2xP

2
P
2
2
=
_
2x
P
2
+
2x
P
2

2
P
2
il reste donc intgrer (2x 2)/(e
x
+ 1).
8.3.3 La partie logarithmique
Comme on la vu lors de la preuve du thorme de structure de Risch, si on
drive une fraction en X, le dnominateur de la drive ne peut se dcomposer
quen produit de facteurs de multiplicit suprieure ou gale 2. Il en rsulte que
la fraction intgrer rsiduelle (encore note f = N/D) aprs ltape de rduction
ci-dessus ne peut provenir que de la drivation de F =

k
c
k
ln(v
k
) :
f =
N
D
= F

= (

k
c
k
ln(v
k
))

k
c
k
v

k
v
k
77
En identiant les dcompositions en lments simples de F

et f, on montre ga-
lement que les v
k
divisent D, plus prcisment on peut imposer aux v
k
dtre pre-
miers entre eux 2 2 et dans ce cas D =

v
k
. Donc :

k
c
k
v

k
v
k
=
N

k
v
k
=
N
D
et :
N =

k
c
k
v

j=k
v
j
Soit t un paramtre, formons le polynme N tD

:
N tD

k
_
_
(c
k
t)v

j=k
v
j
_
_
donc le pgcd en X des polynmes N tD

et D est :
si t nest gal aucun des c
k
, N tD

est premier avec v


k
pour tout k car
v
k
divise

l=k
(c
l
t)v

j=l
v
j
et v

j=k
v
j
est premier avec v
k
. Donc
le pgcd est 1.
si t est gal lun des c
k
, alors le pgcd est le produit des v
k
tels que c
k
= t
(notons que dans ce cas on peut rassembler ces v
k
lintrieur dun mme
logarithme)
Considrons le polynme R de la variable t gal au rsultant par rapport X des
polynmes D et NtD

(rappelons quil sagit du dterminant du systme linaire


AD+B(N tD

) = 1 o les inconnues sont les coefcients des polynmes A et


B, ce dterminant est nul si et seulement si le systme na pas de solution donc si
et seulement si D et N tD

ne sont pas premiers entre eux), alors ce polynme


en t sannule si et seulement si t = c
k
. On cherche les racines c
k
en t de ce
polynme, elles doivent tre indpendantes de x si F est lmentaire, et dans ce
cas la primitive F de f = N/D vaut
F =

c
k
racine de R
c
k
ln(gcd(N c
k
D

, D))
Exemples

2x 2
e
x
+ 1
, D = X + 1, D

= e
x
= X, N tD

= 2x 2 tX
On calcule R = 2 x t +2, lunique racine est t = 2 2x qui nest pas
constante donc cette fonction nadmet pas de primitive lmentaire.

(2x
2
x 2)X 1
X
2
+ (x + 1)X +x
, X = exp(x
2
+x)
On a D

= 2(2x + 1)X
2
+ (1 + (2x + 1)(x + 1))X + 1
R = (2x 1)(x + 1)(2x + 1)(x 1)
2
(t + 1)(t 1)
78
les racines en t sont constantes et gales 1 et -1, donc c
1
= 1 et v
1
=gcd(N
D

, D) = X + 1 et c
2
= 1, v
2
=gcd(N +D

, D) = x +X donc :
_
(2x
2
x 2)X 1
X
2
+ (x + 1)X +x
= ln(X + 1) ln(x +X)
Remarque importante
Pour les extensions exponentielles ou logarithmiques, la drive de la partie lo-
garithmique calcule comme ci-dessus contiendra en gnral une partie entire
constante par rapport X, il faut donc retirer cette partie entire la partie po-
lynomiale.
8.3.4 La partie polynomiale (gnralise)
On doit rsoudre :
(

j
A
j
X
j
)

j
a
j
X
j
avec une somme sur j Z si X est une exponentielle et j N sinon.
Si X = x, j 0 et la rsolution est immdiate : on prend A
0
= 0 et A
j+1
=
a
j
/(j + 1).
8.3.5 Extension logarithmique
Si X = ln(Y ) est un logarithme, j 0 et on doit rsoudre :

j0
(A

j
+ (j + 1)A
j+1
Y

Y
)X
j
=

j
a
j
X
j
Soit k la plus grande puissance non nulle de f (a
j
= 0 si j > k et a
k
,= 0). Pour
j > k, on a :
A

j
+ (j + 1)A
j+1
Y

Y
= 0
On rsout pour des valeurs de j dcroissante, pour j sufsamment grand, on a
A
j+1
= 0 car la somme sur j est nie, donc A
j
est constant. Si A
j
,= 0, alors au
rang j 1, on a A

j1
= jA
j
Y

/Y qui nadmet pas de solutions car A


j1
ne
peut pas dpendre de X = ln(Y ). On en dduit que pour j > k + 1, on a A
j
= 0
et A
k+1
est constant. En fait la valeur constante de A
k+1
sera dtermine par une
condition de compatibilit en rsolvant lquation au rang du dessous. On continue
la rsolution de
A

j
+ (j + 1)A
j+1
ln(Y )

= a
j
par valeur dcroissante de j, chaque rang on va dterminer A
j
une constante
prs en rsolvant un problme dintgration (par appel rcursif de lalgorithme de
Risch, mais si j ,= 0 sans autoriser lajout de nouveaux logarithmes sauf ln(Y ))
et la valeur de la constante de A
j+1
(on fait varier A
j+1
de la constante ncessaire
pour absorber le terme en ln(Y ) qui apparait lors de lappel rcursif de Risch). Au
rang 0, on est ramen un problme dintgration avec une variable de moins (la
constante indtermine dans A
1
peut par exemple tre choisie comme le coefcient
constant de ln(Y ) sil en apparait un en intgrant).
79
Exemple
X = ln(x
2
+ 1) et on cherche lintgrale de X
2
. On a donc A
3
est constant,
A

2
+ 3A
3
ln(x
2
+ 1)

= 1
La primitive de 1 est lmentaire et ne fait pas intervenir de ln donc A
3
= 0 et
A
2
= x +C
2
. Au rang 1, on a :
A

1
+ 3x
2x
x
2
+ 1
+C
2
ln(x
2
+ 1)

= 0
On calcule la primitive de 6x
2
/(x
2
+ 1) qui doit tre une fraction rationnelle
un C ln(x
2
+ 1) prs, on voit que ce nest pas le cas donc X
2
nadmet pas de
primitive lmentaire. Remarque : si on avait voulu intgrer X au lieu de X
2
,
la mme mthode montre que la primitive existe, car au rang 0 il ny a plus de
contraintes sur les ln quon peut rajouter.
8.3.6 Extension exponentielle
Si X = exp(Y ) est une exponentielle, on doit rsoudre :

j
(A

j
+jY

A
j
)X
j
=

j
a
j
X
j
Ceci va se faire degr par degr :
A

j
+jY

A
j
= a
j
(19)
Exemple
Pour calculer
_
a(x) exp(x
2
), on a j = 1, et on doit rsoudre lquation diffren-
tielle :
A

1
+ 2xA
1
= a(x)
Pour j = 0, il suft de faire un appel rcursif lalgorithme de Risch, mais pour
j ,= 0, la situation se complique ! Notons Z la variable situe juste en-dessous de
X dans la tour de variables (dans lexemple ci-dessus Z = x), il sagit de rsoudre :
y

+fy = g (20)
avec f, g lmentaires par rapport une tour dont le variable au sommet est Z, on
cherche y lmentaire par rapport cette tour (ici f = jY

est une drive mais


dans certains cas nous devrons rsoudre par appel rcursif des quations du type
ci-dessus o f ne sera pas une drive).
limination des dnominateurs
Soit P un facteur irrductible du dnominateur de y, notons < 0 la valuation
de y par rapport P, celle de f, celle de g. Si P nest pas une exponentielle,
la valuation de y

est 1, celle de fy est + . Si ,= 1, il ny a pas de


simplication possible dans le membre de gauche donc + min(, 1) = .
Autrement dit, si 0 alors = +1 et si < 1 alors = . On observe
que < 0 donc P est un facteur du dnominateur g
d
de g. De plus, on va montrer
que la valuation de P dans y est loppos de celle de P dans :
D =
gcd(g
d
,
Z
g
d
)
gcd(c,
Z
c)
, c = gcd(f
d
, g
d
) (21)
80
En effet, si 0, P ne divise pas f
d
donc ne divise pas c, donc la valuation de P
dans D est 1. Si < 1, alors = < 0 entraine > donc la
valuation de P dans c est et la valuation de P dans D est 1 ( 1).
Si = 1, sil ny a pas de simplications dans le membre de gauche pour
les termes de plus petite puissance en P, alors = + 1. Sil y a simplication,
on dcompose en lments simples (avec Bzout) puis on ordonne par puissances
croissantes de P :
y = N
1
P

+..., f = N
2
P
1
+...,
avec N
1
, N
2
de degr plus petit que P, puis on remplace dans (20). On cherche les
termes de valuation 1 en P qui doivent se simplier :
N
1
P

P
1
+N
2
P
1
N
1
P

= 0
donc :
N
2
= P

ce qui dtermine .
Rcapitulons
Si f est une drive, alors = 1 est exclus et on peut appliquer (21) pour dter-
miner D. Si f nest pas une drive, on calcule les facteurs de degr 1 de f
d
:
f
1
=
f
d
gcd(f
d
,
Z
f
d
)
on dcompose f par Bzout en isolant la partie N/f
1
les possibles sont alors les
racines entires (en t) du rsultant en Z de N tf

1
et f
1
, ils correspondent aux
facteurs gcd(N f

1
, f
1
) que lon retire de f
d
pour appliquer (21).
Exemple
Reprenons y

+ 2xy = a(x). Si a(x) = 1 (rsolution de


_
exp(x
2
)), ou plus
gnralement si a(x) est un polynme, alors D = 1. Si a(x) = 1/x
2
, on trouve
D = x et on pose y = xz, donc x
2
(xz

+z)+2x
4
z = 1 soit x
3
z

+(2x
4
+1)z = 1.
Reste le cas o Z est une exponentielle et P = exp(z). On reprend le mme
raisonnement, y

a pour valuation < 0, fy a pour valuation , donc si


> 0, = et si < 0, = . Si = 0, sil ny a pas de simplications
du terme de plus bas degr, on est ramen au cas prcdent. Si = 0 et sil y a
simplication des termes de plus bas degr en Z, notons f
0
le coefcient constant
de f par rapport Z et y

le coefcient de Z

dans y, on a
y

+ (z

+f
0
)y

= 0
donc :
y

= exp(z
_
f
0
)
Comme y

est lmentaire et indpendant de Z on en dduit par le thorme de


structure de Risch que z
_
f
0
est combinaison linaire coefcients rationnels
des logarithmes et des arguments des exponentielles de la tour, de plus le coefcient
de z doit tre nul pour que y

soit indpendant de Z, ce qui impose la valeur de


(aprs avoir rsolu rcursivement le problme dintgration pour f
0
)
81
Majoration du degr du numrateur de y
En multipliant y par DZ

, puis en rduisant au mme dnominateur, on se ra-


mne alors une quation diffrentielle coefcients polynomiaux par rapport
la variable Z dont linconnue est un polynme N :
RN

+SN = T (22)
On va chercher une majoration sur le degr possible de N puis utiliser lidentit de
Bzout pour simplier cette quation.
On crit maintenant N =

n
k=0
N
k
Z
k
et on remplace, il y a nouveau trois
cas selon le type de Z.
Si Z = x : cas exponentielle rationnelle
Donc Z

= 1, le degr de RN

est r +n 1 (si N est non constant cest--dire si


T nest pas un multiple de S), le degr de SN est s +n. Si r 1 ,= s, on en dduit
que :
n = t max(r 1, s)
Si r 1 = s, on peut avoir une simplication du terme de plus haut degr s + n
(sinon on est dans le cas prcdent) si nR
r
= S
s
do on dduit le degr n de N.
Par exemple, pour y

+2xy = T ou pour x
3
z

+(2x
4
+1)z = 1 on a r = s1
donc n + s = t, donc pas de solution dans le deuxime cas, dans le premier cas il
ne peut y avoir de solutions que si t s, en particulier il ny a pas de solution pour
t = 1, on a donc dmontr que
_
exp(x
2
) nadmet pas de primitive lmentaire.
Si Z = exp(z) : cas exponentielle dexponentielle
Ici les N
k
peuvent ne pas tre constants, on a :
N

=
n

k=0
(N

k
+kN
k
z

)Z
k
Comme on la dj observ, N

n
+ nN
n
z

,= 0, donc le degr de N

est gal au
degr de N. On a donc trois cas :
si r ,= s, alors n = t max(r, s)
si r = s et les termes de plus haut degr du membre de gauche ne se simpli-
ent pas, alors, n = t r = t s.
si r = s et sil y a simplication, alors :
R
r
(N

n
+nN
n
z

) +S
s
N
n
= 0
donc :
N

n
+ (
S
s
R
r
+nz

)N
n
= 0
et :
N
n
= C exp(nz
_
S
s
R
r
)
On appelle alors lalgorithme de Risch avec une variable de moins (S
s
et
R
r
ne dpendent plus de Z) pour calculer I =
_
S
s
/R
r
. Il sagit alors de
trouver n tel que lexponentielle prcdente soit lmentaire et indpendante
de la variable Z. Le thorme de structure de Risch implique que nz
_
S
s
/R
r
est combinaison linaire coefcients rationnels des logarithmes
et des arguments des exponentielles de autres variables de la tour (jusqu
z non compris). Ceci permet de dterminer n de manire unique (cest le
coefcient rationnel de
_
S
s
/R
r
en z).
82
Si Z = ln(z) : exponentielle de logarithme
Ici aussi, les N
k
peuvent ne pas tre constants, on a :
N

=
n

k=0
(N

k
Z
k
+kN
k
z

z
Z
k1
)
Si N
n
nest pas constant, le terme de plus haut degr de RN

est N

n
R
r
Z
n+r
, si N
n
est constant, le terme de plus haut degr de RN

est R
r
(nN
n
z

/z+N

n1
)Z
r1
qui
est non nul (sinon z

/z = CN

n1
et z = exp(CN
n1
) serait une exponentielle).
Le terme de plus haut degr de SN est N
n
S
s
Z
n+s
.
Si r < s ou si r = s sans simplications, alors n = t s.
Si r > s + 1 ou si r = s + 1 sans simplications, alors deg(N

) = t r
donc n = t r ou n = t r + 1.
Si r = s + 1, et sil y a simplications, alors N
n
est constant et :
R
r
(nN
n
z

/z +N

n1
) +S
s
N
n
= 0
alors N
n1
= C(
_
N
n
S
s
/R
r
nN
n
ln(z)) doit tre lmentaire et ind-
pendante de Z donc
_
S
s
/R
r
est lmentaire, on dtermine n en liminant
le coefcient de Z = ln(z) provenant de
_
S
s
/R
r
.
Si r = s, et sil y a simplication des termes de plus haut degr du membre
de gauche, alors N

n
R
r
+ N
n
S
s
= 0 donc N
n
= exp(
_
S
s
/R
r
) est l-
mentaire et indpendante de Z. On peut donc changer dinconnue N =
N
n
M sans changer le fait que M est un polynme de mme degr que N.
On se ramne alors une quation du mme type
RM

+ (S R
S
s
R
r
)M =
T
N
n
mais avec s diminu de 1 au moins.
Rduction (algorithme SPDE de Rothstein)
On observe dabord que si R et S ont un facteur en commun, alors ce facteur
divise T car N

et N sont des polynmes en Z. On peut donc quitte simplier


par gcd(R, S) se ramener au cas o R et S sont premiers entre eux, il existe donc
deux polynmes U et V tels que :
RU +SV = T, deg(V ) < deg(R) (23)
En soustrayant (23) de (22), on montre que Rdivise NV . Soit H = (NV )/R.
Alors N = RH +V donc
R(RH

+R

H +V

) +SRH +SV = T = RU +SV


donc aprs simplication par SV et division par R, H vrie lquation :
RH

+ (S +R

)H = U V

Cest une quation du mme type mais avec deg(H)=deg(N)-deg(R) ou H = 0


(si N = V ). Donc si deg(R) > 0, au bout dun nombre ni dtapes on doit tomber
sur un second membre nul ou des simplications de R avec S + R

telles que R
simpli soit constant en Z.
83
Rsolution
Si R est constant par rapport Z, on simplie par R et on doit rsoudre
N

+SN = T
Si S = 0, cest un problme dintgration. Supposons donc que S ,= 0. Si S est
non constant par rapport Z ou si Z = x, le degr de N

est strictement infrieur


au degr de SN, on peut donc facilement rsoudre. Reste le cas o S = b est
constant non nul par rapport Z et Z est une exponentielle ou un logarithme.
Si Z = exp(z)
On a alors doit alors rsoudre
N

k
+kN
k
z

+bN
k
= T
k
cest une quation diffrentielle de Risch mais avec une variable de moins.
Si Z = ln(z)
On doit alors rsoudre
N

k
+ (k + 1)N
k+1
z

z
+bN
k
= T
k
cest aussi une quation diffrentielle de Risch avec une variable de moins.
Exemple
Voyons comment on intgre x
n
avec n un paramtre par lalgorithme de Risch
(cela illustre les possibilits couvertes par lalgorithme mais aussi lefcacit des
mthodes traditionnelles dintgration lorsquelles sappliquent). On crit dabord
x
n
= e
nln(x)
, donc la tour de variables est x, Z = ln(x), X = e
nln(x)
, il sagit
donc dintgrer X qui est un polynme gnralis. On cherche donc A
1
solution
de lquation diffrentielle de Risch
A

1
+n/xA
1
= 1
Par rapport Z = ln(x) la fonction f = n/x est un polynme, donc on applique le
dernier cas ci-dessus, A
1
est aussi indpendant de ln(x) et on se ramne rsoudre
la mme quation mais avec comme variable principale x et non Z. Cette fois,
il y a un dnominateur x en f. Si A
1
possde un dnominateur, il faut quil y
ait annulation du terme de plus bas degr en x car le second membre na pas de
dnominateur, on obtient n + = 0 qui na pas de solution, donc A
1
est un
polynme en x et lquation se rcrit en :
xA

1
+nA
1
= x
On majore alors le degr en x de A
1
par 1, car il ne peut pas y avoir dannulation
de terme de plus grand degr. Ensuite, on peut appliquer lalgorithme SPDE de
Rothstein pour rduire le degr, ou ici conclure la main, x divise nA
1
donc A
1
=
Cx quon remplace et C = 1/(n + 1). Finalement, A
1
= x/(n + 1) et
_
x
n
=
x/(n + 1)x
n
.
8.4 Quelques rfrences
M. Bronstein :
Symbolic Integration I, Transcendental functions, Springer
84
M. Bronstein :
Integration tutorial,
http://www-sop.inria.fr/cafe/Manuel.Bronstein/publications/mb_papers.html
J.H. Davenport, Y. Siret, E. Tournier :
Calcul formel : Systmes et algorithmes de manipulations algbriques
R. Risch :
les rfrences des articles originaux de Risch sont dans le Integration tuto-
rial de Bronstein.
B. Trager :
PHD thesis MIT, 1984
On peut lire en clair le code source de limplmentation en MuPAD (sous
Unix, dsarchiver le chier lib.tar du rpertoire /usr/local/MuPAD/share/lib
et regarder dans le sous-rpertoire lib/INTLIB)
9 Intgration numrique
Les fractions rationnelles admettent une primitive que lon calcule en dcom-
posant la fraction avec Bzout comme expliqu prcdemment. Mais elles font
gure dexceptions, la plupart des fonctions nadmettent pas de primitives qui sex-
priment laide des fonctions usuelles. Pour calculer une intgrale,on revient donc
la dnition daire sous la courbe, aire que lon approche, en utilisant par exemple
un polynome de Lagrange.
Le principe est donc le suivant : on dcoupe lintervalle dintgration en sub-
divisions [a, b] = [a, a +h] + [a +h, a + 2h] +...[a + (n 1)h, a +nh = b, o
h = (b a)/n est le pas de la subdivision, et sur chaque subdivision, on approche
laire sous la courbe.
9.1 Les rectangles et les trapzes
Sur une subdivision [, ], on approche la fonction par un segment. Pour les
rectangles, il sagit dune horizontale : on peut prendre f(), f() (rectangle
droite et gauche) ou f(( + )/2) (point milieu), pour les trapzes on utilise le
segment reliant [, f()] [, f()].
Exemple : calcul de la valeur approche de
_
1
0
t
3
dt (on en connait la valeur
exacte 1/4 = 0.25) par ces mthodes en subdivisant [0, 1] en 10 subdivisions (pas
h = 1/10), donc = j/10 et = (j + 1)/10 pour j variant de 0 9. Pour
les rectangles gauche, on obtient sur une subdivision f() = (j/10)
3
que lon
multiplie par la longueur de la subdivision soit h = 1/10 :
1
10
9

j=0
(
j
10
)
3
=
81
400
= 0.2025
Pour les rectangles droite, on obtient
1
10
10

j=1
(
j
10
)
3
=
121
400
= 0.3025
85
Pour le point milieu f((+)/2) = f((j/10+(j +1)/10)/2) = f(j/10+1/20)
1
10
9

j=0
(
j
10
+
1
20
)
3
= 199/800 = 0.24875
Enn pour les trapzes, laire du trapze dlimit par laxe des x, les verticales
y = , y = et les points sur ces verticales dordonnes respectives f() et f()
vaut
h
f() +f()
2
donc
1
10
9

j=0
_
(
j
10
)
3
+ (
j + 1
10
)
3
_
=
101
400
= 0.2525
Dans la somme des trapzes, on voit que chaque terme apparait deux fois sauf le
premier et le dernier.
Plus gnrallement, les formules sont donc les suivantes :
rectangle gauche = h
n1

j=0
f(a +jh) (24)
rectangle droit = h
n

j=1
f(a +jh) (25)
point milieu = h
n1

j=0
f(a +jh +
h
2
) (26)
trapezes = h
_
_
f(a) +f(b)
2
+
n1

j=1
f(a +jh)
_
_
(27)
o h = (b a)/n est le pas de la subdivision, n le nombre de subdivisions.
On observe sur lexemple que le point milieu et les trapzes donnent une bien
meilleure prcision que les rectangles. Plus gnralement, la prcision de lap-
proximation nest pas la mme selon le choix de mthode. Ainsi pour les rectangles
gauche (le rsultat est le mme droite), si f est continument drivable, de dri-
ve majore par une constante M
1
sur [a, b], en faisant un dveloppement de Taylor
de f en , on obtient
[
_

f(t)dt
_

f()dt[ = [
_

(
t
)(t)dt[ M
1
_

(t)dt = M
1
( )
2
2
Ainsi dans lexemple, on a M
1
= 3, lerreur est donc majore par 0.015 sur une
subdivision, donc par 0.15 sur les 10 subdivisions.
Pour le point milieu, on fait le dveloppement en ( + )/2 lordre 2, en
86
supposant que f est deux fois continument drivable :
[
_

f(t)
_

f(
+
2
)[ = [
_

(
+
2
)(t
+
2
)dt
+
_

(
t
)
2
(t
+
2
)
2
[

M
2
2
2
_

+
2
(t
+
2
)
2
dt
M
2
( )
3
24
Dans lexemple, on a M
2
= 6, donc lerreur sur une subdivision est majore par
0.25e 3, donc sur 10 subdivisions par 0.25e 2 = 0.0025.
Pour les trapzes, la fonction g dont le graphe est le segment reliant [, f()]
[, f()] est f() +(t )/( )f(), cest en fait un polynome de Lagrange,
si f est deux fois continument drivable, on peut donc majorer la diffrence entre
f et g en utilisant (41), on intgre la valeur absolue ce qui donne
[
_

f(t)dt
_

g(t)dt[
_

[
f

(
x
)
2
(x )(x )[ M
2
( )
3
12
o M
2
est un majorant de [f

[ sur [a, b].


Lorsquon calcule lintgrale sur [a, b] par une de ces mthodes, on fait la
somme sur n = (b a)/h subdivisions de longueur = h, on obtient donc
une majoration de lerreur commise sur lintgrale :
pour les rectangles droite ou gauche nM
1
h
2
/2 = M
1
h(b a)/2
pour le point milieu M
2
h
2
(b a)/24
pour les trapzes M
2
h
2
(b a)/12.
Lorsque h tend vers 0, lerreur tend vers 0, mais pas la mme vitesse, plus rapide-
ment pour les trapzes et le point milieu que pour les rectangles. Plus on approche
prcisment la fonction sur une subdivision, plus la puissance de h va tre grande,
plus la convergence sera rapide lorsque h sera petit, avec toutefois une contrainte
xe par la valeur de M
k
, borne sur la drive k-ime de f (plus k est grand, plus
M
k
est grand en gnral). Nous allons voir dans la suite comment se comporte
cette puissance de h en fonction de la facon dont on approche f.
9.2 Ordre dune mthode
On appelle mthode dintgration lcriture dune approximation de lintgrale
sur une subdivision sous la forme
_

f(t)dt I(f) =
k

j=1
w
j
f(y
j
)
o les y
j
sont dans lintervalle [, ], par exemple quirpartis sur [, ]. On utilise
aussi la dnition :
_

f(t)dt I(f) = ( )
k

j=1
w
j
f(y
j
)
87
On prend toujours

j
w
j
= (ou

j
w
j
= 1) pour que la mthode donne le
rsultat exact si la fonction est constante.
On dit quune mthode dintgration est dordre n si il y a galit ci-dessus pour
tous les polynmes de degr infrieur ou gal n et non galit pour un polynme
de degr n + 1. Par exemple, les rectangles droite et gauche sont dordre 0, le
point milieu et les trapzes sont dordre 1. Plus gnrallement, si on approche f par
son polynme dinterpolation de Lagrange en n +1 points (donc par un polynme
de degr infrieur ou gal n), on obtient une mthode dintgration dordre au
moins n.
Si une mthode est dordre n avec des w
j
0 et si f est n+1 fois continument
drivable, alors sur une subdivision, on a :
[
_

f I(f)[ M
n+1
( )
n+2
(n + 1)!
(
1
n + 2
+ 1) (28)
En effet, on fait le dveloppement de Taylor de f par exemple en lordre n
f(t) = T
n
(f) +
(t )
n+1
(n + 1)!
f
[n+1]
(
t
),
T
n
(f) = f() + (t )f

() +... +
(t )
n
n!
f
[n]
()
Donc
[
_

f
_

T
n
(f)[
_

(t )
n+1
(n + 1)!
[f
[n+1]
(
t
)[
_
M
n+1
(t )
n+2
(n + 2)!
_

De plus,
[I(f) I(T
n
(f))[ = [I
_
f
[n+1]
(
t
)
(t )
n+1
(n + 1)!
_
[
k

j=1
[w
j
[M
n+1
(y
j
)
n+1
(n + 1)!

j=1
[w
j
[M
n+1
( )
n+1
(n + 1)!
Donc comme la mthode est exacte pour T
n
(f), on en dduit que
[
_

f I(f)[ = [
_

f
_

T
n
(f) +I(T
n
(f)) I(f)[
[
_

f
_

T
n
(f)[ +[I(T
n
(f)) I(f)[
M
n+1
( )
n+2
(n + 2)!
+
k

j=1
[w
j
[M
n+1
( )
n+1
(n + 1)!
Si les w
j
0, alors

k
j=1
[w
j
[ =

k
j=1
w
j
= et on obtient nalement (28)
On remarque quon peut amliorer la valeur de la constante en faisant tous les
dveloppement de Taylor en ( + )/2 au lieu de , Aprs sommation sur les n
subdivisions, on obtient que :
88
Thorme 9 Pour une mthode dordre n coefcients positifs et une fonction f
n + 1 fois continument drivable
[
_
b
a
f I(f)[ M
n+1
h
n+1
2
n+1
(n + 1)!
(b a)(
1
(n + 2)
+ 1)
On observe que cette majoration a la bonne puissance de h sur les exemples
dja traits, mais pas forcment le meilleur coefcient possible, parce que nous
avons trait le cas gnral dune mthode dordre n.
9.3 Simpson
Il sagit de la mthode obtenue en approchant la fonction sur la subdivision
[, ] par son polynome de Lagrange aux points , ( + )/2, . On calcule lin-
tgrale par exemple avec un logiciel de calcul formel, avec Xcas :
factor(int(lagrange([a,(a+b)/2,b],[fa,fm,fb]),x=a..b))
qui donne la formule sur une subdivision
I(f) =
h
6
(f() + 4f(
+
2
) +f())
et sur [a, b] :
I(f) =
h
6
_
_
f(a) +f(b) + 4
n1

j=0
f(a +jh +
h
2
) + 2
n1

j=1
f(a +jh)
_
_
(29)
Si on intgre t
3
sur [0, 1] en 1 subdivision par cette mthode, on obtient
1
6
(0 + 4
1
2
3
+ 1) =
1
4
cest--dire le rsultat exact, ceci est aussi vri pour f polynome de degr in-
frieur ou gal 2 puisque lapproximation de Lagrange de f est alors gale f.
On en dduit que la mthode de Simpson est dordre 3 (pas plus car la mthode de
Simpson applique lintgrale de t
4
sur [0, 1] nest pas exacte). On peut mme
amliorer (cf. par exemple Demailly) la constante gnrale de la section prcdente
pour la majoration de lerreur en :
[
_
b
a
f I(f)[
h
4
2880
(b a)M
4
Cette mthode ncessite 2n + 1 valuations de f (le calcul de f est un point tant
presque toujours lopration la plus couteuse en temps dune mthode de quadra-
ture), au lieu de n pour les rectangles et le point milieu et n + 1 pour les trapzes.
Mais on a une majoration en h
4
au lieu de h
2
donc le rapport qualit-prix de la
mthode de Simpson est meilleur, on lutilise donc plutot que les mthodes prc-
dentes sauf si f na pas la rgularit sufsante (ou si M
4
est trop grand).
89
9.4 Newton-Cotes
On peut gnraliser lide prcdente, dcouper la subdivision [, ] en n
parts gales et utiliser le polynme dinterpolation en ces n + 1 points x
0
=
, x
1
, ..., x
n
= . Ce sont les mthodes de Newton-Cotes, qui sont dordre n au
moins. Comme le polynme dinterpolation dpend linairement des ordonnes,
cette mthode est bien de la forme :
I(f) = ( )
n

j=0
w
j
f(x
j
)
De plus les w
j
sont universels (ils ne dpendent pas de la subdivision), parce quon
peut faire le changement de variables x = + t( ) dans lintgrale et le
polynme dinterpolation et donc se ramener [0, 1].
Exemple : on prend le polynme dinterpolation en 5 points quidistribus sur
une subdivision [a, b] (mthode de Boole). Pour calculer les w
j
, on se ramne
[0, 1], puis on tape
int(lagrange(seq(j/4,j,0,4),[f0,f1,f2,f3,f4]),x=0..1)
et on lit les coefcients de f0 f4 qui sont les w
0
w
4
: 7/90, 32/90, 12/90, 32/90,
7/90. La mthode est dordre au moins 4 par construction, mais on vrie quelle
est en fait dordre 5 (exercice), la majoration de lerreur dune mthode dordre 5
est
[
_
b
a
f I(f)[
M
6
2
6
6!
(1 +
1
7
)h
6
(b a)
elle peut tre amliore pour cette mthode prcise en
[
_
b
a
f I(f)[
M
6
1935360
h
6
(b a)
En pratique, on ne les utilise pas trs souvent, car dune part pour n 8, les
w
j
ne sont pas tous positifs, et dautre part, parce que la constante M
n
devient trop
grande. On prfre utiliser la mthode de Simpson en utilisant un pas plus petit.
Il existe aussi dautres mthodes, par exemple les quadratures de Gauss (on
choisit dinterpoler en utilisant des points non quirpartis tels que lordre de la
mthode soit le plus grand possible) ou la mthode de Romberg qui est une m-
thode dacclration de convergence base sur la mthode des trapzes (on prend
la mthode des trapzes en 1 subdivision de [a, b], puis 2, puis 2
2
, ..., et on limine
les puissances de h du reste
_
f I(f) en utilisant un thorme dEuler-Mac Lau-
rin qui montre que le dveloppement asymptotique de lerreur en fonction de h ne
contient que des puissances paires de h). De plus, on peut tre amen faire varier
le pas h en fonction de la plus ou moins grande rgularit de la fonction.
9.5 En rsum
Intgration sur [a, b], h pas dune subdivision, M
k
majorant de la drive k-
ime de la fonction sur [a, b]
formule Lagrange degr ordre erreur
rectangles (24), (25) 0 0 M
1
h(b a)/2
point milieu (26) 0 1 M
2
h
2
(b a)/24
trapzes (27) 1 1 M
2
h
2
(b a)/12
Simpson (29) 2 3 M
4
h
4
(b a)/2880
90
10 Algbre linaire
On prsente ici des algorithmes autour de la rsolution exacte de systmes
(rduction des matrices sous forme chelonne) et la recherche de valeurs propres
et de vecteurs propres (diagonalisation et jordanisation des matrices).
10.1 Rsolution de systmes, calcul de dterminant.
10.1.1 La mthode du pivot de Gau.
Le pivot : on dtermine partir dune ligne i la ligne j o apparait le premier
coefcient non nul p dans la colonne rduire. On change les lignes i et j.
Puis pour j > i (rduction sous-diagonale) ou j ,= i (rduction complte),
on effectue lopration L
j
L
j

p
j
p
L
i
.
Inconvnient : avec des donnes exactes de taille non borne, la complexit
des coefcients augmente plus vite quen choisissant le pivot le plus simple
possible, (remarque, lorsque les donnes sont approches, on nutilise pas
non plus cette mthode pour des raisons de stabilit numrique). Le domaine
dutilisation naturel concerne donc les coefcients dans un corps ni (par
exemple Z/nZ).
Le pivot partiel. On choisit le meilleur coefcient non nul de la colonne,
o meilleur dpend du type de coefcient : avec des donnes exactes, on
choisirait le coefcient de taille la plus petite possible, avec des donnes ap-
proximatives, on choisit le coefcient de plus grande norme dans la colonne.
Le domaine dutilisation naturel concerne les coefcients approchs. Pour
les coefcients exacts, on remplacerait la rduction par L
j
pL
j
p
j
L
i
pour ne pas effectuer de division. Mais avec cette mthode, la taille des co-
efcients augmente de manire exponentielle. On peut amliorer la taille
des coefcients intermdiaires en divisant chaque ligne par le PGCD de ses
coefcients, mais comme pour le calcul du PGCD par lalgorithme du sous-
rsultant, il existe une mthode plus efcace prsente ci-dessous.
La mthode de Bareiss : on initialise un coefcient b 1. On remplace ltape
de rduction ci-dessus par L
j
(pL
j
p
j
L
i
)/b. la n de ltape de r-
duction, on met le coefcient b la valeur du pivot p. Lintrt de la mthode
est que la division se fait sans introduire de fraction (la preuve pour les deux
premires tapes se fait facilement la main ou avec un systme de calcul
formel (cf. infra), pour le cas gnral, on vrie que le dterminant de la
matrice de dpart est gal au dernier coefcient sur la diagonale obtenu par
cette mthode de rduction, ce dernier est donc entier, le mme raisonnement
fait sur des sous-matrices dont on prend les k premires lignes et colonnes
et une autre ligne et une autre colonne montre que tous les coefcients des
matrices intermdiaires sont entiers). On peut utiliser cette mthode aussi
bien pour la rduction sous-diagonale que pour la rduction complte (les
lignes intervenant dans la combinaison linaire subissent des modications
identiques dans les deux cas).
Montrons avec MuPAD ou xcas en mode mupad (commande maple_mode(2))
quen effet, on nintroduit pas de dnominateur dans la mthode de Bareiss. Sans
restreindre la gnralit, il suft de le montrer avec une matrice 3x3 coefcients
symboliques gnriques.
91
pivot:=proc (M,n,m,r) // n ligne du pivot, m colonne, r ligne a modifier
local col,i,a,b;
begin
col:=ncols(M);
a:=M[n,m];
b:=M[r,m];
for i from 1 to col do
// print(i,a,b,n,m,r);
M[r,i]:=a
*
M[r,i]-b
*
M[n,i];
end_for;
return(M);
end_proc; /
*
End of pivot
*
/
A:=matrix(3,3,[[a,b,c],[d,e,f],[g,h,j]]);
A:=pivot(A,1,1,2); A:=pivot(A,1,1,3); /
*
reduction 1ere colonne
*
/
A:=pivot(A,2,2,3); A:=pivot(A,2,2,1); /
*
reduction 2eme colonne
*
/
factor(A[3,3]);
Ce qui met bien en vidence le facteur a dans A
3,3
.
10.1.2 Le dterminant.
On peut bien sr appliquer les mthodes ci-dessus en tenant compte des pivots
utiliss et du produit des coefcients diagonaux. Dans le cas de la mthode de Ba-
reiss, si on effectue la rduction sous-diagonale uniquement, il nest pas ncessaire
de garder une trace des pivots et de calculer le produit des coefcients diagonaux,
montrons que la valeur du dterminant est gal au dernier coefcient diagonal : en
effet si R dsigne la matrice rduite et que lon pose R
0,0
= 1, alors la rduction
par la mthode de Bareiss de la colonne i a pour effet de multiplier le dterminant
de la matrice initiale M par (R
i,i
/(R
i1,i1
)
ni
. Donc :
det(R) = det(M)
n1

i=1
(R
i,i
/(R
i1,i1
)
ni
n

i=1
R
i,i
= det(M)
n1

i=1
R
i,i
R
n,n
= det(M)
Pour les matrices coefcients entiers, on peut aussi utiliser une mthode mo-
dulaire : on calcule une borne priori sur le dterminant et on calcule le dtermi-
nant modulo sufsamment de petits nombres premiers pour le reconstruire par les
restes chinois. Lavantage de cet algorithme est quil est facile parallliser.
On utilise souvent la borne dHadamard sur le dterminant :
[ det(M)[

1in


1jn
[m
i,j
[
2
Preuve de la borne : on majore le dterminant par le produit des normes des vec-
teurs colonnes de M.
Remarque :
Si on veut juste prouver linversibilit dune matrice coefcients entiers, il suft
92
de trouver un nombre premier p tel que le dterminant de cette matrice modulo p
soit non nul.
Dveloppement par rapport une ligne ou une colonne
On a tendance oublier ce type de mthode car le dveloppement complet du
dterminant (faisant intervenir une somme sur toutes les permutations du groupe
symtrique) ncessite deffectuer n! produits de n coefcients et n! additions ce
qui est gigantesque. Or on peut "factoriser" une partie des calculs et se ramener
n.2
n
oprations lmentaires au lieu de n.n!. Remarquons aussi que le nombre
doprations lmentaires na gure de sens si on ne tient pas compte de la com-
plexit des expressions, lavantage principal de la mthode de dveloppement tant
dviter deffectuer des divisions.
Calcul du dterminant par dveloppement de Laplace
On calcule dabord tous les mineurs 2x2 des colonnes 1 et 2 que lon place dans
une table de mineurs, puis on calcule les mineurs 3x3 des colonnes 1 3 en d-
veloppant par rapport la colonne 3 et en utilisant les mineurs prcdents, puis
les mineurs 4x4 avec les mineurs 3x3, etc.. On vite ainsi de recalculer plusieurs
fois les mmes mineurs. Cf. par exemple limplmentation en C++ dans giac/xcas
(www-fourier.ujf-grenoble.fr/~parisse/giac.html) qui utilise le
type gnrique map<> de la librairie standard C++ (STL) pour stocker les tables
de mineurs (fonction det_minor du chier vecteur.cc).
Nombre doprations lmentaires : il y a (
n
2
) mineurs dordre 2 calculer nces-
sitant chacun 2 multiplications (et 1 addition), puis (
n
3
) mineurs dordre 3 ncessi-
tant 3 multiplications et 2 additions, etc. donc le nombre de multiplications est de
2(
n
2
) +3(
n
3
) +... +n(
n
n
), celui dadditions est (
n
2
) +2(
n
3
) +... +(n1)(
n
n
) soit un
nombre doprations lmentaires major par n.2
n
.
On observe "exprimentalement" que cet algorithme est intressant lorsque le
nombre de paramtres dans le dterminant est grand et que la matrice est plutt
creuse (majorit de coefcients nuls). Il existe des heuristiques de permutation des
lignes ou des colonnes visant optimiser la position des zros (par exemple, les
auteurs de GiNaC (www.ginac.de) suite des exprimentations privilgient la
simplication des petits mineurs en mettant les colonnes contenant le maximum de
zros gauche selon la description faite ici).
Pour se convaincre de lintrt de cet algorithme, on peut effectuer le test O1
de Lewis-Wester
http://www.bway.net/~lewis/calatex.html
il sagit de calculer un dterminant de taille 15 avec 18 paramtres.
10.1.3 Systmes linaires
On peut appliquer la mthode du pivot de Gau ou les rgles de Cramer. Pour
les systmes coefcients entiers non singuliers, on peut aussi utiliser une mthode
p-adique asymptotiquement plus efcace. On calcule dabord une borne sur les
coefcients des fractions solutions de lquation Ax = b en utilisant les rgles de
Cramer et la borne dHadamard. On calcule ensuite C, linverse de A modulo p
(en changeant de p si A nest pas inversible modulo p), puis, si
x =

i
x
i
p
i
, A(

i<k
x
i
p
i
) = b (mod p
k
)
93
on ajoute x
k
p
k
et on obtient lquation :
Ax
k
=
b

i<k
x
i
p
i
p
k
(mod p)
qui dtermine x
k
. On sarrte lorsque k est sufsamment grand pour pouvoir re-
construire les fractions laide de lidentit de Bzout (cf. lappendice), ce qui est
le cas si p
k
est suprieur 4 fois la borne de Hadamard de A au carr. Pour viter
de recalculer plusieurs fois b

i<k
x
i
p
i
, on utilise la rcurrence suivante
y
0
= b, x
k
= Cy
k
(mod p), y
k+1
=
y
k
Ax
k
p
Pour une matrice de taille n, il faut O(n
3
) oprations pour calculer C, puis kn
2
ln(n)
oprations pour calculer x
k
(le terme ln(n) vient de la taille des coefcients de y
k
dans le produit Cy
k
), donc pour pouvoir reconstruire x, il faut prendre k de lordre
de nln(n), ce qui ncessite nalement O(n
3
ln(n)
2
) oprations.
Application au calcul de dterminant de matrices coefcient entiers
Cette mthode p-adique peut servir acclrer le calcul du dterminant dune ma-
trice coefcients entiers de grande taille. En effet, le PPCM f des dnominateurs
des composantes de x est un diviseur du dterminant, et si b est choisi avec des
coefcients alatoires, on a une forte probabilit dobtenir le dernier facteur inva-
riant de la matrice A. Comme le dterminant de A a une trs faible probabilit de
contenir un gros facteur carr, ce dernier facteur invariant est trs proche du d-
terminant. Ce dernier est pour une matrice A alatoire lui-mme un facteur de
lordre de (2/)
n
proche de la borne de Hadamard. Il suft donc de trs peu de
nombres premiers pour dterminer det(A)/f par le thorme des restes chinois.
En pratique pour des n de lordre de 100 1000, cet algorithme est plus rapide
que le calcul uniquement par les restes chinois. Pour des n plus grands, il faut se
rabattre sur des algorithmes probabilistes avec arrt prmatur pour tre plus ra-
pide (on sarrte lorsque le dterminant nvolue plus par reconstruction par les
restes chinois pour plusieurs nombres premiers successifs), et galement utiliser
des mthodes dinversion ou de rduction de type Strassen.
10.1.4 Bzout et les p-adiques.
Soit n et a/b une fraction irrductible dentiers tels que b est premier avec n
et [a[ <

n/2 et 0 b

n/2. Il sagit de reconstruire a et b connaissant
x = a (b
1
) (mod n) avec x [0, n[.
Unicit
Sil existe une solution (a, b) vriant [a[ <

n/2 et 0 b

n/2, soit (a

, b

)
une solution de x = a (b
1
) (mod n) et vriant [a

[ <

n et 0 b



n,
alors :
ab

= a

b (mod n)
Comme [ab

[ < n/2, [a

b[ < n/2, on en dduit que ab

= a

b. Donc a/b = a

/b

donc a = a

et b = b

car a/b et a

/b

sont supposes irrductibles.


Reconstruction lorsquon sait quil y a une solution
On suit lalgorithme de calcul des coefcients de Bzout pour les entiers n et x.
On pose :

k
n +
k
x = r
k
94
o les r
k
sont les restes successifs de lalgorithme dEuclide, avec la condition
initiale :

0
= 1,
0
= 0,
1
= 0,
1
= 1, r
0
= n, r
1
= x
et la relation de rcurrence :

k+2
=
k
q
k+2

k+1
, q
k+2
=
r
k
r
k+2
r
k+1
On a
k
x = r
k
(mod n) pour tout rang mais il faut vrier les conditions de
taille sur
k
et r
k
pour trouver le couple (a, b). Montrons par rcurrence que :

k+1
r
k
r
k+1

k
= (1)
k
n (30)
Au rang k = 0, on vrie lgalit, on ladmet au rang k, alors au rang k + 1, on
a :

k+2
r
k+1
r
k+2

k+1
=
k
r
k+1
q
k+2
r
k+1

k+1
r
k+2

k+1
=
k
r
k+1
(r
k
r
k+2
)
k+1
r
k+2

k+1
=
k
r
k+1
r
k

k+1
= (1)
k
n
On vrie aussi que le signe de
k
est positif si k est impair et ngatif si k est pair,
on dduit donc de (30) :
[
k+1
[r
k
< n
(avec galit si r
k+1
= 0)
Considrons la taille des restes successifs, il existe un rang k tel que r
k


n
et r
k+1
<

n. On a alors [
k+1
[ < n/r
k

n.
Donc lalgorithme de Bzout permet de reconstruire lunique couple solution
sil existe.
Exemple
On prend n = 101, a = 2, b = 3, a/b = 68 (mod 101). Puis on effectue Bzout
pour 68 et 101 en afchant les tapes intermdiaires (par exemple avec IEGCD sur
une HP49 ou exercice avec votre systme de calcul formel) :
= alpha
*
101+beta
*
68
101 1 0
68 0 1 L1 - 1
*
L2
33 1 -1 L2 - 2
*
L3
2 -2 3 ...
On sarrte la premire ligne telle que le coefcient de la 1re colonne est in-
frieur

101, on retrouve bien 2 et 3. Quand on programme lalgorithme de re-


construction, on ne calcule bien sr pas la colonne des , ce qui donne par exemple
le programme xcas ou mupad suivant :
// Renvoie a/b tel que a/b=x mod n et |a|,|b|<sqrt(n)
padictofrac:=proc (n,x)
local r0,beta0,r1,beta1,r2,q2,beta2;
begin
r0:=n;
95
beta0:=0;
r1:=x;
beta1:=1;
sqrtn:=float(sqrt(n));
while r1>sqrtn do
r2:= irem(r0,r1);
q2:=(r0-r2)/r1;
beta2:=beta0-q2
*
beta1;
beta0:=beta1; r0:=r1; beta1:=beta2; r1:=r2;
end_while;
return(r1/beta1);
end_proc;
10.1.5 Base du noyau
On prsente ici deux mthodes, la premire se gnralise au cas des systmes
coefcients entiers, la deuxime utilise un peu moins de mmoire (elle travaille
sur une matrice 2 fois plus petite).
Premire mthode Soir M la matrice dont on cherche le noyau. On ajoute
droite de la matrice transpose de M une matrice identit ayant le mme nombre
de lignes que M
t
. On effectue une rduction sous-diagonale qui nous amne une
matrice compose de deux blocs
(M
t
I
n
) (U

L)
Attention,

L nest pas la matrice L de la dcomposition LU de M
t
, on a en fait

LM
t
= U
donc
M

L
t
= U
t
Les colonnes de

L
t
correspondant aux colonnes nulles de U
t
(ou si on prfre les
lignes de

L correspondant aux lignes nulles de U) sont donc dans le noyau de M
et rciproquement si Mv = 0 alors
U
t
(

L
t
)
1
v = 0
donc, comme U est rduite, (

L
t
)
1
v est une combinaison linaire des vecteurs de
base dindice les lignes nulles de U. Finalement, les lignes de

L correspondant aux
lignes nulles de U forment une base du noyau de M.
On peut faire le raisonnement ci-dessus lidentique si M est une matrice
coefcients entiers, en effectuant des manipulations lmentaires rversibles dans
Z, grce lidendit de Bzout. Si a est le pivot en ligne i, b le coefcient en ligne
j annuler, et u, v, d les coefcients de lidentit de Bzout au + bv = d on fait
les changements :
L
i
uL
i
+vL
j
, L
j

b
d
L
i
+
a
d
L
j
96
qui est rversible dans Z car le dterminant de la sous-matrice lmentaire corres-
pondante est

u v

b
d
a
d

= 1
Cette rduction (dite de Hermite) permet de trouver une base du noyau coef-
cients entiers et telle que tout lment du noyau coefcient entier scrit comme
combinaison linaire coefcients entiers des lments de la base.
Deuxime mthode On commence bien sr par rduire la matrice (rduction
complte en-dehors de la diagonale), et on divise chaque ligne par son premier
coefcient non nul (appel pivot). On insre alors des lignes de 0 pour que les
pivots (non nuls) se trouvent sur la diagonale. Puis en n de matrice, on ajoute ou
on supprime des lignes de 0 pour avoir une matrice carre de dimension le nombre
de colonnes de la matrice de dpart. On parcourt alors la matrice en diagonale.
Si le i-ime coefcient est non nul, on passe au suivant. Sil est nul, alors tous
les coefcients dindice suprieur ou gal i du i-ime vecteur colonne v
i
sont
nuls (mais pas forcment pour les indices infrieurs i). Si on remplace le i-ime
coefcient de v
i
par -1, il est facile de se convaincre que cest un vecteur du noyau,
on le rajoute donc la base du noyau. On voit facilement que tous les vecteurs de
ce type forment une famille libre de la bonne taille, cest donc bien une base du
noyau.
10.2 Rduction des endomorphismes
10.2.1 Le polynme minimal
On prend un vecteur v au hasard et on calcule la relation linaire de degr
minimal entre v, Av, ..., A
n
v en cherchant le premier vecteur w du noyau de la
matrice obtenue en crivant les vecteurs v, Av, etc. en colonne dans cet ordre. Les
coordonnes de w donnent alors par ordre de degr croissant un polynme P de
degr minimal tel que P(A)v = 0 donc P divise le polynme minimal M. Donc
si P est de degr n, P = M. Sinon, il faut vrier que le polynme obtenu annule
la matrice A. On peut aussi calculer en parallle le polynme P prcdent pour
quelques vecteurs alatoires et prendre le PPCM des polynmes obtenus.
Exemple 1
Polynme minimal de
_
1 1
2 4
_
. On prend v = (1, 0), la matrice rduire est
alors :
_
1 1 11
2 10 38
_

_
1 0 6
0 1 5
_
Le noyau est engendr par (6, 5, 1) donc P = x
2
+ 5x 6.
Exemple 2
A =
_
_
3 2 2
1 0 1
1 1 0
_
_
97
en prenant v = (1, 0, 0) on obtient la matrice :
A =
_
_
1 3 5 7
0 1 2 3
0 1 2 3
_
_

_
_
1 0 1 2
0 1 2 3
0 0 0 0
_
_
le permier vecteur du noyau est (1, 2, 1) do un polynme divisant le poly-
nme minimal x
2
+ 2x 1.
10.2.2 Le polynme caractristique
Pour une matrice gnrique, le polynme caractristique est gal au polynme
minimal, il est donc intressant de chercher si le polynme annulateur de A sur un
vecteur alatoire est de degr n, car le temps de calcul du polynme caractristique
est alors en O(n
3
). Si cette mthode probabiliste choue, on se rabat sur une des
mthode dterministe ci-dessous :
on utilise la formule det(I A) dtermin par une des mthodes de calcul
de dterminant ci-dessus. Cela ncessite O(n
3
) oprations mais avec des
coefcients polynmes en .
on fait une interpolation de Lagrange en donnant n+1 valeurs distinctes .
Ce qui ncessite O(n
4
) oprations mais avec des coefcients indpendants
de , de plus cette mthode est facile programmer de manire parallle.
si la matrice est coefcients entiers on peut utiliser la mthode de Hessen-
berg (voir ci-dessous), on calcule une borne priori sur les coefcients du
polynme caractristique (cf. Cohen p.58-59) :
[P
k
[
_
n
n k
_
(n k)
(nk)/2
[M[
nk
,
on calcule le polynme caractristique modulo sufsamment de petits entiers
puis on remonte par les restes chinois.
10.2.3 La mthode de Hessenberg
Pour les matrices coefcients de taille borne (modulaires par exemple) on
prfre la mthode de Hessenberg qui est plus efcace, car elle ncessite de lordre
de n
3
oprations sur les coefcients.
On se ramne dabord une matrice triangulaire suprieure une diagonale
prs qui est semblable la matrice de dpart puis on applique une formule de
rcurrence pour calculer les coefcients du polynme caractristique.
Algorithme de rduction de Hessenberg :
Dans une colonne m donne de la matrice H, on cherche partir de la ligne m+1
un coefcient non nul. Sil ny en a pas on passe la colonne suivante. Sil y en a
un en ligne i, on change les lignes m + 1 et i et les colonnes m + 1 et i. Ensuite
pour tout i m + 2, soit u = H
i,m
/H
m+1,m
, on remplace alors la ligne L
i
de H
par L
i
uL
m+1
et la colonne C
m+1
par C
m+1
+uC
i
ce qui revient remplacer le
vecteur e
m+1
de la base par le vecteur e
m+1
+ue
i
ou plus prcisment multiplier
gauche par
_
1 0
u 1
_
et droite par la matrice inverse
_
1 0
u 1
_
(en utilisant
98
les lignes et colonnes m + 1 et i au lieu de 1 et 2 pour ces matrices). Ceci a pour
effet dannuler le coefcient H
i,m
dans la nouvelle matrice.
On obtient ainsi en O(n
3
) oprations une matrice H

semblable H de la
forme :
_
_
_
_
_
_
_
_
_
H

1,1
H

1,2
... H

1,n2
H

1,n1
H

1,n
H

2,1
H

2,2
... H

2,n2
H

2,n1
H

2,n
0 H

3,2
... H

3,n2
H

3,n1
H

3,n
0 0 ... H

4,n2
H

4,n1
H

4,n
.
.
.
.
.
. ...
.
.
.
.
.
.
.
.
.
0 0 ... 0 H

n,n1
H

n,n
_
_
_
_
_
_
_
_
_
On calcule alors le polynme caractristique de H

par une rcurrence qui sobtient


en dveloppant le dterminant par rapport la dernire colonne :
h
n
() = det(I
n
H) = ( H

n,n
)h
n1
() (H

n1,n
)(H

n,n1
)h
n2
() +
+(H

n2,n
)(H

n,n1
)(H

n1,n2
)h
n3
() ...
o les h
i
sentendent en gardant les i premires lignes/colonnes de H

. On peut
crire cette formule pour m n :
h
m
() = ( H

m,m
)h
m1
()
m1

i=1
H

mi,m
i1

j=1
H

mj+1,mj
h
i1
()
Pour effectuer cette rcurrence de manire efcace, on conserve les h
m
() dans un
tableau de polynmes et on utilise une variable produit contenant successivement
les

mj+1,mj
.
10.2.4 La mthode de Leverrier-Faddeev-Souriau
Cette mthode permet le calcul simultan des coefcients p
i
(i = 0..n) du po-
lynme caractristique P() = det(I A) et des coefcients matriciels B
i
(i =
0..n 1) du polynme en donnant la matrice adjointe (ou comatrice) B() de
I A :
(I A)B() = (I A)

kn1
B
k

k
= (

kn
p
k

k
)I = P()I (31)
Remarquons que cette quation donne une dmonstration assez simple de Cayley-
Hamilton puisque le reste de la division euclidienne du polynme P()I par IA
est P(A).
Pour dterminer simultanment les p
k
et B
k
, on a les relations de rcurrence :
B
n1
= p
n
I = I, B
k
AB
k+1
= p
k+1
I (32)
Il nous manque une relation entre les p
k
et B
k
pour pouvoir faire le calcul par
valeurs dcroissantes de k, on va montrer le :
Thorme 10 La drive du polynme caractristique P

(), est gale la trace


de la matrice adjointe de I A
tr(B) = P

()
99
Le thorme nous donne tr(B
k
) = (k +1)p
k+1
. Si on prend la trace de (32), on a :
tr(B
n1
) = np
n
, (k + 1)p
k+1
tr(AB
k+1
) = np
k+1
donc on calcule p
k+1
en fonction de B
k+1
puis B
k
:
p
k+1
=
tr(AB
k+1
)
k + 1 n
, B
k
= AB
k+1
+p
k+1
I
Dmonstration du thorme :
Soient V
1
(), ...V
n
() les vecteurs colonnes de I A et b
i,j
() les coefcients
de B, on a :
P

(
0
) = det(V
1
(), V
2
(), ..., V
n
())

|=
0
= det(V

1
(
0
), V
2
(
0
), ..., V
n
(
0
)) + det(V
1
(
0
), V

2
(
0
), ..., V
n
(
0
)) +
+... + det(V
1
(
0
), V
2
(
0
), ..., V

n
(
0
))
Il suft alors de remarquer que V

i
(
0
) est le i-ime vecteur de la base canonique
donc :
det(V
1
(
0
), V
2
(
0
), ..., V

i
(
0
), ..., V
n
(
0
)) = b
i,i
(
0
)
Finalement :
P

(
0
) =
n

i=1
b
i,i
(
0
) = tr (B(
0
))
Remarque :
En rindexant les coefcients de P et B de la manire suivante :
P() =
n
+p
1

n1
+p
2

n2
... +p
n
B() =
n1
I +
n2
B
1
+... +B
n1
on a montr que :
_

_
A
1
= A, p
1
= tr(A), B
1
= A
1
+p
1
I
A
2
= AB
1
, p
2
=
1
2
tr(A
2
), B
2
= A
2
+p
2
I
.
.
.
.
.
.
.
.
.
A
k
= AB
k1
, p
k
=
1
k
tr(A
k
), B
k
= A
k
+p
k
I
On peut alors vrier que B
n
= A
n
+p
n
I = 0. Do ce petit programme utiliser
avec xcas en mode mupad (maple_mode(2);), ou avec MuPAD, ou adapter
avec un autre systme :
iequalj:=(j,k)->if j=k then return(1); else return(0); end_if;
faddeev:=proc(A) // renvoie la liste des matrices B et le polynome P
local Aj,AAj,Id,coef,n,pcara,lmat;
begin
n:=ncols(A);
Id:=matrix(n,n,iequalj); // matrice identite
Aj:=Id;
lmat:=[]; // B initialise a liste vide
pcara:=[1]; // coefficient de plus grand degre de P
100
for j from 1 to n do
lmat:=append(lmat,Aj); // rajoute Aj a la liste de matrices
AAj:=Aj
*
A;
coef:=-trace(AAj)/j; // mupad linalg::tr
pcara:=append(pcara,coef); // rajoute coef au polynome caracteristique
Aj:=AAj+coef
*
Id;
end_for;
lmat,pcara; // resultat
end_proc;
10.2.5 Les vecteurs propres simples.
On suppose ici quon peut factoriser le polynme caractristique (ou calculer
dans une extension algbrique dun corps). Lorsquon a une valeur propre simple

0
, en crivant la relation (A
0
I)B(
0
) = P(
0
)I = 0, on voit que les vecteurs
colonnes de la matrice B(
0
) sont vecteurs propres. Remarquer que B(
0
) ,= 0
sinon on pourrait factoriser
0
dans B() et apre` s simplications on aurait :
(A
0
I)
B

0
(
0
) =
P

0
(
0
)I
or le 2me membre est inversible en
0
ce qui nest pas le cas du premier. Pour
avoir une base des vecteurs propres associs
0
, on calcule B(
0
) par la mthode
de Horner applique au polynme B() en =
0
, et on rduit en colonnes la
matrice obtenue.
10.2.6 La forme normale de Jordan
Pour les valeurs propres de multiplicit plus grande que 1, on souhaiterait g-
nraliser la mthode ci-dessus pour obtenir une base de lespace caractristique,
sous forme de cycles de Jordan. Soit
i
, n
i
les valeurs propres comptes avec leur
multiplicit. On fait un dveloppement de Taylor en
i
:
P()I = (AI)
_
B(
i
) +B

(
i
)(
i
) +... +
B
(n1)
(
i
)
(n 1)!
(
i
)
n1
_
= (
i
)
n
i

j=i
(
j
)
n
j
I
Comme AI = A
i
I (
i
)I, on obtient pour les n
i
premires puissances
de
i
:
(A
i
I)B(
i
) = 0 (33)
(A
i
I)B

(
i
) = B(
i
) (34)
... (35)
(A
i
I)
B
(n
i
1)
(
i
)
(n
i
1)!
=
B
(n
i
2)
(
i
)
(n
i
2)!
(36)
(A
i
I)
B
(n
i
)
(
i
)
n
i
!

B
(n
i
1)
(
i
)
(n
i
1)!
=

j=i
(
i

j
)
n
j
I (37)
101
Le calcul des matrices B
(n)
(
i
)/n! pour n < n
i
se fait en appliquant n
i
fois
lalgorithme de Horner (avec reste).
Thorme 11 Lespace caractristique de
i
est gal limage de B
(n
i
1)
(
i
)/(n
i

1)!.
Preuve :
On montre dabord que ImB
(n
i
1)
(
i
)/(n
i
1)! est inclus dans lespace caractris-
tique correspondant
i
en appliquant lquation (36) et les quations prcdentes.
Rciproquement on veut prouver que tout vecteur caractristique v est dans limage
de B
(n
i
1)
(
i
)/(n
i
1)!. Prouvons le par rcurrence sur le plus petit entier m tel
que (A
i
)
m
v = 0. Le cas m = 0 est clair puisque v = 0. Supposons le cas
m vrai, prouvons le cas m + 1. On applique lquation (37) v, il suft alors de
prouver que
w = (A
i
)
B
(n
i
)
(
i
)
n
i
!
v
appartient limage de B
(n
i
1)
(
i
)/(n
i
1)!. Comme B
(n
i
)
(
i
) commute avec A
(car cest un polynme en A ou en appliquant le fait que B() inverse de AI) :
(A
i
)
m
w =
B
(n
i
)
(
i
)
n
i
!
(A
i
)
m+1
v = 0
et on applique lhypothse de rcurrence w.
Pour calculer les cycles de Jordan, nous allons effectuer une rduction par
le pivot de Gau simultanment sur les colonnes des matrices B
(k)
(
i
)/k! o
k < n
i
. La simultanit a pour but de conserver les relations (33) (36) pour
les matrices rduites. Pour visualiser lalgorithme, on se reprsente les matrices
les unes au-dessus des autres, colonnes alignes. On commence par rduire la
matrice B(
i
) jusqu ce que lon obtienne une matrice rduite en recopiant
les oprations lmentaires de colonnes faites sur B(
i
) sur toutes les matrices
B
(k)
(
i
)/k!. On va continuer avec la liste des matrices rduites issues de B

(
i
),
..., B
(n
i
1)
(
i
)/(n
i
1)!, mais en dplacant les colonnes non nulles de B(
i
)
dune matrice vers le bas (pour une colonne non nulle de la matrice rduite B()
les colonnes correspondantes de B
(k)
(
i
) rduite sont remplaces par les colonnes
correspondantes de B
(k1)
(
i
) rduite pour k dcroissant de n
i
1 vers 1).
chaque tape, on obtient une famille (ventuellement vide) de cycles de Jordan, ce
sont les vecteurs colonnes correspondants aux colonnes non nulles de la matrice
rduite du haut de la colonne. On limine bien sr les colonnes correspondant aux
ns de cycles dj trouvs.
Par exemple, si B(
i
) ,= 0, son rang est 1 et on a une colonne non nulle,
et un cycle de Jordan de longueur n
i
fait des n
i
vecteurs colonnes des matrices
B
(k)
(
i
)/k! rduites. Plus gnralement, on obtiendra plus quun cycle de Jordan
(et dans ce cas B(
i
) = 0).
10.2.7 Exemple 1
A =
_
_
3 1 1
2 0 1
1 1 2
_
_
102
= 2 est valeur propre de multiplicit 2, on obtient :
B() =
2
I +
_
_
2 1 1
2 5 1
1 1 3
_
_
+
_
_
1 1 1
3 5 1
2 2 2
_
_
on applique lalgorithme de Horner :
B(2) =
_
_
1 1 1
1 1 1
0 0 0
_
_
,
B

(2) =
_
_
2 1 1
2 1 1
1 1 1
_
_
Comme B(2) ,= 0, on pourrait arrter les calculs en utilisant une colonne non
nulle et le cycle de Jordan associ (2, 2, 1) (1, 1, 0) (0, 0, 0). Expliquons
tout de mme lalgorithme gnral sur cet exemple. La rduction de B(2) sobtient
en effectuant les manipulations de colonnes C
2
+C
1
C
2
et C
3
C
1
C
3
. On
effectue les mmes oprations sur B

(2) et on obtient :
_
_
1 0 0
1 0 0
0 0 0
_
_
,
_
_
2 1 1
2 1 1
1 0 0
_
_
Ltape suivante consiste dplacer vers le bas dune matrice les colonnes non
nulles de la matrice du haut, on obtient :
_
_
1 1 1
1 1 1
0 0 0
_
_
qui se rduit en :
_
_
1 0 0
1 0 0
0 0 0
_
_
on chercherait alors dans les colonnes 2 et 3 de nouveaux cycles (puisque la co-
lonne 1 a dja t utilise pour fournir un cycle).
10.2.8 Exemple 2
A =
_
_
3 2 2
1 0 1
1 1 0
_
_
103
= 1 est valeur propre de multiplicit 3. On trouve :
B(1) =
_
_
0 0 0
0 0 0
0 0 0
_
_
,
B

(1) =
_
_
2 2 2
1 1 1
1 1 1
_
_
,
B

(1)
2
=
_
_
1 0 0
0 1 0
0 0 1
_
_
Le processus de rduction commence avec B

(1) en haut de la liste de matrices, on


effectue les oprations lmentaires de colonne C
2
C
1
C
2
et C
3
+C
1
C
3
et on obtient :
_
_
2 0 0
1 0 0
1 0 0
_
_
,
_
_
1 1 1
0 1 0
0 0 1
_
_
La premire colonne donne le premier cycle de Jordan (1, 0, 0) (2, 1, 1). On
dplace les premires colonnes dune matrice vers le bas :
_
_
2 1 1
1 1 0
1 0 1
_
_
quon rduit par les oprations 2C
2
+C
1
C
2
et 2C
3
C
1
C
3
en :
_
_
2 0 0
1 1 1
1 1 1
_
_
Puis on effectue C
3
C
2
C
3
et la deuxime colonne nous donne le deuxime
cycle de Jordan, rduit ici un seul vecteur propre (0, 1, 1).
10.2.9 Le polynme minimal par Faddeev
On vrie aisment que le degr du facteur (
i
) dans le polynme minimal
de A est gal n
i
k o k est le plus grand entier tel que :
j < k, B
(j)
(
i
) = 0
10.2.10 Formes normales rationnelles
On se place ici dans une problmatique diffrente : trouver une matrice sem-
blable la plus simple possible sans avoir introduire dextension algbrique pour
104
factoriser le polynme caractristique. Quitte complter plus tard la factori-
sation et la jordanisation partir de la forme simplie. Il existe diverses formes
associes une matrice et plusieurs algorithmes permettant de les relier entre elles,
forme de Smith, de Frobenius, forme normale de Jordan rationnelle.
On va prsenter une mthode directe de calcul dune forme normale contenant
le maximum de zros (dont la forme dite normale de Jordan rationnelle peut se
dduire) en utilisant le mme algorithme que pour la forme normale de Jordan.
Soit Q() = q
0
+ ... + q
d

d
un facteur irrductible de degr d et de multiplicit q
du polynme caractristique P. Il sagit de construire un sous-espace de dimension
dq form de cycles de Jordan rationnels. On part toujours de la relation (I
A)

kn1
B
k

k
= P()I. On observe que Q()I Q(A) est divisible par
(I A) donc il existe une matrice M() telle que :
(Q()I Q(A))(

kn1
B
k

k
) = Q()
q
M()
On observe aussi que Q a pour coefcient dominant 1 puisquil divise P, on peut
donc effectuer des divisions euclidiennes de polynmes donc de polynmes co-
efcients matriciels par Q sans avoir diviser des coefcients. Ce qui nous permet
de dcomposer B() =

kn1
B
k

k
en puissances croissantes de Q :
B() =

k
C
k
()Q()
k
, deg(C
k
) < q
On remplace et on crit que les coefcients des puissances infrieures q de Q
sont nulles (la k-ime tant non nulle car M() nest pas divisible par Q pour les
mmes raisons que pour la forme normale de Jordan). On a donc les relations :
Q(A)C
0
= 0, C
k
= Q(A)C
k+1
ce qui donne une colonne de matrice C
q1
C
q2
... C
0
0 qui sont images
lune de lautre en appliquant Q(A). On peut alors faire lalgorithme de rduction
simultane sur les colonnes des C
j
. On observe ensuite que le nombre de cycles de
Jordan de Q(A) de longueur donne est un multiple de d, en effet il suft de multi-
plier un cycle par A, ..., A
d1
pour crer un autre cycle, de plus ces cycles forment
des familles libres car on a suppos Q irrductible. On peut donc choisir pour un
cycle de longueur k des bases de la forme (v
k1
, Av
k1
..., A
d1
v
k1
) ...
(v
0
, Av
0
..., A
d1
v
0
) (0, ..., 0) o la che dsigne limage par Q(A). Si on
crit la matrice de Adans la base v
0
, Av
0
..., A
d1
v
0
, ..., v
k1
, Av
k1
..., A
d1
v
k1
on obtient un quasi-bloc de Jordan rationnel de taille kd multiple de d :
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
0 0 ... q
0
0 0 ... 1 ...
1 0 ... q
1
0 0 ... 0 ...
0 1 ... q
2
0 0 ... 0 ...
.
.
.
.
.
. ...
.
.
.
.
.
.
.
.
. ...
.
.
. ...
0 0 ... q
d1
0 0 ... 0 ...
0 0 ... 0 0 0 ... q
0
...
0 0 ... 0 1 0 ... q
1
...
.
.
.
.
.
. ...
.
.
.
.
.
.
.
.
. ...
.
.
. ...
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
105
Exemple
Soit la matrice
A =
_
_
_
_
_
_
_
_
1 2 4 2 5 4
0 1
5
2
7
2
2
5
2
1
5
2
2
1
2
5
2
3
0 1
9
2
7
2
3
7
2
0 0 2 2 3 1
1
3
2
1
2
1
3
2
1
2
_
_
_
_
_
_
_
_
Son polynme caractristique est (x2)
2
(x
2
2)
2
et on va dterminer la partie bloc
de Jordan rationnel correspondant au facteur irrductible sur les entiers Q(x) =
(x
2
2) de multiplicit q = 2. On calcule B(x) et lcriture de B comme somme
de puissances de Q (ici avec xcas en mode xcas) :
A:=[[1,-2,4,-2,5,-4],[0,1,5/2,(-7)/2,2,(-5)/2],[1,(-5)/2,2,1/(-2),5/2,-3],
[0,-1,9/2,(-7)/2,3,(-7)/2],[0,0,2,-2,3,-1],[1,(-3)/2,1/(-2),1,3/2,1/2]];
P:=det(A-x
*
idn(6));
B:=normal(P
*
inv(A-x
*
idn(6))); // preferer un appel a faddeev bien sur!
ecriture(B,Q,q):={
local j,k,l,n,C,D,E;
C:=B;
D:=B;
E:=NULL;
n:=coldim(B);
for (j:=0;j<q;j++){
for (k:=0;k<n;k++){
for (l:=0;l<n;l++){
D[k,l]:=rem(C[k,l],Q,x);
C[k,l]:=quo(C[k,l],Q,x);
}
}
E:=E,D;
}
return E;
};
E:=ecriture(B,x^2-2,2);
QA:=A
*
A-2
*
idn(6);
On vrie bien que normal(QA
*
E(0)) et normal(QA
*
E(1))-E(0)) sont
nuls. On sait quon a un bloc de taille 2 de cycles de Jordan de longueur 2, donc
il nest pas ncessaire de faire des rductions ici, il suft de prendre une colonne
non nulle de E(0), par exemple la premire colonne en x = 0 et la colonne cor-
respondante de E(1) et leurs images par A, ici cela donne (4, 24, 12, 32, 8, 4)
correspondant (0, 4, 4, 8, 4, 4), on calcule les images par A, la matrice de
lendomorphisme restreint ce sous-espace est alors le bloc de taille 4 :
_
_
_
_
0 2 0 1
1 0 0 0
0 0 0 2
0 0 1 0
_
_
_
_
106
Cette forme normale minimise le nombre de coefcients non nuls, mais pr-
sente un inconvnient, la partie nilpotente ne commute pas avec la partie bloc-
diagonale, contrairement la forme normale rationnelle de Jordan qui contient des
blocs identits au-dessus de la diagonale de blocs. Pour crer la forme normale
rationnelle de Jordan, on doit donc remplacer les blocs
_
_
... 0 1
... 0 0
...
_
_
par des
matrices identits. Supposons constitus les j premiers blocs de taille d numrots
de 0 j 1 avec comme base de vecteurs (v
0,0
, ..., v
0,d1
, ..., v
j1,d1
). Il sagit
de trouver un vecteur v
j,0
pour commencer le bloc suivant. On dnit alors v
j,l
en
fonction de v
j,l1
en appliquant la relation Av
j,l1
= v
j,l
+ v
j1,l1
. Il faut donc
chercher v
j,0
tel que
Av
j,d1
= q
0
v
j,0
... q
d1
v
j,d1
+v
j1,d1
(38)
En utilisant les relations de rcurrence prcdentes, on voit que cela revient xer
Q(A)v
j,0
en fonction des v
j

,l
avec j

< j (l quelconque). Ce qui est toujours


possible en utilisant la colonne de matrices C
j
qui sobtiennent en fonction des
C
j

+1
en appliquant Q(A).
Plus prcisment, calculons les v
j,l
en fonction de v
j,0
et des v
j

,l
(j

< j). On
utilise les coefcients binomiaux
_
l
m
_
calculs par la rgle du triangle de Pascal et
on montre par rcurrence que :
v
j,l
= A
l
v
j,0

inf(l,j)

m=1
_
l
m
_
v
jm,lm
(39)
On remplace dans (38) do :
A
d
v
j,0

inf(d,j)

m=1
_
d
m
_
v
jm,lm
+
d

l=0
q
l
(A
l
v
j,0

inf(l,j)

m=1
_
l
m
_
v
jm,lm
) = 0
nalement :
Q(A)v
j,0
=
d

l=1
q
l
inf(l,j)

m=1
_
l
m
_
v
jm,lm
(40)
Application lexemple :
Ici v
0,0
= (4, 24, 12, 32, 8, 4) et v
0,1
= Av
j,0
dont une primage par Q(A) est
w
1,0
= (0, 4, 4, 8, 4, 4) et w
1,1
= Aw
1,0
. On applique (40), comme q
1
= 0 et
q
2
= 1 on doit avoir :
Q(A)v
1,0
=
2

l=1
q
l
inf(l,1)

m=1
_
l
m
_
v
1m,lm
= 2v
0,1
donc :
v
1,0
= 2A(0, 4, 4, 8, 4, 4) = (8, 32, 0, 48, 16, 16)
v
1,1
= Av
1,0
v
0,0
= (4, 40, 4, 64, 24, 20)
On vrie bien que Av
1,1
= 2v
1,0
+v
0,1
.
107
10.2.11 Fonctions analytiques
Soit f une fonction analytique et M une matrice. Pour calculer f(M), on cal-
cule la forme normale de Jordan de M = P(D+N)P
1
o D =diag(d
1
, ..., d
m
)
est diagonale et N nilpotente dordre n. On calcule aussi le dveloppement de
Taylor formel de f en x lordre n 1, on a alors :
f(N) = P
_
_
n1

j=0
diag(f
(j)
(d
1
), ..., f
(j)
(d
m
))
j!
N
j
_
_
P
1
10.3 Quelques autres algorithmes utiles
10.3.1 Complexit asymptotique
Pour calculer le produit de matrices, on peut utiliser lalgorithme de Strassen,
on prsente ici la variante de Winograd. Soit calculer :
_
a
1,1
a
1,2
a
2,1
a
2,2
__
b
1,1
b
1,2
b
2,1
b
2,2
_
=
_
c
1,1
c
1,2
c
2,1
c
2,2
_
On calcule :
s
1
= a
2,1
+a
2,2
, s
2
= s
1
a
1,1
, s
3
= a
1,1
a
2,1
, s
4
= a
1,2
s
2
t
1
= b
1,2
b
1,1
, t
2
= b
2,2
t
1
, t
3
= b
2,2
b
1,2
, t
4
= b
2,1
t
2
puis :
p
1
= a
1,1
b
1,1
, p
2
= a
1,2
b
2,1
, p
3
= s
1
t
1
, p
4
= s
2
t
2
p
5
= s
3
t
3
, p
6
= s
4
b
2,2
, p
7
= a
2,2
t
4
u
1
= p
1
+p
2
u
2
= p
1
+p
4
, u
3
= u
2
+p
5
, u
4
= u
3
+p
7
u
5
= u
3
+p
3
, u
6
= u
2
+p
3
, u
7
= u
6
+p
6
Alors c
1,1
= u
1
, c
1,2
= u
7
, c
2,1
= u
4
, c
2,2
= u
5
.
Cet algorithme utilise 7 multiplications et 15 additions ce qui conomise 1 multi-
plication et permet en appliquant rcursivement cet algorithme pour des matrices
blocs de rduire la complexit dun produit de grandes matrices normalement en
O(n
3
= n
ln(8)/ ln(2)
) O(n
ln(7)/ ln(2)
) (la preuve est analogue celle de la multi-
plication des polynmes par lalgorithme de Karatsuba).
En utilisant une factorisation LU par blocs, on peut montrer que cette com-
plexit asymptotique se gnralise au calcul de linverse. On peut dailleurs am-
liorer lexposant, mais la constante non explicite dans le O augmente aussi. En
pratique, Strassen nest pas utilise pour des matrices de taille plus petites que
plusieurs centaines de lignes et colonnes.
De mme on peut gagner sur le calcul du polynme minimal en faisant des
oprations de multiplication par bloc.
10.3.2 Numriques
La plupart des algorithmes dalgbre linaire numrique ont une utilit en
calcul exact : par exemple la factorisation LU (avec les variations dcrites dans
108
la section rduction de Gau), la factorisation QR (et donc la mthode de Gram-
Schmidt, ici pour des raisons defcacit on orthogonalise dabord la base de dpart
et on la normalise la n seulement), Cholesky,....
Certains algorithmes numriques peuvent sutiliser conjointement des algo-
rithmes exacts. Par exemple, pour une matrice M coefcients rationnels, on
peut localiser par des mthodes exactes les racines du polynme caractristique,
on trouve une valeur approche r dune valeur propre une prcision xe, puis
calculer par la mthode de la puissance applique (MrI)
1
un vecteur propre
approch. Inversement, des mthodes de diagonalisation numriques couples du
calcul exact peuvent permettre de localiser des valeurs propres complexes.
10.3.3 Dcomposition de Schur
Il sagit dune factorisation de matrice sous la forme
A = PSP
1
o P est unitaire et S diagonale suprieure. Existence (thorique) : on prend une
valeur propre et un vecteur propre correspondant, puis on projette sur lorthogonal
de ce vecteur propre et on sy restreint, on prend nouveau une valeur propre et un
vecteur propre correspondant, etc.
On peut approcher cette factorisation par un algorithme itratif qui utilise la
factorisation QR dune matrice quelconque comme produit dune matrice unitaire
par une matrice triangulaire suprieure coefcients positifs sur la diagonale. On
fait lhypothse que les valeurs propres de S sur la diagonale sont classes par ordre
de module strictement dcroissant [
1
[ > [
2
[ > ... > [
n
[ (dveloppement inspir
par Peter J. Olver dans le cas symtrique http://www.math.umn.edu/~olver/aims_/qr.pdf).
On peut toujours sy ramener quitte remplacer A par A I. Posons A
1
= A,
et par rcurrence A
n
= Q
n
R
n
(avec Q
n
unitaire et R triangulaire suprieure
coefcients diagonaux positifs), A
n+1
= R
n
Q
n
. On a alors
A
k
= (Q
1
R
1
)(Q
1
R
1
)(Q
1
R
1
)...(Q
1
R
1
)(Q
1
R
1
)
= Q
1
(R
1
Q
1
)(R
1
Q
1
)(R
1
...Q
1
)(R
1
Q
1
)R
1
= Q
1
(Q
2
R
2
)(Q
2
R
2
)..(Q
2
R
2
)R
1
= Q
1
Q
2
(R
2
Q
2
)R
2
..Q
2
R
2
R
1
= Q
1
Q
2
(Q
3
R
3
)...Q
3
R
3
R
2
R
1
= Q
1
...Q
k
R
k
...R
1
Dautre part A = PSP
1
donc A
k
= PS
k
P
1
. Soit D la forme diagonale de S
et U la matrice de passage S = UDU
1
, o U est triangulaire suprieure et o on
choisit la normalisation des coefcients sur la diagonale de U valant 1. On a donc
A
k
= PUD
k
U
1
P
1
Ensuite, on suppose quon peut factoriser U
1
P
1
= L

U sans permutations, donc


quon ne rencontre pas de pivot nul, et quitte multiplier les vecteurs unitaires de
P
1
par une constante complexe de module 1 on peut supposer que les pivots sont
positifs donc que

U a des coefcients positifs sur la diagonale, on a alors
A
k
= PUD
k
L

U = Q
1
...Q
k
R
k
...R
1
109
puis en multipliant par U
1
[D[
k
PUD
k
L[D[
k
= Q
1
...Q
k
R
k
...R
1

U
1
[D
k
o R
k
...R
1

U
1
[D[
k
est triangulaire suprieure coefcients positifs sur la diago-
nale et Q
1
...Q
k
est unitaire. On regarde ensuite les entres de la matrice D
k
L[D[
k
,
sous la diagonale elles convergent (gomtriquement) vers 0, donc UD
k
L[D[
k
tend vers une matrice triangulaire suprieure dont les coefcients diagonaux valent
e
ik arg(
j
)
. On montre que cela entraine que Q
1
...Q
k
est quivalent P(D/[D[)
k
Q
1
...Q
k
P(D/[D[)
k
, R
k
...R
1

U
1
[D[
k
(D/[D[)
k
UD
k
L[D[
k
Donc, Q
k
tend devenir diagonale, et R
k
Q
k
= A
k+1
triangulaire suprieure. De
plus
A = Q
1
A
2
Q
1
1
= ... = Q
1
...Q
k
A
k+1
(Q
1
...Q
k
)
1
la matrice A
k+1
est donc semblable A.
En pratique, on nimpose pas la positivit des coefcients diagonaux de Rdans
la factorisation QR, ce qui ne change videmment pas le fait que Q
k
sapproche
dune matrice diagonale et A
k
dune matrice triangulaire suprieure (avec conver-
gence vitesse gomtrique). On utilise aussi des shifts pour acclerer la conver-
gence, cest--dire quau lieu de faire QR et RQ sur la matrice A
k
on le fait sur
A
k

k
I o
k
est choisi pour acclerer la convergence vers 0 du coefcient din-
dice ligne n colonne n 1 (idalement il faut prendre
k
proche de
n
la valeur
propre de module minimal, an de minimiser [
n

k
[/[
n1

k
[). En effet, si
A
k

k
I = Q
k
R
k
et A
k+1
= R
k
Q
k
+
k
I alors :
(A
1
I)...(A
k
I) = Q
1
R
1
(Q
1
R
1
(
2

1
)I)...(Q
1
R
1
(
2

1
)I)
= Q
1
(R
1
Q
1
(
2

1
)I)R
1
(Q
1
R
1
(
3

1
)I)...(Q
1
R
1
(
2

1
)I)
= Q
1
(A
2

1
I (
2

1
)I)R
1
Q
1
(R
1
Q
1
(
3

1
)I)R
1
...(Q
1
R
1
(
2

1
)I)
= Q
1
(A
2

2
I)(A
2

3
I)...(A
2

k1
I)R
1
= ...
= Q
1
...Q
k
R
k
...R
1
On peut aussi liminer la dernire ligne et la dernire colonne de la matrice pour
acclerer les calculs ds que le coefcient en ligne n colonne n1 est sufsamment
petit.
On remarque que pour une matrice relle si on choisit des shifts conjugus,
alors Q
1
...Q
k
R
k
...R
1
est rel. Or si QR = QR et si R est inversible
Q
1
Q = RR
1
On a donc une matrice symtrique (car Q
1
= Q
t
) et triangulaire suprieure. On
en dduit que Q
1
Q = D est diagonale, donc Q = QD. On peut donc rendre Q
relle en divisant chaque colonne par un e
i
, et rendre Rrelle en conjuguant par la
matrice D. Mais ce procd de retour au rel aprs limination de 2 valeurs propres
complexes conjugues dune matrice relle se heurte un problme de condition-
nement parce que le choix dun shift intressant pour la convergence va rendre
110
la matrice R proche dune matrice non inversible (les deux derniers coefcients
diagonaux de R sont proches de 0). On a alors seulement
Q
1
QR = R
Si on dcompose Q
1
Q, R, R par blocs n 2, n 2, n 2, 2, 2, n 2 et 2, 2, on
a
_
QQ
11
QQ
12
QQ
21
QQ
22
__
R
11
R
12
0 R
22
_
=
_
QQ
11
R
11
QQ
21
R
11
QQ
11
R
12
+QQ
12
R
22
QQ
21
R
12
+QQ
22
R
22
_
=
_
R
11
R
12
0 R
22
_
Donc on a QQ
11
= R
11
R
1
11
. Comme Qest unitaire, QQ = Q
1
Q = Q
t
Qest sy-
mtrique, donc QQ
11
est diagonale puisque symtrique et triangulaire suprieure.
On peut donc ramener Q
11
et R
11
en des matrices relles.
Revenons la localisation des valeurs propres. On suppose quon a mainte-
nant une matrice unitaire P et une matrice triangulaire suprieure S (aux erreurs
darrondi prs) telles que
P
1
AP = S
Que peut-on en dduire ? On va dabord arrondir P en une matrice exacte co-
efcients rationnels, dont les dnominateurs sont une puissance de 2 (en fait cest
exactement ce que donne lcriture dun ottant en base 2, une fois ramen tous les
exposants la mme valeur). On a donc une matrice P
e
presque unitaire exacte et
telle que
S
e
= P
1
e
AP
e
est semblable A, et presque triangulaire suprieure. (comme P
e
est presque uni-
taire, sa norme et la norme de son inverse sont proches de 1 donc S
e
est proche
de S, les coefcients de S
e
sont de la mme taille que les coefcients de A : le
changement de base est bien conditionn et cest la raison pour laquelle on a choisi
deffectuer des transformations unitaires).
Notons
1
, ...,
n
les coefcients diagonaux de S
e
, soit un majorant de la
norme des coefcients sous-diagonaux de S
e
, et soit un minorant de lcart entre
2
j
distincts. On a donc S
e
= U + E o U est triangulaire suprieure, E est
triangulaire infrieure avec des 0 sous la diagonale et des coefcients de module
majors par . Si est sufsamment petit devant , on va montrer quon peut loca-
liser les valeurs propres de S
e
(qui sont celles de A) au moyen des
j
.
En effet, xons j et soit C un cercle de centre =
j
et de rayon /2. Si
A est une matrice diagonalisable, on sait que
nombre de valeurs propres C =
1
2i
trace
_
C
(AzI)
1
En prenant A = S
e
, et en crivant
(S
e
zI)
1
= (U zI +E)
1
= (I + (U zI)
1
E)
1
(U zI)
1
on dveloppe le second terme si la norme de (UzI)
1
E est strictement infrieure
1
(S
e
zI)
1
= (UzI)
1
(UzI)
1
E(UzI)
1
+(UzI)
1
E(UzI)
1
E(UzI)
1
+...
111
puis on calcule la trace
trace(S
e
zI)
1
=

j
(
j
z)
1
+
avec
[[ 2[[(U zI)
1
[[
[[(U zI)
1
E[[
1 [[(U zI)
1
E[[
Au nal, le nombre de valeurs propres dans C est donn par
1 + , [ [ max
zC
[[(U zI)
1
[[
[[(U zI)
1
E[[
1 [[(U zI)
1
E[[
Il suft donc que le max soit plus petit que 1 pour avoir lexistence dune valeur
propre et une seule de S
e
dans le cercle C ( distance au plus de ). Ce sera le
cas si

1
2
_

2[[S
e
[[
_
n1

n 1
on choisit donc pour raliser lgalit ci-dessus, sous rserve que ne soit pas
trop petit, rappelons que doit tre plus petit ou gal /2. Si est petit, il peut tre
ncessaire dutiliser une prcision plus grande pour les calculs de la dcomposition
de Schur en arithmtique ottante.
Typiquement, on peut esprer (pour un cart pas trop petit) pouvoir localiser
les racines dun polynme de degr n par cette mthode avec prcision b bits en
O(n
3
b
2
+ n
2
b
3
) oprations pour le calcul de la dcomposition de Schur en ot-
tant (n
3
b
2
pour Hessenberg initial puis n
2
b
2
par itration et un nombre ditrations
proportionnel b). Pour le calcul exact de S
e
, il faut inverser une matrice de taille
n avec des coefcients de taille proportionnelle b donc O(n
4
b ln(n)) oprations
(en modulaire, la taille des coefcients de linverse est O(nb ln(n))) puis calculer
un produit avec une matrice n, n de coefcients de taille proportionnelle b, soit
O(n
4
b
2
ln(nb)) oprations. Asymptotiquement, on peut faire mieux avec des m-
thodes de multiplication et doprations matricielles par blocs. Pour viter la perte
dun facteur n, on peut aussi ne pas faire de calculs en mode exact et controler les
erreurs sur la matrice S. On peut regrouper les valeurs propres par clusters si
elles sont trop proches la prcision de b bits. Pour la recherche des racines dun
polynme P, on peut montrer, en calculant le rsultant de P et de P

qui est en
module plus grand ou gal 1, et en lcrivant comme produit des diffrences des
racines, et en majorant toutes les diffrences de racine sauf une laide de la norme
innie de P, quil faut b = O(n) bits pour sparer les racines).
10.3.4 Autres
On peut aussi facilement programmer la recherche de la dcomposition
t
PDP
dune matrice symtrique et en dduire la signature dune forme quadratique. Ci-
tons enn lalgorithme LLL (cf. Cohen) qui est utile dans de nombreux domaines
(il permet de trouver des vecteurs assez courts dans un rseau, ce ne sont pas les
plus courts, mais en contrepartie on les trouve trs vite).
112
10.4 Quelques rfrences
Comme toujours on renvoie lexcellent livre de Henri Cohen : A Course in
Computational Algebraic Number Theory
Gantmacher : Thorie des matrices
Pour une implmentation des algorithmes de forme normale de Smith ou de
Frobenius, cf. le source de MuPAD ou
http://www.mapleapps.com/maplelinks/share/normform.html
Ferrard, Lemberg : Mathmatiques Concrtes, Illustres par la TI 92 et la TI
89
Prsente aussi des algorithmes plus numriques, et le lien avec la diagonali-
sation numrique de matrices.
Press et al. : Numerical recipies in Fortran/C/Pascal.
Pour des algorithmes numriques (sur les matrices et autres).
10.5 Exercices (algbre linaire)
10.5.1 Instructions
Les commandes dalgbre linaire de Xcas sont regroupes dans le menu
Cmds->Alglin. En maple V, la commande ?linalg afche la liste des
commandes dalgbre linaire.
En maple V il est conseill dexcuter with(linalg);, sinon il faut pr-
cder chaque commande de linalg::. Attention il faut utiliser le carac-
tre & avant la multiplication et il faut souvent utiliser evalm dans les pro-
grammes utilisant des matrices et vecteurs. Notez aussi que les matrices sont
toujours passes par rfrence en maple V, en Xcas le choix revient lutili-
sateur (affectation par := par valeur ou par =< par rfrence)
Pour travailler avec des coefcients modulaires, en Xcas on fait suivre les
coefcients ou matrices de % n (utiliser % 0 pour enlever les modulos),
en maple V, on utilise les noms de commandes avec une majuscule (forme
inerte) suivi de mod n.
10.5.2 Exercices
1. En utilisant un logiciel de calcul formel, comparez le temps de calcul dun
dterminant de matrice alatoire coefcients entiers de tailles 50 et 100,
dune matrice de taille 6 et 12 avec comme coefcients symboliques ligne
j colonne k, x
j+k
lorsque j + k est pair et 0 sinon. Peut-on en dduire une
indication sur lalgorithme utilis ?
2. crire un programme calculant la borne de Hadamard dun dterminant
coefcients rels (rappel : cest la borne obtenue en faisant le produit des
normes euclidiennes des vecteurs colonnes).
3. Crez une matrice 4x4 alatoire avec des coefcients entiers compris entre
-100 et 100, calculer la borne de Hadamard de son dterminant avec le pro-
gramme prcdent, calculer ce dterminant modulo quelques nombres pre-
miers choisis en fonction de la borne de Hadamard et vriez le rsultat de
la reconstruction modulaire du dterminant.
113
4. Crez une matrice 100x100 alatoire coefcients entiers et calculez son
dterminant modulo quelques nombres premiers. Dans quels cas peut-on
conclure que la matrice est inversible dans R? dans Z?
5. crire un programme calculant par interpolation de Lagrange le polynme
caractristique dune matrice (en donnant de det(I A), n+1 valeurs
distinctes).
6. (Long) crire un programme qui calcule un dterminant de matrice en cal-
culant les mineurs 2x2 puis 3x3 etc. (mthode de Laplace)
7. Recherche du polynme minimal. On prend un vecteur alatoire coef-
cients entiers et on calcule v, Av, ..., A
n
v puis on cherche une relation li-
naire minimale entre ces vecteurs, en calculant le noyau de la matrice ayant
ces vecteurs colonnes. Si le noyau est de dimension 1, alors le polynme
minimal est gal au polynome caractristique et correspond un vecteur de
la base du noyau. Sinon, il faut choisir un vecteur du noyau correspondant
au degr le plus petit possible puis faire le PPCM avec les polynomes ob-
tenurs avec dautres vecteurs pour obtenir le polynme minimal avec une
grande probabilit. Essayez avec la matrice A de taille 3 ayant des 0 sur la
diagonale et des 1 ailleurs. crire un programme mettant en oeuvre cette
recherche, testez-le avec une matrice alatoire de taille 30.
8. Testez lalgorithme mthode de Fadeev pour la matrice A ci-dessus. Mme
question pour
A =
_
_
3 1 1
2 0 1
1 1 2
_
_
, A =
_
_
3 2 2
1 0 1
1 1 0
_
_
9. crire un programme calculant par une mthode itrative la valeur propre de
module maximal dune matrice coefcients complexes. Dans le cas rel,
modier le programme pour pouvoir traiter le cas dun couple de complexes
conjugus de module maximal. Dans le cas hermitien ou rel symtrique, li-
miner le couple valeur propre/vecteur propre et continuer la diagonalisation
numrique.
10. Soient [a[, [b[ <
_
n/2 crire une fonction ayant comme arguments a/b
(mod n) qui calcule a et b.
Utiliser ce programme pour rsoudre un systme 4,4 coefcients entiers
par une mthode p-adique.
114
11 Interpolation
tant donn la facilit de manipulation quapportent les polynomes, on peut
chercher approcher une fonction par un polynme. De plus linterpolation est un
outil trs utilis pour calculer des polynmes en calcul formel.
11.1 Interpolation de Lagrange
La mthode la plus naturelle consiste chercher un polynme de degr le plus
petit possible gal la fonction en certains points x
0
, ..., x
n
et trouver une majo-
ration de la diffrence entre la fonction et le polynme. Le polynome interpolateur
de Lagrange rpond cette question.
11.1.1 Existence et contrle de lerreur.
Soit donc x
0
, ..., x
n
des rels distincts et y
0
, ..., y
n
les valeurs de la fonction
approcher en ces points (on posera y
j
= f(x
j
) pour approcher la fonction f). On
cherche donc P tel que P(x
j
) = y
i
pour j [0, n].
Commencons par voir sil y a beaucoup de solutions. Soit P et Q deux solu-
tions distinctes du problme, alors P Q est non nul et va sannuler en x
0
, ..., x
n
donc possde n + 1 racines donc est de degr n + 1 au moins. Rciproquement,
si on ajoute P un multiple du polynome A =

n
j=0
(X x
j
), on obtient une
autre solution. Toutes les solutions se dduisent donc dune solution particulire en
y ajoutant un polynome de degr au moins n + 1 multiple de A.
Nous allons maintenant construire une solution particulire de degr au plus
n. Si n = 0, on prend P = x
0
constant. On procde ensuite par rcurrence. Pour
construire le polynme correspondant x
0
, ..., x
n+1
on part du polynome P
n
cor-
respondant x
0
, ..., x
n
et on lui ajoute un multiple rel de A
P
n+1
= P
n
+a
n

j=0
(X x
j
)
Ainsi on a toujours P
n+1
(x
j
) = y
j
pour j = 0, ..n, on calcule maintenant a pour
que P
n+1
(x
n+1
) = y
n+1
. En remplacant avec lexpression de P
n+1
ci-dessus, on
obtient
P
n
(x
n+1
) +a
n

j=0
(x
n+1
x
j
) = y
n+1
Comme tous les x
j
sont distincts, il existe une solution unique a :
a =
y
n+1
P
n
(x
n+1
)

n
j=0
(x
n+1
x
j
)
On a donc prouv le :
Thorme 12 Soit n + 1 rels distincts x
0
, ..., x
n
et n + 1 rels quelconques
y
0
, ..., y
n
. Il existe un unique polynme P de degr infrieur ou gal n, appel
polynome de Lagrange, tel que :
P(x
i
) = y
i
115
Exemple : dterminons le polynome de degr infrieur ou gal 2 tel que
P(0) = 1, P(1) = 2, P(2) = 1. On commence par P
0
= 1. Puis on pose P
1
=
P
0
+aX = 1+aX. Comme P(1) = 2 = 1+a on en tire a = 1 donc P
1
= 1+X.
Puis on pose P
2
= P
1
+ aX(X 1), on a P
2
(2) = 3 + 2a = 1 donc a = 1,
nalement P
2
= 1 +X X(X 1).
On peut calculer le polynome de Lagrange comme indiqu ci-dessus, la m-
thode dite des diffrences divises permettant de le faire de la manire la plus
efcace possible (cf. par exemple Demailly).
Reste estimer lcart entre une fonction et son polynome interpolateur, on a
le :
Thorme 13 Soit f une fonction n + 1 fois drivable sur un intervalle I = [a, b]
de R, x
0
, ..., x
n
des rels distincts de I. Soit P le polynome de Lagrange donn par
les x
j
et y
j
= f(x
j
). Pour tout rel x I, il existe un rel
x
[a, b] (qui dpend
de x) tel que :
f(x) P(x) =
f
[n+1]
(
x
)
(n + 1)!
n

j=0
(x x
j
) (41)
Ainsi lerreur commise dpend dune majoration de la taille de la drive n + 1-
ime sur lintervalle, mais aussi de la disposition des points x
j
par rapport x. Par
exemple si les points x
j
sont quidistribus, le terme [

n
j=0
(x x
j
)[ sera plus
grand prs du bord de I quau centre de I.
Preuve du thorme : Si x est lun des x
j
lgalit est vraie. Soit
C = (f(x) P(x))/
n

j=0
(x x
j
)
on considre maintenant la fonction :
g(t) = f(t) P(t) C
n

j=0
(t x
j
)
elle sannule en x
j
pour j variant de 0 n ainsi quen x suite au choix de la
constante C, donc g sannule au moins n + 2 fois sur lintervalle contenant les
x
j
et x, donc g

sannule au moins n + 1 fois sur ce mme intervalle, donc g

sannule au moins n fois, etc. et nalement g


[n+1]
sannule une fois au moins sur
cet intervalle. Or
g
[n+1]
= f
[n+1]
C(n + 1)!
car P est de degr infrieur ou gal n et

n
j=0
(x x
j
) x
n+1
est de degr
infrieur ou gal n. Donc il existe bien un rel
x
dans lintervalle contenant les
x
j
et x tel que
C =
f
[n+1]
(
x
)
(n + 1)!
11.1.2 Diffrences divises
Calcul efcace du polynme de Lagrange.
Avec la mthode de calcul prcdent, on remarque que le polynme de Lagrange
116
peut scrire la Horner sous la forme :
P(x) =
0
+
1
(x x
0
) +... +
n
(x x
0
)...(x x
n1
)
=
0
+ (x x
0
)(
1
+ (x x
1
)(
2
+... + (x x
n2
)(
n1
+ (x x
n1
)
n
)...))
ce qui permet de le calculer rapidement une fois les
i
connus. On observe que

0
= f(x
0
),
1
=
f(x
1
) f(x
0
)
x
1
x
0
On va voir que les
k
peuvent aussi se mettre sous forme dune diffrence. On
dnit les diffrences divises dordre n par rcurrence
f[x
i
] = f(x
i
), f[x
i
, ..., x
k+i+1
] =
f[x
i+1
, ..., x
k+i+1
] f[x
i
, ..., x
k+i
]
x
k+i+1
x
i
On va montrer que
k
= f[x
0
, ..., x
k
]. Cest vrai au rang 0, il suft donc de le
montrer au rang k + 1 en ladmettant au rang k. Pour cela on observe quon peut
construire le polynme dinterpolation en x
0
, ..., x
k+1
partir des polynmes din-
terpolation P
k
en x
0
, ..., x
k
et Q
k
en x
1
, ..., x
k+1
par la formule :
P
k+1
(x) =
(x
k+1
x)P
k
+ (x x
0
)Q
k
x
k+1
x
0
en effet on vrie que P
k+1
(x
i
) = f(x
i
) pour i [1, k] car P
k
(x
i
) = f(x
i
) =
Q
k
(x
i
), et pour i = 0 et i = k +1, on a aussi P
k+1
(x
0
) = f(x
0
) et P
k+1
(x
k+1
) =
f(x
k+1
). Or
k+1
est le coefcient dominant de P
k+1
donc cest la diffrence du
coefcient dominant de Q
k
et de P
k
divise par x
k+1
x
0
, cest--dire la dnition
de f[x
0
, ..., x
k+1
] en fonction de f[x
1
, ..., x
k+1
] et f[x
0
, ..., x
k
].
Exemple : on reprend P(0) = 1, P(1) = 2, P(2) = 1. On a
x
i
f[x
i
] f[x
i
, x
i+1
] f[x
0
, x
1
, x
2
]
0 1
(2 1)/(1 0) = 1
1 2 (1 1)/(2 0) = -1
(1 2)/(2 1) = 1
2 1
donc P(x) = 1 + (x 0)( 1 + (x 1)( -1 )) = 1 +x(2 x).
On peut naturellement utiliser lordre que lon souhaite pour les x
i
, en obser-
vant que le coefcient dominant de P ne dpend pas de cet ordre, on en dduit
que f[x
0
, ..., x
k
] est indpendant de lordre des x
i
, on peut donc partir du tableau
ci-dessus crire P par exemple avec lordre 2,1,0, sous la forme
P(x) = 1 + (x 2)(1 + (x 1)(1)) = 1 + (x 2)(x)
11.2 Les splines
Il sagit de fonctions dnies par des polynomes de degr born sur des inter-
valles, dont on xe la valeur aux extrmits des intervalles (comme pour le poly-
nome de Lagrange) ce qui rend la fonction continue, de plus on exige un degr
117
de rgularit plus grand, par exemple etre de classe C
2
. Enn, on xe des condi-
tions aux bornes de la runion des intervalles, par exemple avoir certaines drives
nulles.
Par exemple supposons quon se donne n intervalles, donc n+1 points x
0
, ..., x
n
,
on se xe une rgularit C
d1
. Ceci entraine (n 1)d conditions de recollement,
on y ajoute n + 1 conditions de valeur en x
0
, ..., x
n
, on a donc nd + 1 conditions,
la borne sur le degr des polynomes doit donc etre d (ou plus, mais d suft) ce
qui donne n(d + 1) degrs de libert, on peut donc ajouter d 1 conditions, par
exemple pour les splines naturelles, on impose que les drives dordre d/2 d1
soient nulles en x
0
et x
n
(si d est pair, on commence la drive d/2 + 1-ime
nulle en x
n
).
Pour trouver les polynomes, on doit donc rsoudre un grand systme linaire.
Une mthode permettant de diminuer la taille du systme linaire rsoudre dans le
cas des splines naturelles consiste se xer n inconnues z
0
, .., z
n1
reprsentant les
drives d-ime de la spline f en x
0
sur [x
0
, x
1
] x
n1
sur [x
n1
, x
n
], et (d1)/2
inconnues f
j
, reprsentant la valeur de la drive de f en x
0
pour j variant de 1
(d 1)/2. On peut alors crire le polynome sur lintervalle [x
0
, x
1
] car on connait
son dveloppement de Taylor en x
0
. On effectue un changement dorigine (par
application rpte de Horner) en x
1
. On obtient alors le polynome sur [x
1
, x
2
] en
remplaant uniquement la drive d-ime par z
1
. On continue ainsi jusquen x
n1
.
Le systme sobtient en calculant la valeur du polynome en x
0
, ..., x
n
et la nullit
des drives dordre (d 1)/2 d/2 en x
n
. On rsoud le systme et on remplace
pour avoir les valeurs numriques des coefcients du polynome.
12 La moyenne arithmtico-gomtrique.
La moyenne arithmtico-gomtrique est un processus itratif qui converge trs
rapidement et est trs utile pour calculer les fonctions transcendantes rciproques
en multi-prcision. On peut alors trouver les fonctions transcendantes directes par
application de la mthode de Newton.
12.1 Dnition et convergence
Soient a et b deux rels positifs, on dnit les 2 suites
u
0
= a, v
0
= b, u
n+1
=
u
n
+v
n
2
, v
n+1
=

u
n
v
n
(42)
On va montrer que ces 2 suites sont adjacentes et convergent donc vers une limite
commune note M(a, b) et il se trouve que la convergence est trs rapide, en raison
de lidentit :
u
n+1
v
n+1
=
1
2
(

u
n

v
n
)
2
=
1
2(

u
n
+

v
n
)
2
(u
n
v
n
)
2
(43)
la convergence est quadratique.
On suppose dans la suite que a b sans changer la gnralit puisque changer
a et b ne change pas la valeur de u
n
et v
n
pour n > 0. On a alors u
n
v
n
(daprs
(43) pour n > 0) et u
n+1
u
n
car
u
n+1
u
n
=
1
2
(v
n
u
n
) 0
118
et v
n+1
=

u
n
v
n


v
n
v
n
= v
n
. Donc (u
n
) est dcroissante minore (par
v
0
), (v
n
) est croissante majore (par u
0
), ces 2 suites sont convergentes et comme
u
n+1
=
u
n
+v
n
2
, elles convergent vers la mme limite l qui dpend de a et b et que
lon note M(a, b). On remarque aussi que M(a, b) = bM(a/b, 1) = aM(1, b/a).
Prcisons maintenant la vitesse de convergence lorsque a b > 0. On va
commencer par estimer le nombre ditrations ncessaires pour que u
n
et v
n
soient
du mme ordre de grandeur. Pour cela, on utilise la majoration
ln(u
n+1
) ln(v
n+1
) ln(u
n
) ln(v
n+1
) =
1
2
(ln(u
n
) ln(v
n
))
donc
ln
u
n
v
n
= ln(u
n
) ln(v
n
)
1
2
n
(ln(a) ln(b)) =
1
2
n
ln
a
b
Donc si n
ln(ln(a/b)/m)
ln(2)
alors ln
u
n
v
n
m (par exemple, on peut prendre m = 0.1
pour avoir u
n
/v
n
[1, e
0.1
]). Le nombre minimum ditrations n
0
est proportion-
nel au log du log du rapport a/b. Ensuite on est ramen tudier la convergence
de la suite arithmtico-gomtrique de premiers termes a = u
n
0
et b = v
n
0
et
mme en tenant compte de M(a, b) = aM(1, b/a) a = 1 et b = v
n
/u
n
donc
0 a b 1 e
0.1
. Alors lquation (43) entraine
u
n+1
v
n+1

1
8
(u
n
v
n
)
2
puis (par rcurrence)
0 u
n
v
n

1
8
2
n
1
(a b)
2
n
Donc comme M(a, b) est compris entre v
n
et u
n
, lerreur relative sur la limite
commune est infrieure une prcision donne au bout dun nombre ditrations
proportionnel au ln(ln(1/)).
Typiquement dans la suite, on souhaitera calculer M(1, b) avec b de lordre de
2
n
en dterminant n chiffres signicatifs, il faudra alors O(ln(n)) itrations pour
se ramener M(1, b) avec b [e
0.1
, 1] puis O(ln(n)) itrations pour avoir la
limite avec n chiffres signicatifs.
Le cas complexe
On suppose maintenant que a, b C avec 1(a) > 0, 1(b) > 0. On va voir que la
suite arithmtico-gomtrique converge encore.
tude de largument
On voit aisment (par rcurrence) que 1(u
n
) > 0 ; de plus 1(v
n
) > 0 car par
dnition de la racine carre 1(v
n
) 0 et est de plus non nul car le produit de
deux complexes darguments dans ] /2, /2[ ne peut pas tre un rel ngatif.
On en dduit que arg(u
n+1
) = arg(u
n
+v
n
) se trouve dans lintervalle de bornes
arg(u
n
) et arg(v
n
) et que arg(v
n+1
) =
1
2
(arg(u
n
) + arg(v
n
)) donc
[ arg(u
n+1
arg(v
n+1
)[
1
2
[ arg(u
n
) arg(v
n
)[
Aprs n itrations, on a
[ arg(u
n
) arg(v
n
)[

2
n
119
Aprs quelques itrations, u
n
et v
n
seront donc presque aligns. Faisons 4 itra-
tions. On peut factoriser par exemple v
n
et on est ramen ltude de la suite de
termes initiaux a = u
n
/v
n
dargument arg(u
n
)arg(v
n
) petit (infrieur en valeur
absolue /16) et b = 1. On suppose donc dans la suite que
[ arg(
u
n
v
n
)[
/16
2
n
tude du module
On a :
u
n+1
v
n+1
=
1
2
_
_
_
u
n
v
n
+
1
_
u
n
v
n
_
_
Posons
u
n
v
n
=
n
e
i
n
, on a :
[
u
n+1
v
n+1
[ =
1
2

n
e
i
n
/2
+
1

n
e
i
n
/2

=
1
2

n
+
1

n
) cos

n
2
+i(

n
) sin

n
2

=
1
2

n
+
1

n
)
2
cos
2

n
2
+ (

n
)
2
sin
2

n
2
=
1
2
_

n
+
1

n
+ 2 cos
n
Si dsigne le max de
n
et 1/
n
, on a alors la majoration
[
u
n+1
v
n+1
[
1
2
_
+ + 2 =

donc en prenant les logarithmes


ln
n+1

1
2
ln =
1
2
[ ln
n
[ (44)
On rappelle quon a la majoration
[ arg(
u
n
v
n
)[ = [
n
[
/16
2
n

1
2
n+1
120
qui va nous donner la minoration de
n+1

n+1
= [
u
n+1
v
n+1
[ =
1
2
_

n
+
1

n
+ 2 2(1 cos
n
)
=
1
2

n
+
1

n
+ 2 4 sin
2
(

n
2
)

1
2
_

n
+
1

n
+ 2
2
n

1
2
_

n
+
1

n
+ 2

1

2
n

n
+
1

n
+ 2

1
2
_
1

+
1

+ 2
1


_
1

2
n
4

_
1

2
n
4

_
1
1
4 2
2n+2
en prenant les log et en minorant ln(1 x) par 2x
ln
n+1

1
2
([ ln
n
[ + ln(1
1
4 2
2n+2
))
1
2
([ ln
n
[ +
1
2
2n+3
)
Finalement avec (44)
[ ln
n+1
[
1
2
([ ln
n
[ +
1
2
2n+3
)
On en dduit
[ ln
n
[
1
2
n
ln
0
+
1
2
n+3
+... +
1
2
2n+1
+
1
2
2n+2
=
1
2
n
ln
0
+
1
2
n+2
La convergence du ln(u
n
/v
n
) vers 0 est donc gomtrique, donc u
n
et v
n
convergent
quadratiquement.
12.2 Lien avec les intgrales elliptiques
Le calcul de la limite commune des suites u
n
et v
n
en fonction de a et b nest
pas trivial au premier abord. Il est reli aux intgrales elliptiques, plus prcisment
on peut construire une intgrale dpendant de deux paramtres a et b et qui est
invariante par la transformation u
n
, v
n
u
n+1
, v
n+1
(42)
I(a, b) =
_
+

dt
_
(a
2
+t
2
)(b
2
+t
2
)
On a en effet
I(
a +b
2
,

ab) =
_
+

du
_
((
a+b
2
)
2
+u
2
)(ab +u
2
)
121
On pose alors
u =
1
2
(t
ab
t
), t > 0
o t u est une bijection croissante de t ]0, +[ vers u ] , +[, donc
I(
a +b
2
,

ab) =
_
+
0
dt/2(1 +ab/t
2
)
_
((
a+b
2
)
2
+ 1/4(t ab/t)
2
)(ab + 1/4(t ab/t)
2
)
= 2
_
+
0
dt
_
(a
2
+t
2
)(b
2
+t
2
)
= I(a, b)
On note au passage que I est dnie si a, b C vrient 1(a) > 0, 1(b) > 0, on
peut montrer que la relation ci-dessus stend (par holomorphie).
Lorsque a = b = l (par exemple lorsquon est la limite), le calcul de I(l, l)
est explicite
I(l, l) =
_
+

dt
(l
2
+t
2
)
=

l
donc
I(a, b) = I(M(a, b), M(a, b)) =

M(a, b)
On peut transformer I(a, b) en posant t = bu
I(a, b) = 2
_
+
0
du
_
(a
2
+b
2
u
2
)(1 +u
2
)
=
2
a
_
+
0
du
_
(1 + (b/a)
2
u
2
)(1 +u
2
)
Puis en posant u = tan(x) (du = (1 +u
2
)dx)
I(a, b) =
2
a
_
2
0

1 + tan(x)
2
1 + (b/a)
2
tan(x)
2
dx
et enn en posant tan
2
(x) =
sin(x)
2
1sin(x)
2
I(a, b) =
2
a
_
2
0

1
1 (1
b
2
a
2
) sin(x)
2
dx
Si on dnit pour m < 1
K(m) =
_
2
0
dx
_
1 msin(x)
2
alors on peut calculer K en fonction de I, en posant m = 1 b
2
/a
2
soit b
2
/a
2
=
1 m
K(m) =
a
2
I(a, a

1 m) =
a
2

M(a, a

1 m)
=

2M(1,

1 m)
do lon dduit la valeur de lintgrale elliptique en fonction de la moyenne arithmtico-
gomtrique :
K(m) =
_
2
0
dx
_
1 msin(x)
2
=

2M(1,

1 m)
(45)
122
Dans lautre sens, pour x et y positifs
K((
x y
x +y
)
2
) =

2M(1,
_
1 (
xy
x+y
)
2
)
=

2M(1,
2
x+y

xy)
=

2
2
x+y
M(
x+y
2
,

xy)
=

4
x +y
M(x, y)
et nalement
M(x, y) =

4
x +y
K
_
(
xy
x+y
_
2
)
12.3 Application : calcul efcace du logarithme.
On peut utiliser la moyenne arithmtico-gomtrique pour calculer le loga-
rithme efcacement, pour cela on cherche le dveloppement asymptotique de K(m)
lorsque m tend vers 1. Plus prcisment, on va poser 1 m = k
2
avec k ]0, 1],
donc
K(m) =
_
2
0
dx
_
1 (1 k
2
) sin(x)
2
=
_
2
0
dy
_
1 (1 k
2
) cos(y)
2
en posant y = /2 x, et
K(m) =
_
2
0
dy
_
sin(y)
2
+k
2
cos(y)
2
la singularit de lintgrale pour k proche de 0 apparait lorsque y est proche de 0.
Si on effectue un dveloppement de Taylor en y = 0, on trouve
sin(y)
2
+k
2
cos(y)
2
= k
2
+ (1 k
2
)y
2
+O(y
4
)
Il est donc naturel de comparer K(m) lintgrale
J =
_
2
0
dy
_
k
2
+ (1 k
2
)y
2
qui se calcule en faisant par exemple le changement de variables
y =
k

1 k
2
sinh(t)
ou directement avec Xcas,
supposons(k>0 && k<1);
J:=int(1/sqrt(k^2+(1-k^2)
*
y^2),y,0,pi/2)
qui donne aprs rcriture :
J =
1

1 k
2
_
ln
_

k
_
+ ln
_
1
2
__
1 k
2
+ 4
k
2

2
+
_
1 k
2
___
(46)
et on peut calculer le dveloppement asymptotique de J en 0
series(J,k=0,5,1)
123
qui renvoie :
J = ln
_

k
_
+O(
_
1
ln(k)
_
5
)
on peut alors prciser ce dveloppement par
series(J+ln(k)-ln(pi),k=0,5,1)
qui renvoie (aprs simplications et o la notation

O peut contenir des logarithmes)
_
1

2
+
ln() ln(k) 1
2
_
k
2
+

O(k
4
)
donc
J = ln(k) + ln() +
_
1

2
+
ln() ln(k) 1
2
_
k
2
+

O(k
4
) (47)
Examinons maintenant K J, il na plus de singularit en y = 0, et il admet une
limite lorsque k 0, obtenue en remplacant k par 0
(K J)
|k=0
=
_
2
0
_
1
sin(y)

1
y
_
dy =
_
ln
_
tan
_
y
2
__
ln(y)
_
2
0
= ln(
4

)
Do pour K
K
k0
= ln
_
4
k
_
+O(
_
1
ln(k)
_
5
)
Pour prciser la partie du dveloppement de K en puissances de k, nous allons
majorer K J ln(4/), puis J ln(/k). Posons
A = sin(y)
2
+k
2
cos(y)
2
, B = y
2
+ (1 y
2
)k
2
Majoration de K J ln(4/)
Lintgrand de la diffrence K J ln(
4

) est
1

_
1
sin(y)

1
y
_
=

y sin(y)
y sin(y)
(48)
=
B A

B(

A+

B)

y sin(y)
y sin(y)
(49)
=
(y
2
sin(y)
2
)(1 k
2
)

B(

A+

B)

y sin(y)
y sin(y)
(50)
Soit
KJln(
4

) =
_
2
0
(y sin(y))[(1 k
2
)y sin(y)(y + sin(y))

AB(

A+

B)]

B(

A+

B)y sin(y)
(51)
On dcompose lintgrale en 2 parties [0, k] et [k, /2]. Sur [0, k] on utilise (49),
on majore chaque terme sparment et on minore A et B par
A = k
2
+ (1 k
2
) sin(y)
2
k
2
, B = k
2
+ (1 k
2
)y
2
k
2
124
Donc
[
_
k
0
[
_
k
0
[B A[
2k
3
dy +
_
k
0
(
1
sin(y)

1
y
) dy

_
k
0
y
2
sin(y)
2
2k
3
dy + ln(tan(
k
2
)) ln(
k
2
)

1
3
k
3
+
1
2
k +
1
4
sin(2k)
2k
3
+ ln(sin(
k
2
)) ln(
k
2
) ln(cos(
k
2
))

1
3
k
3
+
1
2
k +
1
4
(2k
8k
3
6
+
32k
5
5!
2k
3
ln(cos(
k
2
))

k
2
30
ln(1
1
2!
_
k
2
_
2
)

k
2
30
+
k
2
4
Sur [k, /2], on utilise (51) et on minore A et B par
A = sin(y)
2
+k
2
cos(y)
2
sin(y)
2
, B = y
2
+ (1 y
2
)k
2
y
2
on obtient
[
_
2
k
[
_
2
k
(y sin(y))[C[
y sin(y)(y + sin(y))
,
o :
C = (1 k
2
)y sin(y)(y + sin(y)) A

B +B

A
= A(

B y) B(

Asin(y)) Ay Bsin(y) + (1 k
2
)y sin(y)(y + sin(y))
= A(

B y) B(

Asin(y)) k
2
(y + sin(y))
Donc
[C[ A(

B y) +B(

Asin(y)) +k
2
(y + sin(y))
A
B y
2

B +y
+B
Asin(y)
2

A+ sin(y)
+k
2
(y + sin(y))
A
k
2
2y
+B
k
2
2 sin(y)
+k
2
(y + sin(y))
et
[
_
2
k
[
_
2
k
(y sin(y))k
2
(
A
2y
+
B
2 sin(y)
+ (y + sin(y)))
y sin(y)(y + sin(y))
On peut majorer y sin(y) y
3
/6, donc
[
_
2
k
[
k
2
6
_
2
k
Ay
2 sin(y)(sin(y) +y)
+
By
2
sin(y)
2
(sin(y) +y)
+
y
2
sin(y)
On majore enn A et B par 1,
[
_
2
k
[
k
2
6
_
2
k
y
2 sin(y)
2
+
y
2
sin(y)
125
Le premier morceau se calcule par intgration par parties
k
2
6
_
2
k
y
2 sin(y)
2
=
k
2
6
_
[
y
tan(y)
]
/2
k
+
_
2
k
1
tan(y)
_
=
k
2
6
_
k
tan(k)
+ [ln(sin(y))]

2
k
_
=
k
2
6
_
k
tan(k)
ln(sin(k))
_

k
2
6
(1 ln(k))
Le deuxime morceau se majore en minorant sin(y) (2y)/
k
2
6
_
2
k
y
2
sin(y)

k
2
6
_
2
0

2
y =
k
2

3
96
Finalement
[K J ln(
4

)[ k
2
_

1
6
ln(k) +

3
96
+
1
6
+
1
30
+
1
4
_
o J est donn en (46).
Majoration de J ln(/k)
On a
[Jln
_

k
_
[ =

(
1

1 k
2
1) ln
_

k
_
+
1

1 k
2
ln
_
1
2
__
1 k
2
+ 4
k
2

2
+
_
1 k
2
__

et on va majorer la valeur absolue de chaque terme de la somme. Pour k 1/2, on


a
1

1 k
2
1 =
k
2

1 k
2
+ 1 k
2

k
2
3/4 +

3/2
Pour le second terme, on majore le facteur
1

1k
2
par
2

3
, largument du logarithme
est infrieur 1 et suprieur
1
2
(1
k
2
2
+ 1
k
2
(1
4

2
)
2
) = 1 k
2
(1
1

2
) > 1 k
2
donc le logarithme en valeur absolue est infrieur
2k
2
donc, pour k 1/2,
[J ln
_

k
_
[
k
2
3/4 +

3/2
ln
_

k
_
+k
2
4

3
Finalement, pour k < 1/2
[Kln
_
4
k
_
[ k
2
_
ln
3/4 +

3/2
+
4

3
+

3
96
+
9
20
(
1
3/4 +

3/2
+
1
6
) ln(k)
_
(52)
126
que lon peut rcrire
[

2M(1, k)
ln
_
4
k
_
[ k
2
(3.8 0.8 ln(k)) (53)
La formule (53) permet de calculer le logarithme dun rel positif avec (presque)
n bits lorsque k 2
n/2
(ce quoi on peut toujours se ramener en calculant le
logarithme dune puissance 2
m
-ime de x ou le logarithme de 2
m
x, en calculant
au pralable ln(2)). Par exemple, prenons k = 2
27
, on trouve (en 8 itrations)
M(1, 2

27) = M
1
= 0.0781441403763. On a, avec une erreur infrieure 19
2
54
= 1.1 10
15
M(1, 2

27) = M
1
=

2 ln(2
29
)
=

58 ln(2)
,
On peut donc dduire une valeur approche de si on connait la valeur approche
de ln(2) et rciproquement. Si on veut calculer les deux simultanment, comme
les relations entre ln et seront des quations homognes, on est oblig dintro-
duire une autre relation. Par exemple pour calculer une valeur approche de on
calcule la diffrence ln(2
29
+ 1) ln(2
29
) dont on connait le dveloppement au
premier ordre, et on applique la formule de la moyenne arithmtico-gomtrique.
Il faut faire attention la perte de prcision lorsquon fait la diffrence des deux
logarithmes qui sont trs proches, ainsi on va perdre une trentaine de bits, il faut
grosso modo calculer les moyennes arithmtico-gomtrique avec 2 fois plus de
chiffres signicatifs.
Lintrt de cet algorithme apparait lorsquon veut calculer le logarithme avec
beaucoup de prcision, en raison de la convergence quadratique de la moyenne
arithmtico-gomtrique (qui est nettement meilleure que la convergence linaire
pour les dveloppements en srie, ou logarithmiquement meilleure pour lexponen-
tielle), par contre elle nest pas performante si on ne veut quune dizaine de chiffres
signicatifs. On peut alors calculer les autres fonctions transcendantes usuelles,
telle lexponentielle, partir du logarithme, ou les fonctions trigonomtriques in-
verses (en utilisant des complexes) et directes.
On trouvera dans Brent-Zimmermann quelques considrations permettant dam-
liorer les constantes dans les temps de calcul par rapport cette mthode (cela n-
cessite dintroduire des fonctions spciales ) et dautres formules pour calculer
.
On peut ensuite partir du logarithme, calculer lexponentielle en utilisant la
mthode de Newton, rappele ci-dessous.
12.4 La mthode de Newton.
La mthode de Newton est une mthode de rsolution de lquation f(x) = 0,
attention la diffrence avec le thorme du point xe qui permet de rsoudre
numriquement f(x) = x. Si x
0
est proche de la racine r on peut faire un dvelop-
pement de Taylor lordre 1 de la fonction f en x
0
:
f(x) = f(x
0
) + (x x
0
)f

(x
0
) +O((x x
0
)
2
)
Pour trouver une valeur approche de r, on ne garde que la partie linaire du dve-
loppement, on rsout :
f(r) = 0 f(x
0
) + (r x
0
)f

(x
0
)
127
donc (si f

(x
0
) ,= 0) :
r x
0

f(x
0
)
f

(x
0
)
Graphiquement, cela revient tracer la tangente la courbe reprsentative de f et
chercher o elle coupe laxe des x. On considre donc la suite rcurrente dnie
par une valeur u
0
proche de la racine et par la relation :
u
n+1
= u
n

f(u
n
)
f

(u
n
)
Il y a deux thormes importants, lun deux prouve que si u
0
est assez pro-
che de r alors la suite u
n
converge vers r, malheureusement il est difcile de
savoir en pratique si on est assez proche de u
0
pour que ce thorme sapplique.
Le second thorme donne un critre pratique facile vrier qui assure la conver-
gence, il utilise les proprits de convexit de la fonction.
Thorme 14 Soit f une fonction de classe C
2
(2 fois continument drivable) sur
un intervalle ferm I. Soit r une racine simple de f situe lintrieur de I (telle
que f(r) = 0 et f

(r) ,= 0). Alors il existe > 0 tel que la suite dnie par
u
n+1
= u
n

f(u
n
)
f

(u
n
)
, [u
0
r[
converge vers r.
Si on a [f

[ M et [1/f

[ m sur un intervalle [r , r + ] contenu dans


I, alors on peut prendre tout rel > 0 tel que < 2/(mM) et .
Dmonstration : on a
u
n+1
r = u
n
r
f(u
n
)
f

(u
n
)
=
(u
n
r)f

(u
n
) f(u
n
)
f

(u
n
)
En appliquant un dveloppement de Taylor de f en u
n
lordre 2, on obtient pour
un rel situ entre r et u
n
:
0 = f(r) = f(u
n
) + (r u
n
)f

(u
n
) + (r u
n
)
2
f

()
2
donc :
(u
n
r)f

(u
n
) f(u
n
) = (u
n
r)
2
f

()
2
do :
[u
n+1
r[ [u
n
r[
2
1
[f

(u
n
)[
[f

()[
2
On commence par choisir un intervalle [r , r +] contenant strictement r et tel
que [f

[ < M et [1/f

[ < m sur [r , r + ] (cest toujours possible car f

et 1/f

sont continues au voisinage de r puisque f

(r) ,= 0). Si u
n
est dans cet
intervalle, alors aussi donc
[u
n+1
r[ [u
n
r[
2
Mm
2

[u
n
r[Mm
2
[u
n
r[,
128
On a [u
n
r[ , on diminue si ncessaire pour avoir < 2/(Mm), on a alors :
[u
n+1
r[ k[u
n
r[, k =
Mm
2
< 1
donc dune part u
n+1
est encore dans lintervalle [r , r +] ce qui permettra de
refaire le mme raisonnement au rang suivant, et dautre part on a une convergence
au moins gomtrique vers r. En fait la convergence est bien meilleure lorsquon
est proche de r grace au carr dans [u
n
r[
2
, plus prcisment, on montre par
rcurrence que
[u
n
r[ [u
0
r[
2
n
_
Mm
2
_
2
n
1
il faut donc un nombre ditrations proportionnel ln(n) pour atteindre une prci-
sion donne.
Remarque : ce thorme se gnralise sur C et mme sur R
n
.
Exemple : pour calculer

2, on crit lquation x
2
2 = 0 qui a

2 comme
racine simple sur I = [1/2, 2], on obtient la suite rcurrente
u
n+1
= u
n

u
2
n
2
2u
n
Si on prend = 1/2, on a f

= 2x et f

= 2 donc on peut prendre M = 2 et


m = 1 car [1/f

[ 1 sur [

21/2,

2+1/2]. On a 2/(mM) = 1, on peut donc


prendre = 1/2, la suite convergera pour tout u
0
[

2 1/2,

2 + 1/2].
Plus gnrallement, on peut calculer une racine k-ime dun rel a en rsolvant
f(x) = x
k
a par la mthode de Newton.
Linconvnient de ce thorme est quil est difcile de savoir si la valeur de
dpart quon a choisie se trouve sufsamment prs dune racine pour que la suite
converge. Pour illustrer le phnomne, on peut par exemple colorer les points du
plan complexe en n + 1 couleurs selon que la suite dnie par la mthode de
Newton converge vers lune des n racines dun polynme de degr n x au bout
de par exemple 50 itrations (la n + 1-ime couleur servant aux origines de suite
qui ne semblent pas converger).
Passons maintenant un critre trs utile en pratique :
Dnition 1 (convexit)
Une fonction f continument drivable sur un intervalle I de R est dite convexe si
son graphe est au-dessus de la tangente en tout point de I.
Il existe un critre simple permettant de savoir si une fonction de classe C
2
est
convexe :
Thorme 15 Si f est C
2
et f

0 sur I alors f est convexe.


Dmonstration :
Lquation de la tangente au graphe en x
0
est
y = f(x
0
) +f

(x
0
)(x x
0
)
Soit
g(x) = f(x) (f(x
0
) +f

(x
0
)(x x
0
))
129
on a :
g(x
0
) = 0, g

(x) = f

(x) f

(x
0
), g

(x
0
) = 0, g

= f

0
donc g

est croissante, comme g

(x
0
) = 0, g

est ngative pour x < x


0
et positive
pour x > x
0
, donc g est dcroissante pour x < x
0
et croissante pour x > x
0
.
On conclut alors que g 0 puisque g(x
0
) = 0. Donc f est bien au-dessus de sa
tangente.
On arrive au deuxime thorme sur la mthode de Newton
Thorme 16 Si f(r) = 0, f

(r) > 0 et si f

0 sur [r, b] alors pour tout


u
0
[r, b] la suite de la mthode de Newton
u
n+1
= u
n

f(u
n
)
f

(u
n
)
,
est dnie, dcroissante, minore par r et converge vers r. De plus
0 u
n
r
f(u
n
)
f

(r)
Dmonstration :
On a f

0 donc si f

(r) > 0 alors f

> 0 sur [r, b], f est donc strictement


croissante sur [r, b] on en dduit que f > 0 sur ]r, b] donc u
n+1
u
n
. Comme la
courbe reprsentative de f est au-dessus de la tangente, on a u
n+1
r (car u
n+1
est labscisse du point dintersection de la tangente avec laxe des x). La suite u
n
est donc dcroissante minore par r, donc convergente vers une limite l r. la
limite, on a
l = l
f(l)
f

(l)
f(l) = 0
donc l = r car f > 0 sur ]r, b].
Comme (u
n
) est dcroissante, on a bien 0 u
n
r, pour montrer lautre
ingalit, on applique le thorme des accroissements nis, il existe [r, u
n
] tel
que
f(u
n
) f(r) = (u
n
r)f

()
comme f(r) = 0, on a
u
n
r =
f(u
n
)
f

()
et la deuxime ingalit du thorme en dcoule parce que f

est croissante.
Variantes :
Il existe des variantes, par exemple si f

(r) < 0 et f

0 sur [a, r]. Si f

0, on
considre g = f.
Application :
On peut calculer la valeur approche de la racine k-ime dun rel a > 0 en
appliquant ce deuxime thorme. En effet si a > 0, alors x
k
a est 2 fois
continument drivable et de drive premire kx
k1
et seconde k(k 1)x
k2
strictement positives sur R
+
(car k 2). Il suft donc de prendre une valeur
130
de dpart u
0
plus grande que la racine k-ime, par exemple 1 + a/k (en effet
(1 +a/k)
k
1 +ka/k = 1 +a). En appliquant lingalit du thorme, on a :
0 u
n

a
u
k
n
a
k
k

a
k1

u
k
n
a
ka
k

a
u
k
n
a
ka
(1 +
a
k
)
Pour avoir une valeur approche de
k

a prs, on peut donc choisir comme test


darrt
u
k
n
a
ka
1 +
a
k

Par exemple pour

2, le test darrt serait u


2
n
2 2.
131

Vous aimerez peut-être aussi