L'objectif principal de cette introduction au calcul formel sera d'en montrer les algorithmes de base, avec, à chaque fois, des exemples d'applications. Les algorithmes étudiés permettrons par exemple de répondre à des questions telles :
(Indication : on sait que les angles entre les liaisons carbone-carbone successives ont pour cosinus -1/3 et que les atomes de carbone sont libres de leur rotation autour des liaisons. On pourra effectuer plusieurs éliminations polynomiales.)
(Indication : faire pivoter une paire de droites orthogonales autour du point fixe et obtenir une paramétrisation du point variable.)
(Indication : calculer un approximant de Padé-Hermite.)
(Indication : utiliser un algorithme de réduction de réseau.)
(Indication : considérer des approximations rationnelles de V et des puissances de pi et utiliser l'algorithme LLL.)
(Indication : écrire un système d'équations différentielles et de récurrences vérifiées par la fonction fn(p,x) et se débarrasser de x.)
Par les techniques utilisées (souvent, de l'algèbre) et les objectifs visés (algorithmiser des questions mathématiques), le cours s'adresse à un public d'informaticiens mathématiquement réceptifs. Les compléments mathématiques nécessaires, limités, seront faits lorsque le besoin s'en fera sentir.
Les opérations élémentaires, somme, produit et division d'entiers et de polynômes, sont au centre de la plupart des algorithmes de calcul formel. On présentera quelques solutions classiques pour la multiplication rapide, culminant dans les algorithmes de type FFT (Fast Fourier Transform). On verra ensuite un premier algorithme d'élimination, l'algorithme d'Euclide, qui s'applique aussi bien aux entiers qu'aux polynômes. Ses applications sont nombreuses, on verra notamment les approximants de Padé et les calculs de résultants.
Les questions relatives aux opérations matricielles sont extrêmement variées. D'une part, on montrera comment la multiplication, l'inversion, le calcul du polynôme caractéristique, sont de complexité équivalente, lorsqu'on traite des matrices à coefficients dans un corps. On introduira la notion d'exposant de l'algèbre linéaire, qui vient mesurer cette complexité. On évoquera ensuite l'algorithmique de l'algèbre linéaire creuse, qui permet de traiter des matrices de taille très conséquente, à plusieurs centaines de milliers d'entrées. Enfin, on traitera des questions relatives aux matrices ayant d'autres types de coefficients, notamment des entrées entières, des séries formelles, voire des nombres flottants.
Les bases de Gröbner fournissent une extension de l'algorithme d'Euclide pour le cas de polynômes en plusieurs variables. L'algorithme de Buchberger pour le calcul de bases de Gröbner fournit une procédure d'élimination pour le cas de plusieurs variables. Cette approche algorithmique importante a de nombreuses applications en géométrie (notamment en géométrie algébrique), par exemple à la démonstration semi-automatique de théorèmes de géométrie et à la recherche d'équations implicites de courbes algébriques paramétrées. Une autre application très importante est l'utilisation des bases de Gröbner pour la résolution de systèmes de polynômes en plusieurs variables. La contrepartie de la large applicabilité de cette théorie est sa complexité élevée, doublement exponentielle, au moins dans le cas le pire.
Étant donnés des vecteurs V1, ..., Vm dans l'espace Zn, on appelle réseau engendré par V1, ..., Vm l'ensemble de leurs combinaisons linéaires à coefficients entiers. Le problème de trouver le plus court vecteur dans un réseau est NP-dur, il est donc peu vraisemblable que l'on dispose prochainement d'un algorithme efficace pour le traiter. Si l'on relâche la contrainte d'optimalité, il devient possible de trouver un vecteur "assez" court en temps polynomial, en utilisant l'algorithme LLL (pour "Lenstra, Lenstra, Lovasz"). Ses applications sont extrêmement nombreuses et vont de la théorie des nombres aux problèmes de sac à dos, en passant par la factorisation des polynômes.
À la main, le calcul d'une intégrale définie passe souvent par la recherche d'une primitive. Il en est de même en calcul formel, on l'on recherche de plus une forme explicite. Le cas de base, l'intégration des fractions rationnelles, sera traité en détail, puis l'algorithme de Risch sera abordé dans ses grandes lignes.
Le calcul formel s'intéresse aussi à la résolution en formules explicites d'équations différentielles ou à l'inverse, à la manipulation de solutions données implicitement comme solutions d'équations différentielles. On s'intéressera dans ce cours tout particulièrement au cas des équations différentielles linéaires. On verra tout d'abord comment en rechercher les solutions polynomiales, rationnelles et exponentielles, puis des méthodes de manipulation permettant le calcul d'intégrales définies paramétrées.