Nicolas M. Thiéry Nicolas.Thiery@math.u-psud.fr http://Nicolas.Thiery.name/ /home/doc/nthiery/Agregation/ Objectifs: - Savoir illustrer un enseignement: - Présentation d'exemples de tailles plus conséquentes - Évacuation des détails des calculs sans intérêt pédagogique - Interactivité, gestion du rythme, expérimentation avec la classe - Possibilité pour l'élève de refaire les calculs, et d'expérimenter avec - Comprendre le fonctionnement général des outils de calcul formel - Aborder l'algèbre avec un autre point de vue, plus constructif - Apprendre à manipuler de la bibliographie Moyens: - Expérimentation avec les outils - Programmation d'algorithmes classiques pour bien les comprendre - Étude de textes ------------------------------------------------------------------------------ Calcul Formel: Qu'est-ce? - Calcul exact (par opposition à calcul numérique): >> 1 + 7 / 3 >> 1.0 + 7 / 3 >> 100! >> float(100!) - Calcul algébrique (Computer Algebra): >> Q := Dom::Rational: Qx := Dom::Fraction(Dom::UnivariatePolynomial(x, Q)): F := Dom::AlgebraicExtension(Qx, poly(z^2 - x, [z])): P := Dom::UnivariatePolynomial(u, F): >> P(u*z)*P(z) >> P(u + x*z) * P(u - x*z) >> factor(P(u^2 - x^3)) - Calcul symbolique: >> int( 1 + sqrt(x), x=0..t ); >> subs(%, t=0.3); >> sum(1/i^2, i=1..infinity) ------------------------------------------------------------------------------ Composants d'un Système de Calcul Formel (Computer Algebra System): - Arithmétique: entiers longs, corps finis, ... - Polynômes, fractions rationnelles, matrices, ... - Sommations, intégration, dérivation, limites symbolique - Solveurs (linéaire, polynômiaux, équations différentielles, ...) - Lien calcul numérique - Bases de données (nombres premiers, groupes classiques, ...) - Langage de programmation et structures de données (pourquoi programmer?) - Gestion de mémoire - Interface avec d'autres systèmes - Interface utilisateur ------------------------------------------------------------------------------ Systèmes généraux: Mathematica, Maple, MuPAD, Macsima, Axiom, ... Systèmes spécialisés: Magma, GAP, Linbox, Pari, NTL, ... Avantages Maple: - Très répandu - Interface bien rodée - Beaucoup de contributions, bibliothèque plus avancée Avantages MuPAD: - Langage de programmation beaucoup plus propre (programmation orientée objet, ...) - Débogueur, ... - Bibliothèque bien intégrée et cohérente - Assez ouvert, à défaut d'être libre - Pas trop cher ------------------------------------------------------------------------------ Premiers calculs (à faire sous Maple, MuPAD ou autre!): - Tutorial Maple (dans l'aide en ligne) - Tutorial MuPAD (/usr/local/MuPAD/share/doc/en/tutorium.pdf) - p. 16-17, 31-33 du poly ci-dessous (sans regarder les corrections!) ------------------------------------------------------------------------------ Caractéristiques communes: - Noyau / Interpréteur / Bibliothèque; >> expose(combinat::multinomial) >> debug(partfrac(1 / (1-x^2))) - Représentation arborescentes des objets, notion d'opérandes a + b * c + d * e * sin(f)^g Exercices, /usr/local/MuPAD/share/doc/en/tutorium.pdf p. 55 - Gestion automatique de la mémoire avec comptage de références et / ou glaneur de cellule: - Signature => ensembles et tables d'association >> liste := [sin(1+x), 3, sin(1+x)]; >> ensemble := { sin(1+x), 3, sin(1+x) } >> tableAssociative := table( sin(1+x) = 1, 3 = 2 ) >> tableAssociative[3] >> tableAssociative[sin(1+x)] - Typage dynamique (types sur les objets) >> var := 1: domtype(1) >> var := "bla": domtype(var) >> domtype(a + b * c + d * e * sin(f)^g) >> mat := matrix([[1,2],[3,4]]); >> domtype(mat), mat::dom >> expose(mat::dom::_negate) - Sémantique de copie >> l1 := [1, 2, 3]; >> l2 := subs(l, 1=2); >> l1 - Programmation impérative et fonctionnelle ------------------------------------------------------------------------------ Quelques références: - Maple: http://www.maplesoft.com/ - MuPAD: http://www.mupad.com/ - Tutorial MuPAD: Bouquin (traduit en français!) Sur place: /usr/local/MuPAD/share/doc/en/tutorium.pdf Sur le web: http://research.mupad.de/doc/31/eng/index.html - Tutorial Maple: Help -> Introduction -> Getting Started - Utilisation du système de calcul formel libre XCAS pour l'agreg: http://www-fourier.ujf-grenoble.fr/~parisse/agreg.html - Shoup: A Computational Introduction to Number Theory and Algebra http://shoup.net/ntb/ - Poly d'introduction à la programmation scientifique avec MuPAD: http://www-lih.univ-lehavre.fr/~olivier/Enseignement/l1/cours/MuPAD/support/Programmation_scientifique_polyp.pdf