Projets autour de GiacBernard Parisse |
Résumé: Giac est une librairie C++ de calcul formel généraliste. Ce document décrit l’état actuel du projet Giac et ses développements potentiels.
Table des matières
1 L’état actuel du projet Giac
Le projet Giac/Xcas a pour objectif de fournir une alternative en logiciel libre des logiciels de calcul formel généralistes commerciaux tels que Maple ou Mathematica.
- Giac est une librairie C++ interfaçable avec du code C++ et d’autres langages de programmation (Java, Javascript, Python).
- Xcas est une des interfaces de Giac destiné aux ordinateurs personnels (PC sous Windows ou Linux et Mac)
- Xcas pour Firefox est une interface web directement utilisable depuis un navigateur compatible avec Firefox et qui fonctionne sur une large palette d’appareils (PC, Mac, smartphones, tablettes).
- Certains logiciels utilisent la librairie Giac, les plus importants étant Geogebra, les calculatrices HP Prime et les applications pour smartphones et tablettes PocketCAS et HP Prime.
- Enfin, il est possible de faire interagir LATEX avec Giac pour créer des documents HTML avec un bon rendu des expressions mathématiques et la possibilité de faire des calculs lorsqu’on consulte le document depuis son navigateur (voir la section exemples 2 ci-dessous).
1.1 Giac/Xcas
1.1.1 Petit historique
Le projet Giac a démarré en 2000, une première interface Xcas a été crée deux ans après et des tests d’utilisation ont été fait en collaboration avec des enseignants du secondaire via l’IREM, suivi par une remise à plat de l’interface en 2006 qui a permis ultérieurement une diffusion dans le secondaire (manuels scolaires par exemple). Xcas obtient le 3ième prix dans la catégorie logiciels scientifiques aux Trophées du Libre en 2007. Il rentre dans la liste des logiciels disponibles pour l’oral de modélisation de l’agrégation externe de mathématiques, puis peu de temps après à l’agrégation interne et au CAPES de mathématiques. Bien connu dans le milieu éducatif, il reste encore peu connu dans le milieu scientifique, bien que Giac soit parmi les logiciels les plus efficaces pour certains calculs polynomiaux (par exemple bases de Gröbner).
1.1.2 Xcas aujourd’hui
Giac/Xcas ([4]) est téléchargeable depuis ma page web personnelle du laboratoire. Il est depuis peu packagé par certaines distributions Linux (Fedora, Debian). Le nombre de téléchargements annuels dépasse les 30 000.
1.2 Xcas pour Firefox
Il s’agit d’un projet récent pour fournir une interface utilisable depuis un navigateur compatible avec Firefox sur divers matériels (smartphones, tablettes aussi bien que PC ou Mac), sans installation. Une fois le lien consulté, il n’est plus nécessaire de disposer d’une connexion Internet, la page est archivée dans le cache du navigateur, et les calculs sont exécutés par la machine locale.
1.3 Interaction avec d’autres logiciels libres
Giac est le moteur de calcul formel de Geogebra, ce qui en fait l’interface avec le plus grand nombre potentiel d’utilisateurs (30 millions dans le monde).
Giac est un package du projet Sage.
Les interfaces de calcul en ligne Smartcas et Swiftcalc utilisent Giac pour le calcul formel.
Les langages de programmation suivants peuvent utiliser Giac :
- C++, le langage de développement
- Python, avec le module giacpy ([1])
- Java, par une interface JNI (Java Native Interface)
- JavaScript, par une compilation C++ vers Javascript par emscripten ([5]), utilisé par Xcas pour Firefox (source) ou comme module Node.JS natif pour une application Electron (portage réalisé par Zoltán Kovács).
1.4 Interaction avec LATEX
Il s’agit de compiler vers HTML un fichier source LATEX contenant des lignes de commande Giac. Le fichier obtenu est consultable depuis un navigateur (sans nécessiter de plugin pour lire du PDF), et permet au lecteur d’exécuter les commandes ajoutées, après les avoir éventuellement modifiées, comme dans la section 2. Il est également possible de compiler vers du PDF (non interactif) en incluant automatiquement les résultats des calculs, cf. par exemple la version PDF de ce document.
Le processus utilise hevea ([2]) un compilateur LATEX vers HTML, et heveatomml ([3]) pour le rendu en MathML des formules mathématiques.
Quelques exemples sont donnés en section 2. On trouvera d’autres exemples plus complets dans mes cours en ligne (dont la conversion est en cours) :
- Cours de L2 parcours physique Courbes paramétrées et équations différentielles HTML, LATEX, PDF
- Algorithmes de calcul formel et numérique : HTML LATEX PDF
Pour plus d’informations, consulter le document Compiling LATEX to computer algebra-enabled HTML5 et le source LATEX de ce fichier.
1.5 La valorisation
Le code source de Giac est normalement disponible selon la licence libre GPL3, mais il est aussi disponible sous une licence commerciale pour des entreprises souhaitant l’utiliser sans diffuser leur code source, en contrepartie du versement de royalties. C’est le cas de plusieurs projets :
- Les calculatrices HP Prime et les applications calculatrice HP Prime pour smartphone, tablette et PC/Mac.
- L’application PocketCAS pour iPhone et iPad et Mac.
- l’application CAS Calc P11 (qui n’est plus guère diffusée)
- l’application Photomath a utilisé pendant quelques mois Giac comme moteur de calcul, puis a basculé sur son propre moteur de calcul avec affichage des étapes de calcul
2 Exemples
2.1 Trace (2-d graph)
Cet exemple illustre l’utilisation d’un curseur pour visualiser que
l’enveloppe des normales à une courbe, ici une ellipse, est
sa développée (ici une astroide).
La liste des normales L
est initialisée au chargement de la page HTML.
L:=[]
onload
2.2 Section d’un cone (3-d)
est un cone de centre l’origine, axe de direction , et angle , est un plan d’équation . est controllé par un curseur, lorsque varie l’intersection est une ellipse ou une hyperbole (ou une parabole pour la valeur limite)
2.3 Décomposition de Dunford (CAS)
Un programme calculant la décomposition de Dunford d’une matrice par la méthode de Newton. Il est interprété au chargement.
function dunford(A) local U,p,q,q1,j,d,n; U:=A; n:=nrows(U); p:=charpoly(U); q:=p/gcd(p,p'); // square free part q1:=q'; for (j:=1;j<=n;j:=2*j){ d:=inv(horner(q1,U))*horner(q,U); // Newton step if (d==0*d) return U,A-U; U:=U-d; } return U,A-U; end:;
onload
Exemple : on définit une matrice presque diagonale,
une matrice semblable, et on teste la décomposition de Dunford
de .
2.4 Champ des tangentes
On affiche le champ des tangentes de l’équation différentiele ordinaire et une solution correspondant à la condition initiale que l’utilisateur peut modifier avec un curseur
2.5 Bases de Gröbner (CAS)
Le noyau de calcul formel peut calculer des bases de Gröbner non triviales. Evidemment, le code JavaScript est significativement plus lent que la version native de Giac/Xcas.
kat7:=[-x1+2*x8^2+2*x7^2+2*x6^2+2*x5^2+2*x4^2+2*x3^2+2*x2^2+x1^2, -x2+2*x8*x7+2*x7*x6+2*x6*x5+2*x5*x4+2*x4*x3+2*x3*x2+2*x2*x1, -x3+2*x8*x6+2*x7*x5+2*x6*x4+2*x5*x3+2*x4*x2+2*x3*x1+x2^2, -x4+2*x8*x5+2*x7*x4+2*x6*x3+2*x5*x2+2*x4*x1+2*x3*x2, -x5+2*x8*x4+2*x7*x3+2*x6*x2+2*x5*x1+2*x4*x2+x3^2, -x6+2*x8*x3+2*x7*x2+2*x6*x1+2*x5*x2+2*x4*x3, -x7+2*x8*x2+2*x7*x1+2*x6*x2+2*x5*x3+x4^2, -1+2*x8+2*x7+2*x6+2*x5+2*x4+2*x3+2*x2+x1]:;
onload
Base sur le corps
3 Pistes de développement.
- Traduction en anglais de meilleure qualité et plus complète de la documentation en français
- Amélioration de l’interface HTML5 actuelle Xcas pour Firefox, traduction en anglais.
- Remise à plat du site web avec une adresse propre
- Tests de l’interface HTML5 au lycée pour le calcul formel et l’enseignement de l’algorithmique. Mise au point si cela est possible d’un mode examen comme sur calculatrices?
- Communication autour de Giac/Xcas (participation aux journées de l’APMEP, organisation de journées Xcas, discussions avec l’inspection générale...)
Références
- [1]
- Frédéric Han. giacpy. http://webusers.imj-prg.fr/ frederic.han/xcas/giacpy/, 2016.
- [2]
- Luc Maranget. Hevea: LaTeX to HTML5 compiler (unstable version). http://hevea.inria.fr/distri/unstable/, 2017.
- [3]
- Bernard Parisse. LaTeX to Mathml converter, fork for hevea output support. www-fourier.ujf-grenoble.fr/ parisse/giac/heveatomml.tgz, 2017.
- [4]
- Bernard Parisse and Renée De Graeve. Giac/Xcas Computer Algebra System. www-fourier.ujf-grenoble.fr/ parisse/giac.html, 2017.
- [5]
- Alon Zakai. Emscripten: A C/C++ to Javascript compiler. kripken.github.io/emscripten-site/, 2017.