12.07.2015 Views

Algorithmes de calcul formel - Free

Algorithmes de calcul formel - Free

Algorithmes de calcul formel - Free

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1.2 Structures <strong>de</strong> donnéesOn a vu plus haut qu’on souhaitait manipuler <strong>de</strong>s entiers <strong>de</strong> taille non fixe,<strong>de</strong>s réels <strong>de</strong> précision fixe ou non, <strong>de</strong>s fractions, <strong>de</strong>s nombres complexes, <strong>de</strong>s extensionsalgébriques, <strong>de</strong>s paramètres, <strong>de</strong>s expressions symboliques. La plupart <strong>de</strong>ssystèmes proposent un type générique qui recouvre ces divers types <strong>de</strong> scalaire. Onpeut par exemple utiliser un type structuré comportant un champ type et la donnéeou un pointeur sur la donnée (avec dans ce cas un pointeur sur un compteur <strong>de</strong> références<strong>de</strong> la donnée pour pouvoir la détruire dès qu’elle n’est plus référencée 1 ).En programmation orientée objet, on utiliserait plutôt un type abstrait dont dériventces différents scalaires et le polymorphisme.Il faut aussi un type pour les vecteurs, les matrices et les listes. Il faut prendregar<strong>de</strong> à la métho<strong>de</strong> utilisée par le système lorsqu’on modifie un élément d’un vecteur,matrice ou liste : soit on effectue une copie <strong>de</strong> tout l’objet en modifiant l’élément,soit on modifie l’élément <strong>de</strong> l’objet original. La première métho<strong>de</strong> (par valeur)est plus aisée à comprendre pour un débutant mais la secon<strong>de</strong> métho<strong>de</strong> (parréférence) est bien plus efficace.On peut se poser la question <strong>de</strong> savoir s’il faut inclure ces types dans le typegénérique ; en général la réponse est affirmative, une <strong>de</strong>s raisons étant que les interpréteursqui permettront <strong>de</strong> lire <strong>de</strong>s données dans un fichier texte sont en généralbasé sur le couple <strong>de</strong> logiciels lex(flex)/yacc(bison) qui ne peut compilerqu’à <strong>de</strong>stination d’un seul type. Ceci permet également d’unifier en un seultype symbolique les fonctions ayant un ou plusieurs arguments en voyant plusieursarguments comme un vecteur d’arguments. Les fonctions sont le plus souvent ellemêmeincluses dans le type générique permettant ainsi à l’utilisateur <strong>de</strong> saisir <strong>de</strong>scomman<strong>de</strong>s ou programmes fonctionnels (on peut utiliser une fonction comme argumentd’une comman<strong>de</strong>).Pour <strong>de</strong>s raisons d’efficacité, les systèmes <strong>de</strong> <strong>calcul</strong> <strong>formel</strong> utilisent souvent<strong>de</strong>s représentations particulières pour les polynômes dont on a dit qu’ils jouaientun rôle central. Pour les polynômes à une variable, on peut utiliser la liste <strong>de</strong>s coefficientsdu polynôme, on parle alors <strong>de</strong> représentation <strong>de</strong>nse. On peut aussi déci<strong>de</strong>r<strong>de</strong> ne stocker que les coefficients non nuls, on parle alors <strong>de</strong> représentation creuse(on stocke alors un couple formé par le coefficient et le <strong>de</strong>gré du monôme correspondant).Pour les polynômes à plusieurs variables, on peut les considérer comme<strong>de</strong>s polynômes à une variable à coefficients polynomiaux, on parle alors <strong>de</strong> représentationrécursive. On peut aussi déci<strong>de</strong>r <strong>de</strong> ne pas briser la symétrie entre lesvariables (pas <strong>de</strong> variable principale), on parle alors <strong>de</strong> représentation distribuée,le plus souvent les représentation distribuées sont creuses car les représentations<strong>de</strong>nses nécessitent très vite beaucoup <strong>de</strong> coefficients. Les métho<strong>de</strong>s <strong>de</strong> représentationcreuses sont parfois aussi utilisées pour les matrices ayant beaucoup <strong>de</strong> coefficientsnuls.Voyons maintenant plus précisément sur quelques exemples <strong>de</strong> logiciels <strong>de</strong> <strong>calcul</strong><strong>formel</strong> répandus quelles structures <strong>de</strong> données sont utilisées. Plusieurs élémentsentrent en compte dans les choix faits :1 Certains systèmes <strong>de</strong> <strong>calcul</strong> <strong>formel</strong> (<strong>calcul</strong>atrices par exemple) utilisent d’ailleurs <strong>de</strong>s métho<strong>de</strong>sspécifiques pour gérer le problème <strong>de</strong> la fragmentation <strong>de</strong> la mémoire, appelés “garbage collector”.Ce type <strong>de</strong> métho<strong>de</strong> est intégré dans <strong>de</strong>s langages comme Lisp ou Java, en C/C++ on trouve <strong>de</strong>slibraries pour cela, par exemple GC <strong>de</strong> Boehm, incluse dans la distribution <strong>de</strong> GCC.7

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!