\documentclass{article}
%\oddsidemargin 5 mm
%\evensidemargin 5 mm
%\textwidth 16cm
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{times}
\usepackage{ifpdf}
\usepackage{makeidx}
\usepackage{graphicx}
\ifpdf
 \usepackage[pdftex,colorlinks]{hyperref}
\else
 \usepackage[ps2pdf,breaklinks=true,colorlinks=true,linkcolor=red,citecolor=green]{hyperref}
 \fi

\newtheorem{rem}{Remark}
\newcommand{\R}{{\mathbb{R}}}
\newcommand{\C}{{\mathbb{C}}}
\newcommand{\Z}{{\mathbb{Z}}}
\newcommand{\N}{{\mathbb{N}}}
\newcommand{\Q}{{\mathbb{Q}}}
\newcommand{\faux}{$\square\;$}
\newcommand{\vrai}{$\square\;$}
%\newcommand{\vrai}{$\boxtimes\;$}
%\newcommand{\item}{\item \faux}
%\newcommand{\item}{\item \faux}
\newtheorem{thm}{Theorem}

\newtheorem{exo}{Exercice}[section]
\input{giacfr.tex}
\giacmathjax

\title{Projets autour de Giac}

\author{Bernard Parisse\\Institut Fourier\\UMR 5582 du
  CNRS\\Universit\'e de Grenoble I}
\date{2017}

\makeindex
\bibliographystyle{plain}

\begin{document}
\begin{giacjshere}
\maketitle

\begin{abstract}
Giac est une librairie C++ de calcul formel g\'en\'eraliste. 
Ce document d\'ecrit l'\'etat actuel du projet Giac et 
ses d\'eveloppements potentiels.
\end{abstract}

\tableofcontents
%\printindex


\section{L'\'etat actuel du projet Giac}
Le projet Giac/Xcas a pour objectif de fournir une
alternative en logiciel libre des logiciels de calcul
formel g\'en\'eralistes commerciaux tels que Maple ou Mathematica.
\begin{itemize}
\item Giac est une librairie C++ interfa\c{c}able
avec du code C++ et d'autres langages de programmation (Java, Javascript,
Python). 
\item 
Xcas est une des interfaces de Giac destin\'e aux ordinateurs
personnels (PC sous Windows ou Linux et Mac)
\item 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). 
\item Certains logiciels utilisent
la librairie Giac, les plus importants \'etant Geogebra, 
les calculatrices HP Prime et les applications pour smartphones
et tablettes PocketCAS et HP Prime.
\item Enfin, il est possible de faire
interagir \LaTeX\ avec Giac pour cr\'eer des documents HTML avec
un bon rendu des expressions math\'ematiques et la possibilit\'e
de faire des calculs lorsqu'on consulte le document depuis son
navigateur (voir la section exemples \ref{sec:exemples} ci-dessous).
\end{itemize}

\subsection{Giac/Xcas}
\subsubsection{Petit historique}
Le projet Giac a d\'emarr\'e en 2000,
une premi\`ere interface Xcas a \'et\'e cr\'ee
deux ans apr\`es et des tests d'utilisation ont \'et\'e fait en
collaboration avec des enseignants du secondaire via l'IREM, suivi par une
remise \`a plat de l'interface en 2006 qui a permis ult\'erieurement
une diffusion dans le secondaire (manuels scolaires par exemple). 
Xcas obtient le 3i\`eme prix
dans la cat\'egorie logiciels scientifiques aux Troph\'ees du Libre en
2007. Il rentre dans la liste des logiciels
disponibles pour l'oral de mod\'elisation
de l'agr\'egation externe de math\'ematiques, puis peu de temps
apr\`es \`a l'agr\'egation interne et au CAPES de math\'ematiques.
Bien connu dans le milieu \'educatif, 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\"obner).

\subsubsection{Xcas aujourd'hui}
\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/giacfr.html}{{\tt Giac/Xcas}} (\cite{giac}) 
est t\'el\'echargeable depuis ma page web personnelle du laboratoire.
Il est depuis peu packag\'e par certaines distributions Linux 
(Fedora, Debian). Le nombre de t\'el\'echargements annuels 
d\'epasse les 30 000. 

\subsection{Xcas pour Firefox}
Il s'agit d'un projet r\'ecent pour fournir une interface utilisable
depuis un navigateur compatible avec Firefox sur divers mat\'eriels
(smartphones, tablettes aussi bien que PC ou Mac), sans installation.
Une fois le 
\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/xcasfr.html}{lien}
consult\'e, il n'est plus n\'ecessaire de disposer
d'une connexion Internet, la page est archiv\'ee dans le cache
du navigateur, et les calculs sont ex\'ecut\'es par la machine
locale.

\subsection{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~:
\begin{itemize}
\item C++, le langage de d\'eveloppement 
\item Python, avec le module \footahref{http://webusers.imj-prg.fr/\home{frederic.han}/xcas/giacpy/}{{\tt giacpy}} (\cite{giacpy})
\item Java, par une interface JNI (Java Native Interface)
\item JavaScript, par une compilation C++ vers Javascript par
\footahref{http://kripken.github.io/emscripten-site/}{{\tt emscripten}}
(\cite{emscripten}), utilis\'e par Xcas pour Firefox
(\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/giac/emgiac.tgz}{{\tt source}}) 
ou comme module
\footahref{https://www.npmjs.com/package/giac}{Node.JS natif}
pour une application Electron (portage r\'ealis\'e par Zoltán Kovács).
\end{itemize}

\subsection{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\'ecessiter de plugin pour lire du PDF),
et permet au lecteur d'ex\'ecuter les commandes ajout\'ees, apr\`es les
avoir \'eventuellement modifi\'ees, comme dans la section \ref{sec:exemples}.
Il est \'egalement possible de compiler vers du PDF (non interactif)
en incluant automatiquement les r\'esultats des calculs, cf. par
exemple la version \footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/giac/projet.tex}{PDF de ce document}.

Le processus 
utilise \footahref{http://hevea.inria.fr/distri/unstable/}{{\tt hevea}} 
(\cite{hevea}) un compilateur \LaTeX\ vers HTML, et
\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/giac/heveatomml.tgz}{{\tt heveatomml}} (\cite{hevea2mml}) 
pour le rendu en MathML des formules math\'ematiques.

Quelques exemples sont donn\'es en section \ref{sec:exemples}.
On trouvera d'autres exemples plus complets dans mes cours en ligne (dont
la conversion est en cours)~:
\begin{itemize}
\item Cours de L2 parcours physique
Courbes param\'etr\'ees et \'equations diff\'erentielles 
\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/mat249/mat237.html}{HTML},
\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/mat249/mat237.tex}{\LaTeX},
\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/mat249/mat237.pdf}{PDF}
\item
Algorithmes de calcul formel et num\'erique~:
\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/giac/algo.html}{HTML}
\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/giac/algo.tex}{\LaTeX}
\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/giac/algo.pdf}{PDF}
\end{itemize}

Pour plus d'informations,
consulter le document
\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/xcasfr.html}{Compiling \LaTeX\ to computer algebra-enabled HTML5}
et le 
\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/giac/projet.tex}{source \LaTeX} 
de ce fichier.

\subsection{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~:
\begin{itemize}
\item Les calculatrices HP Prime et les applications calculatrice
HP Prime pour smartphone, tablette et PC/Mac.
\item L'application PocketCAS pour iPhone et iPad et Mac.
\item l'application CAS Calc P11 (qui n'est plus gu\`ere diffus\'ee)
\item l'application Photomath a utilis\'e pendant quelques mois Giac
comme moteur de calcul, puis a bascul\'e sur son propre moteur de calcul
avec affichage des \'etapes de calcul
\end{itemize}


\section{Exemples} \label{sec:exemples}
\subsection{Trace (2-d graph)}
Cet exemple illustre l'utilisation d'un curseur pour visualiser que
l'enveloppe des normales \`a une courbe, ici une ellipse, est
sa d\'evelopp\'ee (ici une astroide).
La liste des normales \verb|L| est initialis\'ee au chargement de la page HTML.
\begin{giaconload}L:=[]\end{giaconload}
\giacslider{t0}{-5}{5}{0.1}{0.7}{gl_x=-6..6;gl_y=-4..4;G:=plotparam([2*cos(t),sin(t)],t=0..2*pi);M:=element(G,evalf(t0));T:=tangent(M);N:=perpendicular(M,T);L:=append(L,N);evolute(G,color=red)}

\subsection{Section d'un cone (3-d)}
$C$ est un cone de centre l'origine, axe de direction $(0,0,1)$, 
et angle
$\frac{\pi}{6}$, $P$ est un plan d'\'equation $z=my+3$. 
$m$ est controll\'e par un curseur, lorsque $m$ varie l'intersection 
est une ellipse ou une hyperbole (ou une parabole pour la valeur limite)
\giacslider{m}{-5}{5}{0.1}{0.7}{
C:=cone([0,0,0],[0,0,1],pi/6, display=green+filled);
P:=plane(z=evalf(m)*y+3,display=cyan+filled);
}

\subsection{Dunford decomposition (CAS)}
Un programme calculant la d\'ecomposition de Dunford
d'une matrice par la m\'ethode de Newton.
Il est interpr\'et\'e au chargement.
\begin{giaconload}
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:;
\end{giaconload}
Exemple~: on d\'efinit $J$ une matrice presque diagonale, 
$A$ une matrice semblable, et on teste la d\'ecomposition de Dunford
de $A$.
$$ J=\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} $$

\giacinputbigmath{J:=[[2,0,0],[0,1,1],[0,0,1]]; P:=trn([[1,2,3],[0,-1,4],[0,0,1]]); A:=P*J*inv(P)}\\
\giacinputbigmath{D,N:=dunford(A); N^2; P*diag(diag(J))*inv(P)}\\

\subsection{Champ des tangentes}
On affiche le champ des tangentes de l'\'equation diff\'erentiele ordinaire
$$\frac{dy}{dt}=-y+cos(t)$$
et une solution correspondant \`a la condition initiale $y(0)$ 
que l'utilisateur peut modifier avec un curseur
\giacslider{y0}{-5}{5}{0.1}{1.0}{gl_x=-5..5; gl_y=-3..3;
plotfield(-y+cos(t),[t=-5..5,y=-3..3],xstep=0.4,ystep=0.4);
plotode(-y+cos(t),[t=-5..5,y],[0,y0],tstep=0.1,color=red)
}

\subsection{Gr\"obner basis (CAS)}
Le noyau de calcul formel peut calculer des bases de Gr\"obner non triviales. 
Evidemment, le code JavaScript est significativement plus lent
que la version native de Giac/Xcas.
\begin{giaconload}
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]:;
\end{giaconload}
Base sur le corps $\mathbb{Z}/16777213$
\giacinputbigmath{G:=gbasis(kat7 mod 16777213,[x1,x2,x3,x4,x5,x6,x7,x8]):; size(G); G[20];}
Base sur $\mathbb{Q}$
\giacinputbigmath{G:=gbasis(kat7,[x1,x2,x3,x4,x5,x6,x7,x8]):; size(G); G[20];}


\section{Pistes de d\'eveloppement.}
\begin{itemize}
\item Traduction en anglais de meilleure qualit\'e et plus compl\`ete
de la documentation en fran\c{c}ais
\item Am\'elioration de l'interface HTML5 actuelle
\footahref{https://www-fourier.ujf-grenoble.fr/\home{parisse}/xcasfr.html}{Xcas pour Firefox},
traduction en anglais. 
\item Remise \`a plat du site web avec une adresse propre
\item Tests de l'interface HTML5 au lyc\'ee pour le calcul formel
et l'enseignement de l'algorithmique.
Mise au point si cela est possible
d'un mode examen comme sur calculatrices?
\item Communication autour de Giac/Xcas (participation aux
journ\'ees de l'APMEP, organisation de journ\'ees Xcas, discussions
avec l'inspection g\'en\'erale...)
\end{itemize}

\bibliography{latex.bib}

\end{giacjshere}
\end{document}
