Projets autour de Giac

Bernard Parisse
Institut Fourier
UMR 5582 du CNRS
Université de Grenoble I

2017

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.

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 :

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) :

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 :

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

=
Not evaled

2.2  Section d’un cone (3-d)

CC est un cone de centre l’origine, axe de direction (0,0,1)(0,0,1), et angle π6\frac{\pi}{6}, PP est un plan d’équation z=my+3z=my+3. mm est controllé par un curseur, lorsque mm varie l’intersection est une ellipse ou une hyperbole (ou une parabole pour la valeur limite)

=
Not evaled

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 JJ une matrice presque diagonale, AA une matrice semblable, et on teste la décomposition de Dunford de AA. J=(2 0 0 0 1 1 0 0 1),P=(1 0 0 2 1 0 3 4 1),A=PJP 1J=\left(\begin{array}{ccc} 2 & 0 & 0 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{array}\right) , \quad P=\left(\begin{array}{ccc} 1 & 0 & 0 \\ 2 & -1 & 0 \\ 3 & 4 & 1 \end{array}\right), \quad A=PJP^{-1}



2.4  Champ des tangentes

On affiche le champ des tangentes de l’équation différentiele ordinaire dydt=y+cos(t)\frac{dy}{dt}=-y+cos(t) et une solution correspondant à la condition initiale y(0)y(0) que l’utilisateur peut modifier avec un curseur

=
Not evaled

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 /16777213\mathbb{Z}/16777213

Base sur \mathbb{Q}

3  Pistes de développement.

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.