|
. Ce travail a
été subventionné par le projet
Préface |
7 |
1Motivation |
9 |
1.1Vers un système de calcul formel/analytique |
9 |
1.2Exemples |
10 |
1.2.1Intégration numérique certifiée |
10 |
1.2.2Exemple : résolution polynomiale |
10 |
1.2.3Exemple : suivi de chemin |
11 |
1.2.4Exemple : nombres de Bell |
11 |
1.3Utilité du calcul analytique pour le calcul formel |
12 |
1.3.1Résolution de systèmes polynomiaux par homotopie |
12 |
1.3.2Groupe de Galois d'une fonction algébrique |
12 |
1.3.3Groupe de Galois différentiel |
13 |
Monodromie d'un opérateur différentiel |
13 |
Groupe de Galois différentiel |
13 |
1.4Utilité du calcul formel pour le calcul analytique |
14 |
1.5Outils communs pour calculs formel et analytique |
14 |
2Analyse calculable |
15 |
2.1Nombres réels calculables |
15 |
2.1.1Définition |
15 |
2.1.2Nombres réels calculables dans |
16 |
2.2Théorèmes classiques de non calculabilité |
16 |
2.2.1Théorème de Turing |
16 |
2.2.2Théorème de Grzegorczyk |
17 |
2.2.3Théorème de Denef et Lipschitz |
17 |
2.2.4Questionnaire |
17 |
2.3Semi calculabilité et typage |
18 |
2.3.1Autres types de calculabilité |
18 |
2.3.2Typage |
19 |
2.3.3Structures effectives |
19 |
2.3.4Approximateurs |
20 |
3Arithmétique de boules |
21 |
3.1Principes |
21 |
3.1.1Encadrements par des boules |
21 |
3.1.2Opérations |
22 |
3.1.3Opérations en précision limitée |
22 |
3.1.4Arithmétique d'intervalles |
23 |
3.1.5Prédicats |
23 |
3.1.6Estimations d'erreur a priori |
24 |
3.2Limiter la surestimation |
24 |
3.2.1L'ennemi |
24 |
3.2.2Le problème pour le calcul des puissances successives |
25 |
3.2.3Choix d'une bonne représentation par boules complexes |
26 |
3.2.4Minimisation de la profondeur du calcul |
26 |
3.2.5La méthode perturbative |
27 |
3.2.6Calcul d'une forme échelon certifiée dans
|
28 |
3.3Perte de précision intrinsèque et surestimation |
29 |
3.3.1Nombre de conditionnement et perte de précision |
29 |
3.3.2Extensions optimales et surestimation |
30 |
3.3.3Surestimation de l'arithmétique standard |
31 |
3.4Qualité versus efficacité |
32 |
3.4.1Le Graal : estimations efficaces et de qualité |
32 |
3.4.2Multiplication de matrices |
33 |
3.5Hiérarchie numérique |
34 |
4Arithmétique rapide |
35 |
4.1Rappels sur la complexité |
35 |
4.2Algorithmes sur les polynômes et sur les séries |
36 |
4.2.1Multiplication de polynômes |
36 |
4.2.2Multiplication de séries tronquées |
37 |
4.2.3Méthode de Newton |
37 |
4.2.4Évaluation multi-points |
38 |
4.3Calcul détendu |
39 |
4.3.1Principe du calcul détendue |
39 |
4.3.2Multiplication détendue naïve |
39 |
4.3.3Multiplication détendue par Karatsuba |
40 |
4.3.4Multiplication détendue rapide |
40 |
4.3.5Multiplication détendue super rapide |
41 |
4.3.6Exemple : nombres de Bell exacts |
41 |
4.4Méthodes multi-modulaires |
42 |
4.4.1Principes et variantes |
42 |
4.4.2Évaluation rapide de dags |
44 |
4.4.3Évaluation rapide de polynômes en plusieurs variables |
45 |
5Développements certifiés en série |
47 |
5.1Algorithmes rapides et numériquement stables |
47 |
5.1.1Instabilité numérique de la multiplication rapide |
47 |
5.1.2Préconditionnement par mise à l'échelle |
47 |
5.1.3Calcul numériquement stable des nombres de Bell |
48 |
5.2Certification du calcul des coefficients |
48 |
5.2.1Inversion |
48 |
5.2.2Exponentiation et résolution d'équations différentielles |
49 |
5.2.3Calcul certifié des nombres de Bell |
49 |
5.3Modèles de Taylor |
50 |
5.3.1Définition |
50 |
5.3.2Opérations |
50 |
5.3.3Généralisations |
51 |
5.4Réduction de la surestimation |
51 |
5.4.1L'idée sur un exemple |
51 |
5.4.2Application à la recherche de solutions réelles d'un système polynomial |
52 |
5.5Intégration de systèmes dynamiques |
52 |
5.5.1Algorithme de base |
53 |
5.5.2Effet d'enveloppement |
53 |
5.5.3Variante pour les modèles de Taylor |
54 |
5.5.4Qualité des estimations |
55 |
5.5.5Exemple dans |
56 |
6Calcul des racines d'un polynôme en une variable |
59 |
6.1Exemples pour différents types de polynômes |
60 |
6.1.1Polynômes tirés au hasard |
60 |
6.1.2Polynômes avec zéros de grandes multiplicités |
61 |
6.1.3Expérience à propos du conditionnement |
62 |
6.1.4Séries formelles tronquées |
63 |
6.2Quelques méthodes numériques classiques |
64 |
6.2.1Itération d'Aberth |
64 |
6.2.2Méthode par homotopie |
64 |
6.2.3Transformation de Graeffe |
64 |
6.3Polygone numérique de Newton |
65 |
6.3.1Exemple d'un polygone numérique de Newton |
65 |
6.3.2Évaluation du polynôme et polygone numérique de Newton |
66 |
6.4Stabilité numérique et efficacité : un mariage difficile |
67 |
6.5Évaluation multi-point rapide |
68 |
6.6Certification des racines |
68 |
6.6.1Racines simples |
68 |
6.6.2Racines multiples |
69 |
7Méthodes par homotopie |
71 |
7.1Introduction |
71 |
7.1.1Historique |
71 |
7.1.2Première difficulté : solutions partant vers l'infini |
72 |
7.1.3Deuxième difficulté : solutions multiples |
72 |
7.2Algorithmes de suivi de chemin |
73 |
7.2.1Cas purement numérique |
73 |
7.2.2Certification naïve par Krawczyk-Rump uniforme |
74 |
7.2.3Certification plus précise par modèles de Taylor |
74 |
7.3Racines multiples et suivi de troupeaux de solutions |
75 |
7.3.1La méthode sur un exemple |
75 |
7.3.2Le cas général |
76 |
7.4Comparaisons avec d'autres méthodes |
76 |
7.4.1Un exemple dans |
76 |
7.4.2Discussion et perspectives |
78 |
Références |
81 |
Ce cours est une adaptation des « slides » que j'avais présentés à mon cours sur le calcul analytique aux Journées Nationales de Calcul Formel, en novembre 2011 à Luminy. J'ai rajouté un peu de matériel supplémentaire et quelques explications plus détaillées par rapport à la présentation originale, sans toutefois avoir cherché la perfection d'un cours sur papier habituel.
Pourquoi un cours sur le calcul analytique ? Traditionnellement, on choisit le calcul formel pour la beauté du calcul symbolique ! Or, les techniques du calcul formel admettent de nombreuses applications en analyse, et le calcul numérique peut parfois permettre une résolution plus efficace ou directe de problèmes en calcul formel. Toutefois, quand j'ai commencé à m'intéresser à des problèmes plus analytiques, il me manquait la culture nécessaire en analyse calculable et en arithmétique d'intervalles. Ce cours cherche à exposer les techniques les plus utiles de ces domaines, tout en gardant le lien avec le calcul formel en filigrane.
Le document inclut un certain nombre de sessions du système
Remerciement. Merci à Jérémy Berthomieu pour ses commentaires sur le premier jet du manuscrit.
Le projet
L'approche du calcul formel est particulièrement bien
adaptée pour des objets de nature algébrique ou
combinatoire — algèbre linéaire, élimination
polynomiale, énumération combinatoire, théorie de
Galois, etc. En revanche, les systèmes numériques
classiques sont beaucoup plus efficaces pour des problèmes plus
analytiques, comme l'intégration d'équations
différentielles. Malheureusement, les systèmes
numériques actuels opèrent principalement en
précision fixe et incorporent peu d'outils pour certifier les
résultats. La session suivante en
maple> 1.000000000000000000000001 - 1;0.
Il est donc tentant de transposer l'esprit de calcul exact et garanti du calcul formel à l'analyse. Or le calcul formel et le calcul numérique sont encore dans une grande mesure des mondes distincts. D'une part, il y a peu d'intersections quant aux algorithmes de base utilisés (algèbre linéaire, polynômes, séries, etc.). D'autre part, il n'existe pas d'environnement de programmation convivial qui soit adapté aux deux mondes. En effet, les interactions actuelles se limitent surtout à des interfaces de type « boîte noire ».
Le calcul analytique se situe à la confluence de plusieurs domaines. L'analyse calculable, qui sera discutée dans le chapitre 2, propose une fondation réaliste au regard des architectures existantes d'ordinateurs. Un deuxième point théorique important concerne le développement d'algorithmes numériques certifiés, poursuivant des travaux classiques sur l'arithmétique des intervalles. Dans le chapitre 3, nous exposerons une variante de cette théorie : l'arithmétique de boules.
Évidemment, dans un système de calcul analytique, il est impératif de pouvoir approcher des nombres réels aussi précisément que nécessaire, donc de travailler en précision multiple. Ceci conduit à une pénalité énorme en efficacité par rapport à l'analyse numérique classique, et il convient de réduire cette pénalité autant que possible. Dans le chapitre 4, nous rappelons quelques résultats classiques en théorie de complexité. Dans les derniers chapitres 5, 6 et 7, nous combinons les différentes techniques en les appliquant à l'intégration de systèmes dynamiques et à la résolution polynomiale.
Pendule
Pour ,
,
,
calculer
(ou
)
avec
Systèmes dynamiques plus généraux
Soit et considérons
Pour ,
et
, calculer (si possible)
avec
Fonctions spéciales
Fonctions élémentaires ,
etc.
Fonctions holonomes : ,
.
Autres : , fonctions
thêta, fonctions de Matthieu, etc.
Remarque 1.1. Il y a de nombreux autres exemples de fonctions
spéciales intéressantes en théorie de nombres.
Certaines de ces fonctions sont différentiellement
algébriques comme ci-dessus. D'autres, comme
ou
se calculent par transformées
intégrales. Voir aussi le cours de Karim Belabas pour plus de
renseignements et l'utilité du calcul analytique dans ce domaine.
Étant donné un système zéro-dimensionnel
avec , trouver les
zéros “dans
”.
Plus précisément et ici encore, il faudrait pouvoir
approcher les zéros avec autant de précision que
souhaitée.
Variante : prendre ,
où
désigne l'ensemble des
“constantes exp-log”, construits à partir de
en utilisant les opérations
et
.
Variante : chercher les racines dans .
avec zéro-dimensionnel en
pour
et
fini.
Étant donné avec
et un chemin
qui évite
, calculer le chemin
avec
pour tout
.
Problème 1 : calculer
avec une erreur relative de
.
Problème 2 : trouver automatiquement le développement asymptotique
Problème 3 : pour ,
trouver une constante explicite pour le
.
La technique incontestablement la plus importante en calcul analytique est la déformation. Une application astucieuse est la résolution de systèmes polynomiaux par homotopie. Supposons par exemple que l'on veuille résoudre un système
Ce système est suffisamment « générique
» pour que toutes ses solutions soient simples et pour qu'il y ait
exactement solutions (comme prédit par la
borne de Bézout). En particulier, le système «
ressemble » (en degré, nombre et nature des solutions) au
système beaucoup plus simple
On considère maintenant l'homotopie
qui donne le système en
et le système du départ
en
. Partant des solutions
en
, on obtient
donc les solutions de
par déformation, en
suivant les solutions quand on fait bouger
de
vers
(voir la section 1.2.3 et le chapitre 7).
La technique de suivi de chemin est aussi utile pour le calcul du groupe
de Galois d'un polynôme ,
vu comme polynôme en
sur
. On procède comme suit :
Soit l'ensemble des racines de
.
Soient les racines de
en
.
Pour tout :
Construire un chemin avec
tournant autour de
.
Remonter en un chemin avec
pour tout
.
Calculer la permutation de
avec
.
On montre que les génèrent
.
Prendre
|
|
L'algorithme pour calculer le groupe de Galois d'une fonction
algébrique s'adapte au cas des opérateurs
différentiels .
Considérons par exemple
Base de solutions pour en
:
Prolongement analytique de la solution autour de
:
La matrice de monodromie joue un rôle
analogue à la permutation
de l'exemple 1.2.
Soit un opérateur différentiel
linéaire qui n'admet que des singularités
régulières. Alors son groupe de Galois différentiel
est généré par ces matrices
de monodromie en tant que groupe de algébrique fermé ;
c'est le théorème de densité de Schlesinger [64, 65]. Dans le cas général, il
faut rajouter les matrices de Stokes et les matrices exponentielles ;
c'est le théorème de Martinet-Ramis [52].
Exemple 1.3. Dans l'exemple ci-dessus, le plus petit groupe
algébrique fermé qui contient la matrice
est constitué de toutes les matrices du type
avec
.
Toutes ces matrices de monodromie peuvent se calculer de façon
certifiée et en temps presque linéaire [18,
77, 78]. Ceci reste vrai pour les matrices
exponentielles et les matrices de Stokes [82], grace
à la théorie d'accéléro-sommation
d'Écalle [25, 26, 27, 12]. Pour une précision suffisamment grande de calcul,
ceci conduit a un algorithme pour calculer le groupe de Galois
différentiel [81]. En particulier, on obtient un
algorithme de factorisation de .
Remarque 1.4. L'algorithme de factorisation marche grosso
modo comme ceci. Soit un système
fondamental de solutions en un point non singulier
et supposons que les matrices
générant
ont été
calculées par rapport à
.
L'opérateur
se factorise si et seulement
si
admet un sous espace vectoriel stable non
trivial sous l'action de
,
c'est à dire sous l'action de l'algèbre
générée par
.
Pour une précision de calcul donnée, si un tel espace stable existe, il se calcule donc par algèbre
linéaire. Soit
une base de
. Alors l'opérateur
divise
. Les coefficients de
sont présentés comme des
séries à coefficients dans
,
mais sont en réalité dans
.
On obtient les coefficients en tant que fractions rationnelles dans
par Padé-Hermite et développements en
fractions continues. On montre que pour une précision de calcul
suffisante, on obtient ou bien un
qui divise
effectivement
dans
,
ou bien un certificat numérique qu'il n'existe pas de sous-espace
vectoriel non trivial
.
Prétraitement symbolique
meilleure efficacité
Plus généralement : asymptotique formelle
évaluation rapide de fonctions
De façon similaire, la résolution de systèmes algébriques surdéterminés peut bénéficier d'un prétraitement pour calculer une base de Gröbner ; ensuite on peut par exemple chercher les solutions numériques par méthode d'homotopie.
Calcul de schémas numériques rapides
Runge-Kutta à des ordres élevés
Bonnes bases de fonctions pour éléments finis
Bonnes bases d'ondelettes
Arithmétique rapide
Calcul rapide en multi-précision
Algorithmes denses rapides sur les polynômes, les matrices et les séries
Traitement efficace de structures creuses et en évaluation
Besoin d'un bon langage
Mathématiquement expressif
Sémantiquement propre
Interface conviviale
Compilé (au moins pour le calcul analytique)
Comme l'ensemble des nombres réels est
non dénombrable, il est impossible de construire un type de
données susceptible de pouvoir représenter n'importe quel
nombre réel. Toutefois, au moins d'un point de vue
théorique, il serait utile de pouvoir calculer directement avec
des nombres réels, quitte à se restreindre à une
sous-classe de
. Le choix le
plus naturel consiste à prendre la sous-classe des nombres que
l'on peut approcher aussi précisément que
nécessaire par des nombres rationnels :
Définition 2.1. Un nombre
réel est calculable s'il
existe un algorithme qui prend
en entrée
et qui produit une
-approximation
de
avec
. On note
l'ensemble
des nombres réels calculables.
Ici, il est important d'intégrer le fait qu'un nombre est en
réalité un programme ou encore la
promesse de pouvoir trouver une approximation aussi fine que
souhaitée. Bien sûr, la définition admet de
nombreuses variantes, en jouant sur la façon d'approcher . Par exemple :
On peut remplacer par l'ensemble des nombres
flottants
en autorisant une précision arbitraire pour les mantisses et les exposants.
algorithme qui prend
en entrée et calcule une
-approximation.
algorithme pour calculer
,
avec
suites calculables
,
avec
L'analyse calculable est le sujet qui se propose de « réécrire » l'analyse sous cet angle de la calculabilité [1, 93]. La encore, il y a des sujets voisins, comme l'analyse constructive [8].
Une autre approche [71, 72, 69,
70, 21] est de faire « comme si »
l'on pouvait représenter n'importe quel nombre réel et
effectuer des opérations habituelles en
temps constant. Évidemment, ce modèle ne correspond encore
moins à des ordinateurs concrets que les machines de Turing.
Toutefois, ce modèle simplificateur n'est pas dénué
de sens si on calcule en précision fixe et il n'est pas inutile
d'adopter ce point de vue par moments, en particulier pour la
résolution de systèmes polynomiaux (voir les chapitres 6
et 7).
Mmx] |
use "asymptotix"; |
Mmx] | type_mode? := true; |
Mmx] |
one: Approximator (Floating, Floating) == 1; |
Mmx] |
e == exp one |
:
Mmx] |
approximate (e, 1.0e-1000) |
:
Le premier théorème de non calculabilité [75] parait naturel aujourd'hui. Or c'est ce théorème qui est à l'origine des machines de Turing et des premiers résultats de non calculabilité !
Théorème 2.2. Il n'existe pas de test
de nullité pour .
Asymmétrie. Soit .
Si , alors on ne peut pas
forcément le démontrer en temps fini.
Si , alors on peut le
certifier en temps fini.
Restriction à des sous-classes.
Il existe un test de nullité pour
(nombres algébriques réels).
Il existe un test de nullité pour , modulo la conjecture de Schanuel.
Problème ouvert difficile : test de nullité pour les constantes holonomes.
Le deuxième théorème [36, 37, 38] de non calculabilité est un peu plus surprenant, du moins pour moi-même : ce n'est pas la peine de chercher à calculer des fonctions discontinues, puisque c'est impossible !
Théorème 2.3. Toute fonction
calculable est continue.
Démonstration. Considérons une machine de Turing
pour calculer
.
Soit .
Sur l'entrée ,
retourne
avec
.
Soit et
avec
, considérons le calcul
fini de
.
Soit maximal, tel que
intervient dans ce calcul.
Alors pour tout
avec
.
Le troisième théorème [22] de non
calculabilité est surprenant dans ce sens que les données
ne sont pas des nombres ou fonctions calculables, mais plutôt des
simples vecteurs et polynômes à coefficients dans . Le théorème pose
clairement des limites à ce que l'on pourra calculer dans la
théorie des systèmes dynamiques.
Théorème 2.4. Considérons un système dynamique avec conditions initiales
où et
.
D'après Cauchy, ce système admet une unique solution
. Cette solution est convergente en
.
Il n'existe pas d'algorithme pour calculer le rayon de convergence de
.
Comme exercice, le lecteur pourra essayer de déterminer lesquels des problèmes suivants sont calculables :
Racines d'un polynôme unitaire à coefficients dans
Racines réelles d'un polynôme unitaire à
coefficients dans
Racines complexes d'un système polynomial
zéro-dimensionnel sur
Vecteur propres d'une matrice à coefficients dans
Calcul d'une primitive d'une fonction calculable sur
Calcul de la dérivée d'une fonction
calculable sur
Calcul de la dérivée d'une fonction analytique
calculable sur
Calcul d'une racine de avec
Remarque 2.5. Subtilité concernant le dernier
problème : il existe une fonction qui prend en entrée une
représentation d'un
polynôme
avec
, et qui retourne une racine
de
. Le hic réside
dans le fait que cette fonction peut retourner deux racines distinctes
pour deux représentations différentes du même
polynôme
.
Les théorèmes de non calculabilité de la section 2.2 sont inutilement pessimistes. Par exemple, le
théorème de Turing ne rend pas compte du fait suivant :
étant donné un nombre ,
on peut démontrer en temps fini que
,
si tel est en effet le cas. Pour mieux cerner ce qui reste calculable,
il est utile d'introduire les ensembles de nombres réels
calculables à gauche et à droite, et qui reflètent
mieux l'asymmétrie profonde de l'analyse calculable entre
l'égalité et l'inégalité.
s'il existe
calculable avec
et
si
.
On a
On peut introduire une ribambelle de notions de calculabilité en poursuivant sur cette voie. Par exemple :
s'il existe
calculable avec
,
où chaque
est une réunion
finie de « blocks » fermés à
extrémités dans
si
Il est utile de considérer des ensembles comme ,
,
,
, etc. comme des types de données
concrets, pouvant intervenir dans des implantations. On peut
d'ailleurs construire plein d'autres types du même acabit, comme
les booléens à droite
ou les
« booléens modulo la conjecture de Schanuel »
.
Ces types de données plus fins permettent de transformer les énoncés quelque peu négatives de la section 2.2 en assertions plus positives :
calculable
calculable implique
calculable
calculable (
pour
multi-ensembles)
calculable
calculable
calculable (égalité modulo
conjecture de Schanuel)
D'un point de vue logique, les types de données peuvent
être vu comme des « structures effectives » sur un
ensemble . Chaque
élément de
admet alors une
représentation dans un ensemble
de
représentations. Chaque représentation peut s'encoder
à son tour par un entier dans
,
et donc être manipulée par des machines de Turing.
Par exemple, un nombre dans pourrait être
représenté par une suite calculable croissante :
Il est à noter que, de même que l'on peut définir
plusieurs structures de groupe sur un ensemble
à quatre éléments, on peut définir plusieurs
structures effectives sur
: on a bien sûr
, mais aussi
et
. La représentation
d'un élément de
pourrait
être une fonction qui retourne un élément de
si la conjecture de Schanuel est vraie.
En analyse, les objets que l'on manipule correspondent généralement à des résultats de processus d'approximation. Il s'agit donc de structures effectives d'une nature particulière :
: ensemble abstrait d'approximations
d'éléments dans
:
est la limite des
approximations
Le plus souvent, est constitué de parties
de
(comme des intervalles ou des boules dans le
cas où
) et la notion
de limite correspond à prendre une intersection. Par exemple :
si
Toutefois, il faut parfois tordre un peu la notion de limite :
si
L'intérêt de cette formalisation est une certaine
fonctorialité. Par exemple, si on peut approcher les
éléments de et de
, il en est de même pour les
éléments de
et les fonctions dans
de
vers
:
![]() |
![]() |
Dans la définition 2.1, nous avions choisi d'approcher les nombres réels par des rationnels. Malheureusement, de telles approximations ne sont pas des plus judicieuses si nous voulons borner de façon automatique les erreurs intervenant dans un calcul complexe.
Pour cette raison (voir aussi la section 2.3.4), il est
plus commode d'approcher un nombre réel donné non pas par d'autres nombres
avec
« petit », mais plutôt par des
boules fermées
de la forme
avec et
.
Ainsi, lorsque
est le résultat d'un
calcul par arithmétique de boules, on est sûr que
le « vrai résultat »
est dans
. On peut donc
interpréter une boule
comme un «
nombre
que l'on ne connait pas, mais pour lequel
on est sûr que
».
Remarque 3.1. Ce principe de calcul n'est pas tout à fait
nouveau d'un point de vue historique. En effet, on peut observer que les
notations et
de Landau
s'interprètent de la même manière. Par exemple, dans
, le terme
désigne « une quantité
que
l'on ne connaît pas, mais pour lequel on est sûr que
».
Remarque 3.2. Au lieu d'encadrer les nombres
par des boules, on peut aussi les encadrer par des intervalles
fermées
. Ceci conduit
à l'arithmétique d'intervalles, qui est plus classique et
pour laquelle existe une littérature abondante [54,
2, 57, 40, 9, 63] ; voir la section 3.1.4 pour une comparaison.
L'arithmétique de boules est parfois appelé «
arithmétique d'intervalles par centres et rayons » ou
« arithmétique d'intervalles circulaires ». J'ai
préféré un nom plus court, d'autant plus qu'une
boule complexe (par exemple) n'a rien à voir avec des
intervalles.
Bien sûr, on peut prendre des boules dans des espaces
métriques plus généraux que , en commençant par
. En fait, il n'est même pas impératif
que les rayons des boules vivent dans un espace métrique au sens
classique. Plus tard, on verra par exemple l'utilité de
considerer des boules dont les centres sont des matrices dans
et dont les rayons sont également des matrices
à coefficients positifs dans
.
Dans la suite, étant donnés un ensemble
de centres et un ensemble
de rayons, on notera
par
l'ensemble des boules avec des centres dans
et des rayons dans
.
Soit une fonction. Une fonction
est appelée une extension de
si
pour tous les . Ainsi, si
, alors on peut être
sûr que
,
conformément à la sémantique décrite dans la
section précédente.
On peut utiliser les formules suivantes pour les opérations élémentaires :
Il est à noter que la dernière formule est simple, mais
pas nécessairement optimale : par exemple, on trouve , alors que la boule
vérifie bien
.
Pour des calculs concrets sur machine, on ne peut prendre les centres et
les rayons dans . Dans ce
cas, on considère plutôt des centres et des rayons dans
, voire dans l'ensemble
des nombres flottants avec un mantisse de bits
et un exposant de
bits. Dans ce dernier cas, il
est à noter qu'il est impératif de rajouter la
possibilité de prendre des rayons infinis, afin de
représenter le résultat d'un overflow
(dépassement de précision).
Quand on calcule avec en précisions et
fixes, le résultat exact
d'une opération sur des nombres
dans
n'est pas nécessairement dans
et son approximation
par un
élément dans
induit donc une
erreur
dont il faut tenir compte dans
l'implantation d'une arithmétique de boules.
La norme IEEE [3, 56] pour le calcul avec des
nombres flottants spécifie que l'approximation
est obtenue en arrondissant le résultat exact
suivant un mode d'arrondi à spécifier. Nous utiliserons
les notations
pour les modes d'arrondi vers le
haut, vers le bas et au plus près. En notant
, nous notons que
est
une borne supérieure pour l'erreur quelque soit le mode d'arrondi
choisi. Les formules (3.2), (3.3) et (3.4)
peuvent donc adaptées au cas du calcul en précision
limitée, en les remplaçant par
Il est à noter que la norme IEEE est désormais suivie par
la plupart des constructeurs de micro-processeurs.
On a déjà mentionné le fait que l'arithmétique de boules est classiquement considérée comme une variante de l'arithmétique d'intervalles. Pourquoi choisir l'une ou l'autre ? Voici quelques avantages et inconvénients des deux approches.
Quand les intervalles sont grands, l'arithmétique d'intervalles est généralement plus précises. Pour certaines applications, les intervalles sont grands par nature et donc plus adaptées. Par exemple, lors de la recherche de solutions d'un système d'équations dans une boîte, il est tout à fait adapté d'utiliser une méthode de découpage par dichotomie.
Toute fonction monotone ,
disons croissante, admet une extension canonique
en arithmétique d'intervalles :
.
Ceci favorise la standardisation.
En implantant la norme IEEE, les processeurs modernes privilégient a priori l'efficacité de l'arithmétique d'intervalles. Attention toutefois : changer le mode d'arrondi peut s'avérer très coûteux en temps, auquel cas il faut adapter les algorithmes afin de pouvoir fonctionner avec n'importe quel mode d'arrondi [92, 45].
En précision multiple, les intervalles sont généralement petits, ce qui permet le stockage du centre en précision multiple et le rayon en précision simple. Ceci est deux fois plus efficace en temps et en espace par rapport à l'arithmétique d'intervalles qui oblige à stocker les deux extrémités en précision multiple. Si on cherche à approcher de plus en plus précisément des vrais nombres réels, il est donc plus naturel d'utiliser des boules.
L'arithmétique de boules donne une grande souplesse quant au choix des centres et des rayons. D'une part, ceci peut être utilisé pour améliorer la qualité des estimations (voir la section 3.2.3). D'autre part, ceci peut être utilisé pour améliorer la vectorisation et plus généralement l'efficacité des algorithmes (voir la section 3.4.2).
En mathématiques, les estimations d'erreur
s'établissent généralement via le
calcul -
classique. Ce calcul correspond naturellement à
l'arithmétique de boules, ce qui facilite la conception
d'algorithmes certifiés. Ceci s'applique tout
particulièrement à tout argument par perturbation.
Une question intéressante concerne la sémantique des
prédicats comme . Si
on interprète les boules comme un ensemble de « valeurs
possibles », alors le résultat d'un test
devrait être un intervalle
de
avec
En revanche, si on interprète et
comme des approximation d'un vrai nombre réel
à une certaine précision, il est plus naturel de prendre
En effet, si sont des nombres calculables
représentés par des suites calculables
décroissantes de boules
avec
et
, alors la
suite
à valeurs dans
représente le résultat du test d'égalité
dans
.
La deuxième définition reflète donc
l'asymmétrie profonde de l'égalité dans l'analyse
calculable.
L'arithmétique des boules est basée sur une analyse a posteriori des erreurs : on effectue une opération en arithmétique de boules en utilisant une certaine précision que l'on augmentera jusqu'au moment où le rayon du résultat est suffisamment petit. Parfois, bien que rarement, on peut préférer une estimation a priori de l'erreur [80].
Exemple : calcul d'une -approximation
de
Calculer des -approximations
et
de
et
Retourner
Avantage : précision de calcul adaptatif dans le
case
En effet, dans l'arithmétique de boules classique, on calcule
et
en utilisant la
même précision, alors que l'on peut simplement utiliser
comme approximation de
tant que
. Supposant que
est un nombre dont l'approximation est
très couteuse en temps, une estimation a priori de
l'erreur est donc plus efficace.
Problème : évaluation de
par Horner en
Calcul d'une -approximation
de
pour
tolérance trop petite
Équilibrage des tolérances : calcul d'une -approximation de
pour tout
Problème : nécessite des « dags » (directed acyclic graphs) pour tous les résultats intermédiaires
Le problème principal de l'arithmétique de boules concerne
la surestimation des erreurs. Par exemple, l'évaluation de la
fonction en
donne
Plus généralement, ce problème intervient chaque fois qu'il y a des quantités qui s'annulent lors d'un calcul, sans que la méthode de calcul s'en rend compte.
Dans certain cas, la surestimation est due à notre façon
de représenter les encadrements. Par exemple, en
arithmétique d'intervalles standard, on encadre les nombres
complexes par des rectangles de la forme .
Ces rectangles ont tendance à se tourner lors de la
multiplication par un nombre complexe non réel, comme dans
l'exemple
Ici l'inclusion du résultat dans un autre rectangle de la forme requise implique une perte automatique de précision. On appelle ceci l'effet d'enveloppement. Sur cet exemple précis, l'inconvénient disparaît lorsque l'on utilise l'arithmétique de boules, puisqu'une boule reste une boule si on la tourne. Toutefois, on verra un exemple plus complexe dans la section 5.5.2, où il faudra travailler plus pour résoudre le problème.
![]() |
Fig. 3.1. Illustration de l'effet d'enveloppement pour l'exemple (3.5). |
Illustrons la perte de précision lorsque l'on calcule pour
de façon naïve en
utilisant l'arithmétique d'intervalles. Dans la sortie, on
utilise la notation scientifique. Par exemple
désigne un nombre compris entre
et
.
Mmx] |
use "algebramix"; |
Mmx] |
puissance (z, n) == if n = 1 then z else z * puissance (z, n-1); |
Mmx] |
z == complex (interval (1.0, 1.0000000001), interval (1.0, 1.0000000001)) |
Mmx] |
[ puissance (z, 4*n) || n in 1 to 10 ] |
Comme on l'avait prédit, la perte de précision n'apparait pas lorsque l'on remplace l'arithmétique d'intervalles par l'arithmétique de boules.
Mmx] |
use "algebramix"; |
Mmx] |
puissance (z, n) == if n = 1 then z else z * puissance (z, n-1); |
Mmx] |
z == ball (complex (1.0, 1.0), 0.0000000001) |
Mmx] |
[ puissance (z, 4*n) || n in 1 to 10 ] |
Une autre technique pour limiter l'effet d'enveloppement consiste
à utiliser des algorithmes qui minimisent la profondeur du
calcul. En effet, dans la section 3.2.2, l'effet est
amplifié par le fait que l'on réinjecte
fois le résultat du calcul précédent dans
l'étape d'après, perdant ainsi
bits de précision. Si on utilise un algorithme diviser pour
régner pour calculer des puissances, la perte de précision
se limite à
bits. À noter que ce
genre d'algorithmes sont intéressants de toute façon, car
ils se parallèlisent généralement mieux et ils se
comportent mieux vis à vis de la mémoire cache.
Mmx] |
use "algebramix"; |
Mmx] |
puissance (z, n) == if n = 1 then z else puissance (z, n quo 2) * puissance (z, n - (n quo 2)); |
Mmx] |
z == complex (interval (1.0, 1.0000000001), interval (1.0, 1.0000000001)) |
Mmx] |
[ puissance (z, 4*n) || n in 1 to 10 ] |
Nous avons déjà souligné l'importance des méthodes perturbatives en calcul analytique. Elles interviennent notamment lorsque l'on cherche à résoudre des équations et que l'on a déjà un moyen pour résoudre l'équation de façon approchée.
Considérons par exemple l'inversion d'une matrice , qui correspond à la résolution
de l'équation
. Si
est une matrice de boules,
réécrite comme une boule de centre
et de rayon
, le calcul de
par pivot de Gauss naïf produit une
surestimation énorme. Or il existe de bons algorithmes
numériques pour inverser le centre
de
façon approchée, produisant une matrice
avec
. Dès lors, il
suffit d'étudier de combien l'inverse de
peut bouger lorsque l'on fait varier
.
Ceci conduit à l'algorithme suivant :
Algorithme (Hansen)
de
Écrire , avec
et
Inverser numériquement
Calculer
Calculer . On a :
Soit la matrice avec entrées
Retourner
Remarque. De manière plus générale, la méthode perturbative appartient à la famille des algorithmes marchant par « prospection-validation ». Dans un premier temps, ces algorithmes cherchent à approcher, voire à diviner la bonne réponse. Lorsque l'on estime avoir accumulé suffisamment d'évidence pour que le résultat soit bon, on lance un nouvel algorithme pour la validation du résultat.
Bien sûr, la méthode perturbative s'applique à d'autres problèmes similaires, comme le calcul de la forme échelon. Montrons d'abord le calcul quand on utilise l'algorithme naïf qui consiste à directement appliquer le pivot de Gauss sur une matrice dont les coefficients sont des intervalles :
Mmx] |
use "analyziz" |
Mmx] |
rnd () == { x == uniform_deviate (0.0, 1.0); return interval (x - 0.0000001, x + 0.0000001); }; |
Mmx] |
M == [ rnd () | j in 1 to 7 || i in 1 to 7 ] |
Mmx] |
row_echelon M |
On observe bien une déperdition de la précision au cours
de l'algorithme. Lorsque les coefficients de la matrice sont
remplacés par des boules,
Mmx] |
use "analyziz" |
Mmx] |
rnd () == { x == uniform_deviate (0.0, 1.0); return ball (x, 0.0000001); }; |
Mmx] |
M == [ rnd () | j in 1 to 7 || i in 1 to 7 ] |
Mmx] |
row_echelon M |
En calcul numérique, la précision relative du résultat est généralement moindre que la précision relative des données. On pourrait appeler la différence entre ces deux précisions la « déperdition de précision ». Cette déperdition admet deux sources tout à fait distinctes :
Une partie de la déperdition est intrinsèque et liée au conditionnement du problème.
L'autre partie est due à l'algorithme de calcul choisi, et on peut espérer la réduire autant que possible en cherchant un bon algorithme.
Fixons une norme sur
et
soit
une fonction. On définit le
nombre de conditionnement
de
en
par
Le logarithme en base deux mesure donc la
déperdition intrinsèque de précision pour
l'évaluation de
en
. En algèbre linéaire, on
définit aussi le nombre de conditionnement d'une matrice par
Ceci correspond au maximum des pour
, où
.
Supposons maintenant que l'on cherche à approcher par
, en
calculant avec une précision de
bits. On
définit le facteur d'éloignement de
en
par
Quand on calcule en
on
perd donc environ
bits de précision de
façon intrinsèque et environ
bits
additionnels à cause de l'algorithme employé.
Essayons maintenant de transposer l'esprit de la section précédente à l'arithmétique de boules. Le nombre de conditionnement n'a pas de contre-partie directe. En revanche, on la notion d'une « extension optimale » :
Soit une fonction. Nous avons déjà
signalé l'existence a priori d'une multitude
d'extensions
de
vérifiant la relation
pour tous les .
Néanmoins, si on impose la contrainte supplémentaire que
est de la forme
pour un
certain
, alors il existe une
unique extension optimale
,
définie par
Ici, on utilise la notation vectorielle. Par exemple .
Maintenant, nous pouvons définir la surestimation d'une extension
arbitraire de façon naturelle par rapport
à l'extension optimale
.
Plus précisément, étant donnée une boule
, on définit la
surestimation de
en
par
On définit également la surestimation ponctuelle
de en
par
Nous allons voir maintenant que cette surestimation ponctuelle est souvent simple à calculer. De la même manière qu'il est bon pour un algorithme numérique de surveiller le nombre de conditionnement et le facteur d'éloignement, c'est généralement une bonne idée pour un algorithme certifié de surveiller la surestimation. En effet, si la surestimation devient trop importante, il est souvent possible de déclencher un autre algorithme a priori plus couteux, mais plus précis.
Supposons que l'on ait une expression construite
à partir de constantes dans
,
d'un nombre fini d'indéterminées
et les opérations
.
D'une part, on peut interpréter
comme une
fonction
. D'autre part, en
utilisant l'arithmétique de boules standard (3.2–3.4), l'expression
donne naturellement
lieu à une fonction
.
Il n'est pas difficile de montrer que la surestimation ponctuelle de
se calcule explicitement par
où l'opérateur de « gradient
majoré » est défini par
![]() |
![]() |
![]() |
(c∈ℝ) |
![]() |
![]() |
![]() |
(k∈{1,…,n}) |
![]() |
![]() |
![]() |
|
![]() |
![]() |
![]() |
Lorsque , la formule (3.6) se simplifie en
Exemple 3.3. Prenons l'exemple
L'extension optimale de est la même que
pour la fonction
:
alors que l'extension standard donne
Par conséquent,
conformément à la formule (3.7).
Cette formule a une conséquence importante pour des algorithmes
par subdivision qui cherchent des zéros de
dans un ensemble donné. En effet, lorsque l'on utilise
l'arithmétique de boules (ou d'intervalles) naïve pour
certifier l'absence de zéros dans des boîtes, on est
forcé de prendre des boîtes
fois plus petites que nécéssaire. En dimension
, cela multiplie le coût de
l'algorithme par un facteur
vis à vis un
algorithme théorique optimal. Dans la section 5.4,
nous verrons une méthode systématique pour réduire
la surestimation afin de remédier à ce problème.
Toujours pour l'arithmétique de boules standard, une problème intéressant est de pouvoir calculer ou au moins estimer la surestimation sur une boule générale par rapport à la surestimation ponctuelle. Voici une question plus précise qui semble abordable :
Question. Pour construite
à partir de
, est-ce
que
Ayant défini la surestimation d'un algorithme de façon
précise, la question est maintenant comment construire des
algorithmes à la fois efficaces et de bonne qualité (c'est
à dire, avec une surestimation proche de ). Bien évidemment, il s'agit de deux
objectifs contraires, donc il faudra chercher un compromis.
Par exemple, en rendant systématiquement la boule comme résultat, on obtient un algorithme
très efficace, mais sans intérêt.
Réciproquement, dans de nombreux cas, l'obtention de bornes
optimales est NP complet ou pire [44].
Généralement, les algorithmes qui nous intéressent
introduisent un facteur constant dans la complexité pour calculer
des bornes de qualité acceptable, ou des petits facteurs
logarithmiques ou polynomiaux pour avoir un algorithme avec une
surestimation proche de
.
On rappelle aussi qu'il est souvent possible d'appliquer la stratégie de la « terminaison précoce » : on commence avec un algorithme rapide et a priori de faible qualité. Seulement si la qualité du résultat est jugée insuffisante, on lance des algorithmes plus lents, mais de meilleure qualité.
La recherche d'un compromis entre efficacité et qualité
s'illustre bien sur le problème de la multiplication de deux
matrices .
On calcule le produit par l'algorithme classique en utilisant opérations en arithmétique de
boules. C'est un algorithme de bonne qualité, mais assez
lent.
On réinterprète comme des
boules avec des centres et des rayons dans
. Dès lors, on peut utiliser la formule
(3.4) pour la multiplication, quitte à
rajouter le nécessaire pour les erreurs d'arrondi.
L'avantage principal de cette méthode est que l'on s'appuie
directement sur la multiplication matricielle dans au lieu de faire toutes les opérations sur
les coefficients un par un dans l'arithmétique des boules.
En effet, la multiplication dans
est
généralement hautement optimisée (en
précision machine, on peut par exemple utiliser des
Dans la méthode précédente, on majore le
rayon du produit par la somme de deux produits de matrices dans
. Étant
données deux matrices
,
il est souvent possible d'obtenir une majoration raisonnable du
produit
en faisant seulement
opérations.
En effet, supposons qu'après préconditionnement, on
peut s'arranger pour que les entrées de chaque ligne de
et de chaque colonne de
soient du même ordre de grandeur. Dans ce cas, on peut
utiliser la formule
Dans la pratique, il arrive souvent que les entrées d'une
matrice soient localement du même ordre de grandeur, mais
pas globalement, même après
préconditionnement. Dans ce cas, on peut découper la
matrice en petits blocs de matrices ,
utiliser des majorations brutales sur ces petits blocs et un
algorithme plus naïf pour la matrice toute entière.
Ceci conduit à un algorithme de coût
supérieur à la multiplication dans
, avec
.
De manière générale, on observe aussi que le
coût de certification des calculs tend souvent à devenir
négligeable pour des gros problèmes. Par exemple, pour la
multiplication dans ,
l'estimation des erreurs se fait généralement en simple
précision. En grande précision, le coût de deux
multiplications en simple précision devient négligeable
devant le coût d'une grosse multiplication dans
. De même, dans des cas bien
conditionnés où on peut utiliser la méthode des
majorations brutales pour la multiplication des matrices, le coût
des
opérations pour estimer les erreurs
est négligeable devant le coût
pour
la multiplication des centres.
À présent, nous avons vu les types de base pour le calcul
analytique. D'un point de vue haut niveau, nous avons les nombres
calculables de ,
,
,
etc. Juste en-dessous suit l'arithmétique de boules qui permet le
calcul certifié avec des approximations. Tout en bas, nous avons
le calcul numérique classique avec des nombres en virgule
flottante et l'arithmétique rapide pour les mantisses en
précision arbitraire.
Cette division en quatre niveaux de la « hiérarchie numérique » est pertinente pour la plupart des algorithmes en calcul analytique. Dans le cas d'une multiplication de matrices par exemple, on procède comme suit :
Au niveau conceptuel, nous partons de deux matrices
à multiplier. Une telle matrice est constituée de
promesses d'approximation. Pour gagner en
efficacité il vaut mieux réécrire
.
Pour une précision donnée, on
approche
et
par des
matrices de boules
, ou
mieux, encore pour des raisons d'efficacité, comme des boules
matricielles
.
L'arithmétique de boules dans conduit
à l'arithmétique en virgule flottante standard dans
sur les centres et les rayons. Si
est petit, on peut utiliser des nombres machines et
des BLAS rapides.
Si est plus grand, et si on cherche à
multiplier efficacement des matrices
,
il est souvent possible de les préconditionner et ensuite
à les écrire par rapport à un même
exposant :
. On peut
alors employer un algorithme de multiplication de matrices rapide
dans
.
L'algorithmique rapide est un sujet classique en calcul formel. Nous ferons quelques rappels, sans chercher à être exhaustif. Voir par exemple [31, 6] pour deux références classiques.
L'opération clef à comprendre pour des analyses en complexité est la multiplication, que ça soit sur les entiers, sur les nombres flottants, les polynômes, les matrices, ou encore les séries. Les complexités d'autres opérations (division, racine carrée, etc.) s'expriment généralement en fonction du coût de la multiplication. Voici quelques complexités classiques concernant la multiplication :
: multiplication
naïve.
: multiplication de
Karatsuba [41].
: multiplication de
Schönhage-Strassen [67].
: multiplication de
Fürer [30].
: multiplication
naïve (on compte le nombre d'opérations dans
).
: multiplication de
Karatsuba [41].
si
admet
suffisamment de racines
-ièmes
de l'unité [19].
: multiplication
naïve.
: multiplication de
Strassen [74].
: multiplication
naïve.
si
admet
suffisamment de racines
-ièmes
de l'unité [83].
: Kronecker [31].
si la complexité
pour la multiplication est obtenue par
évaluation-interpolation en
de
points.
Il existe deux variantes pour multiplier deux polynômes de degrés
.
On peut couper les polynômes en deux à l'exposant
, ou par exposants pairs-impairs.
L'algorithme pair-impair est généralement plus stable d'un
point de vue numérique :
Multiplication FFT
La multiplication de Karatsuba est un algorithme « multi-modulaire
» classique, procédant par évaluation-interpolation
dans les points (en projectif). Si
admet une racine primitive de l'unité
d'ordre
(donc
), une stratégie multi-modulaire plus
efficace est basée sur la transformation de Fourier
discrète rapide (FFT). Pour un polynôme
avec
, on définit
par
et il est classique [19] que l'on peut calculer et son inverse
en temps
. Étant donné deux
polynômes
avec
on
peut donc calculer leur produit en temps
par la
formule
Un point de vue naturel pour calculer avec des séries dans est de calculer systématiquement avec des
séries à l'ordre
.
Pour multiplier deux telles séries, il suffit de multiplier les
séries tronquées en tant que polynômes et de
tronquer le résultat. Toutefois, si on utilise la multiplication
naïve, ceci conduit à faire environ deux fois trop de
travail. C'est un problème ouvert de savoir si on peut faire
mieux en général :
Question. Est-ce qu'il existe un algorithme de
multiplication tronquée avec de complexité en temps avec
?
On a déjà signalé le fait que la complexité de la plupart des opérations plus complexes, comme la division, la racine carrée, l'exponentielle, etc. s'expriment en fonction de la complexité de la multiplication. Une technique puissante pour démontrer ceci est la méthode de Newton.
Supposons par exemple que l'on veuille inverser une série avec
à l'ordre
. En d'autres mots, étant
donnés les coefficients
,
on voudrait calculer les coefficients
de
. La méthode de Newton
appliquée à l'équation
donne l'itération
Comme on ne connait pas encore dans cette
itération, on utilisera plutôt l'itération
Si est bon jusqu'à l'ordre
:
la nouvelle valeur sera bonne jusqu'à
l'ordre
, puisque
Si désigne le coût de la division
à l'ordre
, ceci donne
En supposant que est croissante, on laisse au
soin du lecteur de vérifier que ceci implique
. On déduit aussi aisément que le
calcul du quotient et du reste de la division euclidienne d'un
polynôme
de degré
par un polynôme
de degré
se calcule en temps
.
L'utilisation de la méthode de Newton dans ce cadre remonte
à Hensel et se généralise pour des équations
polynomiales plus générale (à la fois dans les
séries et les nombres -adiques
d'ailleurs). Brent et Kung ont remarqué [13, 15] que la même technique peut être
utilisée pour composer des séries formelles, calculer
leurs inverses fonctionnelles, ou résoudre des équations
différentielles. Par exemple, l'exponentielle
de
avec
se calcule par
l'itération
Une méthode efficace pour la résolution d'équations différentielles algébriques plus générales a été proposée par Sedoglavic [68, 10, 86].
Il y a de nombreux autres opérations sur les polynômes (racine carrée, pgcd, ppcm, etc.) qui peuvent se calculer en temps presque linéaire. Nous donnons un dernier exemple qui est utile pour le calcul des zéros d'un polynôme. En effet, si on dispose déjà de bonnes approximations pour les racines, l'évaluation multi-point rapide permet d'appliquer la méthode de Newton pour améliorer toutes ces approximations de façon simultanée.
Algorithme évaluation multi-point rapide
avec
et points
On précalcule tous les polynômes dans l'arbre suivant :
On utilise la méthode dichotomique suivante pour calculer le résultat :
Si , retourner
Sinon, soient et
Evaluer en
et
en
On remarque que la complexité du précalcul et de la dichotomie proprement dite vérifient une estimation du type
En supposant que est croissante, on laisse au
soin du lecteur de vérifier que ceci implique
. On peut encore gagner un facteur constant sur
l'algorithme présenté ici [11].
Nous avons vu comment calculer avec des séries en les tronquant
à un certain ordre .
Une autre approche consiste à considérer les séries
comme des « flots de coefficients » qui sont calculés
un par un. Ce point de vue détendu impose une contrainte sur
notre façon de concevoir les opérations sur les
séries. Par exemple, la multiplication détendue
de deux séries
impose la
sortie de
dès que
sont connus. Par conséquent, on ne peut pas
directement appliquer certains algorithmes rapides, comme la
multiplication FFT. L'avantage du calcul détendu est qu'il permet
naturellement de résoudre des équations «
récursives »
où l'extraction du coefficient en de
ne fait intervenir que les coefficients
de
. Voici deux
exemples :
La stratégie la plus naïve pour calculer le coefficient d'un produit
est d'utiliser
la formule classique de convolution
Pour un calcul jusqu'à l'ordre ,
cela donne une complexité
.
Dans la figure 4.1, on montre les étapes successives
du calcul détendu de l'exponentielle
.
Lorsque l'on applique l'algorithme de Karatsuba sur des polynômes
et
avec
, où on considère
comme des paramètres formels, on observe que la
formule pour
ne dépend que de
pour chaque
.
En d'autres termes, l'algorithme de Karatsuba est naturellement
détendu, si on fait les calculs dans le bon ordre. Ceci montre
qu'il existe un algorithme de multiplication détendue de
complexité
.
On peut encore faire mieux en anticipant des calculs à venir. Par
exemple lorsque et
sont
connus, on peut calculer la contribution de
au
produit
par n'importe quel algorithme de
multiplication rapide pour les polynômes. De même, lorsque
l'on connait
et
,
on peut calculer la contribution de
au produit
de façon rapide. En exploitant cette
idée, les contributions de tous les grands carrés dans la
figure 4.2 peuvent se calculer par un algorithme rapide. Il
s'ensuit [76, 79] que
Est-ce que l'on peut faire encore mieux ? Si
admet suffisamment de racines
-ièmes
de l'unité, on montre [83] que :
Dans le cas général, la question reste ouverte :
Question. Pour n'importe quel anneau effectif , est-ce qu'il existe un algorithme
de multiplication détendue dont la complexité est
meilleure que
Mmx] |
use "algebramix" |
Mmx] |
z == series (0, 1); |
Mmx] |
B == exp (exp z - 1) |
Mmx] |
B[1000] * 1000! |
La multiplication FFT de la section 4.2.1 est un exemple classique d'algorithme multi-modulaire. En effet, elle repose en réalité sur l'isomorphisme
entre les polynômes modulo
et les réductions de
modulo
les
avec
.
De la même manière, étant donnés
nombres premiers
mutuellement
distincts, le théorème des restes chinois nous fournit un
isomorphisme
Dans chaque cas, le calcul multi-modulaire repose sur un changement de
représentation, où un objet dans
ou
où la multiplication coûte cher
est remplacé par un vecteur d'objets pour lesquels la
multiplication coûte moins cher.
Comme les changements de représentation coûtent
généralement cher aussi, il est recommandé
d'effectuer un maximum de calculs dans le modèle multi-modulaire.
Supposons par exemple que l'on veuille multiplier deux matrices et
dans
. Au lieu de faire
opérations dans
, de
coût
, il vaut mieux
utiliser la formule
qui correspond à mettre tous les coefficients de
et
dans le modèle FFT, de multiplier
matrices scalaires dans
,
et de faire la transformation inverse. En effet, cet algorithme admet
une complexité
bien meilleure.
Il y a plusieurs variantes pour les méthodes multi-modulaires. Chaque variante admet ses caractéristiques propres quant au nombre de moduli utilisés et quant au coût de la réduction et de la reconstruction. Les méthodes les plus utilisées sont les suivantes :
Cette méthode permet grosso modo d'encoder un
entier d'environ mots machines en
utilisant seulement
moduli. En revanche,
les coûts de la réduction et de la reconstruction
sont en
pour un entier de taille
.
Certains nombres premiers comme admettent
des racines primitives de l'unité d'un ordre
avec
grand. Cela permet
d'utiliser la multiplication FFT pour des polynômes de
degrés importants à coefficients dans
. Par ailleurs, tout nombre dans
peut se coder par
avec
. En prenant
, on peut aussi ramener la
multiplication dans
à la
multiplication dans
pour des nombres pas
trop grands. Par rapport aux restes chinois, ceci revient à
prendre plus de moduli, mais aussi à gagner sur le
coûts de réduction et de reconstruction. On peut
d'ailleurs combiner les deux approches.
Lorsque l'on calcule avec des nombres flottants complexes, on peut
directement calculer avec une racine -ième
de l'unité approchée. En encadrant les erreurs
d'arrondi avec soin, ceci conduit à des algorithmes de
multiplication rapide dans
et
qui ont des avantages et inconvénients
semblables par rapport à la méthode
précédente.
En cas d'absence de racines -ièmes
de l'unité pour
suffisamment grand,
on peut les synthétiser. Supposons par exemple,
que l'on veuille multiplier des polynômes dans
et prenons
.
Alors
est une racine
-ième primitive de l'unité
dans
et montre que la multiplication dans
se ramène à une
multiplication de polynômes à coefficients dans
. En outre, la FFT à
coefficients dans
est très
efficace, car elle ne nécessite que des additions et des
soustractions dans
.
Par ailleurs, la méthode est parfaitement
générale, et marche encore pour des grands entiers.
Le seul point noir de l'approche est qu'elle nécessite plus
de moduli que les méthodes précédentes.
Un problème qui revient fréquemment est
l'évaluation rapide d'un vecteur de polynômes en plusieurs
variables dans une
-algèbre
. En effet, ce
problème intervient dans l'intégration de système
dynamiques
ou encore dans des méthodes
algébriques par homotopie. En outre, il n'est pas rare que l'on
veuille évaluer à la fois
et sa
matrice jacobienne
.
Nous allons nous concentrer sur le cas ,
en supposant que la multiplication dans
s'effectue par un algorithme multi-modulaire avec
moduli et avec un coût de réduction-reconstruction de
opérations dans
.
Considérons d'abord le cas où les polynômes sont
donnés par des expressions avec éventuellement des
sous-expressions communes. En d'autres termes,
est représenté par un « dag » (directed
acyclic graph). La figure 4.3 montre un dag typique,
correspondant au vecteur
avec
Un sous-dag de est dit scalaire s'il ne
fait pas intervenir les
.
Dans la figure 4.3, les seuls sous-dags scalaires sont
et
. Un
sous-dag multiplicatif de
de la forme
est dit
Dans notre exemple, les ensembles de sous-dags multiplicatifs
homothétiques, terminaux et actifs sont respectivement ,
et
. On a :
Proposition 4.1. Soit
un dag de taille totale
et avec
sous-dags multiplicatifs actifs. Alors pour des séries
tronquées
, on peut
évaluer
en utilisant au plus
opérations dans
.
Démonstration. On commence par réduire les
entrées (coût
). De façon récursive, et
travaillant avec la représentation multi-modulaire, on
évalue chaque sous-dag non multiplicatif ou non actif en
utilisant
opérations dans
. On évalue chaque sous-dag
multiplicatif actif en faisant un produit scalaire en
représentation multi-modulaire (coût
), une reconstruction d'un polynôme dans
de degré
,
dont on réduit à nouveau la troncature à l'ordre
(coût
).
Enfin, on reconstruit les évaluations de
à partir de leurs réductions (coût
). Le résultat suit en rajoutant les
différents coûts.
Corollaire. Si est
quadratique, on peut l'évaluer utilisant
opérations dans
.
Si les polynômes sont donnés comme
combinaisons linéaires de monômes dans
, alors il faut construire un dag pour
avant d'appliquer la proposition 4.1.
Ceci conduit au problème comment trouver un dag pour lequel le
nombre de sous-dags multiplicatifs actifs est minimal. Bien sûr,
ce problème de nature plutôt combinatoire est assez
délicat, donc on cherche plutôt de bonnes stratégies
pour s'approcher du minimum.
Soit l'ensemble des monômes dans
apparaissant dans
.
La question se réduit essentiellement à la nouvelle
question comment trouver deux sous-ensembles
tels que
et tels que le cardinal
soit minimal. Deux approches heuristiques semblent
raisonnables :
Pour chaque partie de fonction
caractéristique
, on a
une projection naturelle
La projection peut se calculer en temps
linéaire. L'idée est maintenant de prendre
et
pour un
qui minimise
. Si
est grand, ce calcul peut encore devenir trop cher, auquel
cas on peut se restreindre aux parties
de la
forme
avec
.
Étant donnés des entiers ,
on peut considérer les projections
avec . L'idée est
alors de prendre
et
pour
des entiers
bien choisis. On peut trouver ces
entiers en commençant avec
et en doublant
l'un des entiers tant que cela fait chuter la cardinalité de
.
Exemple. Un exemple particulièrement important est quand
avec
Pour la première stratégie donne
Si on peut utiliser la multiplication FFT dans , la proposition 4.1 implique donc que
l'on peut évaluer
en
en temps
pour
suffisamment grand. Pour quelques autres résultats
intéressants sur la composition de séries formelles en
plusieurs variables, nous renvoyons vers [14].
Malheureusement, les algorithmes asymptotiquement rapides pour
multiplier des polynômes à coefficients flottants sont
numériquement instables dans le cas général. Par
exemple, considérons le calcul suivant d'un carré par la
méthode de Karatsuba, en utilisant une précision de chiffres binaires :
On voit bien que le fait d'avoir ajouté et soustrait des
coefficients d'ordres de grandeur différents a pollué le
calcul, de manière à rendre le coefficient en du résultat incorrect.
Une manière simple pour régler le problème de la
section précédente est de rendre tous les coefficients de
de même ordre de grandeur modulo une
postcomposition par
pour une «
échelle »
bien choisie :
Malheureusement, cela ne règle pas le problème dans le cas
général, car le choix d'un bon
peut être ambigu. Par exemple, si
il faudrait prendre pour que
et
soient du même ordre de grandeur, mais
pour que
et
le soient.
Heureusement, dans le cas d'une série , le comportent des
est
généralement assez régulière pour
, car dicté par la nature de
la singularité de
qui est la plus proche
de l'origine. Dans de nombreux cas (et notamment quand
est algébrique avec une unique singularité dominante), on
a par exemple
où est le rayon de convergence de
. Dès lors, l'existence
d'une bonne échelle
est garantie pour
tout polynôme
avec
et
suffisamment grands. D'un point de vue
pratique,
s'approche bien, en considérant
la pente au milieu du polygone numérique de Newton (voir la
section 6.3).
Afin de vérifier la stabilité numérique de la méthode de préconditionnement par mise à l'échelle, il suffit d'effectuer le même calcul avec des précisions différentes. Bien entendu, cela ne garantit rien, mais ça indique que tout se passe comme prévu.
Mmx] |
use "analyziz" |
Mmx] |
bit_precision := 64; |
Mmx] |
z == series (0.0, 1.0); |
Mmx] |
B == exp (exp z - 1) |
Mmx] |
B[10000] |
Mmx] |
bit_precision := 128; |
Mmx] |
z == series (0.0, 1.0); |
Mmx] |
B == exp (exp z - 1); |
Mmx] |
B[10000] |
Pour une séries à coefficients
dans
, obtenue comme le
résultat d'un calcul naïf comme
il est instructif d'étudier le comportement des rayons des
par rapport à celui des
centres
. La
différence principale entre les calculs de
et
est que « tous les
ont été remplacés par des
» dans les formules de récurrence. En effet, dans notre
exemple, on a
Par conséquent, si on calcule avec une précision de chiffres binaires, on obtient
pour un certain . Comme le
rayon de convergence de la série
est plus
petite que le rayon de convergence de
,
il s'en suit qu'il existe une constante
telle
que l'algorithme d'inversion naïf perd toute sa précision
pour
.
Le remède est pareil que pour l'inversion des matrices dans la
section 3.2.5 : supposons que l'on veuille inverser une
série . Alors on
calcule un inverse numérique approché
de
, et on prend
, où
est
calculé utilisant une méthode détendue
générique.
Considérons maintenant le cas du calcul certifié d'une
exponentielle . Si on fait
une analyse similaire à celle de la section
précédente, on se rend compte que les séries
génératrices
et
formées par les centres et rayons des coefficients
vérifient cette fois-ci
où est la série
génératrice avec
.
Or les rayons de convergence de
et
sont les mêmes et les singularités dominantes
généralement de même nature. Par magie, on observe
donc rarement de la surestimation dans ce cas ! Cette observation
s'étend d'ailleurs aux intégrales de systèmes
dynamiques plus générales.
Ceci dit, dans les rares cas où on observe quand même de la
surestimation, on peut bien sûr adapter la méthode
perturbative. En effet, pour le calcul de avec
, il suffit de prendre
, après quoi la fonction
se calcule en intégrant le système
dynamique
.
Mmx] |
use "analyziz" |
Mmx] |
bit_precision := 64; |
Mmx] |
z == series (0.0, 1.0); |
Mmx] |
B == exp (exp z - 1); |
Mmx] |
B[10000] |
Mmx] |
z == series (ball 0.0, ball 1.0); |
Mmx] |
B == exp (exp z - 1); |
Mmx] |
B[10000] |
Pour l'instant, on a surtout vu des boules scalaires dans ou
et des boules qui
opèrent coefficient par coefficient, comme des boules dans
ou
. Il
est maintenant temps d'étendre les principes du calcul à
des espaces un peu plus sophistiqués comme l'ensemble
des fonctions réelles analytiques sur la boule
. La norme naturelle sur cet
espace est donnée par
Pour et
,
on peut donc considérer la boule fermée
Étant donné un ordre ,
on peut ensuite prendre les centres dans l'ensemble
Une boule avec
et
est appelé un modèle de Taylor
d'ordre
sur la boule
. On note par
l'ensemble des
modèles de Taylor de ce type. Pour des calculs sur machine, on
peut évidemment définir la variante
.
La multiplication doit être définie avec un peu plus de soin pour les modèles de Taylor :
Si on calcule avec des flottants de précision , il faut en plus prendre en compte les erreurs
d'arrondi, par exemple en rajoutant
au rayon en utilisant systématiquement le mode d'arrondi vers le
haut pour les estimations d'erreur. Dans tous les cas, on observe que le
calcul des erreurs est négligeable devant le coût de la
multiplication polynomiale tronquée pour
pas trop petit.
Contrairement au boules traditionnelles, les modèles de Taylor permettent aussi l'implantation d'opérations fonctionnelles comme l'intégration :
Ici, on utilise le fait que pour tout
.
Les définitions se généralisent naturellement aux
cas des fonctions analytiques complexes et des fonctions analytiques en
variables sur un polydisque
avec
. Les centres d'un
modèle de Taylor en plusieurs variables vivent
généralement dans un ensemble du type
avec ,
et
.
Une application importante des modèles concerne la réduction de la surestimation quand on évalue une fonction en arithmétique de boules. Revenons à l'exemple 3.3 :
Considérons maintenant l'évaluation de l'expression en un modèle de Taylor d'ordre
(ou plus) :
Pour tout on a donc
, ce qui nous permet de définir une meilleure
extension
de
par
Il est facile de vérifier que cette extension est ponctuellement optimale dans le sens que
pour tout . Bien sûr,
il faudra recourir à des modèles de Taylor d'ordre au
moins
si
présente
des racines de multiplicité
(ou
lorsqu'une petite perturbation de
présente de telles racines).
Considérons un système de polynômes réels
Un algorithme classique pour trouver les solutions de ce système
dans une « boîte » est de la
découper en des boîtes
de plus en
plus petites jusqu'au moment où l'une des deux situations
suivantes se présente :
On a , et donc
n'admet pas de racines sur
.
On peut démontrer que admet une
unique solution dans
(par exemple, en
utilisant la méthode de Krawczyk-Rump qui sera exposée
dans la section 6.6.1).
Si n'admet que des racines simples dans
, alors cet algorithme simpliste
termine. Toutefois, en présence de racines multiples, ou racines
proches (éventuellement dans des voisinages imaginaires),
l'évaluation de
présentera une
surestimation qui rend la méthode inutilisable.
En utilisant les modèles de Taylor, on aimerait donc
réduire cette surestimation. Le principal problème est
alors de trouver un ordre de troncature adéquat. Ceci peut se
faire de façon heuristique. Afin de simplifier l'exposition,
considérons le cas de dimension un. Supposons que l'on a
calculé un encadrement de
sur
en utilisant des
modèles de Taylor à l'ordre
.
Pour un coût
plus grand on peut aussi
calculer un encadrement
en utilisant des
modèles de Taylor à l'ordre
.
Même si on ne connait pas les surestimations
et
de
et
dans l'absolu, le quotient entre les rayons de
et de
nous fournit le
ratio
. On s'attend donc
à ce que l'on doive découper la boîte
en des boîtes
fois plus
petites en utilisant des modèle de Taylor d'ordre
plutôt que
.
Lorsque
, on a donc
intérêt à prendre des modèles de Taylor
d'ordre
plutôt que des modèles
d'ordre
. Ce critère
nous permet de trouver un ordre à peu près optimal.
Nous notons en outre que les modèles de Taylor en plusieurs variables nous permettent en principe des prendre des boîtes qui ne sont pas forcément parallèles aux axes (voir aussi la section 7.2.3) et donc de mieux suivre la géométrie du problème. En fait, les boîtes ont même le droit de devenir courbées, si cela peut arranger les estimations d'erreur.
L'intégration certifiée de systèmes dynamiques utilisant la technique des modèles de Taylor a été proposé par Berz et Makino [49, 50]. Un grand avantage de ces méthodes est qu'ils permettent d'étudier la dépendance du flot par rapport aux conditions initiales pour des conditions initiales dans des domaines relativement grands. Bien sûr, ceci nécessite de recourir à des modèles de Taylor en plusieurs variables, c'est à dire par rapport au temps et par rapport aux conditions initiales. Dans cette section, nous allons plutôt nous intéresser à des techniques qui continuent à marcher en haute précision. Dans ce cadre, les conditions initiales sont forcément spécifiées de façon très précise, donc on peut se contenter de modèles de Taylor en une variable. Dans la section 5.5.2, on aura juste besoin d'étudier la dépendance du flot par rapport aux conditions initiales à l'ordre un.
Supposons que l'on veuille intégrer le système dynamique
avec ,
,
et
. Plus précisément, supposons que l'on
veuille calculer la valeur
de
en
. Alors on peut utiliser
la méthode suivante :
Comme le système ne dépend pas du temps, on peut
supposer sans perdre de généralité que .
Supposant que l'on calcule avec une précision de chiffres binaires, on sélectionne un ordre
de développement proportionnel
à
(disons
), et on calcule une approximation
numérique de la solution autour de
:
Pour , où
est une constante dont le calcul sera
détaillé plus bas, on évalue
utilisant l'arithmétique pour les modèles de Taylor.
Si
alors on retourne .
Sinon, on calcule récursivement , puis
en fonction de
.
Vérifions que cette méthode est correcte. En effet, si on
a l'inclusion (5.1), alors l'opérateur de envoie la boule
dans lui
même. Comme
est une boule compacte dans un
espace de Banach, il s'en suit que
admet un
point fixe. Or il existe une unique façon de calculer les
coefficients en série d'un tel point fixe, donc ce point fixe est
nécessairement unique.
Il nous reste à montrer comment calculer la constante . L'idée est tout simplement
de commencer avec
et d'itérer quelque
fois le processus suivant : on calcule
et on
remplace
par le supremum de
et le rayon du résultat. Si cette itération diverge
numériquement, alors on arrête et (5.1) ne
sera pas vérifier. Sinon, on continue jusqu'au moment où
ne bouge plus trop, disons
, et on refait une nouvelle fois
avant de finir.
Si on applique l'algorithme de la section précédente tel quel dans le cas du système
on observe un effet d'enveloppement similaire au calcul de puissances successives d'un nombre complexe (voir la section 3.2.2, ainsi que la figure 5.1). Pour y remédier, on utilise les idées suivantes [53].
Idée 1 : calculer la dependence en fonction de la condition initiale
Idée 2 : encadrements de l'erreur dans des
coordonnées déterminées par
![]() |
Il est naturel de se demander s'il ne faudrait pas remplacer la
définition de l'ensemble des modèles de Taylor sur le
disque et d'ordre
par
quelque chose d'un peu plus fin, comme
Bien sûr, la définition classique est plus simple, ce qui
rend les opérations de base plus efficaces. Toutefois, en grande
précision, le calcul avec des boules dans
ne coûte pas sensiblement plus cher que le calcul avec des
flottants dans
. Par
ailleurs, la définition alternative admet aussi quelques
avantages :
Avant tout, les bornes obtenues sont souvent de meilleure
qualité. Par exemple, dans le cas de l'intégration, on
profite d'une division par :
Comme on le verra dans la section suivante, cette amélioration n'est pas anodine.
Il n'est pas nécessaire de calculer avec une précision
pour avoir des bornes précises pour
le reste
.
Les bornes obtenues donnent des bornes plus fines quand on restreint
le domaine du modèle de Taylor
à une boule
plus petite.
Examinons plus en détails la qualité des estimations
lorsque l'on utilise la variante des modèles de Taylor de la
section précédente. On suppose que l'on a calculé
des encadrements pour les coefficients de la
solution
jusqu'à l'ordre
et on pose
Notre but est d'obtenir un encadrement pour le
reste
Soit la fonctionnelle définie par
En calculant en utilisant l'arithmétique
pour les modèles de Taylor, on trouve une boule
avec
Rappelons que notre but était de trouver un encadrement pour
avec
Or
Nous en sommes donc réduit à trouver un
avec
Supposant que
il suffit alors de prendre
![]() |
(5.3) |
L'intérêt de majorer le reste par
une expression de la forme
et non pas par une
boule de la forme
saute désormais au yeux
: dans le deuxième cas, il aurait fallu demander que
et on aurait dû se résoudre à prendre
La taille de nos pas aurait donc été environ fois trop pessimiste.
La formule (5.3) montre aussi qu'il est intéressant
de rendre aussi petit que possible. Ceci
suggère de ne pas chercher des majorations directes dans les
coordonnées d'origine, mais plutôt des majorations de la
forme
tel que
soit
petit.
On observe enfin que la condition (5.2) est
vérifiée en prenant suffisamment
grand. À partir de cette observation, on montre que le rayon
pour lequel on peut certifier l'existence d'une borne
tend vers le rayon de convergence
de
lorsque l'on fait tendre
et
vers l'infini. Dans la terminologie du chapitre 2, cela implique
L'équation de Volterra est souvent utilisée comme
benchmark pour des systèmes d'intégration
certifiés. L'implantation des modèles de Taylor est en
cours dans
Mmx] |
use "continewz" |
Mmx] |
type_mode? := false; |
Mmx] |
x: Coordinate == coordinate ('x); |
Mmx] |
y: Coordinate == coordinate ('y); |
Mmx] |
sys: Vector MVPolynomial Rational == [ 2 * x * (1 - y), - y * (1 - x) ] |
Mmx] |
coords: Vector Coordinate == [ x, y ] |
Mmx] |
init == [ as_double 1.0, as_double 3.0 ] |
Mmx] |
ode_order := 48; |
Mmx] |
ode_precision := 48; |
Mmx] |
significant_digits := 4; |
Mmx] |
solve_ode_taylor (sys, coords, init) |
Mmx] |
first_variation_taylor (sys, coords, init) |
Mmx] |
Mmx] |
significant_digits := 0; |
Mmx] |
period == as_double 5.48813846815; |
Mmx] |
[ @integrate_ode_taylor (sys, coords, init, period * (t / 15)) || t in 0 to 15 ] |
Mmx] |
Mmx] |
integrate_ode_taylor (sys, coords, init, period) |
Mmx] |
integrate_ode_taylor (sys, coords, init, 2 * period) |
Mmx] |
integrate_ode_taylor (sys, coords, init, 5 * period) |
Mmx] |
integrate_ode_taylor (sys, coords, init, 10 * period) |
Mmx] |
integrate_ode_taylor (sys, coords, init, 20 * period) |
Mmx] |
integrate_ode_taylor (sys, coords, init, 50 * period) |
Mmx] |
integrate_ode_taylor (sys, coords, init, 100 * period) |
Mmx] |
integrate_ode_taylor (sys, coords, init, 200 * period) |
Mmx] |
integrate_ode_taylor (sys, coords, init, 500 * period) |
D'une part, il existe des algorithmes d'une bonne complexité théorique pour calculer les racines d'un polynôme en une variable [66, 59, 60]. D'autre part, il existe des bons implantations [35, 7]. La messe est-elle dite ? Malheureusement, l'état de l'art présente encore plusieurs défauts.
D'une part, les algorithmes asymptotiquement rapides marchent bien quand
la précision de calcul excède le
degré du polynôme. Or une précision bien moindre
suffit généralement pour isoler la plupart des racines.
Par ailleurs, il est souvent plus rapide d'appliquer des algorithmes
numériques brutaux en précision machine, plutôt que
de payer un grand facteur constant pour l'utilisation d'une
arithmétique « rapide » en précision multiple.
D'autant plus que ces algorithmes brutaux sont
généralement plus faciles à parallèliser.
Manifestement le passage des algorithmes naïfs mais
asymptotiquement mauvais à des algorithmes intelligents mais
asymptotiquement bons pose encore un problème dans ce domaine.
En outre, trouver toutes les racines dans le cas général pose de sérieux problèmes techniques : souvent les bonnes idées ne s'appliquent que dans certains cas et il est difficile de les combiner. D'ailleurs, les algorithmes de Pan attendent toujours à être implantés.
Enfin, il est fort probable que les mesures de complexité traditionnels ne soient pas tout à fait opérationnels pour ce problème. En effet, il existe de nombreux types de polynômes (voir la section 6.1) et l'efficacité et la qualité des solveurs dépend grandement de la répartition géométrique des racines. Faudrait-il des nombres de conditionnement plus fins pour exprimer la vraie complexité ? Est-ce qu'il vaudrait mieux considérer un autre problème, comme la factorisation en deux facteurs de degrés deux fois moindre ? Je ne connais pas les réponses pour l'instant, d'où le caractère plus « expérimental » de ce chapitre.
Mmx] | use "analyziz"; |
Mmx] | include "graphix/points.mmx"; |
Mmx] |
pi == 4.0 * arctan 1.0; |
Mmx] |
rnd () == exp (complex (0.0, uniform_deviate (0.0, 2*pi))); |
Mmx] |
p == polynomial (rnd () | i in 0 to 100); |
Mmx] |
$points roots p |
Meilleur conditionnement :
Mmx] |
p == poly (1.0, -1.0)^100; |
Mmx] |
$points (roots p) |
Pire conditionnement :
Pour différentes multiplicités :
On pourrait penser que le mauvais conditionnement est lié
à la présence d'une racine de grande multiplicité
(modulo petites perturbations du moins). L'exemple qui suit montre qu'il
n'en est rien : des polynômes dont toutes les racines sont
similaires en norme et dans le même demi plan sont à peu
près aussi mal conditionnés qu'un polynôme de la
forme .
Mmx] |
v == [ rnd () | i in 1 to 100 ]; |
Mmx] |
p == annulator v; |
Mmx] |
$points (roots p) |
Mmx] |
v == [ sqrt rnd () | i in 1 to 100 ]; |
Mmx] |
p == annulator v; |
Mmx] |
$points (roots p) |
Mmx] |
z == series (0.0, 1.0); |
Mmx] |
B == exp (exp z - 1); |
Mmx] |
p == B[0,100]; |
Mmx] |
$points (0.5 * roots p) |
Mmx] |
z == series (0.0, 1.0); |
Mmx] |
f == integrate exp (-z*z); |
Mmx] |
p == f[0,200]; |
Mmx] |
$points (0.2 * roots p) |
Un algorithme numérique classique et efficace pour trouver les racines d'un polynôme
est la méthode d'Aberth. On part d'un ansatz
pour les racines, comme
L'idée est ensuite d'appliquer pour chaque
la méthode de Newton à la fonction
ce qui conduit à l'itération
Une propriété intéressante de cet algorithme est le
fait que dès que l'on a trouvé des bonnes approximations
de racines de
,
disons
, alors les
itérations suivantes appliquent essentiellement la méthode
d'Aberth pour le polynôme
et les racines restantes . La
méthode est particulièrement efficace quand on l'applique
de façon naïve en précision machine (avec une
complexité de calcul en
)
; c'est une des raisons de l'efficacité du logiciel
La méthode par homotopie est un autre exemple d'une méthode qui est efficace quand on l'applique de façon naïve en précision machine. L'itération est un peu différente que pour la méthode d'Aberth, mais son efficacité est du même ordre de grandeur. On y reviendra dans un contexte plus général dans le chapitre 7. Voir aussi [71].
La plupart des algorithmes asymptotiquement efficaces font intervenir la
transformation de Graeffe ,
dont voici la définition :
On vérifie que
Il s'en suit la propriété fondamentale que et
En d'autres termes, la transformation est un séparateur puissant
de racines, au moins en norme : si pour deux
racines
et
de
, alors
pour les racines
et
de
. Or, lorsque les racines
de
sont très
différents en module, disons
,
alors on a
pour chaque
. Si les racines
de
sont toutes différentes en module, il suffit
donc de quelques transformations de Graeffe pour obtenir
pour un certain
.
Reste le problème comment retrouver
à partir de
. On peut
utiliser une astuce pour cela qui consiste à calculer avec des
« nombres tangents » dans
au lieu de
simples coefficients dans
.
En effet, lorsque l'on fait le remplacement
et que l'on calcule les puissances -ièmes
des racines de
en faisant quelques
transformations de Graeffe, on obtient pour chaque racine
:
Nous venons de voir l'importance de l'étude des normes des
racines du polynôme au delà de leur
calcul à proprement parler. Le polygone numérique de
Newton nous fournit les valeurs approximatives de ces normes,
directement à partir des coefficients du polynôme.
Le polygone de Newton intervient aussi lorsque l'on veut
développer une arithmétique efficace et
numériquement stable pour les polynômes. Une telle
arithmétique reste typiquement précis pour le calcul de
avec
.
Un tel algorithme de multiplication est donné dans [85],
mais la borne (3) dans ce papier est fausse.
Le polygone numérique de Newton de est
défini comme l'enveloppe convexe de l'ensemble
![]() ![]() |
Moralité : Polygone de Newton
Comportement en évaluation
En particulier : Pentes du polygone de Newton
Modules des racines
La question suivante semble ouverte et abordable :
Question. Supposons des pentes
et des racines :
.
Est-ce qu'il existe une constante universelle
avec :
Problème. Meilleure approximation possible des
racines de pour précision
donnée.
Note. Sans perdre en généralité, on peut
perturber les coefficients de par des nombres
d'erreur relative
. Ceci peut
par exemple être utile si on veut éviter que toutes les
racines soient de même module.
Arithmétique naïve en précision machine
Algorithme en temps avec
petit ?
Arithmétique rapide en précision multiple
Nécessite une précision d'au moins
Algorithme en temps ,
avec
pas trop grand ?
Compromis lorsque ?
Pour un certain facteur dépendant
du conditionnement
et de
:
Arithmétique naïve en précision machine
Algorithme en temps avec
petit ?
Arithmétique rapide en précision multiple
Algorithme en temps ,
avec
pas trop grand ?
Compromis lorsque ?
Exemple d'un théorème précis :
Théorème 6.1. avec
, on peut calculer en temps
des nombres
avec
Remarque. Gourdon a implanté la méthode de Schönhage [35]. D'autres résultats de complexité ont été donné par Pan [59, 60].
C'est le problème inverse de la recherche des racines. En effet,
ce problème est important lorsque l'on veut raffiner une
approximation pour une précision en une
meilleure approximation pour la précision
(par exemple, en utilisant la méthode de Newton).
Coût , en
appliquant
fois Horner.
, en faisant des FFT
massives sur différents cercles de centre
[84]. Cet algorithme est meilleur que les
précédents lorsque
.
Question. Peut-on faire mieux lorsque ?
Les algorithmes de Schönhage et de Pan, qui admettent les meilleures complexités actuelles, certifient déjà les résultats. Toutefois, en suivant la même philosophie que dans les autres chapitres, il peut être utile de découpler les étapes de calcul et la certification des résultats.
Certification par la méthode de Krawczyk [43], présentée pour le cas de fonctions en plusieurs variables :
Théorème 6.2. Si , alors
pour un certain
.
Démonstration. Soit .
Pour
, on a
puisque est convexe. Donc
et admet un point fixe, grace à la
compacité de
.
Ce théorème ne garantit pas l'unicité de la racine. Rump [61, 63] a donné une version plus fine du théorème qui garantit aussi l'unicité :
Théorème 6.3. Si , alors
pour un unique
.
Pour trouver , faire
Méthode de
-inflation
de Rump [61, 63].
Problème. Soit un
polynôme avec un comportement
pour . Comment montrer que
admet exactement
racines
sur
?
Prendre pour
et
évaluer
Montrer que tout admet
racines dans
.
Par exemple, il suffit de vérifier que
et d'appliquer le théorème de Rouché. Voir [87] pour des variantes de cette méthode.
Approche par déflation
Une autre approche consiste à examiner de combien il faut
déformer le polynôme pour qu'il
admette exactement une racine de multiplicité
. Cette approche « par
déflation » [63] permet de se ramener à
la théorie de la section 6.6.1 en cherchant à
résoudre simultanément les équations
. Toutefois, l'astuce introduit un facteur
dans la complexité en temps.
Remarque 6.4. Voir aussi la section 7.3 pour un point de vue différent sur la question.
Dans la section 1.3.1, nous avons esquissé comment
résoudre des systèmes polynomiaux par homotopie. Cette
technique ancienne remonte à la démonstration par Gauss
que est algébriquement clos. En relation
avec des implantations concrètes, les méthodes par
homotopie apparaissent dans plusieurs contextes différents mais
liés :
Les homotopies numériques non certifiés ont
été étudié par de nombreux auteurs.
Voir par exemple [23, 55, 90,
73] et les références dans ces
documents. Quelques logiciels connus pour des homotopies
numériques sont
La complexité théorique des méthodes par homotopie a été analysé dans [71, 72, 69, 70, 21, 5]. Ces travaux donnent une justification théorique pourquoi les méthodes par homotopie marchent aussi vite, tout en faisant des hypothèses assez fortes sur le modèle de calcul.
Au lieu de calculer avec des nombres flottants, on peut aussi définir les trajectoires de manière algébrique. Ce point de vue a donné lieu à la méthode de Kronecker [34, 33, 24], qui admet également une implantation concrète [46]. Par construction, cette méthode est algébrique donc certifiée, bien qu'elle ne tire pas profit de l'efficacité du calcul numérique pur. Par ailleurs, ce point de vue évite les chemins partant vers l'infini ; voir la section 7.1.2 plus bas.
Il est naturel de chercher à certifier les méthodes
numériques par homotopie, mais curieusement, peu d'efforts
ont été déployés dans ce sens.
Quelques exceptions : [42, 47, 88].
Des implantations partielles sont présentes dans
Les méthodes par homotopie ne viennent pas sans leur lot de
problèmes. D'une part, si le système est
surdéterminé, le problème est mal posé d'un
point de vue numérique. Dans ce cas, le problème est
intrinsèquement irrésoluble par des voies exclusivement
numériques, du moins si on souhaite certifier les solutions. Or,
même en excluant des systèmes surdéterminés,
et en considérant exclusivement des systèmes zéro
dimensionnels avec équations et
inconnus, les méthodes par homotopie comportent
plusieurs inconvénients.
Premièrement, il est crucial que le système initial « facile à résoudre » ressemble autant que possible au système final qui nous intéresse réellement. En particulier, en prenant un système du même multi-degré, on espère que les deux systèmes admettent le même nombre de solutions. Malheureusement, tel n'est pas toujours le cas, comme on le voit sur l'exemple
qui admet seulement une solution au lieu de
. Dans ce cas, trois des
quatre chemins de l'homotopie partent vers l'infini. On peut
remédier au problème des chemins qui partent vers l'infini
en homogénéisant le système et en coupant par un
hyperplan affine générique :
Pour ce nouveau système, il n'y a plus de chemins qui partent à l'infini, mais il existe toujours trois chemin qui tendent vers une racine multiple qui nous intéresse pas.
Dans ce cas précis, il aurait été possible d'éviter ces trois chemins parasites, en prenant des systèmes initiaux et finaux qui ne se ressemblent pas seulement en degré mais aussi quant à leurs polytopes de Newton. Pour plus de détails, voir par exemple [90] et des travaux plus récents du même auteur. En général, il est difficile de trouver un système initial à résoudre qui ressemble suffisamment au système final pour que chaque solution du système initial se déforme en une unique solution du système final.
Une deuxième difficulté concerne les systèmes
dégénérés avec des racines multiples.
Reprenons l'exemple de la section
précédente dans
Mmx] |
use "continewz" |
Mmx] |
include "continewz/homotopy_solve.mmx" |
Mmx] |
type_mode? := false; |
Mmx] |
time_mode? := false; |
Mmx] |
significant_digits := 4; |
Mmx] |
x == coordinate ('x); |
Mmx] |
y == coordinate ('y); |
Mmx] |
z == coordinate ('z); |
Mmx] |
p == x*x - 2*x*z; |
Mmx] |
q == x*y - 2*z*z; |
Mmx] |
r == 3*x - 5*y + 7*z - 10; |
Mmx] |
homotopy_solve ([p,q,r], [x,y,z], 1.0) |
Pour une précision fixée, l'algorithme peine à
converger vers la solution triple ,
et s'arrête bien avant d'avoir atteint une bonne qualité
d'approximation. Ceci tient au fait que les méthodes naïves
de suivi de chemin sont à convergence quadratique pour des
solutions simples, mais seulement à convergence linéaire
pour des solutions multiples. Une technique pour remédier
à ce problème sera discutée dans la section 7.3.
Méthode « prédicteur-correcteur »
![]() |
![]() |
![]() |
|
![]() |
![]() |
![]() |
|
![]() |
![]() |
![]() |
(prédiction) |
![]() |
![]() |
![]() |
(correction) |
Contrôle de pas
Critère numérique d'acceptation
Contrôle de la précision
Surestimation pour un certain seuil
.
Toute méthode de certification d'une racine simple d'un
système polynomial donne lieu à une méthode de
certification pour des algorithmes de suivi de chemin en
remplaçant les scalaires par des petite boules qui bornent la
dépendance en de façon uniforme.
On peut par exemple utiliser la méthode de Krawczyk-Rump de la
section 6.6.1 ou [42].
Géométriquement parlant, ceci revient à certifier
que, pour des
dans une certaine boule, le chemin
à suivre reste dans une certaine
boîte comme dans la figure 7.1.
Remarque 7.1. Afin de certifier les zéros d'un système, il n'est pas forcément nécessaire de certifier les algorithmes de suivi de chemin : si l'algorithme numérique de suivi de chemin produit un nombre suffisant de solutions distinctes, on peut directement utiliser la méthode de Krawczyk-Rump pour les certifier.
La méthode de la section précédente conduit
à des tailles de pas inutilement
pessimistes. En effet à cause de la forme
géométrique des encadrements, on ne souffre pas seulement
de la surestimation de l'erreur due à la variation de
, mais aussi de la surestimation en
. Afin de réduire la
surestimation en
, il vaut
mieux encadrer le chemin par un ensemble qui suit mieux la courbe. Dans
[88, section 6.3], je montre comment faire cela en
évaluant l'homotopies
non pas en des
boules, mais en des modèles de Taylor d'un type particulier.
Considérons une homotopie générale
avec et
.
Pour
, toute solution
est donnée par une série de Laurent
algébrique
En particulier, en remplaçant par
avec
, on
obtient un « troupeau » de
solutions. Une méthode [88, section 7.2] pour
approcher des solutions multiples consiste à considerer tout le
troupeau comme un unique chemin dans un nouvel espace. Cette
méthode admet à la fois les avantages d'une
déflation [48, 51] et des
éclatements (des chemins distincts modulo
et de même multiplicité
ont des
limites distinctes dans le nouvel espace). En utilisant la FFT, les
troupeaux se suivent également bien d'un point de vue
numérique [88, section 5.2].
Idée : Considérer
comme « chemin » avec idéal
Représentation de (en
position générale)
Relever l'homotopie
Évaluer en
avec
Une question naturelle est de savoir quelle est l'efficacité des
méthodes par homotopie par rapport à des algorithmes
rapides pour calculer des bases de Gröbner [16, 32, 28]. La session
solutions, on observe que le résultat du calcul des
solutions certifiées prend environ une page, alors que la base de
Gröbner en prend plus de
(pour des raisons
d'espace, nous avons tronqué les résultats ici). Plus
qu'il y a de solutions, plus que ce ratio entre les tailles tend
à devenir grand.
Mmx] |
use "continewz" |
Mmx] |
include "continewz/homotopy_solve.mmx" |
Mmx] |
type_mode? := false; |
Mmx] |
time_mode? := true; |
Mmx] |
bit_precision := 128; |
Mmx] |
significant_digits := 5; |
Mmx] |
x == coordinate ('x); |
Mmx] |
y == coordinate ('y); |
Mmx] |
z == coordinate ('z); |
Mmx] |
p == 5*x*x*x*x - x*x*x*y + x*y*y*x - z*z*y + x*x - 3*x + y + 5; |
Mmx] |
q == 8*y*y*y*y + 3*y*y*z*z - x*y*z - 2*z*z*z + 23*x - y + 11; |
Mmx] |
r == 9*z*z*z - 3*x*x*x - x*y*z - x*y*x + y*y - x + z + 80; |
Mmx] |
homotopy_solve ([p,q,r], [x,y,z], ball 1.0) |
ms
Mmx] |
set_ordering graded_reverse_lex_ordering () |
Mmx] |
|
Bien sûr, la comparaison que nous venons de faire est favorable aux méthodes par homotopie. Toutefois, elle met en lumière un problème de fond concernant les bases de Gröbner : au moins sur certains exemples, la taille du résultat est beaucoup plus grande que nécessaire.
En outre, si on souhaite avoir une solution numérique, le simple
calcul d'une base de Gröbner n'est pas suffisant. Même si on
dispose n'une base pour l'ordre lexicographique, il faudra encore
trouver les racines d'un gros polynôme en une variable. Or ce
dernier problème pourrait se révéler plus dur que
le problème de départ. En effet, il y a moins d'espace
pour les racines dans que dans
, ce qui nous impose de calculer avec une plus
grande précision
,
comme on l'avait déjà constaté dans le chapitre 6.
Par contraste, la précision machine suffit dans de nombreux cas,
lorsque l'on applique des méthodes par homotopie sur le
système de départ.
Toutefois, les systèmes surdéterminés et les chemins partant vers l'infini forment deux problèmes importants pour les méthodes par homotopie. Il est donc fort probable qu'il n'existe pas une technique unique idéale pour la résolution de systèmes polynomiaux.
Ce qui soulève les questions de pouvoir combiner plusieurs méthodes, et, plus modestement, de rendre les résultats d'une méthode utilisables pour d'autres méthodes. À l'intérieur des systèmes de calcul de bases de Gröbner, on dispose par exemple de l'algorithme FGLM pour passer d'un ordre sur les monômes à un autre [29]. De la même manière, on pourra vouloir faire des conversions entre bases de Gröbner, représentations de Kronecker, systèmes triangulaires et des représentations numériques certifiées des variétés de solutions.
Par exemple, lorsque l'on dispose des racines
approchées d'un polynôme unitaire
, il est facile de reconstituer le polynôme en
calculant
et en retrouvant les coefficients par
développement en fractions continues. Cette approche se
généralise aux polynômes en plusieurs variables, et
permet le calcul d'une représentation de Kronecker à
partir de l'ensemble des solutions d'un système
zéro-dimensionnel [88, section 7.4]. Ceci permet en
particulier l'utilisation de méthodes numériques par
homotopie pour la résolution de systèmes
surdéterminés.
O. Aberth. Computable analysis. McGraw-Hill, New York, 1980.
G. Alefeld and J. Herzberger. Introduction to interval analysis. Academic Press, New York, 1983.
ANSI/IEEE. IEEE standard for binary floating-point arithmetic. Technical report, ANSI/IEEE, New York, 2008. ANSI-IEEE Standard 754-2008. Revision of IEEE 754-1985, approved on June 12, 2008 by IEEE Standards Board.
D. Bates, J. Hauenstein, A. Sommese, and C. Wampler. Bertini: Software for numerical algebraic geometry. http://www.nd.edu/~sommese/bertini/, 2006.
C. Beltrán and L.M. Pardo. Smale's 17th problem: Average polynomial time to compute affine and projective solutions. Journal of the AMS, 2008. To appear.
D. Bini and V.Y. Pan. Polynomial and matrix computations. Vol. 1. Birkhäuser Boston Inc., Boston, MA, 1994. Fundamental algorithms.
D. A. Bini and G. Fiorentino. Design, analysis, and implementation of a multiprecision polynomial rootfinder. Numerical Algorithms, 23:127–173, 2000.
E. Bishop and D. Bridges. Foundations of constructive analysis. Die Grundlehren der mathematische Wissenschaften. Springer, Berlin, 1985.
J. Blanck, V. Brattka, and P. Hertling, editors. Computability and complexity in analysis, volume 2064 of Lect. Notes in Comp. Sc., Berlin, Heidelberg, 2001. Springer.
A. Bostan, F. Chyzak, F. Ollivier, B. Salvy, É. Schost, and A. Sedoglavic. Fast computation of power series solutions of systems of differential equations. In Proceedings of the 18th ACM-SIAM Symposium on Discrete Algorithms, pages 1012–1021, New Orleans, Louisiana, U.S.A., January 2007.
A. Bostan, G. Lecerf, and É. Schost. Tellegen's principle into practice. In Proceedings of ISSAC 2003, pages 37–44. ACM, 2003.
B.L.J. Braaksma. Multisummability and Stokes multipliers of linear meromorphic differential equations. J. Diff. Eq, 92:45–75, 1991.
R.P. Brent and H.T. Kung.
algorithms for composition and reversion of power series. In
J.F. Traub, editor, Analytic Computational Complexity,
Pittsburg, 1975. Proc. of a symposium on analytic computational
complexity held by Carnegie-Mellon University.
R.P. Brent and H.T. Kung. Fast algorithms for composition and reversion of multivariate power series. In Proc. Conf. Th. Comp. Sc., pages 149–158, Waterloo, Ontario, Canada, August 1977. University of Waterloo.
R.P. Brent and H.T. Kung. Fast algorithms for manipulating formal power series. Journal of the ACM, 25:581–595, 1978.
B. Buchberger. Ein Algorithmus zum auffinden der Basiselemente des Restklassenringes nach einem null-dimensionalen Polynomideal. PhD thesis, University of Innsbruck, 1965.
D.G. Cantor and E. Kaltofen. On fast multiplication of polynomials over arbitrary algebras. Acta Informatica, 28:693–701, 1991.
D.V. Chudnovsky and G.V. Chudnovsky. Computer algebra in the service of mathematical physics and number theory (computers in mathematics, stanford, ca, 1986). In Lect. Notes in Pure and Applied Math., volume 125, pages 109–232, New-York, 1990. Dekker.
J.W. Cooley and J.W. Tukey. An algorithm for the machine calculation of complex Fourier series. Math. Computat., 19:297–301, 1965.
D. Coppersmith and S. Winograd. Matrix multiplication
via arithmetic progressions. In Proc. of the
Annual Symposium on Theory of Computing, pages 1–6,
New York City, may 25–27 1987.
Jean-Pierre Dedieu. Points fixes, zéros et la méthode de Newton. Number 54 in Mathématiques et Applications. SMAI-Springer Verlag.
J. Denef and L. Lipshitz. Decision problems for differential equations. The Journ. of Symb. Logic, 54(3):941–950, 1989.
F.J. Drexler. Eine Methode zur Berechnung sämtlicher Lösungen von Polynomgleichungssystemen. Numer. Math., 29(1):45–58, 1977.
C. Durvye. Algorithmes pour la décomposition primaire des idéaux polynomiaux de dimension nulle donnés en évaluation. PhD thesis, Univ. de Versailles (France), 2008.
J. Écalle. L'accélération des fonctions résurgentes (survol). Unpublished manuscript, 1987.
J. Écalle. Introduction aux fonctions analysables et preuve constructive de la conjecture de Dulac. Hermann, collection: Actualités mathématiques, 1992.
J. Écalle. Six lectures on transseries, analysable functions and the constructive proof of Dulac's conjecture. In D. Schlomiuk, editor, Bifurcations and periodic orbits of vector fields, pages 75–184. Kluwer, 1993.
J.-C. Faugère. A new efficient algorithm for computing Gröbner bases (F4). Journal of Pure and Applied Algebra, 139(1–3):61–88, 1999.
J.C. Faugère, P. Gianni, D. Lazard, and T. Mora. Efficient computation of zero-dimensional Gröbner bases by change of ordering. Journal of Symbolic Computation, 16(4):329–344, 1993.
M. Fürer. Faster integer multiplication. In Proceedings of the Thirty-Ninth ACM Symposium on Theory of Computing (STOC 2007), pages 57–66, San Diego, California, 2007.
J. von zur Gathen and J. Gerhard. Modern Computer Algebra. Cambridge University Press, 2-nd edition, 2002.
A. Giovini, T. Mora, G. Niesi, L. Robbiano, and C. Traverso. “one sugar cube, please” or selection strategies in the buchberger algorithm. In S. Watt, editor, Proc. ISSACâĂŹ91, pages 49–54, New York, 1991. ACM Press.
M. Giusti, K. Hägele, J. Heintz, J.E. Morais, J.L Monta na, and L.M. Pardo. Lower bounds for diophantine approximation. Journal of Pure and Applied Algebra, 117–118:277–317, 1997.
M. Giusti, J. Heintz, J.E. Morais, and L.M. Pardo. When polynomial equation systems can be solved fast? In G. Cohen, M. Giusti, and T. Mora, editors, Proc. AAECC'11, volume 948 of Lecture Notes in Computer Science. Springer Verlag, 1995.
X. Gourdon. Combinatoire, algorithmique et géométrie des polynômes. PhD thesis, École polytechnique, 1996.
A. Grzegorczyk. Computable functionals. Fund. Math., 42:168–202, 1955.
A. Grzegorczyk. On the definition of computable functionals. Fund. Math., 42:232–239, 1955.
A. Grzegorczyk. On the definitions of computable real continuous functions. Fund. Math., 44:61–71, 1957.
G. Hanrot, V. Lefèvre, K. Ryde, and P. Zimmermann. MPFR, a C library for multiple-precision floating-point computations with exact rounding. http://www.mpfr.org, 2000.
L. Jaulin, M. Kieffer, O. Didrit, and E. Walter. Applied interval analysis. Springer, London, 2001.
A. Karatsuba and J. Ofman. Multiplication of multidigit numbers on automata. Soviet Physics Doklady, 7:595–596, 1963.
R.B. Kearfott. An interval step control for continuation methods. SIAM J. Numer. Anal., 31(3):892–914, 1994.
R. Krawczyk. Newton-algorithmen zur bestimmung von nullstellen mit fehler-schranken. Computing, 4:187–201, 1969.
V. Kreinovich, A.V. Lakeyev, J. Rohn, and P.T. Kahl. Computational Complexity and Feasibility of Data Processing and Interval Computations. Springer, 1997.
B. Lambov. Interval arithmetic using sse-2. In Peter Hertling, Christoph Hoffmann, Wolfram Luther, and Nathalie Revol, editors, Reliable Implementation of Real Number Algorithms: Theory and Practice, volume 5045 of Lecture Notes in Computer Science, pages 102–113. Springer Berlin/Heidelberg, 2008.
G. Lecerf. Une alternative aux méthodes de
réécriture pour la résolution des systes algébriques.
PhD thesis, École polytechnique, 2001.
A. Leykin. NAG. http://www.math.uic.edu/~leykin/NAG4M2, 2009. Macaulay 2 package for numerical algebraic geometry.
Anton Leykin, Jan Verschelde, and Ailing Zhao. Algorithms in algebraic geometry, chapter Higher-order deflation for polynomial systems with isolated singular solutions, pages 79–97. Springer, New York, 2008.
K. Makino and M. Berz. Remainder differential algebras and their applications. In M. Berz, C. Bischof, G. Corliss, and A. Griewank, editors, Computational differentiation: techniques, applications and tools, pages 63–74, SIAM, Philadelphia, 1996.
K. Makino and M. Berz. Suppression of the wrapping effect by Taylor model-based validated integrators. Technical Report MSU Report MSUHEP 40910, Michigan State University, 2004.
A. Mantzaflaris and B. Mourrain. Deflation and certified isolation of singular zeros of polynomial systems. In A. Leykin, editor, Proc. ISSAC'11, pages 249–256, San Jose, CA, US, Jun 2011. ACM New York.
J. Martinet and J.-P. Ramis. Elementary acceleration and multisummability. Ann. Inst. Henri Poincaré, 54(4):331–401, 1991.
R.E. Moore. Automatic local coordinate transformations to reduce the growth of error bounds in interval computation of solutions to ordinary differential equation. In L.B. Rall, editor, Error in Digital Computation, volume 2, pages 103–140. John Wiley, 1965.
R.E. Moore. Interval Analysis. Prentice Hall, Englewood Cliffs, N.J., 1966.
A.P. Morgan. Solving polynomial systems using continuation for] engineering and scientific problems. Prentice-Hall, Englewood Cliffs, N.J., 1987.
Jean-Michel Muller. Elementary Functions, Algorithms and Implementation. Birkhauser Boston, Inc., 2006.
A. Neumaier. Interval methods for systems of equations. Cambridge university press, Cambridge, 1990.
V. Pan. How to multiply matrices faster, volume 179 of Lect. Notes in Math. Springer, 1984.
V. Y. Pan. Optimal and nearly optimal algorithms for approximating polynomial zeros. Comput. Math. Appl., 31(12):97–138, 1996.
V. Y. Pan. Univariate polynomials: nearly optimal algorithms for numerical factorization and root-finding. J. Symbolic Comput., 33(5):701–733, 2002.
S.M. Rump. Kleine Fehlerschranken bei Matrixproblemen. PhD thesis, Universität Karlsruhe, 1980.
S.M. Rump. Fast and parallel interval arithmetic. BIT, 39(3):534–554, 1999.
S.M. Rump. Verification methods: Rigorous results using floating-point arithmetic. Acta Numerica, 19:287–449, 2010.
L. Schlesinger. Handbuch der Theorie der linearen Differentialgleichungen, volume I. Teubner, Leipzig, 1895.
L. Schlesinger. Handbuch der Theorie der linearen Differentialgleichungen, volume II. Teubner, Leipzig, 1897.
A. Schönhage. The fundamental theorem of algebra in terms of computational complexity. Technical report, Math. Inst. Univ. of Tübingen, 1982.
A. Schönhage and V. Strassen. Schnelle Multiplikation grosser Zahlen. Computing, 7:281–292, 1971.
Alexandre Sedoglavic. Méthodes seminumériques en algèbre différentielle ; applications à l'étude des propriétés structurelles de systèmes différentiels algébriques en automatique. PhD thesis, École polytechnique, 2001.
M. Shub and S. Smale. Computational complexity. On the geometry of polynomials and a theory of cost. I. Ann. Sci. École Norm. Sup. (4), 18(1):107–142, 1985.
M. Shub and S. Smale. Computational complexity: on the geometry of polynomials and a theory of cost. II. SIAM J. Comput., 15(1):145–161, 1986.
S. Smale. The fundamental theorem of algebra and complexity theory. Bull. Amer. Math. Soc. (N.S.), 4(1):1–36, 1981.
S. Smale. Newton method estimates from data at one point. In R. E. Ewing, K. I. Gross, and C. F. Martin, editors, In the Merging of Disciplines: New Directions in Pure, Applied, and Computational Mathematics, pages 185–196. Springer-Verlag, 1986.
A.J. Sommese and C.W. Wampler. The Numerical Solution of Systems of Polynomials Arising in Engineering and Science. World Scientific, 2005.
V. Strassen. Gaussian elimination is not optimal. Numer. Math., 13:352–356, 1969.
A. Turing. On computable numbers, with an application to the Entscheidungsproblem. Proc. London Maths. Soc., 2(42):230–265, 1936.
J. van der Hoeven. Lazy multiplication of formal power series. In W. W. Küchlin, editor, Proc. ISSAC '97, pages 17–20, Maui, Hawaii, July 1997.
J. van der Hoeven. Fast evaluation of holonomic functions. TCS, 210:199–215, 1999.
J. van der Hoeven. Fast evaluation of holonomic functions near and in singularities. JSC, 31:717–743, 2001.
J. van der Hoeven. Relax, but don't be too lazy. JSC, 34:479–542, 2002.
J. van der Hoeven. Computations with effective real numbers. TCS, 351:52–60, 2006.
J. van der Hoeven. Around the numeric-symbolic computation of differential Galois groups. JSC, 42:236–264, 2007.
J. van der Hoeven. Efficient accelero-summation of holonomic functions. JSC, 42(4):389–428, 2007.
J. van der Hoeven. New algorithms for relaxed multiplication. JSC, 42(8):792–802, 2007.
J. van der Hoeven. Fast composition of numeric power series. Technical Report 2008-09, Université Paris-Sud, Orsay, France, 2008.
J. van der Hoeven. Making fast multiplication of polynomials numerically stable. Technical Report 2008-02, Université Paris-Sud, Orsay, France, 2008.
J. van der Hoeven. Newton's method and FFT trading. JSC, 45(8):857–878, 2010.
J. van der Hoeven. Efficient root counting for analytic functions on a disk. Technical report, HAL, 2011. http://hal.archives-ouvertes.fr/hal-00583139/fr/.
J. van der Hoeven. Reliable homotopy continuation. Technical report, HAL, 2011. http://hal.archives-ouvertes.fr/hal-00589948/fr/.
J. van der Hoeven, G. Lecerf, B. Mourain, et al. Mathemagix, 2002. http://www.mathemagix.org.
J. Verschelde. Homotopy continuation methods for solving polynomial systems. PhD thesis, Katholieke Universiteit Leuven, 1996.
J. Verschelde. PHCpack: A general-purpose solver for polynomial systems by homotopy continuation. ACM Transactions on Mathematical Software, 25(2):251–276, 1999. Algorithm 795.
J.W. von Gudenberg. Interval arithmetic on multimedia architectures. Reliable Computing, 8(4), 2002.
K. Weihrauch. Computable analysis. Springer-Verlag, Berlin/Heidelberg, 2000.