Mat 406Bernard.Parisse@univ-grenoble-alpes.fr2022 |
N.B. : la version HTML de ce document est interactive, vous pouvez exécuter certains champs d’entrée donnés en exemple en les modifiant éventuellement, il suffit de cliquer sur le bouton exe. Il est recommandé d’utiliser Firefox ou un navigateur compatible supportant MathML.
Table des matières
- 1 Présentation du module
- 2 Représentation des nombres et autres données, calcul exact/approché
- 3 Suites itératives et applications
- 4 Développement de Taylor, séries entières, fonctions usuelles
- 5 Polynômes : arithmétique, factorisation,
interpolation
- 5.1 Arithmétique des polynomes: Bézout et applications
- 5.2 Factorisation des polynômes
- 5.2.1 Multiplicité des racines.
- 5.2.2 Factorisation dans .
- 5.2.3 Calcul approché des racines complexes simples
- 5.2.4 Localisation d’une racine complexe près d’une racine approchée
- 5.2.5 Localisation des racines réelles : Sturm
- 5.2.6 Localisation des racines réelles : règle des signes de Descartes
- 5.2.7 Factorisation exacte
- 5.3 Approximation polynomiale
- 6 Intégration numérique
- 7 Algèbre linéaire
- 8 Guide rapide KhiCAS sur calculatrices
- 9 Quelques références
- A La moyenne arithmético-géométrique.
1 Présentation du module
Dans ce module, on introduira moins de notions nouvelles que dans d’autres modules de mathématiques, par contre on insistera sur le calcul effectif, si possible efficace, et sur le controle de la précision des résultats, ceci explique la part importante consacrée aux TP (18h de cours en 12 séances, 18h de TD en 12 séances et 19.5h de TP en 13 séances). On présentera par exemple des méthodes de calcul des fonctions usuelles (racine carrée, trigonométriques, ...), il s’agira non seulement de savoir calculer une valeur numérique, mais aussi de pouvoir majorer l’écart entre la valeur trouvée et la valeur exacte, en utilisant des théorèmes du cours. Les calculs se feront dans la mesure du possible sur ordinateur ou sur calculatrices.
Les thèmes abordés seront :
- Calcul exact et approché, représentation des données
- Suites récurrentes, méthode du point fixe, de Newton.
- Séries de Taylor et approximation des fonctions usuelles
- Arithmétique des polynômes (PGCD, Bézout, factorisation, décomposition en éléments simples)
- Interpolation polynomiale
- Intégration approchée.
- Algèbre linéaire.
L’ordre des deux premiers thèmes sera inversé en cours.
L’évaluation se fait sur :
- 1/4 : un DS à mi-semestre
- 1/4 : certains compte-rendus de TP (à rédiger seul ou en binome),
- 1/2 : l’examen final
Les calculatrices sont autorisées au DS et à l’examen final (prêt possible pour le semestre).
2 Représentation des nombres et autres données, calcul exact/approché
Résumé:
Types de base : entier machine, entier long, flottant machine et
multiprécision (Base 2, base 10, BCD).
Types composés : complexes, polynomes (représentation dense/creuse),
symboles, listes (vecteurs, matrices), expressions, fonctions.
Erreur relative, erreur absolue, erreur d’arrondi, +/-, */%
Algorithme, complexité, exemple puissance modulaire, algorithme de Horner.
Les principaux ensembles de nombres en mathématiques sont les entiers positifs et relatifs , les rationnels , les réels et les complexes . Sur ordinateur, on peut représenter ces nombres de manière exacte dans certains cas, approchée dans d’autres.
2.1 Représentation des entiers
Preuve : On prend pour le plus grand entier tel que .
Exemple :
La division euclidienne permet d’écrire un nombre entier, en utilisant
une base et des caractères pour représenter les entiers
entre 0 et . Nous écrivons les nombres entiers en base
avec comme caractères les chiffres de 0 à 9.
Les ordinateurs utilisent des circuits binaires pour stocker
les informations, il est donc naturel d’y travailler en base 2
en utilisant comme caractères 0 et 1 ou en base 16 en utilisant
comme caractères les chiffres de 0 à 9 et les lettres de A à F.
En général, pour trouver l’écriture d’un nombre en base (par
exemple ),
on effectue des divisions euclidienne successives par du nombre puis
de ses quotients successifs jusqu’à ce que le quotient soit 0 et on
accolle les restes obtenus (premier reste à droite, dernier
reste à gauche).
Inversement, pour retrouver un entier à partir
de son écriture , on traduit les divisions euclidiennes
successives en
Par exemple, vingt-cinq s’écrit en base 16 0x19
car 25 divisé
par 16 donne quotient 1, reste 9
En base 2, on trouverait 0b11001
car .
On peut effectuer les opérations arithmétiques de base
(+,-,*, division) directement en base 2 (ou 16). Par exemple
la table de l’addition est 0+0=0, 0+1=1+0=1 et 1+1=0 je retiens 1,
donc :
01001111 + 01101011 ---------- 10111010
Exercice : comment passe-t-on simplement de la représentation d’un nombre en base 2 à un nombre en base 16 et réciproquement ?
Les microprocesseurs peuvent effectuer directement les opérations arithmétiques de base sur les entiers “machine” (déclinés en plusieurs variantes selon la taille et la possibilité d’avoir un signe). Noter que la division de deux entiers et n’a pas la même signification que la division de deux réels, comme elle ne tomberait pas forcément juste, on calcule le quotient et le reste de la division euclidienne.
Ces entiers machines permettent de représenter de manière exacte des petits entiers relatifs par exemple un entier machine signé sur 4 octets est compris entre .
Ces entiers machines permettent de faire très rapidement du calcul exact sur les entiers, mais à condition qu’il n’y ait pas de dépassement de capacité, par exemple pour des entiers 32 bits, renverra 0. Ils sont utilisables avec tous les langages de programmation traditionnels.
Les logiciels de calcul formel et certains logiciels de programmation permettent de travailler avec des entiers de taille beaucoup plus grande, ainsi qu’avec des rationnels, permettant de faire du calcul exact, mais on paie cette exactitude par un temps de calcul plus long, de plus pas mal de méthodes numériques ne gagnent rien à faire des calculs intermédiaires exacts. Néanmoins, l’utilisation d’un logiciel de calcul formel permettra dans certains cas d’illustrer certains phénomènes dus au calcul approché.
2.2 Les réels
On se ramène d’abord au cas des réels positifs, en machine on garde traditionnellement un bit pour stocker le signe du réel à représenter.
2.2.1 Virgule fixe et flottante.
La première idée qui vient naturellement serait d’utiliser
un entier et de déplacer la virgule
d’un nombre fixe de position, ce qui revient à mulitplier
par une puissance (négative) de la base. Par exemple en base 10 avec un
décalage de 4, 1234.5678
serait représenté par 12345678
et 1.2345678
par
12345
(on passe de l’entier au réel par multiplication
par . L’inconvénient d’une telle représentation est
qu’on ne peut pas représenter des réels grands ou petits,
comme par exemple le nombre d’Avogadro, la constante de Planck, etc.
D’où l’idée de ne pas fixer la position de la virgule, on parle
alors de représentation à virgule flottante ou de nombre flottant : on
représente un nombre par deux entier, l’un appelé mantisse
reprend les chiffres significatifs du réel sans virgule, l’autre
l’exposant, donne la position de la virgule. Attention, le séparateur
est un point et non une virgule dans la grande
majorité des logiciels scientifiques.
On sépare
traditionnellement la mantisse de l’exposant par la lettre e
.
Par exemple 1234.5678
peut être représenté
par 12345678e-8
(mantisse 12345678
, exposant -8)
mais aussi par 1234567800e-10
.
Naturellement, sur un ordinateur, il y a des limites pour les entiers représentant la mantisse et l’exposant . Si on écrit les nombres en base , la mantisse s’écrira avec un nombre fixé de chiffres (ou de bits en base 2), donc . Soit un réel représenté par Si , alors on peut aussi écrire avec , quelle écriture faut-il choisir? Intuitivement, on sent qu’il vaut mieux prendre le plus grand possible, car cela augmente le nombre de chiffres significatifs (alors que des 0 au début de ne sont pas significatifs). Ceci est confirmé par le calcul de l’erreur d’arrondi pour représenter un réel. En effet, si est un réel non nul, il ne s’écrit pas forcément sous la forme , on doit l’arrondir, par exemple au plus proche réel de la forme . La distance de à ce réel est inférieure ou égale à la moitié de la distance entre deux flottants consécutifs, et , donc l’erreur d’arrondi est inférieure ou égale à . Si on divise par , on obtient une erreur relative d’arrondi majorée par . On a donc intérêt à prendre le plus grand possible pour minimiser cette erreur. Quitte à mulitplier par , on peut toujours se ramener (sauf exceptions, cf. ci-dessous), à , on a alors une erreur d’arrondi relative majorée par
On appelle flottant normalisé un flottant tel que . Pour écrire un réel sous forme de flottant normalisé, on écrit le réel en base , et on déplace la virgule pour avoir exactement chiffres non nuls avant la virgule et on arrondit (par exemple au plus proche). L’exposant est égal au décalage effectué. Notez qu’en base 2, un flottant normalisé commence forcément par 1, ce qui permet d’économiser un bit dans le stockage.
Ainsi, l’erreur d’arrondi commise lorsqu’on représente un réel (connu exactement) par un double normalisé est une erreur relative inférieure à de ( et pour les doubles).
Exemples :
-
en base 10 avec , pour représenter
, on doit décaler la virgule de 5 positions,
on obtient
314159.265...
on arrondit à donc on obtient314159e-5
. - en base 2 avec , pour représenter trois cinquièmes (
en base 10, noté en base 2),
on pose la division en base 2 de
11
par101
, ce qui donne11 | 101 110 --------- -101 | 0.1001 ---- | 010 | 100 | 1000 | - 101 | ----- | 011 |
on retrouve le nombre de départ donc le développement est périodique et vaut0.1001 1001 1001 ...
. On décale le point de 10 positions, on arrondit, donc trois cinquièmes est représenté par la mantisse1001100110
et l’exposant-10
. On observe aussi sur cet exemple que dont l’écriture en base 100.6
est exacte, n’a pas d’écriture exacte en base 2 (de même que 1/3 n’a pas d’écriture exacte en base 10).
Il existe une exception à la possibilité de normaliser les flottants, lorsqu’on atteint la limite inférieure de l’exposant . Soit en effet le plus petit exposant des flottants normalisés et considérons les flottants et . Ces flottants sont distincts, mais leur différence n’est plus représentable par un flottant normalisé. Comme on ne souhaite pas représenter par 0, (puisque le test renvoie faux), on introduit les flottants dénormalisés , il s’agit de flottants dont l’exposant est l’exposant minimal représentable sur machine et dont la mantisse appartient à . Par exemple 0 est représenté par un flottant dénormalisé de mantisse 0 (en fait 0 a deux reprśentation, une de signe positif et une de signe négatif).
Enfin, on utilise traditionnellement une valeur de l’exposant pour représenter les nombres plus grands que le plus grand réel reprśentable sur machine (traditionnellement appelé plus ou moins infini) et les erreurs (par exemple 0./0. ou racine carrée d’un nombre réel négatif, traditionnellement appelé NaN, Not a Number).
Exercice : quels sont les nombres réels représentables exactement en base 10 mais pas en base 2 ? Si on écrit en base 2 avec 53 bits de précision, puis que l’on arrondit avec 64 bits de précision, ou si on écrit en base 2 avec 64 bits de précision, obtient-on la même chose ?
Les ordinateurs reprśentent généralement les flottants en base 2
(cf. la section suivante pour
plus de précisions), mais cette représentation n’est pas utilisée
habituellement par les humains, qui préfèrent compter
en base 10. Les ordinateurs effectuent donc la conversion dans
les routines d’entrée-sortie. Le format standard utilisé
pour saisir ou afficher un nombre flottant dans un logiciel
scientifique est composé d’un nombre à virgule
flottante utilisant le point comme séparateur décimal (et
non la virgule) suivi si nécessaire de la lettre e
puis de l’exposant,
par exemple 1.23e-5
ou 0.0000123
. Dans les
logiciels de calcul formel, pour distinguer un entiers
représentés par un entier
d’un entier représenté par un flottant on écrit
l’entier suivi de .0
par exemple 23.0
.
Remarque :
Les microprocesseurs ayant un mode BCD peuvent avoir un format
de représentation des flottants en base 10, les nombres décimaux
comme par exemple 0.3 peuvent être représentés exactement.
Certains logiciels, notamment maple, utilisent par défaut des
flottants logiciels en base 10 sur des microprocesseurs sans mode BCD,
ce qui entraine une baisse de
rapidité importante pour les calculs numériques (on peut
partiellement améliorer les performances en utilisant evalhf
en maple).
2.2.2 Les flottants au format double
Cette section développe les notions de la section précédente pour les flottants machine selon la norme IEEE-754, utilisables dans les langage de programmation usuels, elle peut être omise en première lecture. La représentation d’un double en mémoire se compose de 3 parties : le bit de signe sur 1 bit, la mantisse sur 52 bits, et l’exposant sur 11 bits. Pour les nombres “normaux”, l’exposant est en fait compris entre 1 et , le nombre représenté est le rationnel Pour écrire un nombre sous cette forme, il faut d’abord chercher par quel multiple de 2 il faut le diviser pour obtenir un réel dans , ce qui permet de déterminer l’exposant . Ensuite on écrit la représentation en base 2 de . Exemples :
-
-2
Signe négatif. Il faut diviser sa valeur absolue 2 par pour être entre 1 et 2 dont , l’exposant est . On a alors , . Représentation
1 10000000000 00000000...0000
- 1.5=3/2
Signe positif, compris entre 1 et 2 dont l’exposant vérifie soit . On a . D’où la représentation
0 01111111111 10000000...0000
- 6.4=32/5
Positif. Il faut le diviser par pour avoir donc soit . Ensuite qu’il faut écrire en base 2 (cf. section précédente), on écrit donc les 52 premiers éléments du développement avec une règle d’arrondi du dernier bit au nombre le plus proche. Ici le bit suivant le dernier1001
est un1
, on arrondit donc à1010
. D’où la représentation
0 1000000001 100110011001...10011010
On observe que la représentation en base 2 de 6.4 a du être
arrondie (car elle est infinie en base 2) bien qu’elle soit exacte
(finie) en base 10.
Seuls les entiers et les rationnels dont le dénominateur est une puissance
de 2 peuvent être représentés exactement.
Ceci entraine des résultats qui peuvent surprendre
comme par exemple le fait que
0.5 - 5*0.1
n’est pas nul.
Des représentations spéciales (avec ou ) ont été introduites pour représenter (pour les flottants plus grands en valeur absolue que le plus grand flottant représentable), et pour représenter les nombres non nuls plus petits que le plus petit flottant représentable de la manière exposée ci-dessus (on parle de flottants dénormalisés), ainsi que le nombre NaN (Not a Number) lorsqu’une opération a un résultat indéfini (par exemple 0/0).
Remarque : Sur les processeurs compatibles avec les i386,
le coprocesseur arithmétique i387 gère en interne des flottants
avec 80 bits dont 64 bits de mantisse. Sur les architectures 64 bits
(x86 ou AMD), le jeu d’instruction SSE permet de travailler avec
des flottants de 128 bits. Le compilateur gcc permet d’utiliser
ces flottants longs avec le type long double
ou
les types __float80
et __float128
en utilisant
un drapeau de compilation du type -msse
Voici un programme C++ affichant la représentation interne des flottants
2.2.3 Opérations sur les flottants
Les opérations arithmétiques de base sur les flottants se font de la manière suivante :
- addition et soustraction : on détecte s’il faut additionner ou soustraire en valeur absolue en analysant les signes, on détermine l’exposant le plus grand et on décale la partie mantisse du flottant dont l’exposant est le plus petit pour se ramener à additionner deux entiers (partie mantisses correspondant au même exposant), on décale à nouveau la partie mantisse en modifiant l’exposant après l’opération pour normaliser le flottant
- multiplication : on additionne les exposants et on multiplie les parties mantisses (vus comme des entiers), on arrondit et on ajuste l’exposant si nécessaire
- division : on soustrait les exposants et on divise les parties mantisses (division “à virgule”), on tronque et on ajuste l’exposant si nécessaire
2.2.4 Erreurs
La représentation des nombres réels par des doubles présente
des avantages, les opérations arithmétiques
sont faites au plus vite par le microprocesseur.
Les coprocesseurs arithmétiques (intégrés sur les microprocesseurs
de PC) proposent même
le calcul des fonctions usuelles (trigonométriques, racine carrée, log et exp)
sur le type double et utilisent des formats de représentation interne
ayant plus de 64 bits pour les doubles, ce qui permet de limiter
les erreurs d’arrondi.
Par contre, des erreurs vont être introduites,
on parle de calcul approché par opposition au calcul exact sur les
rationnels. En effet, la représentation doit d’abord arrondir
tout réel qui n’est pas un rationnel dont le dénominateur
est une puissance de 2. Ensuite chaque opération va entrainer
une propagation de ces erreurs et va y ajouter une erreur d’arrondi
sur le résultat.
Enfin, l’utilisation du type double peut provoquer un dépassement
de capacité (par exemple 100!*100!
).
Pour diminuer ces erreurs et les risques de dépassement de capacité, il existe des types flottants multiple précision, qui permettent de travailler avec un nombre fixé à l’avance de décimales et une plage d’exposants plus grande. Les calculs sont plus longs mais les erreurs plus faibles. Attention, il s’agit toujours de calcul approché! De plus, pour des quantités dont la valeur est déterminée de manière expérimentale, la source principale de propagation d’erreurs est la précision des quantités initiales, il ne sert souvent à rien d’utiliser des types flottants multiprécision car les erreurs dus à la représentation (double) sont négligeables devant les erreurs de mesure. Dans ce cas, il est pertinent lorsqu’on évalue avec mal connu de calculer aussi , en effet : l’erreur relative sur est donc au premier ordre multipliée par Par exemple, l’erreur relative sur est au premier ordre l’erreur relative sur multipliée par .
2.2.5 Erreur absolue, relative, arrondi propagation des erreurs.
On a vu précédemment que pour représenter un réel, on devait l’arrondir, ce qui introduit une erreur même si le réel est connu exactement (par exemple 1/10). Voyons comment se propagent les erreurs dans les opérations arithmétiques de base : on distingue l’addition, la multiplication et l’inversion. La soustraction se ramène à l’addition car le calcul de l’opposé n’introduit aucune erreur nouvelle. Pour l’addition, si et si alors par l’inégalité triangulaire (), on a : on dit que les erreurs absolues s’additionnent.
Mais comme il faut représenter en machine, on doit ajouter une erreur d’arrondi, qui est proportionnelle à la valeur absolue de d’où la notion d’erreur relative :
Remarquons au passage que les erreurs de mesure expérimentales sont pratiquement toujours des erreurs relatives.
Donc lorsqu’on effectue une addition (ou une soustraction) de deux réels sur machine, on doit additionner les deux erreurs absolues sur les opérandes et ajouter une erreur d’arrondi (relative de , à titre d’exercice, on pourra vérifier que cette erreur d’arrondi est majorée par l’erreur absolue de la somme dès l’instant où et ont eux-même une erreur d’arrondi).
Lorsqu’on effectue une multiplication de deux nombres dont les représentants sont non nuls, on a l’erreur relative est donc la somme des erreurs relatives et du produit des erreurs relatives (on peut souvent négliger le produit devant la somme). Il faut aussi y ajouter une erreur relative d’arrondi de sur .
On observe que la multiplication est une opération posant moins de problèmes que l’addition, car on manipule toujours des erreurs relatives, par exemple si l’erreur relative sur deux doubles et non nuls est de , alors l’erreur relative sur sera de Lorsque l’erreur relative sur les données est grande devant , l’erreur relative d’arrondi final est négligeable, on peut alors dire que les erreurs relatives s’additionnent pour un produit (c’est aussi vrai pour un quotient: exercice!). Par contre, si on additionne deux nombres dont le représentant de la somme est proche de 0, la somme des erreurs absolues peut devenir non négligeable par rapport à la somme des représentants, entrainant une erreur relative très grande. Par exemple si est représenté par avec une erreur d’arrondi de et par avec la même erreur d’arrondi, l’addition de et renvoie avec une erreur absolue de (ici il n’y a pas d’arrondi lorsqu’on fait la somme). C’est une erreur relative de (qui domine largement l’erreur d’arrondi) ce qui signifie que dans la mantisse, seul le premier bit sur les 52 a un sens, la perte de précision est très grande.
Une autre conséquence importante est que l’addition de réels sur machine n’est pas une opération associative, par exemple alors que Dans Xcas, il n’y a que 48 bits de mantisse :
Exercice : pour calculer la valeur numérique d’une dérivée de fonction, il vaut mieux calculer que car le terme d’erreur est en et non en . Attention toutefois à ne pas prendre trop petit, sinon en flottants et même si , l’erreur absolue sur est (au moins) d’ordre , donc l’erreur relative est d’ordre . Par exemple pour h=1e-8 le reste est en donc de l’ordre des erreurs d’arrondi mais l’erreur relative sur est d’ordre largement supérieure (en flottants double-précision). On choisira plutôt tel que soit proche de , donc de l’ordre de 1e-5, qui fournira une valeur approchée avec une erreur relative de l’ordre de 1e-10. Exemple : calcul de la dérivée numérique de en
Remarquons néanmoins que les erreurs calculées ici sont des majorations
des erreurs réelles (ou si on préfère l’erreur obtenue dans le pire
des cas), statistiquement les erreurs sur les résultats sont moindres,
par exemple si on effectue calculs susceptibles de provoquer
des erreurs indépendantes suivant une même loi d’espérance nulle, la moyenne des
erreurs divisée par l’écart-type de la loi
tend vers une loi normale centrée réduite. De manière plus
déterministe, on a l’inégalité de Bienaymé-Tchebyshev
où est la variable aléatoire somme des erreurs,
l’erreur et la variance de la somme erreurs
supposées indépendantes, cette probabilité tend vers 0 pour
grand si est d’ordre , et ne tend
pas vers 0 si est de l’ordre de .
Exemple : somme de nombres répartis sur selon la loi
uniforme (représentant des erreurs), on divise par 20,
on effectue plusieurs tirages (par exemple 500) on trace l’histogramme et
on compare avec la loi normale de moyenne
nulle (l’espérance de la somme) et d’écart-type celui de la loi
uniforme.
Attention, si on effectue la somme de réels , les erreurs d’arrondis ne satisfont pas à ces hypothèses. En effet, l’erreur d’arrondi à chaque opération est une erreur relative, l’erreur absolue correspondante est puis puis ... , que l’on peut majorer par La majoration de l’erreur d’arrondi dépend donc de l’ordre des termes, on a intérêt à sommer en commençant par les termes les plus petits en valeur absolue. Voici des programmes C++ illustrant cela
-
uniquement avec des flottants.
À compiler avec la commande
c++ erreur2.cc -o erreur2
, ne pas utiliser d’option d’optimisation sinon les flottants intermédiaires seront probablement calculé en précision plus grande (64 bits de mantisse) -
en comparant avec des flottants multi-précision (nécessite
d’avoir Giac installé sous Unix/Linux, se compile avec
c++ erreur.cc -lgiac -lgmp -o erreur
).
Mais on peut faire mieux, il est possible de corriger les erreurs d’arrondi dans une somme avec le programme suivant pour une liste (on peut bien sur adapter à la somme d’une expression dépendant d’une variable entière sans stocker de liste) :
Somme(l):={ local x,s,c; s:=0.0; c:=0.0; pour x in l faire c += (x-((s+x)-s)); s += x; fpour; print(c); return s+c; }:;
onload
En effet, devrait valoir 0 sans erreurs d’arrondis,
avec les erreurs d’arrondis, on a le premier calcul qui donnera
une erreur opposée à celui du calcul de à la ligne
suivante, le 2ième calcul effectué donne une erreur
absolue en au pire (car c’est une erreur relative
par rapport à ),
et la 3ième erreur d’arrondi est négligeable
(puisque la somme vaut 0). On a donc une erreur absolue sur
qui est au premier ordre au pire en ,
bien meilleure que
la majoration
calculée précédemment.
Par exemple
à comparer avec
(le calcul de est fait en exact, celui de sum(1. /j,j,1,n)
est approché sans correction).
En conclusion, il est souvent très difficile de calculer une majoration rigoureuse de l’erreur pour des calculs (sauf les plus simples), et cette majoration est en général bien trop pessimiste. Lorsqu’on doute de la précision d’un calcul, un test peu couteux consiste à refaire ce calcul en utilisant des flottants en précision plus grande et tester si le résultat varie en fonction du nombre de chiffres significatifs utilisés, ou faire varier légèrement les données et observer la sensibilité du résultat. Si on veut travailler en toute rigueur sans pour autant calculer les erreurs à priori, il faut utiliser un logiciel utilisant des intervalles pour représenter les réels (section suivante)
2.3 L’arithmétique d’intervalle.
Certains systèmes de calcul formel peuvent manipuler directement
des intervalles réels, par exemple par l’intermédiaire de la
bibliothèque C MPFI. Les opérations arithmétiques sur des
intervalles renvoient alors le meilleur intervalle possible contenant
toutes les valeurs possibles lorsque les opérandes parcourent
leurs intervalles respectifs.
Exemple en Xcas (version 1.1.1 et ultérieures) :
[-1..2]*[-1..2]
renvoie [-2..4]
.
Attention ici on parcourt toutes les valeurs possibles de
. Ce qui est différent du carré
d’un intervalle ou plus généralement de l’évaluation
d’un polynôme en un intervalle, horner(x^2,[-1..2])
renvoie ainsi [0..4]
.
Les fonctions disponibles sont souvent moins riches qu’en arithmétique flottante, le calcul d’une fonction non monotone sur un intervalle peut s’avérer délicat, alors que si la fonction est monotone, il suffit de calculer l’image des deux bornes de l’intervalle. Pour les polynômes, Xcas décompose les coefficients en deux parties en fonction du signe, puis utilise la monotonie de et sur et respectivement.
L’arithmétique d’intervalle dans est beaucoup plus difficile à mettre en oeuvre puisqu’il n’y a plus d’ordre ni de monotonie, on doit alors s’en remettre à des estimations sur les parties réelles et imaginaires qui ne tiendront pas compte du phénomène ci-dessus sur la différence entre et .
2.4 Types composés.
2.4.1 Les rationnels.
On sait donc représenter les entiers, pour les rationnels, il suffit de les représenter comme un couple d’entiers correspondant à leur écriture sous forme de fraction irréductible avec un dénominateur positif.
pgcd(x,y):={ local r; while (y!=0){ r:=irem(x,y); // reste de x par y x:=y; // PGCD(x,y)=PGCD(y,r) donc on decale y:=r; } return x; // c'est le resultat car PGCD(x,0)=x }
Preuve :
on utilise le fait qu’un nombre divise et si et seulement si
il divise et . Le PGCD de et est donc le PGCD
de et du reste de la division euclidienne de par . Comme
le reste est en valeur absolue plus petite que , la taille
des variables x,y,r
décroit à chaque itération. Arrive un
moment où le reste est nul, le PGCD est alors l’entier par lequel
on a divisé.
Il existe des variantes de cet algorithme un peu plus efficaces
lorsque les nombres sont représentés en base 2 (PGCD binaire,
voir par exemple A. Cohen).
On utilise cet algorithme et la division euclidienne pour simplifier une fraction d’entiers par le PGCD du numérateur et du dénominateur pour l’écrire sous forme irréductible.
Les calculs sont maintenant exacts et sans limitation de capacité (ou presque, la taille des entiers longs est bornée parce que la taille du champ mémoire fixant la longueur de stockage est bornée) mais souvent trop lents pour les calculs numériques usuels (par exemple pour calculer la valeur approchée de cosinus 23 degrés 27 minutes). On utilise alors un autre type dont les calculs de base sont souvent gérés par le microprocesseur (ou son coprocesseur arithmétique).
2.4.2 Les complexes
Après les nombres réels, on passe aux nombres complexes : on utilise un couple (partie réelle, imaginaire) de fractions (exacts) ou de flottants et les règles habituelles sur les complexes.
2.4.3 Les polynômes
Après les nombres, l’objet le plus utilisé dans les systèmes de calcul formel est probablement le polynôme, toute simplification d’une expression se ramène à un moment donné à mettre sous forme irréductible une fraction de polynômes. Les principales représentations possibles sont :
- les polynômes à 1 variable, représentation dense, on stocke la liste des coefficients du polynôme par ordre croissant ou décroissant
- les polynômes à 1 variable, représentation creuse, on stocke des paires coefficients, degré pour les coefficients non nuls
- les polynômes à plusieurs variables, représenté récursivement de manière dense ou creuse (i.e. vu comme polynôme en à coefficients polynômes dépendant des variables ), ce sont des cas particuliers des 2 cas précédents
- les polynômes à plusieurs variables distribués, on stocke des monômes, qui sont des paires coefficient, liste d’entiers, la liste représentant les exposant des variables dans le monôme.
- la représentation symbolique (par exemple ) beaucoup plus difficile à manipuler directement
Algorithmes de base sur les polynômes : l’évaluation en un point (Horner, cf. TD/TP), la multiplication et division euclidienne et le PGCD (même algorithme que pour les entiers mais avec la division euclidienne des polynômes, il existe des algorithmes plus efficaces, cf. le chapitre sur les polynômes) Lien avec la représentation en base (TD).
Les polynômes peuvent servir à représenter des nombres non rationnels de manière exacte, par exemple les nombres algébriques (qui sont solutions d’une équation polynomiale).
2.4.4 Calcul symbolique
Les symboles ou noms de variable désignent par exemple le nom d’une inconnue dans un polynôme, ils sont représentés par une chaine de caractére et peuvent être affectés à une valeur pendant une session (la valeur dépend d’un contexte d’exécution et le remplacement du symbole par sa valeur affectée est appelé évaluation).
Les expressions, par exemple sin(x)+2*x^2
,
elles peuvent être représentées par des arbres. L’évaluation
d’une expression consiste à remplacer les symboles de l’expression
par leur valeur, puis à effectuer les opérations en tenant compte
de la substitution. Il est parfois souhaitable de ne pas
effectuer certaines opérations de substitution, on empêche
l’évaluation, explicitement (''
) ou implicitement
(par exemple l’affectation n’évalue pas le symbole qu’on va affecter).
Les fonctions ne doivent pas être confondues avec les
expressions, elles associent à leurs arguments une expression. Par
exemple sin
est une fonction, alors que sin(x)
est une expression.
2.4.5 Listes, séquences, tables
Les conteneurs contiennent plusieurs objets et permettent d’associer
à un indice un objet. Il en existe de plusieurs types, par exemple
les listes et les séquences
dont l’indice est un
entier compris entre 1 (ou 0) et la taille (-1), les tables dont
l’indice est plus général, et les tableaux
(utilisés pour les vecteurs, matrices)
qui sont essentiellement des listes ou des listes de listes de même taille.
Les séquences sont des listes d’objets ordonnés “non récursifs”
(ils ne peuvent contenir des séquences), alors que les listes
peuvent contenir des listes, sinon il n’y a pas de différences.
Dans les logiciels de calcul formel, la plupart du temps
les séquences se notent en indiquant les éléments séparés par
des virgules. Les listes s’en distinguent par les délimiteurs []
.
Il faut prendre garde au fait qu’en général affecter par exemple
l[1]:=3;
à une variable libre l
crée une table et
non une liste.
Remarque: certains logiciels accédent à certains types de
conteneurs uniquement par référence (par exemple maple pour les
vecteurs et matrices), dans ce dernier cas une seule copie des objets
du conteneur existe si on copie de la manière habituelle
une variable contenant un vecteur ou
une matrice dans une autre variable,
la modification d’un élément du conteneur modifie
alors toutes les copies pointant sur ce conteneur. Cette méthode
est plus efficace mais peut être surprenante.
3 Suites itératives et applications
Résumé:
Théorème du point fixe, méthode de Newton, convexité.
Exemple: calcul de valeur approchée de racines carrées,
Résolution d’équations.
3.1 Rappel : suite récurrente
Une suite récurrente à un cran est définie par une valeur initiale et une relation de récurrence que l’on va supposer ne pas dépendre explicitement de , donc de la forme On peut représenter graphiquement une suite de ce type par un graphe “en toile d’araignée”, par exemple pour les cinq premiers termes de et ,
gl_x=-0.5..2.5;plotseq((x+2)/(x+1),[0,0,2],5)
onload
La suite peut converger ou pas, par exemple avec
et
3.2 Le point fixe
Soit une fonction continue sur un intervalle de , et à valeurs dans (attention à bien choisir pour que l’image de par reste dans ). On s’intéresse à la suite Supposons que converge vers une limite lorsque , alors la limite doit vérifier puisque est continue. On dit que est un point fixe de . Ceci amène à l’idée d’utiliser ces suites pour résoudre numériquement l’équation . Nous allons donner un théorème permettant d’assurer que la suite (1) converge, et que la limite est l’unique solution de sur .
En pratique, les fonctions que l’on considèrera seront continument dérivables, donc d’après le théorème des accroissements finis ainsi pour vérifier que est contractante, on étudie la valeur absolue de sur , il suffit de montrer que cette valeur absolue est strictement inférieure à un réel pour conclure (il faut donc chercher le maximum de sur . Attention, il s’agit du maximum de et pas du maximum de , ce qui revient à chercher le maximum de et de ).
On a alors le
si est contractante de dans de rapport alors la suite (1) converge vers l’unique solution de dans . On a de plus les encadrements :
Démonstration : Tout d’abord si est contractante, on montre à partir de la définition de la continuité que est continue. Soit , alors est continue, positive en et négative en , il existe donc tel que (théorème des valeurs intermédiaires). Soit une suite définie par (1). On a alors pour tout Donc par une récurrence évidente : ce qui entraine d’ailleurs que . Comme , la suite géométrique converge vers 0 lorsque tend vers l’infini, donc tend vers . Notons que est unique car si est une autre solution alors donc , or et donc doit être nul.
Passons à la preuve de la majoration (2) qui est importante en pratique car elle donne un test d’arrêt de calcul des termes de la suite récurrente, on écrit pour : puis on majore avec l’inégalité triangulaire puis on applique le fait que est contractante de rapport soit On fait alors tendre vers l’infini d’où le résultat.
Exemple 1 :
Cherchons une valeur approchée de par cette méthode.
Il faut d’abord trouver une fonction dont est un point
fixe, par exemple
On vérifie que , puis que
donc décroit. On va voir si les hypothèses du théorème du point
fixe s’appliquent sur par exemple . Comme est décroissante
qui est bien inclus dans .
De plus est comprise entre et donc
, est contractante de rapport . On peut donc
itérer la suite à partir par exemple de et on va converger
vers (en s’en rapprochant à chaque cran d’un rapport
inférieur à ).
Exemple 2 :
Considérons l’équation en
c’est l’équation du temps utilisée en astronomie pour trouver la
position (plus précisément l’angle avec le grand axe de l’ellipse)
d’une planète à l’instant
sur son orbite elliptique ( étant l’excentricité
de l’ellipse).
gl_x=-3.5..3.5;gl_y:=-2.2..2.2; E:=ellipse(-1,1,2,color=red); cercle(0,2); theta:=2; line(0,slope=tan(theta)); angle(0,5,5*exp(i*theta),"x"); D:=droite(x=2*cos(theta)); M:=inter(D,E,i,legend="M(t)"); E:=ellipse(-1,1,2,color=red); cercle(0,2); theta:=2; line(0,slope=tan(theta)); angle(0,5,5*exp(i*theta),"x"); D:=droite(x=2*cos(theta)); M:=inter(D,E,i,legend="M(t)",color=red)
onload
Il n’y a pas de formule exacte permettant de calculer en fonction de .
Si on a une valeur numérique pour , on peut trouver une valeur
numérique approchée de par la méthode du point fixe, en réécrivant
l’équation sous la forme
On observe que envoie dans donc on peut prendre
, de plus , est contractante
de rapport , le théorème s’applique, il suffit de
prendre une valeur initiale dans et d’itérer la suite
jusqu’à obtenir la précision désirée. Par exemple si on veut une
valeur approchée de à près, il suffira que la différence
entre deux termes successifs de la suite vérifie
on aura alors bien :
Par exemple, pour et (la Terre), au bout de 3 itérations
Cette méthode n’est pas toujours optimale, car la vitesse de convergence vers la limite est dite “linéaire”, c’est-à-dire que le temps de calcul pour avoir décimales est proportionnel à (ou encore il faut effectuer un nombre d’itérations proportionnel à , chaque itération faisant gagner en précision de l’ordre du rapport de contractance). En effet, supposons que est continue en et que . Il existe alors un intervalle tel que Le théorème des accroissements finis donne alors Si , alors donc et , par récurrence on a pour tout , on a donc par récurrence Donc pour avoir il suffit que et il faut que
Si est suffisamment régulière, il existe une méthode plus rapide lorsqu’on est proche de la racine ou lorsque la fonction a des propriétés de convexité, c’est la méthode de Newton. Et même si Newton n’est pas applicable, une simple dichotomie peut être plus efficace si la constante de contractance est supérieure à (y compris prés de la solution de ).
def dicho(f,a,b,eps): # local c,niter; if f(a)*f(b)>=0: return "erreur: f(a)*f(b)>=0" while b-a>eps: c=(a+b)/2.0 if f(a)*f(c)>0: a=c else: b=c return c
onload
Cette méthode a toutefois l’avantage de se généraliser en dimension supérieure à 1, contrairement à la dichotomie.
3.3 La méthode de Newton.
La méthode de Newton est une méthode de résolution de l’équation , attention à la différence avec le théorème du point fixe qui permet de résoudre numériquement . Si est proche de la racine on peut faire un développement de Taylor à l’ordre 1 de la fonction en : Pour trouver une valeur approchée de , on ne garde que la partie linéaire du développement, on résout : donc (si ) : Graphiquement, cela revient à tracer la tangente à la courbe représentative de et à chercher où elle coupe l’axe des .
gl_x=-3..3; f:=x^2-2; G:=plot(f,x=-3..3); x0:=1.9; M:=element(G,x0); T:=tangent(G,x0,legend="",color=red); N:=inter_unique(T,droite(y=0)); legend(-3,"xN="+round(abscisse(N),3))
onload
On considère donc la suite récurrente définie par une valeur
proche de la racine et par la relation :
Remarque : C’est un cas particulier de point fixe pour
l’équation avec
et donc s’annule en un point où est nulle. On espère
ainsi avoir une convergence très rapide près d’une racine.
Il y a deux théorèmes importants, l’un d’eux prouve que si est “assez proche” de alors la suite converge vers , malheureusement il est difficile de savoir en pratique si on est “assez proche” de pour que ce théorème s’applique. Le second théorème donne un critère pratique facile à vérifier qui assure la convergence, il utilise les propriétés de convexité de la fonction.
Si on a et sur un intervalle contenu dans , alors on peut prendre tout réel tel que et .
Démonstration : on a En appliquant un développement de Taylor de en à l’ordre 2, on obtient pour un réel situé entre et : donc : d’où : On commence par choisir un intervalle contenant strictement et tel que et sur (c’est toujours possible car et sont continues au voisinage de puisque ). Si est dans cet intervalle, alors aussi donc On a , on diminue si nécessaire pour avoir , on a alors : donc d’une part est encore dans l’intervalle ce qui permettra de refaire le même raisonnement au rang suivant, et d’autre part on a une convergence au moins géométrique vers . En fait la convergence est bien meilleure lorsqu’on est proche de grace au carré dans , plus précisément, on montre par récurrence que il faut donc un nombre d’itérations proportionnel à pour atteindre une précision donnée.
Remarque : ce théorème se généralise sur et même sur .
Exemple : pour calculer , on écrit l’équation qui a comme racine simple sur , on obtient la suite récurrente Si on prend , on a et donc on peut prendre et car sur . On a , on peut donc prendre , la suite convergera pour tout .
Plus générallement, on peut calculer une racine -ième d’un réel en résolvant par la méthode de Newton.
L’inconvénient de ce théorème est qu’il est difficile de savoir si la valeur de départ qu’on a choisie se trouve suffisamment près d’une racine pour que la suite converge. Pour illustrer le phénomène, on peut par exemple colorer les points du plan complexe en couleurs selon que la suite définie par la méthode de Newton converge vers l’une des racines d’un polynôme de degré fixé au bout de par exemple 50 itérations (la -ième couleur servant aux origines de suite qui ne semblent pas converger). Session Xcas
Passons maintenant à un critère très utile en pratique :
Une fonction continument dérivable sur un intervalle de est dite convexe si son graphe est au-dessus de la tangente en tout point de .
Il existe un critère simple permettant de savoir si une fonction de classe est convexe :
Démonstration :
L’équation de la tangente au graphe en est
Soit
on a :
donc est croissante, comme , est négative
pour et positive pour , donc est décroissante
pour et croissante pour . On conclut alors que
puisque . Donc est bien au-dessus
de sa tangente.
On arrive au deuxième théorème sur la méthode de Newton
Démonstration :
On a donc si alors
sur , est donc strictement croissante sur
on en déduit que sur donc .
Comme la courbe représentative de est au-dessus de la tangente,
on a (car est l’abscisse du point
d’intersection de la tangente avec l’axe des ).
La suite est donc décroissante minorée par , donc convergente
vers une limite . À la limite, on a
donc car sur .
Comme est décroissante, on a bien , pour montrer l’autre inégalité, on applique le théorème des accroissements finis, il existe tel que comme , on a et la deuxième inégalité du théorème en découle parce que est croissante.
Variantes :
Il existe des variantes, par exemple si et
sur . Si , on considère .
Application :
On peut calculer la valeur approchée de la
racine -ième d’un réel en appliquant ce deuxième
théorème. En effet si
, alors est 2 fois continument dérivable et
de dérivée première et
seconde strictement positives sur (car ).
Il suffit donc de prendre une valeur de départ plus grande que
la racine -ième, par exemple (en effet
).
En appliquant l’inégalité du théorème, on a :
Pour avoir une valeur approchée de à près,
on peut donc choisir comme test d’arrêt
Par exemple pour , le test d’arrêt serait
.
Remarque : Lorsque est proche d’une racine, le calcul approché de peut poser des problèmes à cause de compensations entre deux valeurs proches que l’on soustrait. Par exemple pour , si est proche de , sera proche de 2, et le calcul de la différence va perdre énormément de précision relative.
u=evalf(u,40)
.
Dans le cas de la recherche de
racines de polynômes, on peut utiliser des rationnels (u=2
) mais un autre problème
se produit : la taille du numérateur et du dénominateur va en gros
doubler à chaque itération! Pour éviter cela, on peut remplacer
par un rationnel proche de taille de numérateur/dénominateur plus
petite par arrondi à une puissance de 2 dépendant de la
précision attendue de .
4 Développement de Taylor, séries entières, fonctions usuelles
Résumé: Séries entières. Calcul des fonctions transcendantes usuelles.
Soit une fonction indéfiniment dérivable sur un intervalle de et . On peut alors effectuer le développement de Taylor de en à l’ordre et se demander si converge lorsque tend vers l’infini, si la limite est égale à et si on peut facilement majorer la différence entre et . Si c’est le cas, on pourra utiliser comme valeur approchée de .
On peut parfois répondre à ces questions simultanément en regardant le développement de Taylor de avec reste
La preuve se fait en considérant la fonction qui vérifie ainsi que toutes ses dérivées jusqu’à l’ordre . On choisit pour que et on déduit que la dérivée s’annule en entre et , puis la dérivée seconde s’annule en entre et donc entre et , etc. ce qui donne la valeur de pour la dérivée -ième de .
C’est le cas pour la fonction exponentielle que nous allons détailler, ainsi que les fonctions sinus et cosinus.
4.1 La fonction exponentielle
Soit et , la dérivée -ième de est , donc avec compris entre 0 et , ainsi si est positif et si est négatif, . Dans les deux cas, la limite de est 0 lorsque tend vers l’infini, car pour , on a on a donc pour tout réel
gl_x=-1.5..1.5,gl_y=-4..4 ,plot([exp(x),1+x,1+x+x^2/2,1+x+x^2/2+x^3/6, 1+x+x^2/2+x^3/6+x^4/24],x=-1.5..1.5, color=[black,blue,cyan,green,red])
onload
Comment en déduire une valeur approchée de ? Il suffira d’arrêter la sommation lorsque si ou lorsque si est inférieur à l’erreur absolue souhaitée, le plus tôt étant le mieux pour des raisons d’efficacité et pour éviter l’accumulation d’erreurs d’arrondi. Si on veut connaitre à une erreur relative donnée (par exemple pour stocker le résultat dans un double) il suffit que , donc si est positif, il suffit que , on peut donc arrêter la sommation lorsque le terme suivant est plus petit que .
On observe que plus est grand, plus devra être grand pour réaliser le test d’arrêt, ce qui est facheux pour le temps de calcul. De plus, le résultat final peut être petit alors que les termes intermédiaires calculés dans la somme peuvent être grands, ce qui provoque une perte de précision relative, par exemple si on veut calculer ou plus générallement l’exponentielle d’un nombre négatif de grande valeur absolue.
Exercice : combien de termes faut-il calculer dans le développement de l’exponentielle de -10 pour que le reste soit plus petit que ? Quel est la valeur du plus grand terme rencontré dans la suite ? Quelle est la perte de précision relative occasionné par cette méthode de calcul ?
On peut utiliser les propriétés de la fonction exponentielle pour éviter ce problème. Pour les nombres négatifs, on peut utiliser l’équation (ne change pas l’erreur relative). Pour les grands réels, on peut utiliser (multiplie par 2 l’erreur relative). On peut aussi, si on connait une valeur approchée de , effectuer la division euclidienne de par avec reste symétrique : puis si est positif, on somme la série de , si est négatif, on calcule et on inverse, on applique alors :
Il faut toutefois noter que n’étant pas connu exactement, on commet une erreur d’arrondi absolu sur d’ordre , où est l’erreur relative sur , il faut donc ajouter une erreur d’arrondi relative de qui peut devenir grande si est grand. Puis il faut ajouter la somme des erreurs d’arrondi due au calcul de , que l’on peut minimiser en utilisant la méthode de Horner pour évaluer (car elle commence par sommer les termes de plus haut degré qui sont justement les plus petits termes de la somme). Les coprocesseurs arithmétiques qui implémentent la fonction exponentielle ont un format de représentation interne des double avec une mantisse plus grande que celle des double (par exemple 64 bits au lieu de 53), et une table contenant des constantes dont avec cette précision, le calcul de par cette méthode entraine donc seulement une erreur relative d’arrondi au plus proche sur le résultat converti en double (donc de ).
Notons que en général lui-même a déjà été arrondi ou n’est connu qu’avec une précision relative. Or si est connu avec une erreur relative de (donc une erreur absolue de , alors donc on ne peut pas espérer mieux qu’une erreur relative de sur l’exponentielle de . Si est petit cette erreur relative (impossible à éviter, quel que soit l’algorithme utilisé pour calculer l’exponentielle) est d’ordre . Si est grand alors l’erreur relative devient de l’ordre de 1, et la valeur de l’exponentielle calculée peut être très éloignée de la valeur réelle! Notons que pour les double, il y aura dans ce cas débordement soit vers l’infini soit vers 0 (par exemple si est supérieur à 709, l’exponentielle renvoie infini).
Exercice : refaire les mêmes calculs pour les fonction sinus ou cosinus. On utilise par exemple , , pour se ramener au calcul de ou de sur .
Cette méthode a toutefois ces limites, car il peut devenir impraticable de calculer la dérivée -ième d’une fonction (par exemple avec ), et encore plus de la majorer. D’où l’intérêt de développer une théorie des fonctions qui sont égales à leur développement de Taylor à l’infini d’une part, et d’avoir d’autres méthodes pour majorer le reste, nous présentons ici le cas des séries alternées.
Remarque : pour calculer la fonction exponentielle en optimisant le nombre
d’opérations à effectuer, on utilise des approximants de Padé,
ce sont des fractions rationnelles qui ont le développement de
Taylor souhaité en , et présentent des symétries permettant
de les calculer efficacement.
Le programme suivant permet de calculer l’exponentielle sur
en 12 opérations
avec une précision proche de 1e-15
def f(x): X=x*x q=((X+420)*X+15120)*x r=(30X+3360)*X+30240 return (r+q)/(r-q)
onload
En ajoutant une division par avec arrondi à l’entier le
plus proche, on a l’exponentielle en 16 opérations arithmétiques
de base.
4.2 Séries entières.
Les séries de type prendre la limite lorsque tend vers l’infini du développement de Taylor en x=0 sont de la forme On peut s’intéresser plus générallement à lorsque est un complexe quelconque, c’est ce qu’on appelle une série entière, on peut aussi les voir comme des polynômes généralisés.
S’il existe un point tel que est borné (ce sera le cas en particulier si la série converge en ), alors la série converge donc en si et on peut majorer le reste de la série au rang par la vitesse de convergence est donc du même type que pour le théorème du point fixe (le nombre de termes à calculer pour trouver une valeur approchée avec décimales dépend linéairement , les constantes sont d’autant plus grandes que est grand).
On en déduit qu’il existe un réel positif éventuellement égal à tel que la série converge (la limite de la somme jusqu’à l’infini existe) lorsque et n’existe pas lorsque , ce réel est appelé rayon de convergence de la série. Par exemple ce rayon vaut pour l’exponentielle, le sinus ou le cosinus. Il est égal à 1 pour la série géométrique (car elle diverge si et converge si ). On ne peut pas dire ce qui se passe génériquement lorsqu’on est à la limite, c’est-à-dire lorsque (si ). Mais cela n’a en fait pas trop d’importance en pratique car même si la série converge, elle converge souvent trop lentement pour donner de bonnes approximations. En fait, la vitesse de convergence d’une série entière de rayon est en gros la même que celle d’une série géométrique de raison .
Lorsque deux séries ont un rayon de convergence non nul, alors on peut effectuer leur somme, leur produit comme des polynômes et la série somme/produit a un rayon de convergence au moins égal au plus petit des 2 rayons de convergence des arguments. On peut inverser une série entière non nulle en 0 en appliquant et on obtient une série entière de rayon de convergence non nul. On peut aussi composer deux séries entières et en (avec les règles de calcul de composition des polynômes) si . On peut enfin dériver et intégrer une série entière terme à terme dans son rayon de convergence.
On dit qu’une fonction est développable en série entière en 0 si elle est égale à son développement de Taylor en 0 sommé jusqu’en l’infini dans un disque de centre 0 et de rayon non nul. Les fonctions exponentielle, sinus, cosinus sont donc développables en série entière en 0. La fonction tangente également car le dénominateur cosinus est non nul en 0, mais son rayon de convergence n’est pas l’infini et le calcul des est assez complexe. La fonction est développable en séries entières pour tout avec un rayon de convergence 1 (ou l’infini pour entier positif). Pour , c’est la série géométrique de raison , en effet si : En intégrant par rapport à , on obtient que est développable en série entière en 0 de rayon de convergence 1 et On peut calculer de manière analogue le développement en série entière de en iintégrant celui de , de même pour et en intégrant celui de . On peut donc calculer , , ... par ces formules, mais il faut répondre à la question où arrête-t-on la somme pour obtenir une précision donnée? Dans le cas de , on pourrait répondre comme avec l’exponentielle en majorant la dérivée -ième, mais ce n’est plus faisable pour . On va donner un autre critère qui ne nécessite pas de calculer cette dérivée mais utilise l’alternance des signes dans la somme.
4.3 Série alternée
Démonstration :
on montre que les suites et sont
adjacentes. On a
donc est décroissante, de même est croissante,
et est positif et tend vers 0. On en déduit que
et convergent vers la même limite telle que
et les inégalités du théorème s’en déduisent.
Remarque
lorsqu’on utilise une suite alternée pour
trouver une valeur approchée, il faut que tende assez
vite vers 0, sinon il y aura perte de précision sur la mantisse
lorsqu’on effectuera . On sommera aussi les termes
par ordre décroissant pour diminuer les erreurs d’arrondi.
4.4 La fonction logarithme
Si nous voulons calculer pour avec une précision , il suffit de calculer pour tel que la valeur absolue du terme suivant soit plus petit que : en effet, les signes sont alternés et la suite décroit vers 0.
Si la suite décroit lentement vers 0, cette méthode est mauvaise numériquement et en temps de calcul car il y a presque compensation entre termes successifs donc perte de précision sur la mantisse et il y a beaucoup de termes à calculer. C’est le cas pour le logarithme, si est voisin de 1, il faut calculer termes pour avoir une précision en , par exemple 1 million de termes pour avoir une précision de (sans tenir compte des erreurs d’arrondi). Si est proche de il faut de l’ordre de termes ce qui est mieux, mais encore relativement grand (par exemple 50 termes environ pour une précision en , 13 termes pour ). On a donc intérêt à se ramener si possible à calculer la fonction en un où la convergence est plus rapide (donc le plus petit possible). Par exemple pour le calcul de on peut :
- utiliser la racine carrée on observe que : il faut toutefois faire attention à la perte de précision sur par rapport à lorsque est petit.
- utiliser l’inverse lorsque est proche de 1, est proche de , on a presque divisé par 2. Attention toutefois, on se retrouve alors avec une série non alternée, mais on peut utiliser 3 pour majorer le reste dans ce cas.
- trouver une valeur approchée de à une précision faible, par exemple , et utiliser la méthode de Newton pour améliorer la précision. Soit en effet , alors , on pose , on utilise la suite itérative Comme est proche à de , on peut espérer avoir une valeur approchée de à en 2 itérations. Notez que est proche de , on est dans un domaine où le calcul de est rapide et précis et de plus la méthode de Newton “corrige” les erreurs intermédiaires.
- En fait pour calculer le logarithme à la précision usuelle
pour , il existe une autre optimisation,
résoudre et utiliser
le développement en séries
pour .
Cette méthode nécessite d’aller jusque pour majorer le
reste en
1e-16
, ce qui donne une méthode de calcul du log en une trentaine d’opérations.
Nous sommes donc en mesure de calculer précisément le logarithme pour . Pour calculer sur , on se ramène à en utilisant l’écriture mantisse-exposant.
Remarquons que si est connu à une erreur relative près, comme est connu à une erreur absolue de . Si est proche de 0, on a une grande perte de précision relative.
Finalement, nous savons calculer et sous réserve
d’avoir dans une table la valeur de . Pour calculer
précisément, on peut utiliser
et le développement en série calculé en mode exact avec des
fractions à un ordre suffisant, on majore le reste en utilisant
que le terme général de la série est borné par
en , donc d’après (3) :
(on peut même obtenir car on a besoin de uniquement
pour les termes d’ordre plus grand que , on peut donc prendre ).
Par exemple, pour avoir avec une mantisse de 80 bits,
on effectue une fois pour toutes avec un logiciel
de calcul formel :
puis la division en base 2 avec 81 bits de précision
Exercice : pour les fonctions trigonométriques, il faut une méthode de calcul de . On peut par exemple faire le calcul de en utilisant le développement de la fonction à un ordre suffisant.
4.5 Autres applications
On peut calculer certaines intégrales de la même manière, par exemple mais aussi des fonctions définies par des intégrales (cas de nombreuses fonctions spéciales).
4.5.1 Exemple : la fonction d’erreur (error fonction, erf)
Cette fonction est définie à une constante multiplicative près par : On peut développer en séries entières l’intégrand (rayon de convergence ), puis intégrer terme à terme, on obtient Ce développement converge très rapidement pour . Par contre, pour grand, il faut calculer beaucoup de termes avant que le reste soit suffisamment petit pour être négligeable, et certains termes intermédiaires sont grands, ce qui provoque une perte de précision qui peut rendre le résultat calculé complètement faux. Contrairement à la fonction exponentielle, il n’y a pas de possibilité de réduire l’argument à une plage où la série converge vite. Il faut donc
- soit utiliser des flottants multiprécision, avec une précision augmentée de la quantité nécessaire pour avoir un résultat fiable
- soit, pour les grandes valeurs de , utiliser un développement asymptotique (en puissances de ) de ainsi que Le développement asymptotique s’obtient par exemple en changeant de variable et en effectuant des intégrations par parties répétées en intégrant et en dérivant et ses dérivées successives. Ce type de développement asymptotique a la propriété inverse du développement en 0: les termes successifs commencent par décroitre avant de croitre et de tendre vers l’infini. Il faut donc arrêter le développement à un rang donné (dépendant de ) et il est impossible d’obtenir une précision meilleure pour cette valeur de par un développement asymptotique (on parle parfois de développement des astronomes).
Exercice : donner une valeur approchée de à près. Combien de termes faut-il calculer dans la somme pour trouver une valeur approchée de à près ? Comparer la valeur de et la valeur absolue du plus grand terme de la série, quelle est la perte de précision relative si on effectue les calculs en virgule flottante ? Combien de chiffres significatifs faut-il utiliser pour assurer une précision finale de 16 chiffres en base 10 ? Calculer le développement asymptotique en l’infini et déterminer un encadrement de par ce développement. Combien de termes faut-il calculer pour déterminer à près par le développement asymptotique et par le développement en séries ? Quelle est la meilleure méthode pour calculer ?
4.5.2 Recherche de solutions d’équations différentielles
On peut aussi appliquer les techniques ci-dessus pour calculer des solutions de certaines équations différentielles dont les solutions ne s’expriment pas à l’aide des fonctions usuelles, on remplace dans l’équation la fonction inconnue par son développement en séries et on cherche une relation de récurrence entre et . Si on arrive à montrer par exemple qu’il y a une solution ayant un développement alternée, ou plus générallement, si on a une majoration , alors le reste de la série entière est majoré par lorsque , on peut alors calculer des valeurs approchées de la fonction solution à la précision souhaitée en utilisant le développement en séries entières.
4.5.3 Exemple : fonctions de Bessel d’ordre entier
Soit un entier positif fixé, on considère l’équation différentielle dont on cherche une solution série entière . En remplacant dans l’équation, si est dans le rayon de convergence de la série (rayon supposé non nul), on obtient soit encore Par exemple, prenons le cas . On a alors quelconque, nul et pour Donc tous les d’indice impair sont nuls. Les pairs sont non nuls si , et ils sont de signe alterné. Soit fixé, on observe que pour , donc la série est alternée à partir du rang partie entière de plus un. Donc elle converge pour tout (le rayon de convergence de est ) et le reste de la somme jusqu’à l’ordre est inférieur en valeur absolue à : Par exemple, pour avoir une valeur approchée à près de pour et , on calcule , on s’arrête au rang tel que On remarque que : donc convient.
Pour , on peut faire un raisonnement analogue (les calculs sont un peu plus compliqués).
On a ainsi trouvé une solution de l’équation différentielle de départ dont on peut facilement calculer une valeur approchée (aussi facilement que par exemple la fonction sinus pour ), on peut alors trouver toutes les solutions de l’équation différentielle (en posant et en cherchant ).
Exercice : faire de même pour les solutions de (fonctions de Airy).
4.6 Développements asymptotiques et séries divergentes
Un développement asymptotique est une généralisation d’un développement de Taylor, par exemple lorsque le point de développement est en l’infini. De nombreuses fonctions ayant une limite en l’infini admettent un développement asymptotique en l’infini, mais ces développements sont souvent des séries qui semblent commencer par converger mais sont divergentes. Ce type de développement s’avère néanmoins très utile lorsqu’on n’a pas besoin d’une trop grande précision sur la valeur de la fonction.
Nous allons illustrer ce type de développement sur un exemple, la fonction exponentielle intégrale, définie à une constante près par On peut montrer que l’intégrale existe bien, car l’intégrand est positif et inférieur à (qui admet comme primitive, cette primitive ayant une limite en ). Pour trouver le développement asymptotique de en , on effectue des intégrations par parties répétées, en intégrant l’exponentielle et en dérivant la fraction rationnelle où Le développement en séries est divergent puisque pour fixé et tendant vers l’infini mais si est grand, au début la série semble converger, de manière très rapide : On peut utiliser comme valeur approchée de pour grand si on sait majorer par un nombre suffisamment petit. On a On retrouve une majoration du type de celle des séries alternées, l’erreur relative est inférieure à la valeur absolue du dernier terme sommé divisé par . Pour fixé assez grand, il faut donc trouver un rang , s’il en existe un, tel que où est la précision relative que l’on s’est fixée. Par exemple, si , convient pour (à peu près la précision relative d’un “double”). Ceci permet d’avoir une approximation de la fonction avec une bonne précision et peu de calculs, mais contrairement aux séries entières, il n’est pas possible d’améliorer cette précision de manière arbitraire en poussant le développement plus loin, il y a une précision maximale possible (qui dépend de ).
Ce type de développement asymptotique peut être effectué pour d’autres fonctions du même type, par exemple
Digression: calcul approché de la constante d’Euler
On peut montrer que
existe (par exemple en cherchant un équivalent de qui vaut
)
et on définit comme sa limite. Malheureusement, la convergence
est très lente et cette définition n’est pas applicable pour obtenir la valeur
de avec une très grande précision.
Il y a un lien entre et la fonction exponentielle intégrale, plus précisément
lorsque , admet une singularité en ,
plus précisément
admet un développement en séries (de rayon de convergence ), car :
Que vaut la constante du membre de droite :
Il se trouve que (voir plus bas une démonstration condensée) et donc :
Pour obtenir une valeur approchée de , il suffit donc de prendre un assez grand
pour pouvoir calculer par son développement asymptotique à la précision requise,
puis de calculer l’intégrale du membre de droite par le développement en séries en
(en utilisant une précision intermédiaire plus grande puisque ce développement en séries
va sembler diverger au début avant de converger pour suffisamment grand).
Par exemple, on pose , on calcule par (4)
avec (qui correspond au moment où le terme général
de la série est minimum puisque le rapport de deux termes successifs
est en )
et une erreur absolue inférieure à
exp(-13)*sum((-1)^n*n!/13.^(n+1),n=0..13)
puis on remplace dans (6), avec
dont on obtient une valeur approchée,
en faisant la somme jusqu’au rang 49 (pour lequel
le terme général est de l’ordre de 1e-12
),
le reste de cette somme est positif et est inférieur à
(-1)^
50*13.^
51/51/51!) qui est de l’ordre de
8e-12
evalf(sum((-1)^n*13^(n+1)/(n+1)/(n+1)!,n=0..49))
La somme argument de evalf
étant exacte, il n’y a pas de problèmes de perte de précision,
on peut aussi faire les calculs intermédiaires en arithmétique approchée,
on doit alors prendre 4 chiffres significatifs de plus
pour tenir compte de la valeur du plus grand terme
sommé dans la série, terme que l’on détermine par exemple par
^
(n+1)/(n+1)/(n+1)!,n=0..20)
ce terme vaut 13^11/11/11!
soit 4000 environ)
Digits:=16; sum((-1)^n*13.^(n+1)/(n+1)/(n+1)!,n=0..49)
On obtient finalement comme valeur approchée de
-exp(-13)*sum((-1)^n*n!/13.^(n+1),n=0..13)-ln(13)+
sum((-1)^n*13^(n+1)/(n+1)/(n+1)!,n=0..49)
soit 0.577215664897
avec une erreur inférieure à 1.2e-11
.
Bien entendu, cette méthode est surtout intéressante si on veut calculer
un grand nombre de décimales de la constante d’Euler, sinon
on peut par exemple appliquer la méthode d’accélération de Richardson à
la suite convergente (5) qui définit
ou d’autres méthodes d’accélération (en transformant par
exemple la série en série alternée). On calcule alors
de deux manières différentes pour plus grand (déterminé
par la précision qu’on peut obtenir par le développement
aymptotique de ).
On peut calculer de la même manière avec le développement en séries et asymptotique de la fonction sinus intégral (on remplace exponentielle par sinus dans la définition de ) et l’égalité (dont un schéma de preuve est aussi donné plus bas)
Calcul de (et preuve de (7)):
Pour cela on effectue une intégration par parties, cette fois en intégrant
et en dérivant l’exponentielle (moins 1 dans la première intégrale).
Pour calculer cette intégrale, on utilise
l’égalité (qui se démontre par récurrence en faisant une
intégration par parties) :
On va à nouveau intégrer par parties,
on intègre un facteur multiplicatif 1
et on dérive l’intégrand, on simplifie, puis
on intègre et on dérive l’autre terme, puis , etc.
où
Pour déterminer on fait le changement de variables
Or en faisant le même changement de variables :
Donc
Lorsque tend vers l’infini, on peut montrer que , en effet les intégrales
sont équivalentes à leur valeur sur un petit intervalle autour de , point où l’argument
de l’exponentielle est maximal,
et comme l’intégrand du numérateur a une amplitude qui s’annule en ,
il devient négligeable devant le dénominateur. Finalement on a bien .
On peut remarquer qu’en faisant le même calcul que mais en remplacant par pour , donne (car le point critique où la dérivée de la phase s’annule est alors ). Ceci peut aussi se vérifier pour réel en faisant le changement de variables En faisant tendre vers , tend vers et on obtient dont la partie imaginaire nous donne (7), et la partie réelle une autre identité sur faisant intervenir la fonction cosinus intégral.
5 Polynômes : arithmétique, factorisation, interpolation
5.1 Arithmétique des polynomes: Bézout et applications
On considère les polynômes à une variable à coefficients dans ou ou . Les algorithmes de base déjà évoqués sont l’évaluation en un point (méthode de Horner), l’addition, la soustraction, la multiplication et la division euclidienne de par :
A l’aide de la division euclidienne, on peut calculer le PGCD de deux polynômes par l’algorithme d’Euclide. Nous allons présenter l’algorithme d’Euclide étendu (ou de Bézout)
Algorithme :
On construit en fait 3 suites , et telles que :
- on initialise et
- on calcule les indices en fonction de et en effectuant la division euclidienne de par
- on s’arrête au dernier reste non nul
Exemple :
, les rangs 0 et 1 sont donnés ci-dessus.
Au rang 2, est le quotient euclidien de par (fonction
quo
) donc , d’où
Puis on divise par , quotient , donc
Preuve de l’algorithme :
On montre facilement par récurrence que la relation est conservée. Comme est la suite des restes, le dernier
reste non nul est bien le pgcd de et .
D’autre part, examinons les degrés des . Supposons que
deg deg (sinon on échange et ).
Au rang , donc , aux rangs suivants
le degré de est non nul (car le degré de est
strictement inférieur au degré de )
On montre donc par récurrence que la suite des degrés de
est croissante et que :
Comme deg=deg-deg, on en déduit que
Donc si est le rang du dernier reste non nul, et
deg=deg-deg est donc strictement
inférieur au degré de (car ,
l’avant-dernier reste non nul,
est de degré plus grand ou égal à 1).
On en déduit enfin que le degré de est strictement
inférieur au degré de , car , le degré
de est strictement inférieur à celui de plus
celui de .
L’identité de Bézout permet de résoudre plus générallement une équation du type où sont trois polynômes donnés, à condition que soit divisible par le pgcd de et . L’ensemble des solutions s’obtient à partir d’une solution particulière de Bézout, notons , on a alors et l’ensemble des solutions est donné par où est un polynôme quelconque. Si le degré de est plus petit que le degré de plus le degré de , il existe une solution “priviligiée”, on prend pour le reste de la division euclidienne de par , est alors le reste de la division euclidienne de par pour des raisons de degré.
Exemple : si on veut résoudre
on multiplie et par ce qui donne une solution
l’ensemble des solutions est de la forme
et la solution priviligiée (de degrés minimaux) est
L’identité de Bézout intervient dans de nombreux problèmes en particulier la décomposition en éléments simples d’une fraction rationnelle. Si le dénominateur d’une fraction se factorise en produit de 2 facteurs premiers entre eux, alors il existe deux polynômes et tels que , donc Si de plus est une fraction propre (degré de plus petit que celui de ), alors et sont encore des fractions propres (en calculant le reste de la division euclidienne pour et comme expliqué ci-dessus).
Par exemple :
Les applications sont diverses, citons
- le calcul de primitive de fraction rationnelles (et tout ce qui s’y ramène), par exemple Puis on fait apparaitre la dérivée du dénominateur au numérateur pour éliminer les , pour faire le calcul complet, il faut aussi décomposer la fraction restante (exercice!)
- Le calcul de la fonction exponentielle (à nouveau).
Au lieu d’utiliser
le développement de Taylor en 0 par exemple à l’ordre
10, on cherche une fraction rationnelle ayant le même
développement de Taylor que l’exponentielle en 0 avec
degré de et de majorés par 5. Pour trouver et
on multiplie la condition par ce qui donne
on applique l’algorithme de Bézout aux polynômes et
en s’arrêtant prématurément, lorsque le reste est de degré 5,
on montre alors que le reste est et le coefficient de Bézout
de est .
On peut alors montrer que l’approximation est un peu meilleure, et nécessite moins d’opérations (il y a une certaine symétrie entre les termes de et ). - le calcul de transformée de Laplace inverse de fractions rationnelles, l’idée est la même, sauf qu’on remplace l’intégrale par la transformée de Laplace inverse (et les formules donnant la transformée inverse de , , respectivement ) (calcul non exigible à l’examen)
- le calcul du terme d’ordre du développement de Taylor en 0 d’une fraction rationnelle. On décompose, et on se ramène à des séries dont le terme général est connu, comme . Par exemple pour connaitre le développement de , on factorise le dénominateur , on décompose et on développe, le terme d’ordre est donc .
Il faut néanmoins savoir factoriser un polynôme, ce dont nous parlerons dans la section suivante.
Exercice :
Calculer l’intégrale
en utilisant l’identité de Bézout pour décomposer la fraction rationnelle.
Trouver à l’aide de cette décomposition le terme d’ordre
du développement de Taylor de la fraction à intégrer, vérifier
avec un logiciel de calcul formel que les termes d’ordre 0 à 3 sont
corrects.
Una autre application est l’élimination dans les systèmes
polynomiaux, par exemple considérons le système de 2 équations
à 2 inconnues (intersection d’une ellipse et d’un cercle) :
En calculant les coefficients de Bézout des 2 polynômes en
et et en multipliant au besoin par
le PPCM (plus grand commun multiple) des dénominateurs, on obtient
à droite de l’équation de Bézout un polynôme ne dépendant que
de et qui s’annule aussi aux solutions du système, on peut alors
résoudre en (en factorisant) puis en . Ici par exemple
ce polynome est .
Cette méthode se systématise, le polynome obtenu par élimination
d’une variable est appelé résultant.
5.2 Factorisation des polynômes
Soit un polynôme de degré non nul. Factoriser n’a pas une signification unique, tout dépend d’une part si on veut une factorisation exacte ou approchée, et d’autre part quels seront les types des coefficients de la factorisation (complexes, réels, entiers).
5.2.1 Multiplicité des racines.
On dit que est une racine de multiplicité de si et .
En faisant le développement de Taylor de en à l’ordre degré de , on voit que cela équivaut à : En particulier si , on peut factoriser par .
On peut donc détecter les racines de multiplicité supérieure à 1 en cherchant un facteur commun à et , en effet divisera et .
P:=x^4-1; gcd(P,P’)
On a aussi le résultat suivant :
Preuve : si avec les racines
distinctes de , alors
pgcd
et .
Ce résultat est très utile si le polynôme donné est á coefficients exacts, car les méthodes numériques d’approximation de racines ne fonctionnent bien que pour des polynômes à racines simples.
Il existe un algorithme (dû à Yun) qui permet d’écrire un polynome quelconque comme produit de polynômes dont les racines sont simples en effectuant uniquement des calculs de PGCD de polynomes.
yun(P):= { local W,Y,G,res; W:=P; Y:=diff(W,x); res:=NULL; while(true){ if (Y==0) { return res[1..size(res)-1],W; }; G:=gcd(Y,W); res:=res,G; W:=normal(W/G); Y:=normal(Y/G-diff(W,x)); }; }:;
onload
L’instruction sqrfree
ou équivalente
de votre logiciel de calcul formel effectue cette décomposition.
5.2.2 Factorisation dans .
Reste maintenant à trouver des racines! On a le :
Soit un polynome de degré non nul, alors admet au moins une racine complexe.
On peut alors factoriser par si est la racine, et recommencer avec le quotient, d’où le corollaire.
Démonstration du théorème de d’Alembert :
On va montrer que le minimum de la valeur absolue de est atteint
en un nombre complexe puis que ce minimum est forcément nul.
Soit
Lorsque tend vers l’infini, tend vers l’infini, en
effet
plus précisément il existe tel que si
alors . Quitte à augmenter on
peut donc supposer que si , donc il existe
un complexe qui réalise le minimum de sur (ce
minimum est en fait le minimum pour ). On va montrer par
l’absurde que ce minimum est nul (donc que est la racine
cherchée). Supposons donc que . On fait le
développement de Taylor de en à l’ordre =degré de , donc
le développement n’a pas de reste :
Comme n’est pas constant, l’un des termes du membre de droite est
non nul, soit l’indice du premier terme non nul, on a alors :
Comme , on peut le factoriser en :
on pose alors où est une racine -ième (cela
existe dans ) de
on a alors :
lorsque est positif, suffisamment petit, on a , donc , ce qui est absurde ( réalisant
le minimum de sur ).
Remarque :
Si on développe la relation (8), on obtient
des relations entre les coefficients du polynome et les racines, par
exemple :
5.2.3 Calcul approché des racines complexes simples
La section précédente nous a montré qu’on pouvait se ramener à la recherche de racines simples, ce qui donne envie d’essayer la méthode de Newton. On a malheureusement rarement la possibilité de pouvoir démontrer qu’à partir d’une valeur initiale donnée, la méthode de Newton converge, parce que les racines peuvent être complexes, et même si elles sont réelles, on n’a pas forcément de résultat sur la convexité du polynôme (cf. cependant une application des suites de Sturm dans la section suivante qui permet de connaitre le signe de sur un intervalle sans le factoriser).
On effectue donc souvent des itérations de Newton, en partant de 0.0, en espérant s’approcher suffisamment d’une racine pour que le théorème de convergence théorique s’applique. On se fixe un nombre maximal d’itérations, si on le dépasse on prend alors une valeur initiale aléatoire complexe et on recommence.
Une fois une racine déterminée, on l’élimine en calculant le quotient euclidien de par (par l’algorithme de Horner), puis on calcule les racines du quotient (qui sont des racines de ).
Un problème pratique apparait alors, c’est que n’est pas exact donc le quotient non plus, au fur et à mesure du calcul des racines de , on perd de plus en plus de précision. Il existe une amélioration simple, si est une racine approchée de , alors elle est racine approchée de et on a toutes les chances qu’elle soit suffisamment proche d’une racine de pour que le théorème s’applique, on effectue alors 1 ou 2 itérations de Newton avec mais pour (et non ) afin d’améliorer sa précision comme racine de . Pour des polynômes de degrés grands, cela ne suffit pas, il existe des méthodes plus efficaces, Maehly, Durand-Kerner-Weierstrass, Aberth, ... Ainsi la méthode d’Aberth améliore la précision de racines approchées de en effectuant la méthode de Newton sur , qui est proche de sauf tout près des racines approchées.
Si est à coefficients exacts, pour éviter les erreurs de calculs en approché, on remplace par un rationnel proche et on effectue ces itérations de Newton en calcul exact (entre deux itérations, pour des raisons d’efficacité, on peut remplacer par un rationnel proche à la précision attendue à cette étape mais dont le numérateur et dénominateur ont une écriture moins longue).
5.2.4 Localisation d’une racine complexe près d’une racine approchée
On peut montrer à postériori des estimations sur la distance entre une racine approchée et la racine la plus proche d’un polynôme, plus précisément cette distance est inférieure ou égale au degré du polynôme multiplié par le module de en la racine approchée.
En effet donc si degre pour toutes les racines alors contradiction.
En combinant des méthodes d’approximation numérique des racines d’un polynôme et ce résultat on peut ainsi localiser très précisément des racines complexes de polynôme. C’est un cas où une méthode hybride exacte-approchée donne des résultats excellents!
Remarque : pour des polynômes de degré dépassant la dizaine, on utilise des méthodes permettant de trouver toutes les racines à la fois (diagonalisation numérique de la matrice companion) plutôt que la méthode de Newton qui les détermine une par une. Lorsque le degré dépasse quelques centaines, il devient nécessaire d’utiliser des approximations multi-précision ou des résutats de fonction à variable complexes.
5.2.5 Localisation des racines réelles : Sturm
Pour factoriser un polynôme à coefficients réels, on commence par le factoriser dans . On observe ensuite que si est une racine complexe non réelle de , alors son conjugué l’est aussi (il suffit de prendre le conjugue de la relation ) et avec la même multiplicité (les dérivées successives de étant aussi à coefficients réels). On regroupe alors les facteurs correspondant à des racines complexes conjuguées : Finalement, on a le :
Il existe un algorithme utilisant l’algorithme de calcul du PGCD de et qui permet de déterminer le nombre de racines réelles d’un polynôme sans racine multiple sur ou dans un intervalle de .
Exemple :
Quel est le nombre de racines réelles de
sur ? sur ?
On a donc
En on obtient la suite (2 changements de
signe), en on obtient la suite (1 changement
de signe), il y a donc 1 racine réelle entre -2 et 2. En
on obtient la suite (1 changement de signe) donc la
racine réelle est entre -2 et 0.
Preuve
On considére 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
(9), or est constant non nul). Elle ne peut pas
non plus contenir ...,+,0,+,... ni ...,-,0,-,...
à cause de la convention de signe
sur les restes de (9). Donc si est une racine
de pour , alors en on a soit ...,-,0,+,... soit
...,+,0,-,... . Regardons le premier cas (le deuxième cas se traite
de manière analogue), pour proche de , on va avoir
...,-,-,+,... ou ...,-,+,+,... dans les 2 cas la contribution au
nombre de changements de signe est constant (égal à 1).
Comme est constant, seules les racines de sont susceptibles de faire varier . Comme , le sens de variations de au voisinage d’une racine de est déterminé par le signe de , donc lorsque augmente en traversant une racine de , il y a deux possibilités soit est croissant et on passe de -,+,... à +,+,..., soit est décroissant et on passe +,-,... à -,-,.... Dans les deux cas, on diminue d’une unité.
Application :
Si il n’existe pas de racines réelles dans un intervalle donné,
alors le polynôme garde un signe constant sur cet intervalle,
que l’on peut déterminer en calculant la valeur du polynôme
en un point de cet intervalle. On peut ainsi établir
dans certains cas que la méthode de Newton pour trouver une racine
d’un polynôme convergera.
Par exemple pour le polynôme , on a , est positif sur (exercice : calculer la suite de Sturm correspondante pour le vérifier). On vérifie que et donc il existe une racine telle que , toute valeur de départ de Newton supérieure à assure la convergence.
Remarque :
On peut aussi déterminer les racines réelles d’un polynôme
à coefficients rationnels
en faisant uniquement des calculs exacts par dichotomie.
Cette méthode de localisation des racines réelles se
généralise d’ailleurs au cas complexe. On peut ainsi déterminer les
racines complexes d’un polynôme à coefficients complexes
rationnels de manière déterministe à la précision voulue
(cf. Eisermann).
5.2.6 Localisation des racines réelles : règle des signes de Descartes
La preuve se fait par récurrence. Pour on a bien . Pour on applique l’hypothèse de récurrence à et on utilise le fait que 1+le nombre de racines de sur un intervalle est supérieur ou égal au nombre de racines de sur . Il y a deux cas possibles et . Dans le deuxième cas, comme , alors . Dans le premier cas, il faut trouver une racine supplémentaire pour . Pour cela, on regarde ce qui se passe en . Supposons que pour fixer les idées, comme est du même signe que (ou que si etc.), est positif en donc croit en , donc doit atteindre un maximum local avant la première racine de , ce maximum local est une racine de .
On peut même montrer que et sont de même parité. En particulier si , on a car le coefficient dominant et de plus bas degré non nul de sont de signes contraires, donc la valeur en 0 et la limite en aussi.
On déduit de la règle des signes de Descartes un critère indiquant si un polynôme possède 0, 1 ou plus de racines sur en se ramenant par changement de variables à puis par à .
On prend alors le polynôme de départ et une majoration sur les racines, par exemple . Si est une racine positive de , alors est une racine positive de , on est donc ramené a chercher des intervalles d’isolation de racines de dans . S’il y a 0 ou 1 changement de signe, on conclut. Sinon, on teste si est racine puis on cherche dans et dans , ce qui revient au problème précédent sur avec les polynômes et .
On fait de même sur pour les racines réelles négatives.
fonction descartes(P) local l,res,j; l:=coeffs(P); l:=remove(0,l); res:=0; pour j de 0 jusque dim(l)-2 faire si l[j]*l[j+1]<0 alors res++; fsi; fpour; return res; ffonction:; fonction isole01(P,a,b) // renvoie une liste d'intervalles d'isolation local n,m,Q,R,res; global x; Q:=x^degree(P)*P(x=1/x); R:=Q(x=x+1); n:=descartes(R); si n=0 alors return NULL; fsi; si n=1 alors return [a,b]; fsi; Q:=numer(P(x=x/2)); R:=numer(P(x=(x+1)/2)); m:=(a+b)/2; si P(x=1/2)=0 alors res:=(a+b)/2; sinon res:=NULL; fsi; res:=res,isole01(Q,a,m),isole01(R,m,b) retourne res; ffonction:; fonction isole(P) // racines positives de P local l,M; l:=coeffs(P); M:=ceil(maxnorm(l)/abs(l[0]))+1; P:=P(x=M*x); return isole01(P,0,M); ffonction:;
onload
Racines de dans
il y a un nombre pair de racines positives.
Racines de dans
Donc une racine dans .
Isolation des racines positives de :
on commence par se ramener à chercher les racines
de sur (il faudra les multiplier par à la fin)
Il faut découper en deux :
donc il y a une racine de dans , donc de dans
donc il y a une racine de dans , donc de dans .
n’est pas nul en , on conclut donc qu’il existe 2 racines positives
pour . Vérification avec isole :
5.2.7 Factorisation exacte
Soit un polynôme à coefficients entiers. Lorsqu’on demande à un logiciel de calcul formel de factoriser , par défaut il ne calcule pas les racines complexes approchées, mais renvoie une factorisation exacte, sous forme de produit de facteurs à coefficients entiers. Les degrés des facteurs peuvent être plus grand que 2. Par exemple ne peut pas être factorisé en produit de polynômes à coefficients entiers (bien qu’il ait 2 facteurs de degré 2 dans et 4 de degré 1 dans ).
Commencons par une méthode simple de calcul des racines rationnelles de (les racines rationnelles correspondent à des facteurs entiers de degré 1 de la forme de ). Soit une racine rationnelle écrite sous forme de fraction irréductible de , on a alors Donc : et divise donc . Comme est irréductible, cela entraine que divise . De même divise . Il suffit donc de tester quelles sont les racines de parmi toutes les fractions irréductibles de la forme un diviseur de sur un diviseur de (attention à ne pas oublier les diviseurs négatifs!).
Exemple: racines rationnelles de . On a divise donc vaut 1 ou -1, divise donc vaut 1 ou 2. On teste donc 1, -1, 1/2, -1/2. On obtient ici la factorisation complète du polynome (les racines sont -1 et -1/2)
Remarques :
- Pour un polynome aléatoire, on ne trouvera aucune racine rationnelle.
- Cette méthode n’est pas très efficace, car factoriser un entier peut être long, le nombre de tests peut être très grand (si et ont beaucoup de facteurs), les logiciels de calcul formel utilisent des méthodes appelées -adiques pour trouver les racines rationnelles d’un polynome (on calcule d’abord les racines de modulo puis modulo pour assez grand). On pourrait aussi penser à calculer les racines complexes approchées et voir si en multipliant par on est proche d’un entier, on testerait alors le rationnel correspondant.
Pour déterminer les facteurs à coefficients entiers de plus grand degré, il n’existe pas de méthode aussi simple. On peut calculer des valeurs approchées des racines complexes et essayer de créer des paquets de racines complexes, puis tester si est à coefficients entier (aux erreurs d’arrondi près). Par exemple si on calcule les racines complexes approchées de , on pourra composer un facteur de degré 3 à coefficients entiers en rassemblant les racines de . Les logiciels de calcul formel utilisent des algorithmes modulaires et -adiques (consistant à factoriser le polynome modulo ).
5.3 Approximation polynomiale
Étant donné la facilité de manipulation qu’apportent les polynomes, on peut chercher à approcher une fonction par un polynôme. La méthode la plus naturelle consiste à chercher un polynôme de degré le plus petit possible égal à la fonction en certains points et à trouver une majoration de la différence entre la fonction et le polynôme. Le polynome interpolateur de Lagrange répond à cette question.
Soit donc des réels distincts et les valeurs de la fonction à approcher en ces points (on posera pour approcher la fonction ). On cherche donc tel que pour .
Commencons par voir s’il y a beaucoup de solutions. Soit et deux solutions distinctes du problème, alors est non nul et va s’annuler en donc possède racines donc est de degré au moins. Réciproquement, si on ajoute à un multiple du polynome , on obtient une autre solution. Toutes les solutions se déduisent donc d’une solution particulière en y ajoutant un polynome de degré au moins multiple de .
Nous allons maintenant construire une solution particulière de degré au plus . Si , on prend constant. On procède ensuite par récurrence. Pour construire le polynôme correspondant à on part du polynoôme correspondant à et on lui ajoute un multiple réel de Ainsi on a toujours pour , on calcule maintenant pour que . En remplacant avec l’expression de ci-dessus, on obtient Comme tous les sont distincts, il existe une solution unique :
On a donc prouvé le :
Exemple : déterminons le polynome de degré inférieur ou égal à 2 tel que . On commence par . Puis on pose . Comme on en tire donc . Puis on pose , on a donc , finalement .
Reste à estimer l’écart entre une fonction et son polynome interpolateur, on a le :
Ainsi l’erreur commise dépend d’une majoration de la taille de la dérivée -ième sur l’intervalle, mais aussi de la disposition des points par rapport à . Par exemple si les points sont équidistribués, le terme sera plus grand près du bord de qu’au centre de .
Preuve du théorème : Si est l’un des l’égalité est vraie. Soit on considère maintenant la fonction : elle s’annule en pour variant de 0 à ainsi qu’en suite au choix de la constante , donc s’annule au moins fois sur l’intervalle contenant les et , donc s’annule au moins fois sur ce même intervalle, donc s’annule au moins fois, etc. et finalement s’annule une fois au moins sur cet intervalle. Or car est de degré inférieur ou égal à et est de degré inférieur ou égal à . Donc il existe bien un réel dans l’intervalle contenant les et tel que
Illustration : approcher la fonction sur
avec un pas de 0.5.
Graphiquement, on ne distingue pas et sur l’intervalle
d’interpolation. Tracons la différence :
Dès qu’on sort de l’intervalle, l’erreur explose.
Comparons avec la majoration d’erreur sur l’intervalle
La dérivée 7-ième est donc majorée par 10 sur . On
trace la majoration de l’erreur avec l’erreur.
On observe qu’avec des points d’interpolation équirépartis,
l’erreur est plus grande aux bords de l’intervalle qu’au milieu.
Pour rendre la majoration de l’erreur uniforme, il faudrait utiliser
plus de points vers les bords de l’intervalle, c’est ce qu’on fait
sur en utilisant les racines du polynôme de Tchebycheff
de 1ère espèce défini par
Ce polynôme de degré est uniformément bornée par 1 sur .
Et si un polynôme a le même degré et coefficient dominant que
alors sa norme est au moins 1, car si elle était strictement plus petite que 1,
la différence serait du signe de lorsque
et changerait donc de signe fois sur l’intervalle ce qui
est impossible pour un polynôme de degré au plus .
Calcul efficace du polynôme de Lagrange.
Avec la méthode de calcul précédent, on remarque que le
polynôme de Lagrange peut s’écrire à la Horner sous la forme :
ce qui permet de le calculer rapidement une fois les
connus.
On observe que
On va voir que les peuvent aussi se mettre sous forme
d’une différence.
On définit les différences divisées d’ordre par récurrence
On va montrer que .
C’est vrai au rang 0, il suffit donc de le montrer au rang en
l’admettant au rang . Pour cela on observe qu’on peut construire
le polynôme d’interpolation en à partir des polynômes
d’interpolation en et en
par la formule :
en effet on vérifie que pour car
,
et pour et , on a aussi et
.
Or est le coefficient dominant de donc
c’est la différence du coefficient dominant de et de
divisée par , c’est-à-dire la définition de
en fonction de et .
Exemple : on reprend . On a donc .
On peut naturellement utiliser l’ordre que l’on souhaite pour les , en observant que le coefficient dominant de ne dépend pas de cet ordre, on en déduit que est indépendant de l’ordre des , on peut donc à partir du tableau ci-dessus écrire par exemple avec l’ordre 2,1,0, sous la forme
6 Intégration numérique
Les fractions rationnelles admettent une primitive que l’on calcule en décomposant la fraction avec Bézout comme expliqué précédemment. Mais elles font figure d’exceptions, la plupart des fonctions n’admettent pas de primitives qui s’expriment à l’aide des fonctions usuelles. Pour calculer une intégrale,on revient donc à la définition d’aire sous la courbe, aire que l’on approche, en utilisant par exemple un polynome de Lagrange.
Le principe est donc le suivant : on découpe l’intervalle d’intégration en subdivisions , où est le pas de la subdivision, et sur chaque subdivision, on approche l’aire sous la courbe.
6.1 Les rectangles et les trapèzes
Sur une subdivision , on approche la fonction par un segment. Pour les rectangles, il s’agit d’une horizontale : on peut prendre , (rectangle à droite et gauche) ou (point milieu), pour les trapèzes on utilise le segment reliant à .
Exemple : calcul de la valeur approchée de (on en connait la valeur exacte ) par ces méthodes en subdivisant en 10 subdivisions (pas ), donc et pour variant de 0 à 9. Pour les rectangles à gauche, on obtient sur une subdivision que l’on multiplie par la longueur de la subdivision soit : Pour les rectangles à droite, on obtient Pour le point milieu Enfin pour les trapèzes, l’aire du trapèze délimité par l’axe des , les verticales , et les points sur ces verticales d’ordonnées respectives et vaut donc Dans la somme des trapèzes, on voit que chaque terme apparait deux fois sauf le premier et le dernier.
Plus générallement, les formules sont donc les suivantes : où est le pas de la subdivision, le nombre de subdivisions.
On observe sur l’exemple que le point milieu et les trapèzes donnent une bien meilleure précision que les rectangles. Plus généralement, la précision de l’approximation n’est pas la même selon le choix de méthode. Ainsi pour les rectangles à gauche (le résultat est le même à droite), si est continument dérivable, de dérivée majorée par une constante sur , en faisant un développement de Taylor de en , on obtient Ainsi dans l’exemple, on a , l’erreur est donc majorée par sur une subdivision, donc par sur les 10 subdivisions.
Pour le point milieu, on fait le développement en à l’ordre 2, en supposant que est deux fois continument dérivable : Dans l’exemple, on a , donc l’erreur sur une subdivision est majorée par , donc sur 10 subdivisions par .
Pour les trapèzes, la fonction dont le graphe est le segment reliant à est , c’est en fait un polynome de Lagrange, si est deux fois continument dérivable, on peut donc majorer la différence entre et en utilisant (10), on intègre la valeur absolue ce qui donne où est un majorant de sur .
Lorsqu’on calcule l’intégrale sur par une de ces méthodes, on fait la somme sur subdivisions de longueur , on obtient donc une majoration de l’erreur commise sur l’intégrale :
- pour les rectangles à droite ou gauche
- pour le point milieu
- pour les trapèzes .
Lorsque tend vers 0, l’erreur tend vers 0, mais pas à la même vitesse, plus rapidement pour les trapèzes et le point milieu que pour les rectangles. Plus on approche précisément la fonction sur une subdivision, plus la puissance de va être grande, plus la convergence sera rapide lorsque sera petit, avec toutefois une contrainte fixée par la valeur de , borne sur la dérivée -ième de (plus est grand, plus est grand en général). Nous allons voir dans la suite comment se comporte cette puissance de en fonction de la facon dont on approche .
6.2 Ordre d’une méthode
On appelle méthode d’intégration l’écriture d’une approximation de l’intégrale sur une subdivision sous la forme où les sont dans l’intervalle , par exemple équirépartis sur . On utilise aussi la définition : On prend toujours (ou ) pour que la méthode donne le résultat exact si la fonction est constante.
On dit qu’une méthode d’intégration est d’ordre si il y a égalité ci-dessus pour tous les polynômes de degré inférieur ou égal à et non égalité pour un polynôme de degré . Par exemple, les rectangles à droite et gauche sont d’ordre 0, le point milieu et les trapèzes sont d’ordre 1. Plus générallement, si on approche par son polynôme d’interpolation de Lagrange en points (donc par un polynôme de degré inférieur ou égal à ), on obtient une méthode d’intégration d’ordre au moins .
Si une méthode est d’ordre avec des et si est fois continument dérivable, alors sur une subdivision, on a :
En effet, on fait le développement de Taylor de par exemple en à l’ordre Donc De plus, Donc comme la méthode est exacte pour , on en déduit que Si les , alors et on obtient finalement (12)
On remarque qu’on peut améliorer la valeur de la constante en faisant tous les développement de Taylor en au lieu de , Après sommation sur les subdivisions, on obtient que :
On observe que cette majoration a la bonne puissance de sur les exemples déja traités, mais pas forcément le meilleur coefficient possible, parce que nous avons traité le cas général d’une méthode d’ordre .
6.3 Simpson
Il s’agit de la méthode obtenue en approchant la fonction sur la subdivision par son polynome de Lagrange aux points . On calcule l’intégrale 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 et sur : Si on intègre sur en 1 subdivision par cette méthode, on obtient c’est-à-dire le résultat exact, ceci est aussi vérifié pour polynome de degré inférieur ou égal à 2 puisque l’approximation de Lagrange de est alors égale à . On en déduit que la méthode de Simpson est d’ordre 3 (pas plus car la méthode de Simpson appliquée à l’intégrale de sur n’est pas exacte). On peut même améliorer (cf. par exemple Demailly) la constante générale de la section précédente pour la majoration de l’erreur en : Cette méthode nécessite évaluations de (le calcul de est un point étant presque toujours l’opération la plus couteuse en temps d’une méthode de quadrature), au lieu de pour les rectangles et le point milieu et pour les trapèzes. Mais on a une majoration en au lieu de donc le “rapport qualité-prix” de la méthode de Simpson est meilleur, on l’utilise donc plutot que les méthodes précédentes sauf si n’a pas la régularité suffisante (ou si est trop grand).
6.4 Newton-Cotes
On peut généraliser l’idée précédente, découper la subdivision en parts égales et utiliser le polynôme d’interpolation en ces points . Ce sont les méthodes de Newton-Cotes, qui sont d’ordre au moins. Comme le polynôme d’interpolation dépend linéairement des ordonnées, cette méthode est bien de la forme : De plus les sont universels (ils ne dépendent pas de la subdivision), parce qu’on peut faire le changement de variables dans l’intégrale et le polynôme d’interpolation et donc se ramener à .
Exemple : on prend le polynôme d’interpolation en 5 points équidistribués sur une subdivision (méthode de Boole). Pour calculer les , on se ramène à , puis on tape
int(lagrange(seq(j/4,j,0,4),[f0,f1,f2,f3,f4]),x=0..1)
et on lit les coefficients de f0
à f4
qui sont les à : 7/90, 32/90, 12/90, 32/90, 7/90.
La méthode est d’ordre au moins 4 par construction, mais on vérifie
qu’elle est en fait d’ordre 5 (exercice), la majoration de l’erreur
d’une méthode d’ordre 5 est
elle peut être améliorée pour cette méthode précise en
En pratique, on ne les utilise pas très souvent, car d’une part pour , les ne sont pas tous positifs, et d’autre part, parce que la constante devient trop grande. On préfère utiliser la méthode de Simpson en utilisant un pas plus petit.
Il existe aussi d’autres méthodes, par exemple les quadratures de Gauss (on choisit d’interpoler en utilisant des points non équirépartis tels que l’ordre de la méthode soit le plus grand possible) ou la méthode de Romberg qui est une méthode d’accélération de convergence basée sur la méthode des trapèzes (on prend la méthode des trapèzes en 1 subdivision de , puis 2, puis , ..., et on élimine les puissances de du reste en utilisant un théorème d’Euler-Mac Laurin qui montre que le développement asymptotique de l’erreur en fonction de ne contient que des puissances paires de ). De plus, on peut être amené à faire varier le pas en fonction de la plus ou moins grande régularité de la fonction.
6.5 En résumé
Intégration sur , pas d’une subdivision, majorant
de la dérivée -ième de la fonction sur
formule | Lagrange degré | ordre | erreur | |
rectangles | (11) | 0 | 0 | |
point milieu | (11) | 0 | 1 | |
trapèzes | (11) | 1 | 1 | |
Simpson | (13) | 2 | 3 |
7 Algèbre linéaire
7.1 Le pivot de Gauss
Cet algorithme permet de créer des zéros en effectuant des manipulations réversibles sur les lignes d’une matrice. Ces lignes peuvent représenter les coefficients d’un système linéaire, on obtient alors un système linéaire équivalent, ou les coordonnées d’un système de vecteur, on obtient alors les coordonnées d’un système de vecteur engendrant le même sous-espace vectoriel. On peut également représenter 2 matrices et reliés par une relation , cette relation reste alors vraie au cours et donc après la réduction.
7.1.1 L’algorithme
L’algorithme est le suivant:
- on initialise et , désigne le numéro de colonne à réduire, et le numéro de ligne à partir duquel on cherche un “pivot” (au début et valent donc 1, en général les 2 augmentent de 1 à chaque itération)
- Si ou est plus grand que le nombre de colonnes ou de lignes on arrête.
- Si la colonne n’a que des coefficients nuls à partir de la ligne , on incrémente le numéro de colonne de 1 et on passe à l’étape 2. Sinon, on cherche la ligne dont le coefficient est en valeur absolue le plus grand possible (en calcul approché) ou le plus simple possible (en calcul exact), on échange cette ligne avec la ligne . Puis on effectue pour toutes les lignes sauf ou pour toutes les lignes à partir de (selon qu’il s’agit d’une réduction de Gauss complète ou d’une réduction de Gauss sous-diagonale) la manipulation réversible On incrémente et de 1 et on passe à l’étape 2.
7.1.2 Efficacité de l’algorithme
Si la matrice possède lignes et colonnes, le nombre maximal d’opérations pour réduire une ligne est divisions, multiplications, soustractions, donc opérations arithmétiques de base. Il y a lignes à réduire à chaque étape et min étapes à effectuer, on en déduit que le nombre maximal d’opérations pour réduire une matrice est min. Pour une matrice carrée de taille , cela fait opérations.
7.1.3 Erreurs d’arrondis du pivot de Gauss
Comme , une étape de réduction multiplie au plus l’erreur absolue des coefficients par 2. Donc la réduction complète d’une matrice peut multiplier au pire l’erreur absolue sur les coefficients par (où est le nombre d’étapes de réduction, inférieur au plus petit du nombre de lignes et de colonnes). Ceci signifie qu’avec la précision d’un double, on peut au pire perdre toute précision pour des matrices pas si grandes que ça (). Heureusement, il semble qu’en pratique, l’erreur absolue ne soit que très rarement multipliée par un facteur supérieur à 10.
Par contre, si on ne prend pas la précaution de choisir le pivot de norme maximale dans la colonne, les erreurs d’arrondis se comportent de manière bien moins bonnes, cf. l’exemple suivant.
Exemple
Soit à résoudre le système linéaire
avec (pour une machine utilisant des doubles pour
les calculs en flottant,
plus générallement on choisira tel que
soit indistinguable de 0.0).
Si on résoud le système exactement,
on obtient (environ 1)
et (environ 1).
Supposons que l’on n’utilise pas la stratégie du pivot partiel,
on prend alors comme pivot , donc on effectue la
manipulation de ligne ce qui
donne comme 2ème équation .
Comme les calculs sont numériques, et à cause des erreurs
d’arrondis, cette 2ème équation sera remplacée par
d’où , qui sera remplacé
dans la 1ère équation, donnant donc
.
Inversement, si on utilise la stratégie du pivot partiel, alors
on doit échanger les 2 équations et puis on effectue
, ce qui donne
, remplacée en raison
des erreurs d’arrondi par donc , puis on remplace
dans ce qui donne .
On observe dans les deux cas que la valeur de est proche de la
valeur exacte, mais la valeur de dans le premier cas est
grossièrement eloignée de la valeur correcte.
On peut aussi s’intéresser à la sensibilité de la solution d’un système linéaire à des variations de son second membre. Le traitement du sujet à ce niveau est un peu difficile, cela fait intervenir le nombre de conditionnement de la matrice du système (qui est essentiellement la valeur absolue du rapport de la valeur propre la plus grande sur la valeur propre la plus petite), plus ce nombre est grand, plus la solution variera (donc plus on perd en précision).
7.2 Applications de Gauss
7.2.1 Base d’un sous-espace
On réduit la matrice des vecteurs écrits en ligne, puis on prend les lignes non nulles, dont les vecteurs forment une base du sous-espace vectoriel engendré par les vecteurs du départ.
Exemple : base du sous-espac engendré par . On réduit la matrice, la 3ème ligne est nulle donc on ne garde que les 2 premières lignes (remarque: une réduction sous-diagonale aurait suffi).
7.2.2 Déterminant
On réduit la matrice (carrée) en notant le nombre d’inversions de ligne, et on fait le produit des coefficients diagonaux, on change le signe si le nombre d’inversions de lignes est impair.
7.2.3 Réduction sous forme échelonnée (rref)
On réduit la matrice puis on divise chaque ligne par son premier coefficient non nul. Si la matrice représentait un système linéaire inversible on obtient la matrice identité sur les colonnes sauf la dernière et la solution en lisant la dernière colonne. La relation conservée est en effet où est la solution de l’équation, et à la fin de la réduction .
Par exemple pour résoudre le système
on réduit sous forme échelonnée la matrice
[[1,2,3,5],[4,5,6,0],[7,8,0,1]]
, ce qui donne
[[1,0,0,-9],[0,1,0,8],[0,0,1,-2/3]]
, d’où la solution
.
7.2.4 Inverse
On accolle la matrice identité à droite de la matrice à inverser. On effectue la réduction sous forme échelonnée, on doit obtenir à droite l’identité si la matrice est inversible, on a alors à gauche la matrice inverse. La relation conservée est en effet où est l’inverse de la matrice de départ, et en fin de réduction .
Par exemple, pour calculer l’inverse
de [[1,2,3],[4,5,6],[7,8,0]]
, on réduit avec rref
[[1,2,3,1,0,0],[4,5,6,0,1,0],[7,8,0,0,0,1]]
.
7.2.5 Noyau
On réduit la matrice sous forme échelonnée. Puis on introduit des lignes de 0 afin que les 1 en tête de ligne se trouvent sur la diagonale de la matrice. On enlève ou on rajoute des lignes de 0 à la fin pour obtenir une matrice carrée. Une base du noyau est alors formée en prenant chaque colonne correspondant à un 0 sur la diagonale, en remplaçant ce 0 par -1. On vérifie qu’on obtient bien 0 en faisant le produit de ce vecteur par la matrice réduite. De plus les vecteurs créés sont clairement linéairement indépendants (puisqu’ils sont échelonnés), et il y en a le bon nombre (théorème noyau-image).
Exemple : calcul du noyau de [[1,2,3,4],[1,2,7,12]]
, on
réduit la matrice avec rref, ce qui donne
[[1,2,0,-2],[0,0,1,2]]
, on ajoute une ligne de 0 entre
ces 2 lignes pour mettre le 1 de la 2ème ligne sur la diagonale
ce qui donne [[1,2,0,-2],[0,0,0,0],[0,0,1,2]]
, puis
on ajoute une ligne de 0 à la fin pour rendre la matrice carrée.
On obtient ainsi le système équivalent de matrice
[[1,2,0,-2],[0,0,0,0],[0,0,1,2],[0,0,0,0]]
.
La 2ème colonne donne le premier vecteur de la base du noyau,
, la 4ème colonne donne le deuxième vecteur
, on vérifie aisément que ces 2 vecteurs
forment une famille libre du noyau, donc une base car
la dimension du noyau est égale à 2 (dimension de l’espace de départ
moins le rang de la matrice, c’est-à-dire le nombre de lignes
non nulles de la matrice réduite).
7.2.6 La méthode de factorisation
Nous ne la développons pas à ce niveau, elle permet d’écrire une matrice comme produit de deux matrices triangulaire inférieures et supérieures, ce qui permet de ramener la résolution de système à la résolution de deux systèmes triangulaires.
7.3 Réduction exacte des endomorphismes
On calcule le polynome caractéristique ou le polynome minimal, on le factorise, et on calcule ensuite le noyau de pour les racines. Il existe des méthodes évitant le calcul de noyau, méthode de Fadeev-Laguerre-Souriau que nous ne présentons pas ici.
7.3.1 Polynome caractéristique
On peut le calculer en développant le déterminant det, mais il est plus efficace de le calculer par interpolation. Soit une matrice carrée de taille , on sait que son polynome caractéristique est un polynome de degré , il suffit de connaitre sa valeur en points distincts, on calcule donc déterminants det en remplaçant par sa valeur (il y a plus de déterminants à calculer mais ce sont des déterminants sans paramètre donc beaucoup plus simple à calculer), ce qui permet de reconstruire le polynome caractéristique par interpolation de Lagrange.
Exercice : pour [[1,-1],[2,4]]
, calculer
det) en puis le polynome d’interpolation,
vérifier que c’est bien le polynome caractéristique.
Il faut effectuer calculs de déterminants, ce qui nécessite opérations. Il existe des méthodes plus efficaces, par exemple le calcul du polynome minimal probabiliste présenté plus bas ( opérations).
7.3.2 Polynome minimal
Preuve:
D’abord divise tous les polynomes
tels que , car si désigne le reste de la division
de par alors , donc
est nul car son degré est plus petit que celui de .
En particulier le polynome minimal divise le polynome caractéristique , car (on peut montrer que en faisant le produit de la matrice par sa comatrice, on obtient le déterminant fois l’identité, soit . Comme peut se factoriser par en appliquant (14) à chaque monome de , on en déduit que se factorise par , donc en regardant les termes de plus haut degré de ces polynomes en à coefficients matriciels).
Montrons enfin que les racines du polynome caractéristique sont racines du polynome minimal. En effet soit une racine du polynome caractéristique alors n’est pas inversible. Or se factorise par car donc ne peut pas être inversible. Comme on en déduit que n’est pas inversible donc , est une racine de . Donc si le polynome caractéristique n’a pas de racines multiples, il est égal au polynome minimal.
Pour calculer , on peut chercher une relation de degré minimal entre les puissances de , en les voyant comme des vecteurs à composantes (ce qui revient à aplatir en un long vecteur tous les coefficients de la matrice). Cela revient à calculer le noyau de l’application linéaire dont les colonnes sont les coefficients des puissances de (de 0 à ), en gardant le premier vecteur obtenu par l’algorithme calcul du noyau ci-dessus.
Cette méthode est toutefois couteuse, car il faut réduire une matrice ayant lignes et colonnes. Il existe une autre méthode moins couteuse et qui marche presque toujours. Elle consiste à calculer le polynome minimal de par rapport à un vecteur c’est-à-dire le polynome de degré minimal (et coefficient dominant 1) tel que . Comme , on a , donc divise qui divise le polynome caractéristique. Si par chance, on trouve que est de degré , alors sera égal à et au polynome caractéristique. On fait donc le calcul du noyau de l’application linéaire dont les colonnes sont les pour variant de 0 à . Si l’on trouve un espace de dimension 1, alors est de degré et on a simultanément le polynome minimal et caractéristique avec le polynome correspondant à ce vecteur du noyau. Si le degré n’est pas , on peut essayer un ou quelques autres vecteurs, et faire le PPCM des polynomes minimaux obtenus. Si on obtient un polynome de degré on conclut, sinon on peut tester si ce polynome évalué en est nul, ce sera alors le polynome minimal.
Exemple, on reprend la matrice [[1,-1],[2,4]]
,
et comme vecteur aléatoire , on a
et . On calcule donc le noyau de la matrice
[[1,1,-1],[0,-1,-5]]
(on écrit en colonnes ),
on trouve que engendre le noyau, donc le polynome
minimal relatif au vecteur est (au signe près) .
Comme il est de degré maximal 2, c’est le polynome minimal
et caractéristique.
7.4 Réduction approchée des endomorphismes
On pourrait trouver des valeurs propres approchées d’une matrice en calculant le polynome caractéristique ou minimal puis en le factorisant numériquement. Mais cette méthode n’est pas idéale relativement aux erreurs d’arrondis (calcul du polynome caractéristiaue, de ses racines, et nouvelle approximation en calculant le noyau de ), lorsqu’on veut calculer quelques valeurs propres on préfère utiliser des méthodes itératives directement sur ce qui évite la propagation des erreurs d’arrondi.
7.4.1 Méthode de la puissance
Elle permet de déterminer la plus grande valeur propre en valeur absolue d’une matrice diagonalisable lorsque celle-ci est unique. Supposons en effet que les valeurs propres de soient avec et soient une base de vecteurs propres correspondants. On choisit un vecteur aléatoire et on calcule la suite . Si a pour coordonnées dans la base propre, alors L’hypothèse que est l’unique valeur propre de module maximal entraine alors que puisque la suite géométrique de raison converge vers 0. Autrement dit, si (ce qui a une probabilité 1 d’être vrai pour un vecteur aléatoire), est équivalent à . Lorsque est grand, est presque colinéaire au vecteur propre (que l’on peut prendre comme divisé par sa norme), ce que l’on détecte en testant si et sont presques colinéaires, et de plus le facteur de colinéarité entre et est presque , la valeur propre de module maximal.
Exercice : tester la convergence de vers l’espace propre
associé à pour la matrice [[1,-1],[2,4]]
et le vecteur .
Lorsqu’on applique cette méthode a une matrice réelle, il peut arriver qu’il y ait deux valeurs propres conjuguées de module maximal. Le même type de raisonnement montre que pour grand, est presque colinéaire à l’espace engendré par et , la relation permet de calculer les valeurs propres.
La convergence est de type série géométrique, on gagne le même nombre de décimales à chaque itération.
7.4.2 Itérations inverses
La méthode précédente permet de calculer la valeur propre de module maximal d’une matrice. Pour trouver une valeur propre proche d’une quantité donnée , on peut appliquer la méthode précédente à la matrice . En effet, les valeurs propres de cette matrice sont les dont la norme est maximale lorsqu’on se rapproche de .
7.4.3 Elimination des valeurs propres trouvées
Si la matrice est symétrique, et si est un vecteur propre normé écrit en colonne, on peut considérer la matrice qui possède les mêmes valeurs propres et mêmes vecteurs propres que avec même multiplicité, sauf qui est remplacé par 0. En effet les espaces propres de sont orthogonaux entre eux, donc On peut donc calculer la 2ème valeur propre (en valeur absolue), l’éliminer et ainsi de suite.
Si la matrice n’est pas symétrique, on peut utiliser une technique analogue lorsque 0 n’est pas valeur propre de (on peut s’y ramener en ajoutant à un multiple de l’identité). En effet on peut construire un vecteur propre de pour une valeur propre à partir d’un vecteur propre de , en cherchant tel que tel que On obtient pour le membre de gauche : et pour le membre de droite d’où l’équation Néanmoins cette méthode n’est pas stable, en particulier si la valeur propre est proche de 0, car les vecteurs propres se rapprochent alors tous de .
8 Guide rapide KhiCAS sur calculatrices
8.1 Installation
8.1.1 Installation Casio Graph 90
(Ceci s’applique dans une certaine mesure aux Casio Graph 35eii).
Rendez-vous ici
pour
installer.
Documentation
Casio
Si Xcas crashe sur la Casio, essayez d’abord
de taper sur la touche MENU puis lancez une autre
application puis à nouveau MENU puis relancez Xcas. Si cela
ne fonctionne pas ou si Xcas est bloqué, redémarrer la calculatrice
(éventuellement en appuyant avec une pointe sur le bouton RESET au dos).
Si Xcas bloque au lancement, allez dans le MENU principal, sélectionnez
l’application Memoire, puis mémoire de stockage, sélectionnez
le fichier session.xw
et effacez-le.
8.1.2 Installation TI Nspire CX/CX II
Vous pouvez installer KhiCAS sur TI Nspire CX/CX II à condition de ne pas avoir installé la toute dernière mise à jour de l’OS de TI. Rendez-vous ici pour installer. Documentation Nspire.
8.1.3 Installation Numworks N0110 non verrouillée.
Pour les Numworks, il faut un modèle N0110 (juillet 2019 ou plus tard) et ne surtout pas avoir fait de mise à jour vers Epsilon 16 ou supérieur. Rendez-vous sur cette page avec un navigateur compatible web-USB. Documentation Numworks.
8.2 Le shell KhiCAS
Si KhiCAS n’est pas lancé :
- Sur Casio, depuis le menu (touche MENU), sélectionner Xcas puis EXE.
- Sur TI Nspire, touche maison, puis Parcourir, puis depuis le répertoire ndless, sélectionner khicas.tns et valider. Si une erreur de format non pris en charge apparait, (re-)lancez l’installation de ndless.
- Sur Numworks, touche Maison puis OK.
Pour éteindre la calculatrice, il faut quitter KhiCAS sur les TI Nspire (taper doc deux fois avant ctrl on) et les Casio (taper MENU avant shift AC/ON).
Attention, sur les TI Nspire et Numworks, le shell de KhiCAS peut être configuré pour utiliser un interpréteur MicroPython, le bandeau du bas apparait alors en jaune, et sur les TI Nspire un interpréteur Javascript, le bandeau du bas apparait alors en orange. Pour changer d’interpréteur, sur les Nspire utiliser la touche calculatrice (entre esc et tab) puis 2. Sur les Numworks shift ) 8.
Vous êtes maintenant dans le shell de KhiCAS, vous pouvez y taper des commandes Xcas en vous aidant des menus qui apparaissent dans le bandeau et de raccourcis claviers (F1 à F6 ou shift F1 à F6 sur Casio, shift puis une touche 1 à 0, et les parenthèses sur Nspire et Numworks). Les mots clefs apparaissent en couleur et il y a une aide à la saisie des parenthèses et crochets. La touche curseur vers le bas permet de compléter une commande dont on a saisi le début ou/et d’afficher de l’aide et exemples sur cette commande.
Pour bloquer le clavier en mode alphabétique : sur les Casio, taper sur la touche F5, sur les Numworks taper 2 fois la touche alpha. Pour quitter le mode alphabétique, taper sur la touche alpha.
Exemples :
-
pour définir une fonction, sur Casio faire shift F6 (ou
shift PRGM), sur TI/Numworks faire shift ),
puis sélectionner
f(x):=
et entrer l’expression de la fonction. Changez si nécessaire le nom de fonction. - pour définir une expression (attention à la différence avec une fonction), taper l’expression puis sur Casio la touche flèche vers la droite (au-dessus de AC/ON) puis F5 puis le nom de variable, sur TI ctrl sto, sur Numworks shift sto.
- Pour dériver une fonction ou une expression par rapport à
, on peut utiliser
'
(menu F2 ou shift-2). Sinon utiliserdiff
(même menu), par exemplediff(f,x,4)
pour avoir la dérivée 4-ième d’une expression. - Par exemple pour obtenir les 4 premiers termes de
la méthode de Newton pour résoudre avec ,
entrer la fonction (cf. 1 ci-dessus), puis (cf 3 ci-dessus),
puis taper
U:=2.3
, puis taperU:=U-f(U)/g(U)
, puis recopier dans l’historique cette commande et exécutez la 3 fois. - Pour tracer le graphe d’une fonction, saisir la commande
plot(
depuis shift-F4 (casio) ou shift-3 (TI/Numworks). Tapez l’expression à tracer. Ou flèche vers le bas pour voir de l’aide et des exemples. - Les commandes les plus utiles sont accessibles par les menus rapides via les raccourcis claviers. Pour voir plus de commandes : F4 sur Casio, menu sur Nspire, touche Toolbox sur Numworks.
- Pour entrer ou éditer une matrice, taper shift Matr sur Casio ou shift 7 sur TI/Numworks puis 1 matrice, donner le nom de la matrice, puis nombre de lignes/colonnes pour une nouvelle matrice, puis entrer les coefficients un par un puis EXE ou OK ou enter.
8.3 Programmation
Pour saisir un programme, depuis le shell KhiCAS, taper sur EXIT (Casio) ou esc (Nspire) ou
Back (Numworks). Vous pouvez choisir entre syntaxe Xcas ou Python
(shift SETUP sur les Casio). Le parser détecte aussi automatiquement
la syntaxe, par exemple si vous commencez à taper def
en
début de programme. Les menus rapides F1 à F3 sur Casio et shift 1 à
shift 3 sur TI/Numworks contiennent les structures de programmation
les plus utiles.
Pour tester la syntaxe d’un programme, taper sur la touche de validation (EXE, enter ou OK). Utiliser shift-EXE pour passer à la ligne sur Casio, ret sur TI Nspire, ou EXE sur Numworks. S’il n’y a pas d’erreurs, pensez à sauvegarder votre programme avant de l’exécuter pour ne pas risquer de tout perdre en cas de crash.
Puis vous pouvez taper EXIT, esc ou Back pour
revenir au shell, d’où vous pouvez exécuter le programme.
On peut interrompre l’exécution d’un programme en appuyant sur
la touche AC/ON ou ON ou Back selon la calculatrice.
Si un programme ne fonctionne pas comme prévu, la commande
debug()
permet de l’exécuter en pas à pas en affichant
les variables locales et permet de le mettre au point.
8.4 Compatibilité avec Xcas
Casio Graph 90 et 35: Vous pouvez sauvegarder depuis Xcas une session de travail par le menu Fich puis Exporter comme, puis Khicas Casio. On peut ensuite transférer le fichier vers la calculatrice, en la branchant au PC avec un cable prévu pour calculatrices Casio graph ou TI83, (la calculatrice apparait alors comme un périphérique de stockage USB). Puis dans KhiCAS sur la calculatrice, ouvrir la session. Dans l’autre sens, transférer la session depuis la calculatrice et ouvrez-là sur le PC. Lors de la sauvegarde sur calculatrice, pour des sessions pas trop longues, un QR code est affiché, permettant de continuer les calculs sur la version web de Xcas.
TI Nspire: Vous pouvez sauvegarder depuis Xcas une session de travail par le menu Fich puis Exporter comme, puis session Khicas TI. On peut ensuite transférer le fichier vers la calculatrice avec le logiciel de connectivité TI ou avec le logiciel libre n-link. Dans l’autre sens, transférer la session depuis la calculatrice et ouvrez-là sur le PC.
Numworks: on peut directement transférer une session depuis le menu Fich, Numworks si la calculatrice est connectée.
9 Quelques références
- Analyse numérique et équations différentielles, Demailly J.-P., Presses Universitaires de Grenoble, 1996
- The Art of Computer Programming, Vol. 2: Seminumerical algorithms, Knuth D., Addison-Wesley, 1998
- Mathématiques concrètes, illustrées par la TI-92 et la TI-89. Lemberg H, et Ferrard J.-M., Springer, 1998
- Maths et Maple, J.M. Ferrard, Dunod, 1998
- Handbook of Mathematical Functions, Abramowitz and Stegun,
disponible en ligne sur
http://www.math.sfu.ca/~cbm/aands/toc.htm
- Arithmétique flottante,
Rapport de l’INRIA de V. Lefèvre et P. Zimmermann,
téléchargeable sur
http://www.inria.fr/rrrt/rr-5105.html
- Modern Computer Arithmetic, R. P. Brent, P. Zimmermann,
téléchargeable sur
http://www.loria.fr/~zimmerma/mca/pub226.html
- Matrix computations, Golub and Loa, Hopkins University Press, 1989
- Gantmacher
Index
|
|
A La moyenne arithmético-géométrique.
A.1 Définition et convergence
Soient et deux réels positifs, on définit les 2 suites On va montrer que ces 2 suites sont adjacentes et convergent donc vers une limite commune notée et il se trouve que la convergence est très rapide, en raison de l’identité : la convergence est quadratique.
On suppose dans la suite que sans changer la généralité puisque échanger et ne change pas la valeur de et pour . On a alors (d’après (16) pour ) et car et . Donc est décroissante minorée (par ), est croissante majorée (par ), ces 2 suites sont convergentes et comme , elles convergent vers la même limite qui dépend de et et que l’on note . On remarque aussi que .
Précisons maintenant la vitesse de convergence lorsque . On va commencer par estimer le nombre d’itérations nécessaires pour que et soient du même ordre de grandeur. Pour cela, on utilise la majoration donc Donc si alors (par exemple, on peut prendre pour avoir . Le nombre minimum d’itérations est proportionnel au log du log du rapport . Ensuite on est ramené à étudier la convergence de la suite arithmético-géométrique de premiers termes et et même en tenant compte de à et donc . Alors l’équation (16) entraine puis (par récurrence) Donc comme est compris entre et , l’erreur relative sur la limite commune est inférieure à une précision donnée au bout d’un nombre d’itérations proportionnel au .
Typiquement dans la suite, on souhaitera calculer avec de l’ordre de en déterminant chiffres significatifs, il faudra alors itérations pour se ramener à avec puis itérations pour avoir la limite avec chiffres significatifs.
Le cas complexe
On suppose maintenant que avec . On va voir que
la suite arithmético-géométrique converge encore.
Étude de l’argument
On voit aisément (par récurrence)
que ; de plus car par définition de la racine carrée
et est de plus non nul car le produit de deux complexes d’arguments dans
ne peut pas être un réel négatif.
On en déduit que
se trouve dans l’intervalle de bornes
et et que
donc
Après itérations, on a
Après quelques itérations, et seront donc presque alignés.
Faisons 4 itérations.
On peut factoriser par exemple et on
est ramené à l’étude de la suite de termes initiaux d’argument
petit
(inférieur en valeur absolue à ) et . On suppose donc dans la suite que
Étude du module
On a :
Posons , on a :
Si désigne le max de et , on a alors la majoration
donc en prenant les logarithmes
On rappelle qu’on a la majoration
qui va nous donner la minoration de
en prenant les log et en minorant par
Finalement avec (17)
On en déduit
La convergence du vers 0 est donc géométrique, donc et convergent
quadratiquement.
A.2 Lien avec les intégrales elliptiques
Le calcul de la limite commune des suites et en fonction de et n’est pas trivial au premier abord. Il est relié aux intégrales elliptiques, plus précisément on peut construire une intégrale dépendant de deux paramètres et et qui est invariante par la transformation (15) On a en effet On pose alors où est une bijection croissante de vers , donc On note au passage que est définie si vérifient , on peut montrer que la relation ci-dessus s’étend (par holomorphie).
Lorsque (par exemple lorsqu’on est à la limite), le calcul de est explicite donc On peut transformer en posant Puis en posant () et enfin en posant Si on définit pour alors on peut calculer en fonction de , en posant soit d’où l’on déduit la valeur de l’intégrale elliptique en fonction de la moyenne arithmético-géométrique : Dans l’autre sens, pour et positifs et finalement
A.3 Application : calcul efficace du logarithme.
On peut utiliser la moyenne arithmético-géométrique pour calculer le logarithme efficacement, pour cela on cherche le développement asymptotique de lorsque tend vers 1. Plus précisément, on va poser avec , donc en posant , et la singularité de l’intégrale pour proche de 0 apparait lorsque est proche de 0. Si on effectue un développement de Taylor en , on trouve Il est donc naturel de comparer à l’intégrale qui se calcule en faisant par exemple le changement de variables 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 après réécriture : et on peut calculer le développement asymptotique de en 0
series(J,k=0,5,1)
qui renvoie : on peut alors préciser ce développement par
series(J+ln(k)-ln(pi),k=0,5,1)
qui renvoie (après simplifications et où la notation peut contenir des logarithmes)
donc
Examinons maintenant , il n’a plus de singularité en , et il admet une limite
lorsque , obtenue en remplacant par 0
D’où pour
Pour préciser la partie du développement de en puissances de , nous allons
majorer , puis .
Posons
Majoration de
L’intégrand de la différence est
Soit
On décompose l’intégrale en 2 parties et .
Sur on utilise (21), on majore chaque terme séparément
et on minore et par
Donc
Sur , on utilise (22)
et on minore et par
on obtient
où :
Donc
et
On peut majorer , donc
On majore enfin et par 1,
Le premier morceau se calcule par intégration par parties
Le deuxième morceau se majore en minorant
Finalement
où est donné en (19).
Majoration de
On a
et on va majorer la valeur absolue de chaque terme de la somme.
Pour , on a
Pour le second terme, on majore le facteur par ,
l’argument du logarithme est inférieur à 1 et supérieur à
donc le logarithme en valeur absolue est inférieur à
donc, pour ,
Finalement, pour
que l’on peut réécrire
La formule (24)
permet de calculer le logarithme d’un réel positif
avec (presque) bits
lorsque (ce à quoi on peut toujours se ramener
en calculant le logarithme d’une puissance -ième de ou
le logarithme de , en calculant au préalable ).
Par exemple, prenons , on trouve (en 8 itérations)
.
On a, avec une erreur inférieure à
On peut donc déduire une valeur approchée de si on connait
la valeur approchée de et réciproquement.
Si on veut calculer les deux simultanément, comme les relations entre
et seront des équations homogènes, on est obligé
d’introduire une autre relation. Par exemple pour calculer une
valeur approchée de on calcule la différence
dont on connait le développement au premier
ordre, et on applique la formule de la moyenne arithmético-géométrique.
Il faut faire attention à la perte de précision lorsqu’on fait
la différence des deux logarithmes qui sont très proches, ainsi
on va perdre une trentaine de bits, il faut grosso modo calculer les
moyennes arithmético-géométrique avec
2 fois plus de chiffres significatifs.
L’intérêt de cet algorithme apparait lorsqu’on veut calculer le logarithme avec beaucoup de précision, en raison de la convergence quadratique de la moyenne arithmético-géométrique (qui est nettement meilleure que la convergence linéaire pour les développements en série, ou logarithmiquement meilleure pour l’exponentielle), par contre elle n’est pas performante si on ne veut qu’une dizaine de chiffres significatifs. On peut alors calculer les autres fonctions transcendantes usuelles, telle l’exponentielle, à partir du logarithme, ou les fonctions trigonométriques inverses (en utilisant des complexes) et directes.
On trouvera dans Brent-Zimmermann quelques considérations permettant d’améliorer les constantes dans les temps de calcul par rapport à cette méthode (cela nécessite d’introduire des fonctions spéciales ) et d’autres formules pour calculer .