%$\talloblong$$\llbracket$Dans les r\'eponses, les vecteurs sont parenth\'es\'es avec {\tt [} et {\tt ]}, les matrices avec [ et ]}, les polyn\^omes avec {\tt []} et {\tt[]} les ensembles avec {{\bf[} et {\bf]}.

%L'ordinateur peut faire plus de calculs que le cerveau de l'homme car il n'a que ça à faire. 	
\documentclass[a4paper,11pt]{book}
%\textwidth 11,8 cm
%\textheight 17 cm
\textheight 23 cm
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{stmaryrd}
\usepackage{makeidx}
\usepackage{times}
%\usepackage{mathptmx}
%Uncomment next line for pdflatex and use includegraphics with eps file
% for latex2html don't use the option [width=\textwidth]
% check that xfig files are exported magnif 100%

\usepackage{ifpdf}
\ifpdf
 \usepackage[pdftex,colorlinks]{hyperref}
\else
 \usepackage[ps2pdf,breaklinks=true,colorlinks=true,linkcolor=red,citecolor=green]{hyperref}
 \usepackage{pst-plot}
\fi
\usepackage{pst-plot}
\usepackage{graphicx}

%\def\@evenhead{\thepage\hfill{\footnotesize\textit{\leftmark}}}
%\def\@oddhead{\footnotesize{\textit{\rightmark}}\hfill\thepage}
%\usepackage{hp}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{latexsym}

\newcommand{\R}{{\mathbb{R}}}
\newcommand{\C}{{\mathbb{C}}}
\newcommand{\Z}{{\mathbb{Z}}}
\newcommand{\N}{{\mathbb{N}}}
\newcommand{\cir}{\symbol{94}}
\newcommand{\note}{\symbol{32}}
%\usepackage[pdftex]{hyperref}
\title {Calcul formel \\et \\ Math\'ematiques\\ avec\\ {\tt Xcas}}
\author{Ren\'ee De Graeve\\ Ma\^itre de Conf\'erence à Grenoble I}
\date{}
\makeindex  
\usepackage{cutting}

\begin{document}
\newcommand{\asinh}{\,\,\mbox{asinh\,}}
\newcommand{\atanh}{\,\,\mbox{atanh\,}}
\maketitle
%{\up bonjour }{\it bonjour }{\sl bonjour }{\sc bonjour }{\md bonjour }\\
%{\bf bonjour }{\rm bonjour }{\sf bonjour }{\tt bonjour }
{\bf \centerline{Remerciements}}

\vspace{1cm}

Je  remercie:
 \begin{itemize}
\item Bernard Parisse pour ses pr\'ecieux conseils et ses remarques sur ce texte,

 \end{itemize}

\vfill


\copyright\ 2002, 2006 Ren\'ee De Graeve, \verb|renee.degraeve@wanadoo.fr|\\
La copie, la traduction et la redistribution de ce document sur support \'electronique
ou papier sont autoris\'es pour un usage non commercial uniquement.
L'utilisation de ce document \`a des fins commerciales est interdite
sans l'accord \'ecrit du d\'etenteur du copyright.
Cette documentation est fournie en l'\'etat, sans garantie d'aucune
sorte. En aucun cas le d\'etenteur du copyright ne pourra \^etre tenu
pour responsable de dommages r\'esultant de l'utilisation de ce
document.\\


Ce document est disponible à l'adresse Internet suivante :\\
\verb|http://www-fourier.ujf-grenoble.fr/~parisse/cascmd_fr.pdf|
\newpage 
{\bf \centerline{Pr\'eface}}

\vspace{1cm}

 
  Bernard Parisse\\
Ma\^itre de Conf\'erences à l'Universit\'e de Grenoble I\\
D\'eveloppeur du logiciel de calcul formel {\tt giac} et de son interface 
{\tt Xcas}.
La version \`a jour se r\'ecup\`ere sur ;\\
{\tt http://www-fourier.ujf-grenoble.fr/$\tilde{ }$parisse/giac.html}
%\footnote{\noindent Les commandes sont \'ecrites {\md commande},\\
%les options sont \'ecrites {\sl option},\\
%les valeurs des options sont \'ecrites {\tt valeur\_option}}

\newpage
\printindex 
\newpage
\tableofcontents
 
\chapter*{Pour commencer}
%$\talloblong \ \talloblong$ et les ensembles avec $\llbracket \ \rrbracket$.
%\index{$\Delta$\footnote{{\bf Selon le style on a une} commande {\bf ou une} {\sl option} {\bf ou une} {\tt valeur}}}


\section{Style de l'index et notations}
\subsection{Notes concernant l'index de ce manuel}
\index{$\Re$@Note\_index\footnote{{\bf Dans l'index, selon le style on a une} 
commande {\bf ou une} {\sl option} {\bf ou une} {\tt valeur}}}
%{\bf Note}
Dans l'index de ce document, les commandes de {\tt Xcas} seront \'ecrites
avec des caract\`eres normaux, les options de ces commandes seront \'ecrites
en italique et les valeurs de commandes ou d'options seront \'ecrites 
en mode typewriter.\\
Par exemple :
\begin{itemize}
\item affichage est une commande,
\item {\sl affichage} est une option de commande g\'eom\'etrique, 
\item {\tt bleu} est une valeur.
\end{itemize}
\subsection{Remarques concernant les notations}
Au cours du document ce qu'il faut taper dans {\tt Xcas} sera 
\'ecrit en mode typewriter. On tape par exemple :\\
{\tt affichage(droite(0,1+i,bleu)}\\
{\tt droite(0,1+i, affichage=bleu)}\\
alors que dans l'index, les commandes, les  {\sl options des commandes} et {\tt les valeurs de ces options}
seront \'ecrites diff\'eremment.

Lorsque l'on doit appuyer sur 2 touches en m\^eme temps on reliera ces deux 
touches avec  {\tt +}. Par exemple, si on doit appuyer en m\^eme temps sur
{\tt Alt} et sur {\tt t} on \'ecrira {\tt Alt+t}.

Lorsque l'on veut indiquer le choix \`a faire dans un menu on reliera les 
diff\'erents sous-menus avec $\blacktriangleright$. Par exemple, pour indiquer
comment ouvrir l'\'ecran des sorties graphiques interm\'ediaires d'un programme
on \'ecrira soit :\\
menu {\tt Cfg} puis {\tt Montrer} puis {\tt DispG} ou encore,\\
{\tt Cfg$\blacktriangleright$Montrer$\blacktriangleright$DispG}
\section{La librairie {\tt giac} et de ses interfaces sous Unix}\index{giac}
{\tt giac} est la biblioth\`eque C++ de fonctions de calcul formel.\\
Sous Unix, on peut utiliser cette biblioth\`eque de calcul formel avec 
plusieurs interfaces :
\begin{itemize}
\item {\tt Xcas} interface qui est feuille de calcul permettant d'avoir 
des niveaux de diff\'erentes natures (calcul formel, g\'eom\'etrie dynamique et
formelle, tableur formel, dessin tortue etc...),
\item {\tt icas} ou {\tt giac} interface en ligne de commande,
\item {\tt texmacs},
\item {\tt emacs},
\item un programme {\tt C++},
\item un module {\tt C++} pour cr\'eer de nouvelles fonctions.
\end{itemize}
\subsection{Interface {\tt Xcas}}
On tape {\tt xcas \&} on a alors une feuille de calcul avec diff\'erents
 menus {\tt Fich Edit Cfg Aide...} et diff\'erents boutons.\\
Cette interface est d\'etaill\'ee dans :\\
{\tt L'interface {\tt Xcas} de {\tt giac}}\\
que l'on ouvre en cliquant sur le menu {\tt Aide -> Interface}.\\
On va aussi d\'etailler l'utilisation de cette interface ci-apr\`es (cf 
\ref{chap:xcasnew})
\subsection{Interface en ligne de commande}
Depuis une fen\^etre de commandes, on peut taper directement une commande 
avec des quotes et pr\'ec\'ed\'ee de 
{\tt icas} par exemple:\\
{\tt icas } ${\tt \ 'factor(1-x \verb|^| 2)'}$\\
ou encore taper {\tt icas }, on obtient :\\
{\tt 0>>} il suffit alors de taper des commandes par exemple :\\
${\tt factor(1-x \verb|^| 2)}$\\
on obtient :\\
{\tt (1-x)*(1+x)}\\
{\tt 1>>} etc...\\
{\tt ctrl D} termine alors la session.\\
{\bf Remarque}\\
On peut  aussi taper :\\
{\tt icas nom\_de\_fichier}\\
pour executer les commandes contenues dans {\tt nom\_de\_fichier}.
\subsection{Interface {\tt texmacs}}
On peut utiliser {\tt giac} dans une session de {\tt texmacs} en tapant :\\
{\tt texmacs \&} puis en cliquant sur l'ic\^one qui repr\'esente un \'ecran de 
moniteur, on choisit {\tt giac}. On a alors le symbole d'invite {\tt >} 
pour utiliser les fonctions de calcul formel qui se trouvent dans le menu 
{\tt Giac}.\\ 
On peut taper diff\'erentes commandes, m\^eme graphiques, 
et obtenir la r\'eponse ou le graphique, en dessous de la question. 
Il faut savoir que le pav\'e num\'erique ne fonctionne pas toujours
bien dans {\tt texmacs}, et que \verb|^|
se tape en se servant de la touche {\tt tr\'ema/\verb|^|}.\\
De plus on peut aussi avoir de l'aide sur les 
diff\'erentes fonctions de {\tt giac} en tapant {\tt ?} suivi du nom de la 
fonction.\\
Dans {\tt texmacs} on peut alterner facilement des calculs faits avec 
{\tt giac} et des explications : il suffit d'\'ecrire les explications en 
dehors du cadre destin\'e \`a la question suivante puis, de cliquer \`a 
nouveau sur l'ic\^one repr\'esentant un \'ecran de moniteur et de choisir 
{\tt giac} pour pouvoir utiliser \`a nouveau {\tt giac}.\\
{\bf Remarque}\\
Il est facile de recopier avec la souris une r\'eponse \'ecrite dans 
{\tt texmacs}.
\subsection{Interface {\tt emacs}}
Pour utiliser {\tt giac} dans {\tt emacs}, installer {\tt mupacs} 
disponible sur :\\
 {\tt http://mupacs.sourceforge.net}.\\
Pour utiliser {\tt giac} \`a l'int\'erieur d'{\tt emacs} on tape :\\
{\tt emacs nomdufichier.mu}\\
Il faut obligatoirement mettre {\tt .mu}, quitte \`a renommer ensuite le fichier.\\
Cela ouvre une fen\^etre {\tt emacs} ayant dans ces menus {\tt MuPAD}.\\
Dans ce menu {\tt MuPAD} on s\'electionne {\tt Start MuPAD}.\\
Dans la derni\`ere ligne de {\tt emacs} (celle tout en bas) vous devez 
avoir :\\
{\tt Command to start mupad : giac --emacs}\\
sinon, vous faites la modification et vous validez en appuyant sur 
{\tt enter}.\\
Vous pouvez alors faire des calculs en vous servant des fonctions de 
{\tt giac}.\\
Il apparait :\\
{\tt >> TEXTWIDTH:=79:}\\
{\tt// :2: parse error at end of input}\\
{\tt 79:undef\}}\\
Mais il ne faut pas s'en pr\'eoccuper....ca marche !\\
Les commandes graphiques seront ex\'ecut\'ees sur un \'ecran {\tt Xdvi} et le 
graphique est traduit en Latex dans {\tt casgraph.tex}.
\subsection{Utilisation dans un programme ou un module {\tt C++}}
Pour l'utilisation de  {\tt giac} \`a l'int\'erieur d'un programme {\tt C++}
 ou pour d\'efinir de nouvelles fonctions de {\tt giac}, vous trouverez des explications au chapitre  
"Utilisation de  {\tt giac} \`a l'int\'erieur d'un programme".
\subsection{Savoir avec quelle version on travaille : {\tt version giac}}\index{version}\index{giac}
Pour savoir avec quelle version on travaille, on utilise la commande 
{\tt version} ou {\tt giac}.\\
On tape :
\begin{center}{\tt version()}\end{center}
Ou on tape :
\begin{center}{\tt giac()}\end{center}
On obtient par exemple :
\begin{center}{\tt "giac 0.4.0"}\end{center}


\chapter{L'interface {\tt Xcas}}\label{chap:xcasnew}
\section{Mise en route de l'interface {\tt Xcas}}
\subsection{Sous Unix}
On tape simplement :\\
{\tt xcas \&}\\
{\bf Remarque utile !}\\
Si sous  {\tt Linux}, {\tt Xcas} ne r\'epond plus, tapez  dans la
fen\^etre {\tt xterm} :\\
{\tt killall xcas} et relancez en tapant {\tt xcas \& enter}.
Dans ce cas, il y a eu un fichier de sauvegarde automatique et lors de la 
reprise de {\tt Xcas} on vous demande si vous voulez l'ex\'ecuter.
\subsection{Sous Windows}
Utilisez l'explorateur pour aller dans le r\'epertoire o\`u est install\'e 
{\tt Xcas}.\\
Cliquez sur le fichier {\tt xcasnfr.bat}.\\
 Tout se passe ensuite presque comme sous Unix lorsqu'on tape {\tt xcas \&}.
\subsection{Sous MacOS}
Depuis le Finder, double-cliquez sur le fichier {\tt xcas\_image.dmg}.\\ 
\`A pr\'esent, double-cliquez sur l'ic\^one disque {\tt Xcas}. \\
Pour lancer {\tt Xcas}, double-cliquez sur le programme {\tt Xcas} du 
disque {\tt Xcas}.
\section{Les diff\'erents  niveaux d'entr\'ee}
Cette interface va vous permettre d'ouvrir plusieurs sessions de 
calculs : ces sessions ont plusieurs niveaux d'entr\'ee, sont ind\'ependantes 
les unes des autres et peuvent \^etre pli\'ee ou d\'epli\'ee.\\
Chaque session peut contenir des niveaux d'entr\'ee num\'erot\'es qui 
contiendront :
\begin{itemize}
\item soit une ligne de commandes pour ex\'ecuter des commandes de {\tt Xcas}
ou  pour ex\'ecuter des programmes avec un emplacement pour les sorties 
interm\'ediaires qui seront \'ecrites en bleu et un emplacement 
pour la r\'eponse (que l'on obtient si on a valid\'e la commande avec 
{\tt Enter}). L'emplacement pour la r\'eponse est un 
\'editeur d'\'equations, ou un \'ecran graphique selon la nature de la  commande ( 
commande renvoyant une expression ou un graphique). Lorsqu'on a plusieurs 
commandes separ\'ees par un point virgule ou par une virgule c'est la nature de
la derni\`ere commande qui d\'etermine la nature de la sortie.\\
 Les instructions 
{\tt print} d'un programme ou l'\'evaluation du temps d'un long calcul
seront \'ecrites en bleu. L'\'evaluation du temps est 
approximatif, si vous voulez plus de pr\'ecision sur votre temps de calcul, 
il faut utiliser la commande {\tt time}\index{time}.\\
On tape par exemple :\\
{\tt time(factor(x\verb|^|10-1))}\\
On obtient :\\
{\tt 0.00406}\\
Vous remarquerez alors : {\tt Evaluation time : 2.03} en bleu. 
C'est parce que
 pour pouvoir avoir le temps de calcul avec plus de pr\'ecision la commande  
{\tt factor(x\verb|^|10-1)} a \'et\'e \'ex\'ecut\'ee 500 fois.\\
On a aussi {\tt time()} sans argument, qui renvoie le temps de calcul depuis 
le d\'ebut de la session, on tape :\\
{\tt time()}\\
On obtient par exemple :\\
{\tt 2.37}

\item soit un \'editeur d'\'equations, 
\item soit un niveau de g\'eom\'etrie 2D, son \'ecran graphique, ses menus, ses boutons et ses lignes de
commandes,
\item soit un niveau de g\'eom\'etrie 3D, son \'ecran graphique, ses menus, ses boutons et ses lignes de
commandes,
\item soit un niveau de dessin tortue, son \'ecran graphique, son \'editeur de programmes et 
ses lignes de commandes,
\item soit un tableur et son \'ecran graphique,
\item soit un \'editeur de programmes,
\item soit un commentaire,
\item soit un regroupement de ces niveaux en un groupe.
\end{itemize}
Au sein d'une m\^eme session, les  diff\'erents niveaux d'entr\'ee ne sont pas 
ind\'ependants, par exemple, une variable d\'efinie dans une ligne de commandes
pourra \^etre utilis\'ee en g\'eom\'etrie ou dans le tableur.\\
L'ensemble de toutes ces sessions constitue votre espace de travail.\\ 
Le niveau actif est celui o\`u se trouve le curseur et le niveau selectionn\'e
est obtenu quand on clique sur son num\'ero, num\'ero qui s\'ecrit alors sur 
fond noir.\\
On peut d\'eplacer un niveau ou un groupe de niveau
dans une session, ou le recopier dans une autre session.\\
Vous pouvez , \`a tout moment ins\'erer un nouveau niveau ou encore changer 
l'entr\'ee d'un niveau : {\tt Enter} valide le changement de ce niveau et 
s\'electionne l'entr\'ee suivante, mais attention les niveaux suivants
ne seront pas recalcul\'es. Il est toutefois possible apr\`es une modification
de r\'eex\'ecuter, soit tous les niveaux, soit les niveaux situ\'es 
apr\`es la modification (menu {\tt Edit} puis {\tt Executer session} ou 
{\tt Executer en-dessous}).\\
Il faut savoir qu'il suffit de faire :
\begin{itemize}
 \item {\tt Alt+c} pour ouvrir un niveau de type ligne de commentaires,
\item {\tt Alt+e} pour ouvrir un niveau de type \'editeur d'\'expressions,
\item {\tt Alt+n} pour ouvrir un niveau de type ligne de 
commandes,
\item {\tt Alt+t} pour ouvrir  un niveau de type tableur,
\item {\tt Alt+p} pour ouvrir un niveau  de type \'editeur de 
programmes.
\item {\tt Alt+g} pour ouvrir un niveau de type \'ecran de 
g\'eom\'etrie plane,
\item {\tt Alt+h} pour ouvrir un niveau  de type \'ecran de 
g\'eom\'etrie 3D.
\item {\tt Alt+d} pour ouvrir un niveau  de type \'ecran de 
dessin tortue,
\end{itemize}

\section{Que voit-on  au d\'emarrage ?}
Vous obtenez au d\'emarrage l'ouverture d'une session avec de haut en bas~:
\begin{enumerate}
\item La barre du menu g\'en\'eral {\tt Fich Edit Cfg...} contenant 
les fonctions de {\tt Xcas} et ce qu'il faut pour les configurer et pour sauver
ou charger une session de travail.
\item Une ligne des noms de sessions qui contiendra les noms (ou {\tt Unnamed} 
si elles n'ont pas de noms) de vos diff\'erentes sessions. Au d\'emarrage il 
n'y a qu'une session qui n'a pas de nom donc sur cette ligne il y a 
{\tt Unnamed},
\item Un bandeau g\'en\'eral avec de gauche \`a droite :
\begin{itemize}
\item Un bouton \framebox{\tt ?} permettant d'ouvrir le sous menu {\tt Index} 
du menu {\tt Aide}. Il sert aussi de touche de tabulation, car il ouvre le menu
{\tt Aide}\`a l'endroit indiqu\'e par la ligne de commandes o\`u figure 
le curseur,
\item Un bouton \framebox{\tt Save}, sur fond rose, servant \`a sauver dans un 
fichier la session de calcul. Si on clique sur \framebox{\tt Save}, 
on vous demande la premi\`ere fois un nom de fichier d'extension {\tt .xws} 
 Quand la session 
a \'et\'e sauv\'ee le fond du bouton \framebox{\tt Save} devient vert et
{\tt Unnamed} est remplacé par le nom de fichier, par exemple par
{\tt session1.xws}. Notez que
les noms des sessions ont comme extension {\tt .xws} et cette extension est 
rajout\'ee automatiquement si vous l'avez oubli\'ee.
\item Un bouton 
\framebox{\tt Config : exact real RAD 12 xcas 12.65M} ou\\
 \framebox{\tt Config essai.xws : exact real RAD 12 xcas 12.65M} si on a sauv\'e la 
session sous le nom  {\tt essai.xws}.\\
Ce  bouton "ligne d'\'etat" ouvre la fen\^etre permettant de configurer 
le calcul formel et rappelle la configuration choisie : dans l'exemple, on 
est en mode exact et r\'eel, les angles sont exprim\'es 
en radian, les calculs num\'eriques sont faits avec 12 chiffres 
significatifs, le style de programmation est {\tt xcas} et enfin les 
recources en m\'emoire demand\'ees par le calcul sont de 12.65M (c'est la 
taille m\'emoire en M\'egabits utilis\'ee par {\tt Xcas}).\\
Sur cette "ligne d'\'etat", le mode num\'erique sera not\'e {\tt approx} et le 
mode complexe sera not\'e :
\begin{itemize}
\item {\tt cplx} si les variables ne sont pas consid\'er\'ees comme complexes 
(on a alors {\tt re(z)=z} et {\tt conj(z)=z}), 
\item {\tt CPLX} si les variables sont consid\'er\'ees comme complexes 
(on a alors {\tt re(z)=re(z)} et {\tt im(z)=im(z)} qui seront not\'es
respectivement  $\mathcal R(z)$ et $\mathcal I(z)$ dans la r\'eponse).
\end{itemize}
Notez que ce bouton "ligne d'\'etat"  ouvre la fen\^etre de 
configuration qui est aussi obtenue \`a partir du menu :
{\tt Cfg$\blacktriangleright$Configuration du CAS},
\item  Un bouton rouge \framebox{\tt STOP} pour arr\^eter un calcul trop long, 
\item Un bouton \framebox{\tt Kbd}, servant \`a faire apparaitre ou disparaitre
un clavier scientifique.
On remarquera sur ce clavier :
\begin{itemize}
\item la touche {\tt cmds} qui sert \`a faire apparaitre
ou disparaitre une barre de boutons contenant les commandes du CAS, appel\'ee 
bandeau du CAS. Dans le bandeau, on remarquera la touche {\tt kbd} qui sert 
\`a faire apparaitre ou disparaitre le clavier.
\item la touche  \framebox{\tt msg}, servant \`a faire apparaitre
ou disparaitre une fen\^etre de messages facilement lisible gr\^ace \`a sa 
barre de scroll. Cette fen\^etre vous donne des messages comme
{\bf Success} pour dire que tout 
s'est bien pass\'e, ou affiche une aide succinte 
sur la commande choisie \`a partir du menu g\'en\'eral, ou ce qu'il faut 
ins\'erer dans votre fichier \LaTeX  pour ins\'erer la figure sauv\'ee, 
par exemple, sous le nom {\tt session1.eps} :
\begin{center}{\bf Use }\verb|\includegraphics[width=\textwidth]{session1}|\end{center} 
\begin{center}{\bf inside your latex document, with header }\verb|\usepackage{graphicx}|\end{center}  
\end{itemize}
\item Un bouton \framebox{$times$} situ\'e tout \`a 
droite, permettant de fermer la session en cours. 
Cela provoquera \'eventuellement 
un avertissement si les derni\`eres modifications n'ont pas \'et\'e sauv\'ees.
\end{itemize} 
\item Un premier niveau ou les deux premiers niveaux, selon le  d\'emarrage 
choisi.
\end{enumerate}

\section{Les menus}
\subsection{Le menu {\tt Fich}}
Il  sert \`a la gestion des fichiers  : on prendra l'habitude de 
nommer les fichiers contenant des fonctions \'ecrites en langage {\tt Xcas} 
avec des noms se terminant par {\tt .cxx} et les fichiers contenant des scripts
(c'est \`a dire une suite d'instructions) avec des noms se terminant par 
{\tt .cas}.\\
{\tt Fich} a diff\'erents sous-menus :
\begin{itemize}
\item
{\tt Nouvelle session}  pour ouvrir et cr\'eer une nouvelle session. 
{\tt Unnamed} se mettra en surbrillance apr\`es les noms des sessions d\'ej\`a 
ouvertes (la surbrillance indique le nom de la session ouverte) et il ne vous 
reste plus qu'\`a lui donner un nom se terminant par {\tt .xws} (avec 
{\tt Sauver} du menu {\tt Fich}) pour pouvoir vous rep\'erer,
\item
{\tt Ouvrir} ou {\tt Alt+o} pour ouvrir une nouvelle session et 
charger une session sauv\'ee pr\'ec\'edemment, 
\item
{\tt Importer} pour ouvrir une session que l'on a r\'ealis\'ee et sauv\'ee soit avec le logiciel 
{\tt Maple} dans un fichier en {\tt .mws} (veillez \`a utiliser l'"ancien" format de sauvegarde avec 
Maple 9, 10,...), soit avec l'une des  calculatrices {\tt ti89} ou {\tt Voyage200}.
{\tt Xcas} r\'ecup\`ere les commentaires et les entr\'ees.\\
On peut alors faire ex\'ecuter ces entr\'ees avec {\tt Executer session} du menu {\tt Edit} de la session, 
mais il est pr\'ef\'erable de faire une ex\'ecution pas \`a pas en validant chaque niveau, afin de voir 
o\`u il y a des modifications \`a faire, 
\item
{\tt Inserer} pour ins\'erer une session sauv\'ee auparavant dans votre session,
\item 
{\tt Sauver}  ou {\tt Alt+s} ou le bouton {\tt Save}
pour sauver cette session (c'est \`a dire tous ses niveaux 
d'entr\'ee et de sortie) dans le fichier de nom indiqu\'e 
\`a cot\'e du bouton {\tt Save}. La premi\`ere fois on vous demandera le nom du
fichier de sauvegarde qui doit se terminer par {\tt .xws}. Ce nom remplacera
{\tt Unnamed} dans la ligne des noms des sessions et sera en surbrillance. Il
s'inscrira aussi sur le bouton de configuration \`a cot\'e de {\tt Save}.
\item
{\tt Sauver comme} pour sauver en donnant un autre nom au fichier de 
sauvegarde de la session, ce fichier doit \^etre un {\tt .xws},
\item
{\tt Sauver tout} pour sauver tout votre espace de travail 
c'est \`a dire toutes les sessions, ce fichier doit \^etre un {\tt .xws},
\item {\tt Exporter comme} pour sauver la session au format texte choisi (soit xcas, soit maple...)
\item
{\tt Fermer sans sauver} pour fermer la session en cours sans la sauver,
\item
{\tt A propos} ouvre la fen\^etre des messages avec l'adresse {\tt http} o\`u vous 
pouvez vous procurer la derni\`ere version de {\tt Xcas} ainsi que 
l'adresse mail du d\'eveloppeur ! (voir aussi le menu 
{\tt Aide$\blacktriangleright$Internet})
\item
{\tt Imprimer} pour imprimer la session en cours, il faut tout d'abord choisir 
son format d'impression et cocher ou ne pa cocher {\tt Paysage}  en utilisant le menu 
{\tt Cfg$\blacktriangleright$ Configuration generale}, puis, choisir :
\begin{itemize}
\item {\tt Pre-visualisation} pour voir votre session en postscript (on vous 
demandera un nom de fichier {\tt .ps}) ou,
\item {\tt vers imprimante} pour imprimer votre session en postscript (on vous 
demandera le nom de l'imprimante) ou,
\item {\tt Previsualiser les niveaux selectionnes} pour pr\'evisualiser les niveaux selectionn\'es (on vous 
demandera un nom de fichier {\tt .eps} pour chaque niveau, par exemple {\tt niveau3.eps}).
On pourra ensuite inclure ce fichier dans un
texte \LaTeX ~en mettant~:
\begin{itemize}
\item dans l'en-t\^ete :\\
\verb|\usepackage{graphicx} |
\item
et dans le texte \`a l'endroit d\'esir\'e :\\
\verb|\includegraphics{niveau3}|
\end{itemize}
\end{itemize}
\item 
{\tt \LaTeX} convertit toute la session en un fichier \LaTeX, qui sera compil\'e et affich\'e,
\item 
{\tt Capture ecran}\index{Capture ecran}\index{impression} permet de 
faire une capture d'\'ecran qui sera sauv\'ee dans un fichier de suffixe 
{\tt .eps} (par exemple {\tt window.eps}).
On pourra ensuite inclure ce fichier dans un
texte \LaTeX ~en mettant~:
\begin{itemize}
\item dans l'en-t\^ete :\\
\verb|\usepackage{graphicx} |
\item
et dans le texte \`a l'endroit d\'esir\'e :\\
\verb|\includegraphics{window}|
\end{itemize}
\item
{\tt Quitter} ou  {\tt Alt+q} permet de quitter {\tt Xcas} quand on a termin\'e.
\end{itemize}



\subsection{Le menu {\tt Edit}}\index{Edit}
\begin{itemize}
\item
{\tt Executer session} pour recalculer cette session enti\`erement, 
\item 
{\tt Executer en-dessous} pour recalculer cette session \`a partir d'une 
entr\'ee s\'electionn\'ee,
\item  
{\tt Enlever les reponses} pour supprimer les r\'eponses \`a 
partir d'une entr\'ee s\'electionn\'ee  afin de pouvoir, devant un auditoire, 
refaire pas \`a pas l'ex\'ecution des diff\'erentes entr\'ees.
\item 
{\tt Inserer saut de ligne} pour obtenir une nouvelle ligne sur 
le niveau d'entr\'ee, l\`a o\`u se trouve le curseur et permet ainsi de passer 
\`a la ligne par exemple pour écrire dans un m\^eme niveau plusieurs lignes 
d'entr\'ees s\'epar\'ees par {\tt ;}  (on peut aussi taper {\tt Shift+Enter}).
\item
{\tt Annuler} ou raccourci {\tt Ctrl+z} pour annuler la derni\`ere 
ex\'ecution : par exemple vous avez effac\'e malencontreusement un niveau et 
vous voulez annuler cet effacement il faut faire {\tt Annuler}, ou bien vous 
avez modifi\'e et ex\'ecuter une ligne de commande pour annuler cette 
modification il faut faire {\tt Annuler}, mais si il n'y a pas eu d'ex\'ecution
(par exemple on a effacer une expression dans la ligne de commandes) il ne faut
pas faire {\tt Annuler},
\item 
{\tt Redo} ou raccourci {\tt Ctrl+y} pour revenir \`a ce qu'il y avait 
avant l'annulation : il faut faire 2 fois {\tt Redo} si vous avez fait  2 fois 
{\tt Annuler},
\item 
{\tt Coller} permet de recopier, \`a l'endroit du curseur,
ce que l'on a s\'electionn\'e avec la souris (analogue \`a la touche 
{\tt coller} du clavier {\tt Kbd}). On peut aussi s\'electionner ce 
qui se  trouve dans une ligne de commandes
avec {\tt Shift+les fl\`eches de d\'eplacement}.
\item
{\tt Effacer niveaux selectionnes} permet de supprimer les niveaux 
s\'electionn\'es,
\item 
{\tt selection->LaTeX } ou raccourci {\tt Ctrl+t}
pour traduire en {\tt LaTeX} la question ou la r\'eponse ou le contenu de 
l'\'editeur d'\'equations~: on 
s\'electionne une question ou une r\'eponse ou le contenu d'un \'editeur 
d'\'equations\footnote{Si vous voulez traduire une \'equation en {\tt LaTeX}, 
tapez votre \'equation entre deux {\tt '} ce qui l'affichera 
dans un \'editeur d'\'equations.}.\\
Remarquez le petit bouton {\tt M} \index{M}
situ\'e \`a l'intersection des 2 barres de scroll de l'\'editeur d'\'equations 
qui permet soit de recopier ce qui se trouve dans l'\'editeur d'un seul clic,
(avec {\tt Selectionner tout}), soit d'\'evaluer la s\'election (avec 
{\tt Evaluer selection}), soit de retrouver la r\'eponse initiale (avec 
{\tt Annuler}), dans le cas o\`u, on a fait une modification malencontreuse 
car comme les r\'eponses non graphiques sont affich\'ees dans un 
\'editeur d'\'equations, elles peuvent donc \^etre modifi\'ees...,
Lorsqu'on utilise {\tt Edit->selection->LaTeX } ou {\tt Ctrl+t}, la traduction 
en {\tt LaTeX} apparait alors dans l'\'ecran des messages (que l'on peut voir 
en cliquant sur le bouton {\tt msg} de {\tt Kbd}).\\
On peut la recopier dans un \'editeur ({\tt emacs, nedit, vi, ...})
par un clic avec le bouton du milieu.\\
Par exemple~:
\begin{itemize}
\item
on saisit dans un niveau de calcul formel {\tt concat([1,2],3)}
 on met en surbrillance la r\'eponse, puis on fait {\tt Ctrl+t},
ce qui provoque l'inscription dans la partie reserv\'ee aux messages de :
\begin{verbatim}
\mbox{concat}([1,2],3)
\end{verbatim}
\item
on saisit {\tt sqrt(1+3)},  on met en surbrillance la r\'eponse, puis on fait 
{\tt Ctrl+t}, ce qui provoque l'inscription dans la partie reserv\'ee aux 
messages de :
\begin{verbatim}
\sqrt{1+3}
\end{verbatim}
\item
on saisit {\tt f(x):=sin(x)/x}, on met en surbrillance la r\'eponse, puis on 
fait {\tt Ctrl+t}, ce qui provoque l'inscription dans la partie reserv\'ee aux 
messages de :
\begin{verbatim}
\parbox{12cm}{\tt  (x)-{\tt\symbol{62}}(sin(2*x))/x }
\end{verbatim}
\end{itemize}
Il ne vous reste plus qu'\`a recopier le texte ainsi traduit, d'un coup de 
souris, dans une portion en mode math\'ematique de votre document \LaTeX.
\item
{\tt Fusionner niveaux} permet de mettre dans un m\^eme niveau, les niveaux 
s\'electionn\'es, 
\item
{\tt Nouveau groupe} permet de créer un groupe, 
\item
{\tt Grouper niveaux} permet de créer un regroupement 
des niveaux s\'electionn\'es, que l'on peut plier ou déplier en cliquant sur
\framebox{\tt -} ou \framebox{\tt +} du menu propre \`a ce regroupement. 
On peut aussi donner un nom au regroupement ainsi cr\'e\'e.
\item
{\tt Degrouper niveaux} effectue l'opération inverse de la précédente (on 
aplatit le groupe dont le num\'ero a \'et\'e s\'electionn\'e (noirci) pour 
revenir \`a l'\'etat pr\'ec\'edent le regroupement).
\end{itemize}


\subsection{Le menu {\tt Cfg}}
\begin{itemize}
\item
{\tt Configuration du CAS} permet de configurer le calcul formel (idem que le 
bouton "ligne d'\'etat"  situ\'e entre {\tt Save} et {\tt Stop},
\item
{\tt Configuration graphique} permet de configurer le graphique par d\'efaut~: 
vous pouvez aussi avoir une configuration sp\'ecifique pour chaque graphique 
avec le bouton {\tt cfg} du graphique, mais cela ne changera pas la 
configuration par d\'efaut,
\item
{\tt Configuration generale} permet de d\'eterminer la taille des caract\`eres,
le navigateur, si on veut une aide automatique ou pas , le format de 
l'impression et de cocher ou pas {\tt Paysage} (si cette case est coch\'ee 
l'impression se fera selon la largeur de la feuille, si elle n'est pas coch\'ee
l'impression se fera selon la hauteur de la feuille), le nombre de lignes et
de colonnes du tableur, et aussi le nombre d'appels r\'ecursifs autoris\'es, 

\item
{\tt Mode (syntax)} permet de travailler avec une syntaxe  {\tt Xcas} (qui est 
de type {\tt C}), soit  avec une syntaxe Maple ou TI ou MuPad ou Tortue,
\item
{\tt Montrer} puis 
\begin{itemize}
\item {\tt DispG} pour voir l'\'ecran {\tt DispG} sur lequel est 
enregistr\'e toutes les commandes graphiques
depuis le d\'ebut de la session, sans distinction de niveau. Il
permet en particulier de visualiser les affichages graphiques
interm\'ediaires d'un programme (en effet seuls les objets graphiques
renvoy\'es par {\tt return} ou {\tt retourne} peuvent \^etre affich\'es en
r\'eponse dans un niveau o\`u on ex\'ecute un programme).
(voir aussi la commande {\tt DispG()} \ref{sec:dispgg} et \ref{sec:dispg}).
\item {\tt Clavier} pour avoir un clavier scientifique. Ce clavier se met 
en bas de la fen\^etre.
\item {\tt Bandeau} pour avoir les commandes de {\tt Xcas} dans un 
bandeau. Ce bandeau se met juste apr\`es le 
clavier. Il permet d'afficher un sous-menu de mani\`ere persistante.
 Le bandeau est form\'e d'une ligne qui permet d'avoir facilement \`a sa 
disposition les commandes qui se trouvent dans les diff\'erents menus de la 
barre de menu. 
On appuie par exemple, sur {\tt Geo} (\'ecrit en rouge) puis, sur 
{\tt Triangles} (\'ecrit en rouge) pour avoir dans le bandeau les commandes 
g\'eom\'etriques de {\tt Xcas} (\'ecrites en noir) dessinant des triangles. \\
La touche {\tt home} permet de revenir au bandeau initial contenant :\\
{\tt Expression, Geo, ,Prg, Graphic.. BACK}.\\
Les touches {\tt >>} et {\tt <<} 
permettent de circuler dans la ligne du bandeau.\\
La touche {\tt BACK} permet de revenir au bandeau pr\'ec\'edent.\\
La touche {\tt cust} \label{sec:cust} pour custom permet de  mettre les noms 
de ses propres commandes dans un menu d\'efini dans 
la variable {\tt CST}, {\tt CST} doit contenir une liste qui sera le menu 
affich\'e (voir aussi \ref{sec:cst}).\\
Par exemple {\tt CST:=[1,2,3]} va afficher comme menu {\tt 1, 2, 3}.
On pourra donc faire un bandeau personnalis\'e en  mettant dans {\tt CST} les 
noms des fonctions que l'on veut utiliser ou les noms des fonctions que 
l'on a cr\'e\'ees.\\
Par exemple, on d\'efinit la fonction {\tt f(x):=x\verb|^|2+2*x+3} et on 
tape :\\
{\tt CST:=[evalc,["f",f],["euro",6.55957]]} \\
On obtient quand on appuie sur {\tt cust}, un bandeau qui contient comme 
menu :\\
{\tt evalc f euro}.\\
puis, on d\'efinit la fonction {\tt f(x):=x\verb|^|2+2*x+3} et on peut ainsi 
appeler {\tt f} depuis {\tt eqw} :\\
on met par exemple 3 dans {\tt eqw} puis on appuie sur {\tt f} et on obtient 
18.
On peut ainsi appeler {\tt evalc()} dans une ligne d'entr\'ee en appuyant sur 
{\tt evalc}
ou encore on utilise la touche {\tt euro} dans un calcul.

\item {\tt Msg} pour avoir la fen\^etre des messages. La fen\^etre des 
messages se met juste apr\`es le bandeau.
\end{itemize}
\item{\tt Cacher} puis 
\begin{itemize}
\item {\tt DispG} pour ne plus voir l'\'ecran {\tt DispG} sur lequel est 
enregistr\'e toutes les commandes graphiques effectu\'ees depuis le d\'ebut de 
la session,
\item {\tt Clavier} pour ne plus voir le clavier scientifique, 
\item {\tt Bandeau} pour ne plus voir les commandes de {\tt Xcas} dans 
le bandeau,
\item {\tt Msg} pour ne plus voir la fen\^etre des messages,
\end{itemize}
\item{\tt Langue de l'aide} pour choisir d'avoir l'aide en fran\c{c}ais, 
en anglais ou en espagnol,
\item{\tt Couleurs} pour choisir la couleur de l'affichage selon son type, 

\item{\tt Police session} permet de changer la police et la taille des 
caract\`eres de la session en choisissant la police et la taille de la fonte 
(par d\'efaut police helvetica de taille 20),
\item{\tt Polices (toutes)} permet de changer la police et la taille des 
caract\`eres  de la session, du menu principal et du  clavier en choisissant la
police et la taille de la fonte (par d\'efaut police helvetica de taille 20)
\item
{\tt Navigateur} permet de donner le nom de votre navigateur, 
\item
{\tt Sauver pr\'ef\'erences} permet de sauver les diff\'erentes 
configurations choisies avec le menu {\tt Cfg} ou avec le bouton donnant la
ligne d'\'etat et ainsi de les retrouver pour des utilisations ult\'erieures.
\end{itemize}

\subsection{Le menu {\tt Aide}}\label{sec:Index}
Ce menu contient les diff\'erentes formes d'aide possible. 
\begin{itemize}
\item
{\tt Index}
Lorsque l'on s\'electionne {\tt Index}, cela ouvre un \'ecran avec plusieurs
plages donnant pour toutes les commandes, une aide succincte, les commandes 
proches, des exemples .\\
Les diff\'erentes plages :\\
 Vous voyez sur la plage en haut et \`a gauche
toutes les commandes utilisables class\'ees par ordre alphab\'etique avec en 
dessous une ligne d'entr\'ee qui permet de consulter cette liste facilement : 
il suffit de taper le d\'ebut d'un nom dans cette ligne pour avoir le 
curseur \`a cet endroit dans la liste, vous pouvez ainsi aller directement
\`a une lettre ou \`a une commande.\\
En cliquant sur l'une de ces commandes, vous avez :
\begin{itemize}
\item \`a droite les commandes proches de la commande mise en surbrillance, 
\item  en dessous la ligne d'entr\'ee 
\item en dessous de la ligne d'entr\'ee, une aide succincte qui 
s'affiche aussi dans le bandeau g\'en\'eral \`a l'endroit des messages et une
aide plus compl\`ete s'affichera, soit dans Mozilla sous Linux, soit dans un 
\'ecran \`a part. Sous Linux, il est commode d'ouvrir Mozilla et de 
l'ic\^onifier pour pouvoir ouvrir cette aide si cela est necessaire. 
\item des exemples que l'on peut copier pour les ex\'ecuter : il suffit d'avoir
le curseur dans une ligne ce commande, puis de cliquer sur l'un des exemples 
pour que cet exemple soit recopi\'e dans la ligne o\`u se trouve le curseur.
\end{itemize}
Il faut savoir aussi qu'en tapant le d\'ebut d'une commande dans une ligne de 
commandes, puis sur la touche de tabulation, on obtient toutes les commandes de
l'{\tt Index} commen\c{c}ant par ce d\'ebut : vous pouvez alors cliquer sur 
l'un des exemples de la commande mise en surbrillance
pour que ce d\'ebut de commande soit compl\'et\'e par cet exemple.
Vous pouvez aussi taper {\tt ?nom\_de\_commande} pour avoir comme r\'eponse 
l'aide succincte sur cette commande et \'eventuellement taper 
{\tt ?nom\_de\_commande}
suivi de {\tt ,} (virgule) {\tt 1} ou {\tt 2} ou {\tt 3} pour indiquer le 
langage utilis\'e ({\tt 1} fran\c{c}ais, {\tt 2} anglais, {\tt 3} espagnol)
dans la r\'eponse : par exemple {\tt ?factor,2} pour avoir comme r\'eponse 
l'aide de {\tt factor} en anglais.\\

{\bf Remarque} Quand on choisit les commandes \`a partir des menus, une aide 
succincte sur cette commande s'affiche dans la ligne des messages (cliquez sur 
{\tt msg} du bandeau) et le manuel de Calcul formel s'ouvre \`a la bonne page !\\
Quand on choisit les commandes  \`a partir du bandeau, seule
une aide succincte sur cette commande
s'affiche dans la ligne des messages (cliquez sur {\tt msg} du bandeau). 
\item{\tt Trouve}
recherche le mot demand\'e dans toutes les pages du manuel Calcul formel.
\item
{\tt Interface}
contient de l'aide concernant l'interface de {\tt Xcas}.
\item
{\tt Manuels}
\begin{enumerate}
\item
{\tt Calcul formel}
contient l'aide g\'en\'erale qui concerne toutes les fonctions de calcul 
formel, de g\'eom\'etrie, de statistiques mais qui ne concerne pas les 
instructions de programmation, ni les instructions d\'epla\c{c}ant la tortue.
\item
{\tt Geometrie}
contient une aide plus d\'etaill\'ee pour certaines commandes car cette aide 
est illustr\'ee par des exercices (mais on n'a pas toutes les fonctions de 
g\'eom\'etrie !). 
\item
{\tt Programmation}
contient une aide d\'etaill\'ee des instructions de programmation.
Dans cette partie vous trouverez l'\'ecriture de plusieurs algorithmes avec
la traduction de ces algorithmes en langage {\tt xcas MapleV MuPAD TI89/92}.
\item
{\tt Tableur,statistiques}
contient une aide d\'etaill\'ee concernant le tableur et les fonctions de 
statistiques ainsi que leurs utilisations dans le tableur.
\item
{\tt Tortue}
contient l'aide concernant les instructions qui sont utilis\'ees dans 
l'\'ecran de {\tt dessin Tortue}.
Dans cette partie vous trouverez plusieurs activit\'es que l'on peut faire 
avec des enfants (du CP au CM2) dans le but de leur faire faire des
math\'ematiques. 
\end{enumerate}
\item
{\tt Internet}
\begin{enumerate}
\item
{\tt Forum} permet d'acc\'eder \`a un forum de discussion.
\item
{\tt Ressources pedagogiques}
contient des exercices sur diff\'erents sujets et de diff\'erents niveaux.
\item
{\tt Mettre a jour l'aide}
permet de mettre l'aide \`a jour.
\end{enumerate}
\item {\tt D\'ebuter  en calcul formel}
\begin{enumerate}
\item
{\tt Tutoriel} est un tutoriel. Il permet de faciliter la 
prise en main de {\tt Xcas} pour faire du calcul formel.
\item
{\tt solutions} contient les solutions des exercices du tutoriel. 
\end{enumerate}

\item
{\tt Recreer les fichiers index de l'aide}\\
Le bouton {\tt Details} de la fenêtre d'index de l'aide ouvre le navigateur
sur la page principale d'aide de la commande en cours si elle
existe. Pour cela il utilise un fichier cache contenant les
correspondances, mais il arrive que ce fichier cache ne soit pas
à jour, ce menu permet de mettre à jour ce fichier cache (il faut
bien sur avoir les droits d'écriture sur le fichier cache).
\item {\tt Exemples}
Si vous s\'electionnez par exemple l'exemple de nom {\tt glace.xws} du sous 
menu {\tt climat}, alors, 
ce fichier sera recopi\'e du r\'epertoire :\\
{\tt /usr/local/share/giac/examples/Exemples/climat/}\\
dans votre r\'epertoire courant et {\tt Xcas} vous ouvrira 
une nouvelle session {\tt glace.xws} qui contiendra ce fichier. Toutefois si 
un fichier dum\^eme nom existe, on vous demandera auparavant si vous voulez
le remplacer puis l'ouvrir ou bien ouvrir celui du r\'epertoire courant sans 
l'\'ecraser.
\end{itemize}
{\bf Remarques} 
\begin{itemize}
\item Quand on choisit les commandes \`a partir des menus,
 une aide succincte sur cette commande
s'affiche dans la fen\^etre des messages (cliquez sur le bouton {\tt Msg}) et 
par d\'efaut, le manuel de Calcul formel s'ouvre \`a la bonne page
\item
On peut activer ou d\'esactiver ce m\'ecanisme d'aide
automatique dans le menu {\tt Cfg}, {\tt Configuration generale},
{\tt Aide HTML automatique}.
\item
Quand on choisit les commandes  \`a partir du bandeau, seule
une aide succincte sur cette commande s'affiche dans la fen\^etre des messages 
(cliquez sur la touche {\tt msg} du bouton {\tt Kbd} ou avec le menu 
{\tt Edit$\blacktriangleright$Montrer$\blacktriangleright$Msg}). 
\end{itemize}

\subsection{Les menus des commandes de calcul}
 Ces menus permettent d'ouvrir un niveau ad\'equat 
par exemple :
\begin{itemize}
\item {\tt CAS$\blacktriangleright$Nouvelle entree} ou {\tt Alt+n} ouvrira 
une nouvelle ligne de commandes 
\item {\tt Tableur$\blacktriangleright$Nouveau tableur} ou {\tt Alt+t} ouvrira 
un tableur,
\item {\tt Geo$\blacktriangleright$Nouvelle figure$\blacktriangleright$graph,geo2d} ou {\tt Alt+g}  ouvrira un 
niveau de g\'eom\'etrie o\`u les points ont des
coordonn\`ees d\'ecimales,
\item {\tt Geo$\blacktriangleright$Nouvelle figure$\blacktriangleright$geo2d exact} ouvrira  un niveau de g\'eom\'etrie o\`u les points ont des coordonn\`ees exactes,
\end{itemize}
Certains menus sont des menus dit "Assistant" car les commandes sont class\'ees par th\`eme et sont explicit\'ees. 
Ces commandes sont facilement utilisables soit parce que
l'aide s'ouvre sur la commande choisie (menu {\tt CAS}), soit parce qu'une 
boite de dialogue vous demande de pr\'eciser les param\`etres de la commande
choisie (menus {\tt Tableur$\blacktriangleright$Maths} ou  menu {\tt Graphic}).\\
Les autres menus contiennent les noms des commandes (le menu {\tt Cmds} 
contient toutes les commandes de calcul formel, le menu {\tt Geo} contient 
toutes les commandes de g\'eom\'etrie...)
\subsubsection{D\'escription des menus des commandes de calcul}
Ces menus sont :
\begin{itemize}
\item
{\tt CAS}
contient les fonctions de calcul formel class\'ees par th\`eme. Ce menu vous 
permet de connaitre le nom de la commande {\tt Xcas} que vous cherchez car ce 
nom est suivi d'un bref d\'escriptif et l'{\tt Index} de l'{\tt Aide} s'ouvre 
automatiquement sur la commande choisie.
\item
{\tt Tableur} ce menu est un menu "Assistant". On retrouve les trois sous-menus
{\tt Table Edit Maths} qui sont identiques aux menus d'un niveau de type 
tableur. Avec le menu {\tt Tableur$\blacktriangleright$Maths} le tableur se
remplit automatiquement gr\^ace \`a une
boite de dialogue qui vous demande de pr\'eciser les param\`etres de la 
commande choisie \`a condition que le curseur soit dans un niveau de type
 tableur (tableur que l'on ouvre avec {\tt Alt+t}).
\item
{\tt Graphic} contient les fonctions permettant de tracer des graphes de 
fonctions, des courbes en param\'etrique ou en polaire, des
solutions d'expressions diff\'erentielles, pour visualiser
"l'escargot" des suites r\'ecurrentes...\\
On notera que le niveau utilis\'e pour tracer un graphe est un niveau 
d'entr\'ee normale car une commande graphique ouvre automatiquement en 
r\'eponse un \'ecran graphique et une commande non graphique ouvre 
automatiquement en r\'eponse un \'editeur d'expressions.
\item
{\tt Geo}
contient les fonctions permettant de faire de la g\'eom\'etrie interactive.
On notera le menu {\tt Affichage} qui contient la commande {\tt affichage} et
ses param\`etres concernant la couleur, les diff\'erentes sortes de lignes, les
diff\'erentes sortes de points et l'emplacement des l\'egendes.  
\item
{\tt Prg}
contient les instructions permettant d'\'ecrire des programmes.
\item
{\tt Expression}
contient les fonctions de calcul formel permettant de transformer
une expression. Ces fonctions peuvent par exemple \^etre appliqu\'ees
\`a la s\'election d'un \'editeur d'\'equations (que \'editeur d'\'equations 
l'on ouvre avec {\tt Alt+e}).
\item
{\tt Cmds}
contient les fonctions math\'ematiques class\'ees par th\`eme.
\item
{\tt Phys}
contient toutes les unit\'es physiques, les constantes physiques et des 
fonctions de conversion.
\item
{\tt Scolaire}
contient des commandes de calcul formel class\'ees par niveau. Les sous-menus 
{\tt Seconde Premiere Terminale} contient les diff\'erentes fonctions de calcul
formel utilisables dans les classes de Lyc\'ee.\\ 
Vous pouvez rajouter ou supprimer des commandes dans ce menu 
selon vos besoins en modifiant le fichier {\tt xcasmenu} (cf.la section 
\ref{sec:xcasmenu}).
\item
{\tt Tortue} contient  toutes les commandes qui sont valides dans l'\'ecran de 
dessin Tortue  (\'ecran de dessin Tortue que l'on ouvre avec 
{\tt Alt+t}). Ces commandes sont proches du langage LOGO et permettent de faire
des dessins en donnant des ordres \`a un robot (une tortue).
\end{itemize}
%Le fichier qui contient les questions et les r\'eponses contenues dans la feuille sera un fichier dont le nom se termine par {\tt .ar}.\\Ainsi, lorsqu'on sauve la session, on sauve la suite d'instructionsconstitu\'ees par les questions de l'historique dans un fichier {\tt .cas}et on sauve la suite des questions et des r\'eponses de l'historique dans un fichier {\tt .ar}.\\

\subsubsection{Rajouter un menu} \label{sec:xcasmenu}
On peut red\'efinir les menus que l'on voit au-del\`a du menu {\tt  Aide}.
Par exemple, rajoutons un menu {\tt Exo1} qui contiendra les 
commandes {\tt equal2diff factor subst} 
qui seraient utiles pour faire un exercice num\'erot\'e 1.

Pour cela il faut ouvrir dans l'\'editeur texte de votre choix (par exemple
{\tt emacs, vi, nedit, notepad, bloc.notes...} mais PAS
{\tt word, abiword, kword, openoffice...}) le fichier {\tt xcasmenu}
(sous Linux ou Mac, il faut modifier ce fichier
dans le r\'epertoire \verb|/usr/share/giac/doc/fr| ou\\
\verb|/usr/local/share/giac/doc/fr|).

Vous devez voir:\\
{\tt Math/Constants/pi\\
Math/Constants/i\\
Math/Constants/e...}

Vous tapez alors les trois lignes suivantes (une ligne par commande) :\\
{\tt Exo1/equal2diff\\
Exo1/factor\\
Exo1/subst}\\
en laissant le reste\\ 
{\tt Math/Constants/pi\\
Math/Constants/i\\
Math/Constants/e...}\\
inchang\'e.

Lorsque vous relancez {\tt Xcas} vous avez maintenant apr\`es le menu 
{\tt Aide} un menu {\tt Exo1} qui contient les commandes 
{\tt equal2diff factor subst}.

{\bf Remarque~:} le menu {\tt Exemples} suit le m\^eme principe avec
un fichier {\tt xcasex}, mais il faut aussi avoir cr\'e\'e les
fichiers de session exemple dans le r\'epertoire de {\tt xcasex}.

\subsubsection{Supprimer un menu}
Pour cela il faut ouvrir dans l'\'editeur de votre choix le fichier 
{\tt xcasmenu}.
Il suffit alors d'effacer les lignes que vous ne voulez pas voir apparaitre
en ayant soin de les sauver pour pouvoir vous en reservir
ult\'erieurement~!

\section{Comment bien g\'erer son espace de travail}
\subsection{Pour s\'electionner ou d\'es\'electionner un niveau}
Pour s\'electionner un niveau, il faut cliquer sur le num\'ero du niveau que 
l'on veut s\'electionner : ce num\'ero apparait alors sur fond noir.

Pour s\'electionner plusieurs niveaux qui se suivent et se trouvent sur 
l'\'ecran, il faut cliquer sans relacher sur le premier num\'ero  du groupe et 
se deplacer jusqu'au dernier num\'ero du groupe puis relacher le bouton de la 
souris : ces num\'eros apparaissent alors sur fond noir.
Pour s\'electionner plusieurs niveaux qui se suivent on peut aussi cliquer 
sur le premier num\'ero  du groupe et {\tt Shift+cliquer} sur le dernier 
num\'ero  du groupe : cela s\'electionne les niveaux interm\'ediaires.

Pour d\'es\'electionner, on clique ailleurs dans la session
(on peut aussi cliquer sur un seul des niveaux parmi les niveaux sélectionnés
ce qui sélectionnera uniquement ce niveau).
\subsection{Pour remplir les niveaux}
On peut retrouver l'historique de ce que l'on a tap\'e pr\'ec\'edemment avec 
{\tt Shift+$\uparrow$} et {\tt Shift+$\downarrow$}.\\ 
 On peut recopier une suite d'instructions situ\'es dans un niveau dans 
diff\'erents niveaux, mais il faut que chaque instruction soit
 \'ecrite sur une ligne diff\'erente (faire {\tt shift+enter} pour changer de 
ligne dans un niveau). Par exemple pour recopier :\\ 
{\tt C:=cercle(0,1,affichage=hidden\_name);\\
Q:=projection(C,P)} \\
dans 2 niveaux on s\'electionne les 2 instructions avec la souris, puis on  
clique directement avec le bouton du milieu dans le numero du niveau sans le 
noircir. 

\section{Les diff\'erentes configurations}  
Les diff\'erentes configurations se font :
\begin{itemize}
\item pour la configuration du calcul formel avec le menu 
{\tt Cfg$\blacktriangleright$Configuration du CAS} ou
avec le bouton donnant la ligne d'\'etat (c'est la ligne \'ecrite \`a cot\'e de
{\tt Save} et qui rappelle une partie de cette configuration).
\item pour la configuration graphique avec le menu {\tt Cfg$\blacktriangleright$Configuration graphique} .
\item pour la configuration g\'en\'erale avec le menu  {\tt Cfg$\blacktriangleright$Configuration generale}. 
\end{itemize}

\subsection{Configuration du Cas}\label{sec:configcas}\index{cas\_setup}
\noindent
\begin{itemize}
\item {\tt Prog style} si on veut programmer en un autre langage : on peut 
choisir {\tt maple}, {\tt mupad} ou {\tt ti89/92},
\item {\tt eval}~: nombre maximum d'évaluations récursives en mode interactif. Par exemple,
si on exécute dans l'ordre \verb|a:=b+1| et \verb|b:=5| puis on évalue \verb|a|, la valeur
renvoyée sera \verb|b+1| si \verb|eval| vaut 1 et \verb|6| si \verb|eval| est plus grand que 1.
\item {\tt prog}~: comme ci-dessus mais lorsqu'un programme est exécuté. On utilise en principe
le niveau 1 d'évaluation à l'intérieur d'un programme.
\item {\tt recurs} pour d\'eterminer le nombre maximum d'appels r\'ecursifs :
par defaut c'est 50. Il n'y a pas de limite impos\'ee par l'interface de 
{\tt Xcas}, par contre si on met une borne trop \'elev\'ee, c'est la pile du 
programme qui risque de d\'eborder en provoquant un segmentation fault. 
Le moment o\`u cela se produit d\'epend de la fonction, car la pile est aussi 
utilis\'ee pour les appels r\'ecursifs des fonctions C++ de giac,
\item {\tt debug}~: affiche des informations intermédiaires (en bleu) sur les algorithmes
utilisés par giac en fonction du niveau (0 = pas d'info).
\item {\tt maxiter}~: nombre maximal d'itérations pour la méthode de Newton
\item {\tt Flottants} on peut choisr {\tt Standard Scientific Engineer} pour que l'affichage des nombres d\'ecimaux se fasse selon :
\begin{itemize}
\item la notation standard : {\tt 150.12} sera not\'e {\tt 150.12},
\item la notation scientifique : {\tt 150.12} sera not\'e {\tt 1.501200000000e+02},
\item la notation des ing\'enieurs : {\tt 150.12} sera not\'e {\tt 150.12e0},
\end{itemize}
%\item {\tt Chiffres} pour d\'eterminer le nombre de chiffres significatifs 
%qui seront utilis\'es dans les calculs num\'eriques,
\item {\tt Chiffres} pour d\'et\'erminer le nombre de chiffres 
significatifs. Si on choisit moins de 14 chiffres, les calculs sont quand 
m\^eme faits avec 14 chiffres mais l'affichage n'en montre que ce que l'on 
demande.
\item {\tt epsilon} d\'etermine la valeur de {\tt epsilon} utilis\'ee dans 
{\tt epsilon2zero},
\item {\tt proba}~: si cette valeur est non nulle, Giac peut utiliser des 
algorithmes non déterministes et renvoyer une réponse qui a alors une 
probabilité d'être fausse inférieure à la valeur donnée. C'est par exemple le 
cas pour le calcul du déterminant d'une grande matrice à coefficients entiers.
\item {\tt approx} on coche cette case si on veut travailler en mode 
num\'erique : si cette case n'est pas coch\'ee on travaille en mode exact ou 
formel. Lorsqu'on travaille en mode exact on peut avoir une \'evaluation 
num\'erique en tapant sur la touche num ou en utilisant la commande {\tt evalf}
ou encore en mettant des nombres decimaux (par exemple 1.0/2=0.5 alors que 1/2 
est inchang\'e),
\item {\tt taches} pour faire du parallelisme, dans le futur..., 
\item {\tt Base (Entiers)} pour travailler en base 10, 16 ou 8, 
\item {\tt radian} est l'unit\'e d'angle si cette case est coch\'ee, sinon 
l'unit\'e d'angle est le  degr\'e,
\item {\tt puissance croissante} pour que l'affichage des polyn\^omes se fasse selon
les puissances croissantes apr\`es l'utilisation de commandes comme 
{\tt normal} ou {\tt simplify},
\item {\tt Complex} on coche cette case pour travailler en mode complexe : si 
cette case n'est pas coch\'ee on travaille en mode r\'eel. Certaines commandes 
cependant sont ind\'ependante du mode choisi comme {\tt cpartfrac}, 
{\tt csolve} ou {\tt cFactor},
\item {\tt Variables\_complexes} on coche cette case pour travailler avec des 
variables formelles complexes : si cette case n'est pas coch\'ee les variables 
formelles sont r\'eelles (si la variable {\tt a} n'est pas 
affect\'ee  {\tt re(a)=conj(a)=a} et {\tt im(a)=0}). Mais attention dans 
{\tt csolve} l'inconnue est toujours consid\'er\'ee comme une variable formelle
complexe et dans {\tt solve} l'inconnue est consid\'er\'ee comme une variable 
formelle complexe seulement si l'equation \`a r\'esoudre contient {\tt i} ou 
bien si on est en mode  complexe,
%{\tt Sauver\_var} on coche cette case si on veut que les variables soit sauv\'ees sur le disque dur (cf \ref{sec:variable}),\\
\item {\tt puissance croissante}~: affiche les développements de polynômes selon les
puissances croissantes ou décroissantes
\item {\tt All\_trig\_sol}~: renvoie toutes les solutions d'une équation trigonométrique
(par exemple \verb|solve(cos(x)=0)|) à l'aide de variables entières ou seulement les
solutions principales.
\item {\tt Sqrt}~: si coché, 
{\tt factor} factorise les polynômes du second degré, même si les facteurs ne sont
pas dans le corps de base des coefficients.
\item {\tt Appliquer} pour avoir cette configuration,
\item {\tt Sauver} pour avoir cette configuration par d\'efaut,
\item {\tt Annuler} pour revenir \`a l'ancienne configuration.
\end{itemize}
\subsection{Configuration du graphique avec le menu {\tt Cfg$\blacktriangleright$Configuration graphique}}\label{sec:configgeo}
La configuration du graphique se fait  avec
le menu {\tt Cfg$\blacktriangleright$Configuration graphique}.\\
Mais chaque graphique peut avoir sa configuration propre en  utilisant le bouton {\tt cfg} du bloc situ\'e en haut \`a droite de l'\'ecran graphique.
\noindent{\tt axes} on coche cette case pour voir les axes,\\
{\tt X-} et {\tt X+} pour d\'eterminer l'axe des x de la fen\^etre de calcul,\\
{\tt Y-} et {\tt Y+} pour d\'eterminer l'axe des y de la fen\^etre de calcul,\\
{\tt Z-} et {\tt Z+} pour d\'eterminer l'axe des z de la fen\^etre de calcul,\\
{\tt t-} et {\tt t+} pour d\'eterminer la variation du param\`etre t utilis\'e dans les courbes en param\'etriques ou en polaires,\\
{\tt WX-} et {\tt WX+} pour d\'eterminer l'axe des x de la fen\^etre de visualisation,\\
{\tt WY-} et {\tt WY+} pour d\'eterminer l'axe des y de la fen\^etre de visualisation,\\
{\tt x\_rot} pour faire tourner une figure en {\tt 3D} selon l'axe des x :
une partie de l'\'ecran de configuration graphique s'ouvre automatiquement 
lorsqu'on fait un graphe en {\tt 3D} selon une petite fen\^etre qui remplace 
momentan\'ment {\tt Xcas}. On utilise les touches {\tt +} ou {\tt -} pour faire
 tourner la figure et on ferme cette petite fen\^etre avec {\tt OK},\\
{\tt z\_rot} pour faire tourner une figure en {\tt 3D} selon l'axe des z, 
à l'aide les touches {\tt +} ou {\tt -},\\
{\tt x\_scale} pour faire changer l'\'echelle de l'axe des x,\\
{\tt z\_scale} pour faire changer l'\'echelle de l'axe des z,\\
{\tt class\_min} pour d\'efinir en statistiques le minimum des classes,\\
{\tt class\_size} pour d\'efinir en statistiques la taille des classes,\\
{\tt autoscale} on coche cette case pour avoir un r\'eglage automatique de 
l'\'echelle en mode {\tt 2D} ou {\tt 3D}, ce qui provoque un changement du 
r\'eglage des x, des y et des z,\\ 
{\tt ortho} pour avoir un rep\`ere orthonorm\'e contenant la partie visible demand\'ee,\\
{\tt -> W} et {\tt W->XY} si on veut recopier les plages {\tt XY} dans {\tt W} 
et vice-versa,\\
{\tt TX} et {\tt TY} permet de marquer, lorsqu'on a les axes, les points
de coordonn\'ees les multiples de {\tt TX} et {\tt TY}, on met {\tt TX} et 
{\tt TY} \`a z\'ero lorsque l'on ne veut pas ces points,\\
{\tt OK} pour confirmer, et on obtient par exemple :\\
{\tt xyztrange(-6.0,6,-7,4,-10,10,-1,6.0,-6,6,-2,4,1)}
\index{xyztrange}
 dans l'historique, commande qui d\'efinit les nouveaux param\`etres de la 
fen\^etre graphique,\\
{\tt Annuler} pour revenir \`a l'ancienne configuration.
\subsection{Configuration g\'en\'erale}\label{sec:configgen}
\noindent
{\tt Format d'impression} on a le choix entre diff\'erents formats : 
{\tt A4, A5, A3, Lettre Enveloppe},\\
{\tt Landscape} si cette case est coch\'ee l'impression se fera selon la 
largeur de la feuille, si elle n'est pas coch\'ee l'impression se fera selon 
la hauteur de la feuille,\\
{\tt Fonte historique} pour d\'eterminer la taille des fontes de l'historique,\\
%{\tt Fonte de l'aide} pour d\'eterminer la taille des fontes de l'aide.\\{\tt Fonte g\'en\'erale} d\'efinit la fonte g\'en\'erale,\\
{\tt Level} si on choisit {\tt Tortue}, cela ouvrira {\tt Xcas} avec 2 
niveaux : un \'ecran de dessin tortue en niveau 1 et un \'editeur de 
programmes en niveau 2,\\
{\tt Aide HTML automatique} on coche cette case pour avoir l'aide detaill\'ee
\`a chaque appel de fonction se trouvant dans les menus. Si 
cette case n'est pas coch\'ee on a toujours une aide succincte qui s'affiche 
dans le bandeau g\'en\'eral \`a l'endroit des messages et on a peut aussi avoir
de l'aide en tapant {\tt ?} suivi du nom de la commande et \'eventuellement de
{\tt ,} (virgule) {\tt 1} ou {\tt 2} ou {\tt 3} pour indiquer le langage 
utilis\'e ({\tt 1} fran\c{c}ais, {\tt 2} anglais, {\tt 3} espagnol),
(par exemple {\tt ?iquo} ou {\tt ?iquo,2}) ou, en cliquant sur le menu
{\tt Aide} pour ouvrir toutes les aides possibles,\\
{\tt Lignes} pour d\'eterminer le nombre de lignes de l'\'editeur de matrices (ou du tableur),\\
{\tt Cols} pour d\'eterminer le nombre de colonnes de l'\'editeur de matrices (ou du tableur),\\
{\tt Pr\'evisualisation} pour d\'eterminer le logiciel utilis\'e pour voir les 
fichiers {\tt .ps} (on met par exemple {\tt gv}...),\\
{\tt Recurs} pour d\'eterminer le nombre de r\'ecursivit\'e auroris\'ee,\\


\section{Les diff\'erentes configurations avec les commandes}
\subsection{Le fichier {\tt .xcasrc}}\index{widget\_size}
Le fichier {\tt .xcasrc} du r\'epertoire {\tt home} ({\tt xcas.rc} sous 
Windows)  est un fichier qui est ex\'ecut\'e au lancement de 
{\tt Xcas} et qui contient vos "pr\'ef\'erences" (menu {\tt Cfg} 
sous-menu {\tt Sauver pr\'ef\'erences})
Dans ce fichier on a par exemple :
\begin{verbatim}
widget_size(20,267,56,735,557,0,1,0,7,"mozilla",0,"gv");
cas_setup(0,0,0,1,0,1e-10,12,1,0,0,0),maple_mode(0);
xyztrange(-1.0,5.0,-3.5,3.5,-10.0,10.0,-10.0,10.0,-10.0,10.0,
-5.72671232877,5.42671232877,1,0.0,1.0,1);
\end{verbatim}
\subsection{La configuration g\'en\'erale et la fonction : {\tt widget\_size}}\index{widget\_size}
\noindent {\tt widget\_size} a entre 1 et 12 arguments.\\
Les arguments dans l'ordre sont :\\
\begin{itemize}
\item  argument num\'ero 0 : la taille des caract\`eres, par exemple 20,
\item  arguments num\'ero 1 et 2 : l'abscisse et l'ordonn\'ee du point dans la fen\^etre {\tt xterm}, o\`u doit se 
produire l'affichage du coin sup\'erieur gauche de {\tt Xcas}, par exemple 
(58,49) (le rep\`ere a pour origine le point en haut et \`a gauche de la 
fen\^etre {\tt xterm} et l'axe des {\tt Y} est dirig\'e vers le bas),
\item  arguments num\'ero 3 et 4 la largeur et la hauteur de {\tt Xcas}, par exemple (697,563) (le rep\`ere 
est toujours celui de {\tt xterm}),
\item argument num\'ero 5 : 1 (resp 0) pour avoir (resp ne pas avoir) la 
pr\'esence du clavier,\\
\item argument num\'ero 0 : 1 (resp 0) pour avoir (resp ne pas avoir) pour
lancer le navigateur automatiquement afin d'afficher l'aide sur la commande 
s\'electionn\'ee dans un menu ou dans l'index,
\item argument num\'ero 7 : 1 (resp 0) pour avoir (resp ne pas avoir) la 
pr\'esence du bandeau,\\
\item argument num\'ero 8 : pas utilis\'e pour l'instant,%le moment
\item argument num\'ero 9 : une cha\^ine de caract\`eres indiquant le nom de 
votre navigateur internet (si vous travaillez avec Linux ou avec MacOS), 
celui qui s'ouvrira pour lire l'aide {\tt html} ("" ou "builtin" designe le 
petit navigateur integr\'e)
\item argument num\'ero 10 : pour avoir le niveau de l'utilisateur 
0=universit\'e, 1=terminale, 2=premi\`ere, 3=seconde, 8=tortue,
\item argument num\'ero 11 : nom de la commande utilis\'ee  permettant la 
previsualisation postscript : par exemple `"gv"
\end{itemize}
\subsection{La configuration du cas avec la fonction : {\tt cas\_setup}}\index{cas\_setup|textbf}
\noindent {\tt cas\_setup} a 9 arguments.\\
 Les arguments dans l'ordre sont :\\
{\tt approx, var\_complexe ,complexe, radian, format\_affichage, }\\
{\tt epsilon, chiffres, taches, increasing power} \\
et valent 1 ou 0 (sauf {\tt taches}) pour dire si on veut ou on ne veut pas 
travailler avec cette option.\\
On tape :
\begin{center}{\tt cas\_setup(1,0,0,1,0,1e-10,12,2,0)}\end{center}
{\tt approx} vaut {\tt 1} : on travaille en mode approximatif (on met 0 pour 
num\'erique),\\
{\tt var\_complexe} vaut {\tt 0} : on travaille avec des variables r\'eelles 
(on met 1 pour travailler avec des variables complexes),\\
{\tt complex} vaut {\tt 0} (on travaille en mode r\'eel),\\
{\tt radian} vaut {\tt 1} (on travaille en radian (on met 0 pour travailler en 
degr\'e),\\
{\tt format\_affichage} vaut {\tt 0} : l'affichage sera selon le format 
standard  (on met 1 pour le format scientifique, 2  pour le format ingenieur et
3 pour le format flottant hexadecimal (normalis\'e avec un 1er digit non nul ou
d\'enormalis\'e)), \\ 
{\tt epsilon} vaut {\tt 1e-10},\\
{\tt Chiffres} vaut {\tt 12},\\
{\tt taches} vaut {\tt 2},\\
{\tt puissance croissante} vaut {\tt 0} (on travaille en puissance d\'ecroissante).

\subsection{Nombres de chiffres significatifs : {\tt Digits DIGITS}}\index{Digits|textbf}\index{DIGITS|textbf}
\noindent {\tt Digits} ou {\tt DIGITS} est le nom d'une variable qui contient
le nombre de chiffres de l'affichage.
On tape :
\begin{center}{\tt Digits}\end{center}
Ou on tape :
\begin{center}{\tt DIGITS}\end{center}
On obtient :
\begin{center}{\tt 12}\end{center}
si dans la configuration du CAS il y a 12 dans la case {\tt Chiffres}.\\

On peut changer la valeur de la case {\tt Chiffres} de la configuration du CAS
en affectant une valeur \`a {\tt Digits} ou {\tt DIGITS}.
{\tt Digits} ou {\tt DIGITS} permet donc de sp\'ecifier le nombre de 
chiffres significatifs de l'affichage, pour cela on doit taper {\tt Digits} 
puis {\tt :=} et un nombre entier entre 1 et 1000.\\
On tape :
\begin{center}{\tt Digits:=3}\end{center}
Ou on tape :
\begin{center}{\tt DIGITS:=3}\end{center}
pour avoir 3 chiffres \`a l'affichage :
Puis, on tape :
\begin{center}{\tt 1.0/3}\end{center}
On obtient :
\begin{center}{\tt 0.333}\end{center}
On tape :
\begin{center}{\tt 4.0/3}\end{center}
On obtient :
\begin{center}{\tt 1.33}\end{center}

IL y a deux cas \`a distinguer :
\begin{itemize}
\item La valeur de {\tt Digits} ou {\tt DIGITS} est inf\'erieure \`a 14, 
{\tt Xcas} travaille alors avec des flottants machines c'est \`a dire que les 
d\'ecimaux ont environ 14 chiffres significatifs car ils sont represent\'es en 
binaire sur 52 bits et donc les calculs seront les m\^emes quelque soit {\tt n}
inf\'erieur \`a 14, seul l'affichage sera diff\'erent. En effet si 
{\tt Digits:=n} ou {\tt DIGITS:=n} avec {\tt n} inf\'erieur \`a 14 
l'affichage sera fait avec {\tt n} chiffres significatifs.\\
On tape :
\begin{center}{\tt Digits:=5}\end{center}
Ou on tape :
\begin{center}{\tt DIGITS:=5}\end{center}
puis, on tape :
\begin{center}{\tt a:=4.0/3}\end{center}
On obtient :
\begin{center}{\tt 1.3333}\end{center}
Mais, si on tape :
\begin{center}{\tt b:=a-1.333333333}\end{center}
On obtient :
\begin{center}{\tt 3.3333e-10}\end{center}
ce qui prouve que {\tt Xcas} travaille avec {\tt a=1.33333333333333}.

\item La valeur {\tt n} de {\tt Digits} ou {\tt DIGITS} est sup\'erieure \`a 
14, {\tt Xcas} travaille avec des flottants en multi-pr\'ecision c'est \`a dire
que les d\'ecimaux auront environ {\tt n} chiffres significatifs. Donc si 
on tape {\tt Digits:=n} ou {\tt DIGITS:=n} avec {\tt n} sup\'erieur \`a 14 
l'affichage et les calculs se feront avec {\tt n} chiffres significatifs.\\
On tape :
\begin{center}{\tt Digits:=20}\end{center}
Ou on tape :
\begin{center}{\tt DIGITS:=20}\end{center}
puis, on tape :
\begin{center}{\tt c:=4.0/3}\end{center}
On obtient 21 chiffres significatifs:
\begin{center}{\tt 1.33333333333333333333}\end{center}
0n tape :
\begin{center}{\tt c-1.33333333333333333333}\end{center}
On obtient :
\begin{center}{\tt 0.000000000000000000000}\end{center}
Dans ce cas les calculs correspondent \`a l'affichage.\\
{\bf Exemples}
On tape :
\begin{center}{\tt Digits:=5}\end{center}
Ou on tape :
\begin{center}{\tt DIGITS:=5}\end{center}
puis
\begin{center}{\tt evalf((pi)\verb|^|4)}\end{center}
On obtient :
\begin{center}{\tt 97.409}\end{center}
puis
\begin{center}{\tt evalf((pi)\verb|^|4-97.409)}\end{center}
On obtient :
\begin{center}{\tt 9.1034e-05}\end{center}
puis
\begin{center}{\tt evalf((pi)\verb|^|4-97.40909103)}\end{center}
On obtient :
\begin{center}{\tt 4.0018e-09}\end{center}
On tape :
\begin{center}{\tt Digits:=20}\end{center}
Ou on tape :
\begin{center}{\tt DIGITS:=20}\end{center}
puis
On tape 
\begin{center}{\tt evalf((pi)\verb|^|4)}\end{center}
On obtient :
\begin{center}{\tt 0.974090910340024372345e2}\end{center}
puis
\begin{center}{\tt evalf((pi)\verb|^|4--97.40909103)}\end{center}
On obtient :
\begin{center}{\tt 4.001776687801e-09}\end{center}
\end{itemize}
\subsection{Choix du mode de langage {\tt Xcas} ou Maple ou MuPad ou TI89 : {\tt maple\_mode}}\index{maple\_mode}
\noindent{\tt maple\_mode} permet de sp\'ecifier le langage avec lequel
 on veut travailler.\\
Si on veut travailler en mode {\tt Xcas}, on tape :
\begin{center}{\tt maple\_mode(0)}\end{center}
Si on veut travailler en mode {\tt Maple}, on tape :
\begin{center}{\tt maple\_mode(1)}\end{center}
Si on veut travailler en mode {\tt MuPad}, on tape :
\begin{center}{\tt maple\_mode(2)}\end{center}
Si on veut travailler en mode {\tt TI89}, on tape :
\begin{center}{\tt maple\_mode(3)}\end{center}

\subsection{Choix de l'unit\'e d'angle : {\tt angle\_radian}}\index{angle\_radian}
\noindent{\tt angle\_radian} permet de sp\'ecifier l'unit\'e choisie pour les 
angles.\\
Si on veut travailler en radian, on tape :
\begin{center}{\tt angle\_radian:=1}\end{center}
Si on veut travailler en degr\'e, on tape :
\begin{center}{\tt angle\_radian:=0}\end{center}
On peut aussi cocher ou d\'ecocher {\tt radian} dans l'\'ecran de la
{\tt Configuration du CAS} du menu {\tt Cfg}.
\subsection{Choix du mode approximatif ou exact : {\tt approx\_mode}}\index{approx\_mode}
\noindent{\tt approx\_mode} permet de sp\'ecifier si on veut travailler avec des valeurs approch\'ees  ou avec des valeurs exactes.\\
Si on veut travailler en approximatif, on tape :
\begin{center}{\tt approx\_mode:=1}\end{center}
Si on veut travailler en exact, on tape :
\begin{center}{\tt approx\_mode:=0}\end{center}
On peut aussi cocher ou d\'ecocher {\tt approx} dans l'\'ecran de la
{\tt Configuration du CAS} du menu {\tt Cfg}.
\subsection{Choix du mode r\'eel ou complexe : {\tt complex\_mode}}\index{complex\_mode|textbf}
\noindent{\tt complex\_mode} permet de sp\'ecifier si on veut travailler avec des nombres complexes ou avec des nombres r\'eels.\\
Si on veut travailler en complexe, on tape :
\begin{center}{\tt complex\_mode:=1}\end{center}
Si on veut travailler en r\'eel, on tape :
\begin{center}{\tt complex\_mode:=0}\end{center}
On peut aussi cocher ou d\'ecocher {\tt Complex} dans l'\'ecran de la
{\tt Configuration du CAS} du menu {\tt Cfg}.
\subsection{Variables r\'eelles ou complexes : {\tt complex\_variables}}\index{complex\_variables|textbf}
\noindent{\tt complex\_variables} permet de sp\'ecifier si on veut travailler
 avec des variables formelles r\'eelles (dans ce cas par exemple {\tt re(A)=A}) ou complexes.\\
Si on veut travailler avec des variables formelles complexes, on tape :
\begin{center}{\tt complex\_variables:=1}\end{center}
Si on veut travailler avec des variables formelles r\'eelles, on tape :
\begin{center}{\tt complex\_variables:=0}\end{center}
On peut aussi cocher ou d\'ecocher {\tt Variables\_ complexes} dans l'\'ecran 
de la {\tt Configuration du CAS} du menu {\tt Cfg}.\\
{\bf Attention !!!}\\
Dans {\tt csolve} l'inconnue est toujours consid\'er\'ee comme une variable 
formelle complexe et dans {\tt solve} l'inconnue est consid\'er\'ee comme une 
variable formelle complexe seulement si l'equation \`a r\'esoudre contient 
{\tt i} et si on est en mode complexe.\\
On tape en mode complexe ({\tt Complexe} est coch\'e et {\tt Variables\_complexes} est d\'ecoch\'e) :
\begin{center}{\tt solve(re(r*exp(-(i)*t))-1,r)}\end{center}
On obtient :
\begin{center}{\tt [` x`+(i)*1/(sin(t))*(-` x`*cos(t)+1)]}\end{center}
cela veut dire que la solution {\tt r} est un nombre complexe qui vaut 
{\tt ` x`+(i)*1/(sin(t))*(-` x`*cos(t)+1)} o\`u {\tt 'x'} est arbitraire.\\
On tape en mode complexe  ({\tt Complexe} est coch\'e et {\tt Variables\_complexes} est d\'ecoch\'e) :
\begin{center}{\tt solve(expand(re(r*exp(-(i)*t))-1),r)}\end{center}
On obtient :
\begin{center}{\tt [1/(cos(t))]}\end{center}
car {\tt (expand(re(r*exp(-(i)*t))-1)} renvoie une expression qui ne contient 
pas de {\tt i} donc {\tt solve} consid\`ere {\tt r} comme une variable 
r\'eelle.\\
{\bf R\`egle} Pour ne pas se tromper, lorqu'on veut des solutions complexes, il
faut utiliser {\tt csolve}.\\
On tape en mode complexe ou r\'eel :
\begin{center}{\tt csolve(re(r*exp(-(i)*t))-1,r)}\end{center}
On obtient :
\begin{center}{\tt [` x`+(i)*1/(sin(t))*(-` x`*cos(t)+1)]}\end{center}
cela veut dire que la solution {\tt r} est un nombre complexe qui vaut 
{\tt ` x`+(i)*1/(sin(t))*(-` x`*cos(t)+1)} o\`u {\tt 'x'} est arbitraire.
\section{L'aide}
%L'aide est disponible en Fran\c{c}ais, en Anglais et en Espagnol. Vous pouvez changer de langue en cours de travail, avec le menu {\tt Fich} sous menu {\tt Langue de l'aide}.\\
On peut avoir de l'aide sur les diff\'erentes fonctions de calcul formel de 
plusieurs fa\c{c}ons. On peut cocher la case {\tt Aide HTML automatique} de la 
configuration g\'en\'erale pour avoir l'ouverture de l'aide detaill\'ee\`a 
chaque appel 
d'une fonction se trouvant dans les menus ou ne pas cocher cette case pour 
avoir de l'aide seulement lorqu'on le d\'esire, toutefois une aide succincte 
apparait dans la ligne des messages \`a chaque appel d'une fonction
 se trouvant dans les menus. On peut avoir acc\`es \`a l'aide g\'en\'erale ou 
\`a l'aide par fonction tout le temps (voir ci-dessous).
\subsection{Aide g\'en\'erale}
{\bf Voir aussi :}  \ref{sec:Index} pour le menu de {\tt Aide}.\\
On ouvre  l'aide  en utilisant le menu  {\tt Aide}.\\
Il sufit aussi, de taper le d\'ebut du nom d'une commande, puis 
d'appuyer sur la touche de tabulation ($\leftrightarrows$) pour avoir l'aide 
sur les commandes  commencant par ce d\'ebut de nom ou,\\
de mettre en surbrillance dans un des menus {\tt Cmds...Geo}, le nom d'une 
fonction pour avoir :\\
- cette fonction dans la ligne o\`u se trouve le curseur,\\
- une explication sur ce que fait cette fonction dans l'\'ecran des messages,\\
- une aide plus d\'etaill\'ee mais seulement en Fran\c{c}ais dans votre 
navigateur. 

\subsection{Aide sur une fonction : {\tt findhelp} ou {\tt ?}}\index{findhelp} \index{?}
Chaque fois que l'on appelle une fonction \`a partir d'un menu une aide 
succincte sur cette fonction s'affiche dans l'\'ecran des messages 
(cliquez sur {\tt msg} du bandeau).\\
Pour avoir de l'aide dans l'historique dans la langue de son choix, on utilise
{\tt findhelp} ou {\tt ?} avec deux param\`etres : le premier param\`etre est 
le nom de la fonction et le deuxi\`eme est {\tt 1} pour avoir l'aide en 
fran\c{c}ais (ou {\tt 2} pour avoir l'aide en anglais ou {\tt 3} pour avoir 
l'aide en  espagnol) sur cette fonction.\\
On tape par exemple :
\begin{center}{\tt findhelp(factor)}\end{center}
ou
\begin{center}{\tt ?factor}\end{center}
On obtient alors l'aide sur la fonction {\tt factor} en r\'eponse.
On peut aussi choisir la langue 
On tape par exemple :
\begin{center}{\tt findhelp(factor,2)}\end{center}
ou
\begin{center}{\tt ?factor,2}\end{center}
On obtient alors l'aide sur la fonction {\tt factor} en anglais en r\'eponse.
%a enlever
\section{Sauver et imprimer}
Il est pr\'ef\'erable de mettre les suffixe suivants :\\
{\tt .cxx} (ou {\tt .map} ou {\tt .mu} ou {\tt .ti} selon le mode) pour un 
script et par exemple,\\ 
{\tt .xws} pour la session de travail,\\
{\tt .cxx} pour une fonction,\\ 
{\tt .tab} pour le tableur,\\
{\tt .tex} pour le graphique en latex,\\
{\tt .eps} pour le graphique et pouvoir ensuite inclure le fichier dans un 
texte en latex  ou en postscipt,\\
 {\tt .png} pour le graphique et pouvoir ensuite inclure le fichier dans un 
texte  en html.
\subsection{Pour sauver une session}
Il suffit d'utiliser le bouton {\tt sauver} qui se trouve dans la barre de 
boutons pour sauver votre session ou encore le sous-menu {\tt sauver} du menu
{\tt Fich}.\\
Lorsque vous sauvez votre session, le bouton {\tt sauver} qui etait sur 
fond rouge est alors sur fond vert. La premi\`ere fois on vous demande 
le nom du fichier de sauvegarde (en {\tt .xws}), ce nom s'inscrit \`a la place
de {\tt <no filename>} et c'est dans ce fichier que se feront les sauvegardes 
ult\'erieures. Si vous voulez qu'une sauvegarde se fasse sous un autre nom
Il suffit d'utiliser le sous-menu {\tt Sauver comme} du menu
{\tt Fich}.\\
Vous avez  dans un fichier {\tt .xws} la suite des 
questions et des r\'eponses, ainsi votre session de 
travail est transform\'ee en un script qui pourra alors \^etre r\'eex\'ecut\'e 
avec {\tt Charger} du menu {\tt Fich}.\\
\subsection{Pour sauver un tableur}
\`A l'ouverture d'un tableur (avec {\tt Alt+t}), on vous demande un nom de
variable : si vous donnez comme nom {\tt mat}, il s'inscrit {\tt mat.tab} \`a 
cot\'e du bouton {\tt Save} du tableur. 
Lorsque vous sauvez votre tableur avec ce bouton {\tt Save} du tableur, vous 
sauvez \`a la fois les formules et les valeurs du tableur : votre tableur est 
transform\'e en un fichier qui pourra \^etre charg\'e gr\^ace \`a 
{\tt Ins\'erer} du menu {\tt Fich} du tableur.\\
\subsection{Pour sauver un programme}
Vous sauvez les programme ou les scripts (suite d'instructions s\'epar\'ees par
des points virgules) \'ecrit dans un \'editeur de programmes, avec le bouton 
{\tt save} de cet \'editeur de programmes, ou avec le sous-menu {\tt sauver}
du menu {\tt Fich} de cet \'editeur de programmes. \\
Le fichier contenant cette sauvegarde pourra \^etre remis dans un \'editeur de 
programmes gr\^ace au menu {\tt Fich} sous-menu :\\
{\tt Charger} pour charger un fichier contenant des scripts ou des programmes
 dans l'\'editeur de programmes.\\
ou\\
{\tt Inserer} pour inserer un fichier contenant des scripts ou des programmes 
dans l'\'editeur de programmes.\\
Appuyer sur {\tt Save} a pour effet, la premi\`ere fois,  de vous demander 
le nom du fichier de sauvegarde. Ce nom sera le m\^eme, pour toutes les 
sauvegardes ult\'erieures. Si vous voulez, au cours de votre 
travail, sauver sous un autre nom, il faut utiliser le menu {\tt Fich} de
l'\'editeur de programme sous-menu {\tt Sauver comme}.
\subsection{Pour imprimer}
Il faut utiliser le menu {\tt Fich} sous-menu 
{\tt Imprimer session} puis :\\
{\tt Imprimer} pour imprimer l'historique : vous n'avez pas besoin pour cela 
d'avoir Latex.... On vous demandera simplement le nom de l'imprimante 
ou bien,\\
{\tt Fichier postscript} pour traduire votre session en un 
fichier postscript ({\tt .ps}) qui sera pr\^et \`a \^etre imprimer (sous Unix 
ou Linux vous pourrez le voir avec la commande {\tt gv}) ou bien,\\
{\tt Pr\'e-visualisation avec Latex}  pour voir votre fichier avant impression,
votre session est sauv\'ee en un fichier Latex ({\tt .tex}) qui sera traduit 
apr\`es compilation en un fichier ({\tt .dvi}) (si vous n'avez pas sauv\'e 
auparavant ces fichiers auront pour nom {\tt session.tex} et {\tt session.dvi})
 ou bien directement,\\
{\tt Imprimer avec Latex} vous aurez  les fichiers {\tt .tex}) et {\tt .dvi}.
\section{Traduction Latex}
\subsection{Traduction Latex d'une entr\'ee : {\tt latex TeX}}\index{latex}\index{TeX}
\noindent {\tt latex} (ou {\tt TeX}) a comme argument une expression.\\
{\tt latex} (ou {\tt TeX}) renvoie l'\'ecriture en latex de l'expression 
\'evalu\'ee.\\
On tape :
\begin{center}{\tt latex(1/2)}\end{center}
On obtient :
\begin{center}\verb| "\frac{1}{2}"|\end{center}
On tape :
\begin{center}{\tt latex(1+1/2)}\end{center}
On obtient :
\begin{center}\verb|"\frac{3}{2}"|\end{center}
\subsection{Imprimer la session ou/et la convertir en un fichier Latex}
Pour sauver toute la session il faut cliquer sur {\tt Save} de la barre des 
boutons de la session (on vous demande le nom par exemple {\tt session.xws}
et toute la session est sauv\'ee en ce fichier {\tt session.xws}.
Si vous voulez l'imprimer en un  fichier postscript, il faut choisir dans
 le menu {\tt Fich} de la session, le sous-menu {\tt Imprimer} puis 
{\tt Pre-visualisation} et ensuite {\tt Vers Imprimante} : cela cr\'ee un  
fichier postscript {\tt session.ps}.
Si vous voulez convertir votre session en un fichier Latex, il faut choisir
dans le menu {\tt Fich}, le sous-menu {\tt Imprimer} puis, 
{\tt Pre-visualisation (Latex)}, et ensuite  {\tt Vers Imprimante (Latex)} cela
cr\'ee les  fichiers {\tt session.tex}, {\tt session.dvi}, {\tt session.ps} et
{\tt session.png}.
\subsection{Traduction Latex d'un \'ecran de g\'eom\'etrie}\index{graph2tex}\index{erase}\label{sec:latexgeo}

{\bf Voir aussi :} \ref{sec:latexgeo23} et \ref{sec:latex3d}
On veut traduire en Latex toutes les sorties graphiques r\'ealis\'ees depuis le
dernier {\tt erase()}  c'est \`a dire toutes celles faites 
 \`a partir des lignes de commandes et celles faites dans les \'ecrans de 
g\'eom\'etrie.\\
On utilise pour cela la fonction {\tt graph2tex}.\\
On tape par exemple dans une ligne de commandes :
\begin{center}{\tt graph2tex("truc.tex")}\end{center}
On obtient alors les graphiques sauv\'es en un fichier Latex 
{\tt truc.tex}  qui pourra \^etre compil\'e et visualis\'e seul, ou encore 
\^etre ins\'er\'e dans un fichier Latex.\\ 
Ou encore, si on veut la traduction Latex d'un seul \'ecran de g\'eom\'etrie,
on appuie sur le bouton {\tt Save} de cet \'ecran de g\'eom\'etrie, on
donne un nom de fichier par exemple {\tt truc.cas}. Puis, on choisit
dans le menu {\tt Fich} de cet \'ecran de g\'eom\'etrie, le sous-menu 
{\tt Imprimer} puis, {\tt Pre-visualisation (Latex)}, cela
cr\'ee les  fichiers {\tt truc.tex}, {\tt truc.dvi}, {\tt truc.ps} et
{\tt truc.png} ou  \'eventuellement si on veut imprimer, on choisit  
{\tt Vers Imprimante (Latex)}.\\
On obtient alors l'\'ecran de g\'eom\'etrie sauv\'e en un fichier Latex 
{\tt truc.tex}  qui pourra \^etre compil\'e et visualis\'e seul, ou encore 
\^etre ins\'er\'e dans un fichier Latex, \`a condition d'enlever l'en-t\^ete 
\verb|\documentclass{article}...\begin{document}|, d'enlever \`a la fin 
\verb|\end{document}| et de rajouter \verb|\usepackage{pstricks}|  
dans l'en-t\^ete du fichier dans lequel on l'ins\`ere.\\
Ou encore, on veut traduire en Latex une seule sortie graphique ou un seul 
dessin ou un seul graphique fait dans un des \'ecrans de g\'eom\'etrie et on 
voudrait l'int\'egrer dans un texte Latex ou l'imprimer seul. Mais, on a 
d\'ej\`a fait d'autres graphiques, soit \`a l'aide de commandes qui renvoient 
des sorties graphiques, soit dans diff\'erents \'ecrans de g\'eom\'etrie, 
alors, pour avoir la traduction Latex du dessin que vous voulez, il faut  
utiliser la commande {\tt erase()} cela n'effacera pas vos graphiques, 
mais cela aura pour effet de 
ne traduire en Latex que les trac\'es futurs. Donc on tape {\tt erase()}, puis 
on revalide ce que l'on veut traduire en Latex, puis on tape par exemple :
\begin{center}{\tt graph2tex("truc1.tex")}\end{center}

Pour traduire en Latex et imprimer un seul graphique on peut aussi se servir du
menu {\tt Exporter/Imprimer} du bouton  {\tt M} de cet \'ecran graphique :\\
{\tt M$\blacktriangleright$ Exporter/Imprimer$\blacktriangleright$Imprimer(en Latex)},\\ 
Ou encore, on peut s\'electionner le niveau de l'\'ecran graphique que l'on 
veut imprimer et utiliser le  menu de la session :\\
{\tt Fich$\blacktriangleright$Imprimer$\blacktriangleright$Imprime selection (latex)}. \\
Dans ces deux cas l'\'ecran est sauv\'e selon 4 formats, sous 
les noms {\tt session0.tex}, {\tt session0.dvi}, {\tt session0.ps} et 
{\tt session0.png}
(ou encore  sous les noms {\tt session<numero>.tex/dvi/ps/png}) (sauf si vous 
avez donn\'e un autre nom ce qui est conseill\'e !).

\subsection{Traduction Latex de l'\'ecran {\tt DispG}}\index{ClrGraph}\index{erase}
On tape {\tt DispG} pour voir cet \'ecran, et on se sert du
bouton {\tt M$\blacktriangleright$ Exporter/Imprimer$\blacktriangleright$Imprimer(en Latex)} de cet \'ecran.\\
L'\'ecran {\tt DispG} s'efface avec la commande {\tt ClrGraph()} ou {\tt erase}.
\subsection{Traduction Latex de l'\'ecran {\tt 3D} : {\tt graph3d2tex}}\index{graph3d2tex}\label{sec:latex3d}
{\bf Voir aussi :} \ref{sec:latexgeo23} et \ref{sec:latexgeo}
On fait un graphique en {\tt 3D} dans l'\'ecran et on voudrait
l'imprimer. On se sert de {\tt M$\blacktriangleright$ Exporter/Imprimer$\blacktriangleright$Imprimer(en Latex)} ou de la fonction {\tt graph3d2tex}.\\
On tape par exemple :
\begin{center}{\tt graph3d2tex("truc.tex")}\end{center}
On obtient alors l'\'ecran {\tt 3D} sauv\'e en un fichier Latex 
{\tt truc.tex} qui pourra \^etre ins\'er\'e dans un fichier Latex.\\
On peut aussi s\'electionner le niveau (en cliquant sur son num\'ero puis,
utiliser le menu {\tt Fich} sous menu {\tt Imprimer$\blacktriangleright$Imprime s\'election (latex)}.
Dans ce cas l'\'ecran {\tt 3D} est sauv\'e selon 4 formats, sous les noms 
{\tt session0.tex}, {\tt session0.dvi}, {\tt session0.ps} et {\tt session0.png}
(ou  encore sous les noms {\tt session<numero>.tex/dvi/ps/png}) (sauf si vous 
avez donn\'e un autre nom ce qui est conseill\'e !).

\section{Traduction Mathml}
\subsection{Traduction Mathml d'une expression : {\tt mathml}}\index{mathml}
\noindent {\tt mathml} a comme argument une expression.\\
{\tt mathml} renvoie l'\'ecriture en mathml de l'expression \'evalu\'ee.\\
On tape :
\begin{center}{\tt mathml(1/2)}\end{center}
On obtient :
\begin{center}{\tt  "<?xml version=""1.0"" encoding=""iso-8859-1""?>
<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN""
""http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd"" [
<!ENTITY mathml ""http://www.w3.org/1998/Math/MathML"">
]>
<html xmlns=""http://www.w3.org/1999/xhtml"">
<body>
<math mode=""display"" xmlns=""http://www.w3.org/1998/Math/MathML"">
<mfrac><mrow><mn>1</mn></mrow><mrow><mn>2</mn></mrow></mfrac>
</math><br/>
</body>
</html>
"}\end{center}
\subsection{Traduction Mathml du tableur }
On utilise le menu {\tt Fich->Exporter->Mathml}.

\section{Traduction de fichiers Maple en fichier {\tt Xcas} ou Mupad}
\subsection{Fichier Maple traduit en fichier {\tt Xcas} : {\tt maple2xcas}}\index{maple2xcas}
\noindent {\tt maple2xcas} a comme argument un nom de fichier qui contient un
programme Maple en mode texte.\\
On tape :
\begin{center}{\tt maple2xcas("fichier1","fichier2")}\end{center}
On obtient :
\begin{center}{\tt la traduction de ce fichier en {\tt Xcas}}\end{center}
\subsection{Fichier Maple traduit en fichier Mupad : {\tt maple2mupad}}\index{maple2mupad}
\noindent {\tt maple2mupad} a comme argument un nom de fichier qui contient un
programme Maple en mode texte.\\
On tape :
\begin{center}{\tt maple2mupad("fichier1","fichier2")}\end{center}
On obtient :
\begin{center}{\tt la traduction de ce fichier en Mupad}\end{center}
\section{Traduction d'un fichier Mupad en un fichier {\tt Xcas} ou Maple }
\subsection{Fichier Mupad traduit en fichier {\tt Xcas} : {\tt mupad2xcas}}\index{mupad2xcas}
\noindent {\tt mupad2xcas} a comme argument un un nom de fichier qui contient 
un programme Mupad en mode texte.\\
On tape :
\begin{center}{\tt mupad2xcas("fichier1","fichier2")}\end{center}
On obtient :
\begin{center}{\tt la traduction de ce fichier en {\tt Xcas}}\end{center}
\subsection{Fichier Mupad traduit en fichier Maple : {\tt mupad2maple}}\index{mupad2maple}
\noindent {\tt mupad2maple} a comme argument un un nom de fichier qui contient
 un programme Mupad en mode texte.\\
On tape :
\begin{center}{\tt mupad2maple("fichier1","fichier2")}\end{center}
On obtient :
\begin{center}{\tt la traduction de ce fichier en Maple}\end{center}

\chapter{Saisie}
\section{Pour \'ecrire un commentaire : {\tt Alt+c}}
On peut \`a tout moment faire apparaitre une ligne pour \'ecrire un commentaire
 avec {\tt Alt+c}.
Le commentaire s'\'ecrit sans utiliser de guillemets et apparait en vert.
Le commentaire ne g\'en\`ere pas de r\'eponse.\\
Le commentaire sert \`a commenter votre session.\\
Depuis un commentaire on peut ouvrir le navigateur \`a une adresse donn\'ee
On tape dans une ligne de commentaire :
\begin{center}{\tt Exercice 1}\end{center}
On obtient :
\begin{center}{\tt aucune r\'eponse}\end{center}
Dans une ligne de commentaire, on peut ouvrir le navigateur \`a une adresse 
donn\'ee :
On tape dans une ligne de commentaire :
\begin{center}{\tt Pour plus d'info cf :\\
@www-fourier.ujf-grenoble.fr/~parisse/giac/doc/fr/casrouge/index.html}\end{center}
On obtient :
\begin{center}{\tt l'ouverture dans le navigateur de l'index du document sur 
l'algorithmique}\end{center}

{\bf Attention}\index{comment}\\
Pour faire un commentaire dans un programme il faut utiliser la commande 
{\tt comment} qui a comme argument une cha\^ine de caract\`eres ou bien
utiliser {\tt //} qui doit etre suivi du commentaire et d'un retour \`a la 
ligne. Quand il y a un commentaire dans un programme, tout se qui se trouve 
entre {\tt //} et le retour \`a la ligne n'est 
pas pris en compte par le programme.\\
On tape :
\begin{center}{\tt bs():=\{comment("bonjour"); return "Salut";\}}\end{center}
On tape :
\begin{center}{\tt bs():=\{//"bonjour"}\end{center}
 \begin{center}{\tt return "Salut";\}}\end{center}
On obtient :
\begin{center}{\tt un programme ayant comme commentaire "bonjour"}\end{center} 
\section{L'\'editeur d'\'equation}\label{sec:eqw}
Dans l'\'editeur d'\'equation, l'affichage ne se fait pas lin\'eairement mais 
se fait en dimension {\tt 2d}.\\
Quand on a mis une expression dans l'\'editeur d'\'equation, on peut facilement
s\'electionner des sous-expressions et appeler les fonctions des menus sur
ces sous-expressions puis appuyer sur {\tt enter} pour avoir la r\'eponse en 
dessous de l'\'editeur d'\'equation ou encore \'evaluer la s\'election dans
l'\'editeur d'\'equation avec le bouton {\tt eval}.
\subsection{Comment \'editer une \'equation}
Supposons que l'on veuille entrer l'expression 
$\displaystyle \frac{x+2}{x^2-4}$, on peut le faire de plusieurs fa\c{c}ons :
\begin{itemize}
\item dans une ligne de commande \`a condition de mettre des parenth\`eses et
on tape : {\tt (x+2)/(x\verb|^|2-4)}
\item on se sert d'un \'editeur d'\'equation, \'editeur obtenu avec 
{\tt Alt+e}.\\ 
On clique dans l'\'ecran de l'\'editeur d'\'equation et on tape {\tt x+2}, puis
on s\'electionne {\tt x+2} (avec la souris ou avec la fl\`eche vers le haut 
du bloc des fl\`eches de direction) puis  on tape sur {\tt /} et {\tt x},
 on s\'electionne {\tt x} (avec la souris ou avec la fl\`eche vers le haut) 
puis  on tape {\tt \verb|^|2} puis on s\'electionne ${\tt x^2}$ et on tape 
{\tt -4} et on valide avec {\tt enter} et on obtient 
$\displaystyle \frac{x+2}{x^2-4}$ comme r\'eponse.
\end{itemize}
Supposons que l'on veuille simplifier l'expression 
$\displaystyle \frac{x+2}{x^2-4}$ on peut le faire de plusieurs fa\c{c}ons :
\begin{itemize}
\item dans une ligne de commande \`a condition de mettre des parenth\`eses et
on tape : {\tt normal((x+2)/(x\verb|^|2-4+1))},
\item on se sert d'un \'editeur d'\'equation, \'editeur obtenu avec 
{\tt Alt+e}.\\
On tape la fraction  $\frac{x+2}{x^2-4}$ (voir ci-dessus) puis, on 
s\'electionne toute la fraction (avec la fl\`eche vers le haut) et on 
s\'electionne la fonction {\tt normal} du menu
{\tt Math$\blacktriangleright$R\'eecriture} ce qui a pour effet d'avoir :\\
{\tt normal($\displaystyle\frac{x+2}{x^2-4})$} dans l'\'editeur d'\'equation, 
puis soit on valide avec {\tt enter} et on obtient 
$\displaystyle\frac{1}{x-2}$ comme r\'eponse, soit on appuie sur le bouton 
{\tt eval} du clavier (si le clavier est pr\'esent), soit on s\'electionne 
{\tt Evaluer selection} dans le petit {\tt M} (\`a l'intersection des deux 
barres de scroll), pour avoir la r\'eponse dans l'\'editeur d'\'equation.
\end{itemize}

\subsection{Comment s\'electionner}
On peut s\'electionner directement avec la souris ou avec les fl\`eches  
du bloc des fl\`eches de direction.\\
On peut aussi consid\'erer une expression comme un arbre et parcourir 
cet arbre \`a l'aide des fl\`eches de direction.\\
Quand une expression est s\'electionn\'ee on peut :
\begin{itemize}
\item monter dans l'arbre en selectionnant le p\`ere avec la fl\`eche vers 
le haut,
\item descendre dans l'arbre en selectionnant le fils gauche avec la fl\`eche 
vers le bas,
\item selectionner le fr\`ere droit ou gauche avec la fl\`eche vers la droite
ou vers la gauche,
\item \'echanger l'expression avec son fr\`ere avec {\tt Ctrl} et la fl\`eche 
vers la droite ou vers la gauche,\\
\item supprimer un op\'erateur ou le nom d'une commande en s\'electionnant
l'expression et en tapant : {\tt backspace}.
 Il faut noter qu'un deuxi\`eme {\tt backspace} effacera les arguments
\end{itemize}
{\bf Exemple}
On clique dans l'\'ecran de l'\'editeur d'\'equation et on tape {\tt x+1} puis 
fl\`eche vers le
 haut pour s\'electionner {\tt x+1}, puis {\tt *} et on tape {\tt x+2} puis 
fl\`eche vers le haut pour s\'electionner {\tt x+2} puis {\tt *} et on tape 
{\tt x-1} puis fl\`eche vers le haut pour s\'electionner {\tt x-1}.\\
On a alors dans l'\'ecran de l'\'editeur d'\'equation l'expression 
{\tt (x+1)*((x+2)*(x-1))}.
Puis on s\'electionne le tout et on appuie sur {\tt eval} (menu 
{\tt Expression$\blacktriangleright$Autres} ou bouton {\tt eval} du clavier
si on a choisit {\tt Montrer-> Clavier} dans le menu {\tt Cfg}) pour avoir 
les 3 facteurs sur le m\^eme plan (l'arbre n'est plus binaire).\\
Donc maintenant on obtient :\\
{\tt (x+1)*(x+2)*(x-1)}. \\
On peut ensuite soit 
\begin{itemize}
\item s\'electionner {\tt (x+1)*(x+2)} avec la souris puis on 
s\'electionne la commande {\tt normal} du menu {\tt Calc} sous-menu 
{\tt R\'eecriture}.\\
On obtient alors {\tt (x\verb|^|2+3$\cdot$ x+2)$\cdot$ (x+2)}.
\item  s\'electionner {\tt x+1}, puis {\tt Ctrl} et la fl\`eche vers la droite,
pour \'echanger  {\tt x+1} et {\tt x+2}.\\
Donc maintenant on obtient :\\
{\tt (x+2)*(x+1)*(x-1)}. \\
On peut ensuite s\'electionner {\tt (x+1)*(x-1)} avec la souris puis on 
s\'electionne la commande {\tt normal} du menu {\tt Calc} sous-menu 
{\tt R\'eecriture}.\\
On obtient alors {\tt (x+2)*(x\verb|^|2-1)}.
\end{itemize}
\subsection{Comment \'editer une cha\^ine de caract\`eres}
Lorsque le curseur est actif dans un \'editeur d'\'equation, il suffit 
d'appuyer sur la touche {\tt "} pour transformer une expression en une une 
cha\^ine de caract\`eres et vice versa.
\subsection{Utilit\'e de l'\'editeur d'\'equation}
Avec la souris on peut mettre en surbrillance toute l'expression ou seulement 
une partie de cette expression : c'est alors sur cette partie que l'on peut 
agir  : par exemple la modifier avec une commande de r\'eecriture (par exemple
avec {\tt normal}) ou la factoriser (par exemple avec {\tt factor}),...\\
On tape dans un \'editeur d'\'expressions :
\begin{center}{\tt 1+4}\end{center}
On s\'electionne {\tt 4} et on appelle {\tt ifactor} du menu 
{\tt Cmds$\blacktriangleright$Entier}, puis {\tt enter}.\\
On obtient :
\begin{center}{\tt 1+$2^2$}\end{center}


\section{Les \'editeurs de matrices et les tableurs}\label{sec:mtrw}
Il faut tout d'abord ouvrir un tableur avec {\tt Alt+t}.\\
\`A chaque tableur est attach\'e un \'ecran de g\'eom\'etrie, 
une barre de menu ({\tt Fich Edit Statistiques}), des boutons
({\tt reeval},{\tt val},{\tt Save}), deux cases (l'une donne le nom du fichier 
de sauvegarde et l'autre le nom de la cellule 
s\'electionn\'ee) et deux lignes (l'une  contient une case de s\'election et 
une ligne dite ligne de commandes qui sert soit \`a remplir la cellule 
s\'electionn\'ee, soit \`a afficher ce que l'on a mis dans la cellule 
s\'electionn\'ee, et l'autre est la ligne d'\'etat qui rappelle la 
configuration du tableur et sert de bouton pour ouvrir un \'ecran de 
configuration du tableur).

\subsection{Les sauvegardes d'un tableur}
Lorsque vous ouvrez un tableur, on vous demande son nom, par exemple {\tt sim},
ainsi toutes les 
sauvegardes ult\'erieures du tableur se feront dans le fichier {\tt sim.tab} et
la matrice du tableur sera stock\'ee dans la variable {\tt sim}.\\
Vous avez la possibilt\'e de changer ce nom au cours de votre travail et ce nom
peut alors ne pas \^etre le m\^eme pour le fichier et la variable : vous pouvez
avoir {\tt toto.tab} comme nom de fichier (nom qui est rappel\'e \`a cot\'e du 
bouton {\tt Save}) et {\tt A} comme nom de variable (nom qui est rappel\'e dans
la ligne d'\'etat du tableur).\\ 
Les diff\'erentes sauvegardes se font avec le bouton {\tt Save} ou \`a l'aide 
du menu  {\tt Fich}.
\subsection{Les menus d'un tableur}
Un tableur a trois menus qui sont :
\begin{itemize}
\item {\tt Fich} Ce menu permet de sauver le tableur dans le fichier dont le 
nom figure \`a cot\'e du bouton {\tt save} , ou de le sauver dans un fichier
sous un autre nom, ou de sauver une sous-matrice du tableur dans une variable, 
ou  d'ins\'erer un fichier contenant un tableur, ou de changer le nom de la 
variable contenant le tableur et aussi d'imprimer le tableur,
\item {\tt Edit} Ce menu permet de comfigurer le tableur (voir ci-apr\`es), de 
remplir, \`a partir de la cellule s\'electionn\'ee, toutes les cellules 
situ\'ees vers le bas ou vers la droite, avec la formule de la cellule 
s\'electionn\'ee.  {\tt Edit} permet aussi
d'ajouter ou d'effacer des lignes ou des colonnes, de trier les lignes ou les 
colonnes et  de changer la taille des lignes et des colonnes.
\item {\tt Statistiques} Ce menu contient les fonctions de statistiques 
{\tt 1-d} et {\tt 2-d}.
\end{itemize}
\subsection{La configuration d'un tableur}
La configuration du tableur se fait avec le menu 
{\tt Edit$\blacktriangleright$Configuration} de la barre de 
menus li\'e au tableur ou en ouvrant un \'ecran de configuration du tableur en
cliquant sur la ligne d'\'etat du tableur.\\
On a :
\begin{itemize}
\item {\tt Format}
Pour acc\'eder \`a un tableur il faut s\'electionner {\tt  Tableur} .\\
Pour acc\'eder \`a un \'editeur de matrices, il faut s\'electionner 
{\tt Matrice}.\\
Pour vous faciliter l'entr\'ee d'une matrice vous avez la possibilit\'e de 
choisir son type, par exemple sym\'etrique avec {\tt Matrice sym\'etrique},
(resp quelconque, hermitienne..)
\item {\tt Deplacer ->} pour deplacer le curseur automatiquement vers la droite
apr\`es le remplissage d'une cellule,
\item {\tt Deplacer vers le bas} pour deplacer le curseur automatiquement vers 
le bas apr\`es le remplissage d'une cellule,
\item {\tt Changer le nombre de lignes} permet de changer le nombre de lignes, 
\item {\tt Changer le nombre de colonnes} permet de changer le nombre de 
colonnes, 
\item {\tt Recalculer automatiquement} pour avoir un recalcul automatique du 
tableur un apr\`es chaque modification, 
\item {\tt Ne pas recalculer automatiquement} pour ne pas avoir un recalcul 
automatique du tableur un apr\`es chaque modification, mais seulement quand on 
appuie sur le bouton {\tt reeval},
\item{\tt Distribuer une matrice sur plusieurs cellules} permet de remplir une 
matrice ou un tableur avec une sous-matrice. En effet, pour remplir une 
matrice ou un tableur, on peut le faire case par case (en entrant un nombre 
dans chaque case), on peut aussi entrer une sous matrice (en entrant par 
exemple une expression qui s'\'evalue en une matrice) \`a condition d'avoir 
choisi de distribuer la matrice.
Par exemple, si dans la premi\`ere case on tape {\tt idn(3)}, si on a 
cliqu\'e sur {\tt Distribuer une matrice sur plusieurs cellules}, cela a pour 
effet de remplir 3 lignes et 3 colonnes avec la matrice identit\'e d'ordre 3, 
\item{\tt Conserver une matrice dans une seule cellule} permet de mettre une 
matrice dans une case du tableur. Par exemple, si dans la
premi\`ere case on tape {\tt idn(3)},si on a cliqu\'e sur {\tt Conserver une 
matrice dans une seule cellule}, cela a pour 
effet de remplir la premi\`ere case par la matrice identit\'e d'ordre 3. 
\item {\tt Portrait} pour avoir l'\'ecran de représentation graphique du 
tableur \`a droite du tableur,
\item {\tt Paysage} pour avoir l'\'ecran de représentation graphique du 
tableur en dessous du tableur,
\item {\tt Cacher graph} pour ne pas avoir d'\'ecran de représentation
graphique associ\'e au tableur.

\end{itemize}
\subsection{Les boutons d'un tableur}
On a trois boutons :
\begin{itemize}
\item {\tt reeval} permet d'\'evaluer le tableur ce bouton est utile quand on 
n'est pas en mode automatique mais en mode manuel, 
\item {\tt val} permet d'avoir la valeur et non la formule dans la ligne 
d'entr\'ee lorsqu'on clique sur une cellule,
\item {\tt Save} pour sauver le tableur sous le nom donn\'e au d\'ebut (identique au sous-menu {\tt sauver} du menu {\tt Fich}).
\end{itemize}
\section{Les commandes d'effacement}
\subsection{Effacer dans le tableur} 
Pour effacer, on peut se servir du menu {\tt Edit} sous-menu 
{\tt Ajouter/Effacer}  pour pouvoir supprimer la ligne ou la colonne courante 
ou, pour effacer les lignes ou les colonnes s\'electionn\'ees.
\subsection{Effacer l'\'ecran {\tt DispG} de g\'eom\'etrie : {\tt ClrGraph ClrDraw}}\index{ClrGraph|textbf}\index{ClrDraw|textbf}
Dans un programme, toutes les sorties graphiques d'un programme seront 
effectu\'ees dans l'\'ecran {\tt DispG} visible avec la commande {\tt DispG}. 
Pour effacer cet \'ecran {\tt DispG}, on utilise la 
commande {\tt ClrGraph} ou {\tt ClrDraw}.\\
On tape :
\begin{center}{\tt ClrGraph()}\end{center}
On obtient :
\begin{center}{\tt L'effacement de l'\'ecran DispG de g\'eom\'etrie}\end{center}\subsection{Effacer les \'ecrans de g\'eom\'etrie : {\tt erase}}\index{erase}\index{graph2tex}
{\bf Voir aussi :} \ref{sec:latexgeo} et \ref{sec:latexgeo23}
 {\tt erase} n'a pas d'argument.\\
La commande {\tt erase()} efface l'\'ecran {\tt DispG}, mais n'efface ni
les sorties graphiques, ni les \'ecrans de g\'eom\'etrie mais influe sur la 
commande {\tt graph2tex}. En effet,
{\tt erase} permet d'effacer l'historique interne des graphiques et ainsi de 
pouvoir traduire en Latex \`a l'aide de la commande {\tt graph2tex} seulement 
les sorties graphiques faites post\'erieurement \`a la commande {\tt erase}.
On tape :
\begin{center}{\tt erase()}\end{center}
On obtient :
\begin{center}{\tt L'effacement de l'historique interne des graphiques}\end{center}
\subsection{Effacer une ligne de commande : touche {\tt esc}}
L'effacement de la ligne de commande  o\`u se trouve le curseur
se fait en appuyant sur la touche 
{\tt esc} de {\tt Xcas} ou sur la touche {\tt Echap} de votre ordinateur.\\
 On tape :
\begin{center}{\tt sur la touche  esc}\end{center}
On obtient :
\begin{center}{\tt L'effacement de la ligne de commande o\`u se trouve le curseur}\end{center}

\subsection{Effacer les noms des variables d'une seule lettre minuscule : {\tt rm\_a\_z}}\index{rm\_a\_z}\index{VARS}
\noindent {\tt rm\_a\_z} n'a pas d'argument.\\
{\tt rm\_a\_z} efface tous les noms des variables d'une seule lettre 
minuscule.\\
On connait le nom des variables affect\'ees en utilisant la commande 
{\tt VARS} ou en utilisant la touche noire {\tt var} du bandeau.\\
On tape :
\begin{center}{\tt VARS()}\end{center}
On obtient :
\begin{center}{\tt [A,B,a,b,eps]}\end{center}
On tape :
\begin{center}{\tt rm\_a\_z()}\end{center}
On obtient :
\begin{center}{\tt [a,b]}\end{center}
Si on tape maintenant :
\begin{center}{\tt VARS()}\end{center}
On obtient :
\begin{center}{\tt [A,B,eps]}\end{center}
\subsection{Effacer toutes les variables : {\tt rm\_all\_vars}}\index{rm\_all\_vars}\index{VARS}
\noindent {\tt rm\_all\_vars} n'a pas d'argument.\\
{\tt rm\_all\_vars} efface tous les noms des variables.\\
On connait le nom des variables affect\'ees en utilisant la commande 
{\tt VARS} ou en utilisant la touche noire {\tt var} du bandeau  .\\
On tape :
\begin{center}{\tt VARS()}\end{center}
On obtient :
\begin{center}{\tt [A,B,a,b,eps]}\end{center}
On tape :
\begin{center}{\tt rm\_all\_vars()}\end{center}
On obtient :
\begin{center}{\tt [A,B,a,b,eps]}\end{center}
On tape :
\begin{center}{\tt VARS()}\end{center}
On obtient :
\begin{center}{\tt []}\end{center}
\section{Les variables}
\subsection{Le nom des variables et la variable {\tt CST}}\index{CST}\label{sec:cst}
Un nom de variables est une suite de lettres ou chiffres commen\c{c}ant par
 une lettre.\\
{\bf Attention !!!} il y a des noms qui sont d\'ej\`a employ\'es pas le 
syst\`eme.\\
La variable {\tt CST} permet de d\'efinir son propre
menu, menu qui s'affichera dans le bandeau lorsqu'on appuie sur le bouton 
{\tt cust} du bandeau.\\
 On suppose que l'on a \'ecrit deux fonctions {\tt tor} et {\tt pgcd}, et on 
tape par exemple :\\
{\tt CST:=[diff,["tor",tor],["pgcd",pgcd],["euro",6.55957]]} 
qui affichera {\tt diff tor pgcd euro} dans le bandeau du  bouton {\tt cust}.\\
Pour rajouter une fonction \`a {\tt CST} on tape par exemple :\\
{\tt CST:=concat(CST,evalc)}.\\
{\bf Attention}\\
 Dans l'exemple ci-dessus, {\tt euro} n'est pas une variable 
qui contient {\tt 6.55957}, mais le nom d'un bouton du bandeau. Il y a donc 
une diff\'erence entre :\\
{\tt CST:=[evalc,["f",f],["a",6.55957]]} et \\
{\tt CST:=[evalc,["f",f],["a",a]]},
dans la deuxi\`eme formulation le bouton {\tt a} va renvoyer la valeur 
stock\'ee dans la variable {\tt a} et cette valeur changera si on modifie 
{\tt a}, \`a condition que lorsque l'on d\'efinit  {\tt CST}, la variable 
{\tt a} ne soit pas encore affect\'ee (sinon {\tt a} est evalu\'ee et 
{\tt a} represente la valeur stock\'ee  du d\'ebut), alors que dans la 
premi\`ere formulation
le bouton {\tt a} va renvoyer {\tt 6.55957} quelque soit la valeur 
stock\'ee dans la variable {\tt a}.\\
On peut aussi quoter {\tt a} pour que {\tt a} ne soit pas \'evalu\'ee et 
renvoie {\tt a} lorsqu'on appuie sur le bouton {\tt a} du menu 
{\tt cust} du bandeau, par exemple :\\
{\tt CST:=[evalc,["f",'f'],["a",'a']]}.\\
Pour revenir au bandeau initial il faut utiliser le bouton {\tt home} (voir 
aussi page \pageref{sec:cust}).
\subsection{L'affectation : {\tt := => sto Store}}\index{:=}\index{=>}\index{sto}\index{Store}\label{sec:variable}
On peut utiliser les fonctions infix\'ees {\tt :=} comme en Pascal ou {\tt =>}
 comme le "sto" des calculatrices pour r\'ealiser une affectation ou encore, \\
les fonctions pr\'efix\'ees, {\tt sto} ou {\tt Store}, d'arguments la valeur 
\`a affecter et le nom d'une variable.\\
\noindent{\tt :=} (ou {\tt =>} ou {\tt sto} ou {\tt Store}) permet d'affecter
 une variable.\\
On tape (attention \`a l'ordre des arguments !) :
\begin{center}{\tt a:=4}\end{center}
ou
\begin{center}{\tt 4=>a}\end{center}
ou
\begin{center}{\tt sto(4,a)}\end{center}
ou
\begin{center}{\tt Store(4,a)}\end{center}
On obtient :
\begin{center}{\tt 4}\end{center}
%Si dans la configuration du cas (bouton rouge {\tt cas}) on a coch\'e {\tt sauver\_var} cela cr\'ee le fichier {\tt a.cas} dans le r\'ep\'ertoire courant : ce fichier contient le nombre {\tt 4}\\
{\tt :=} ou {\tt =>} permettent aussi de d\'efinir des fonctions.\\
On tape :
\begin{center}{\tt f(x):=sin(x)/x}\end{center}
ou 
\begin{center}{\tt sin(x)/x=>f(x)}\end{center}
ou encore 
\begin{center}{\tt f:=x->sin(x)/x}\end{center}
ou 
\begin{center}{\tt x->sin(x)/x=>f}\end{center}
%Si dans la configuration du cas (bouton donnant la ligne d'\'etat) on a coch\'e {\tt save\_var} cela cr\'ee le fichier {\tt f.cas} dans le r\'ep\'ertoire courant et ce fichier contient la fonction : {\tt (x)->(sin(x))/x}.\\
On peut aussi d\'efinir une fonction par morceaux :
\begin{itemize}
\item une fonction d\'efinie par 2 valeurs,\\
par exemple, pour d\'efinir 
la fonction $g$ qui vaut 1 si $x>0$ et 0 si $x\leq 0$ on tape :
\index{ifte}\index{when}\index{quand}\index{IFTE}\index{?}
On tape :
\begin{center}{\tt g(x):=ifte(x>0,1,0)}\end{center} 
ou encore 
\begin{center}{\tt g(x):=when(x>0,1,0)}\end{center}
ou encore 
\begin{center}{\tt g(x):=x>0?1:0}\end{center}
En effet {\tt ifte} (ou {\tt when} ou {\tt quand} ) a trois arguments : une 
condition et deux 
expressions et {\tt ?} est infix\'e avec la condition \`a gauche et \`a droite 
on met les deux expressions s\'epar\'ees par {\tt :}.\\
Si la condition est vraie, {\tt ifte} (ou {\tt when} ou {\tt IFTE} ou {\tt ?}) 
renvoie la premi\`ere expression et sinon {\tt ifte} (ou {\tt when} ou 
{\tt IFTE} ou{\tt ?}) renvoie la deuxi\`eme expression.

{\bf Remarque} La condition peut \^etre remplac\'ee par un r\`eel $r$ :
si $r==0$ la condition est fausse et sinon elle est vraie.\\
On tape pour d\'efinir la fonction qui vaut partout 0 sauf en 0 o\`u elle 
vaut 1:\\
\begin{center}{\tt h(x):=when(x,0,1)}\end{center}

{\bf Remarque :Diff\'erence entre {\tt ifte} et {\tt when}}\\
On tape :
{\tt f(x):=ifte(x>0,1,0);}\\
{\tt g(x):=when(x>0,1,0)} ou {\tt g(x):=quand(x>0,1,0)}\\
puis on tape {\tt f(x)} \\
on obtient :\\
Ifte: Unable to check test Error: Bad Argument Value\\
car {\tt x} n'a pas de valeur : avec {\tt ifte}  ou {\tt IFTE} il faut que la 
variable {\tt x} soit affect\'ee pour pouvoir tester la condition (quand on 
d\'efinit une fonction ce qui suit le := n'est pas \'evalu\'e donc la 
d\'efinition de {\tt f(x)} ne pose pas de probl\`eme.\\
alors que\\
si on tape {\tt g(x)}\\
on obtient :\\
{\tt ((x>0)? 1 : -1)}\\
car {\tt ?} est la version infix\'ee de {\tt when}
\item une fonction d\'efinie par $n$ valeurs,\index{piecewise}\\
par exemple, pour d\'efinir 
la fonction $g$ qui vaut -1 si $x<-1$, 0 si $-1\leq x\leq 1$ et 1 si $x>1$,
on tape :
\begin{center}{\tt g(x):=piecewise(x<-1,-1,x<=1,0,1)} \end{center}
{\tt piecewise} utilise des paires condition/valeur ou valeur est renvoyée si 
sa condition est vraie ce qui implique que les conditions pr\'ec\'edentes sont 
fausses. Si le nombre d'arguments est impair, 
la dernière valeur est la valeur par défaut (comme dans un {\tt switch}).\\
Pour d\'efinir 
la fonction $f$ qui vaut -2 si $x<-2$, $3x+4$ si $-2\leq x <-1$,
 1 si $-1 \leq x<0$ et $x+1$ si $x \geq 0$,
on tape :
\begin{center}{\tt f(x):=piecewise(x<-2,-2,x<-1,3x+4,x<0,1,x+1)}\end{center}
On peut alors faire le graphe de $f$ en tapant :
\begin{center}{\tt plotfunc(f(x))}\end{center}
\end{itemize}
%Si dans la configuration du cas (bouton rouge {\tt cas}) on a coch\'e {\tt sauver\_var} cela cr\'ee le fichier {\tt g.cas} dans le r\'ep\'ertoire courant et ce fichier contient la fonction :\\{\tt (x)->if (x>0) 1; else 0;}
\subsection{L'affectation par référence dans une variable (contenant un \'el\'ement d'une liste ou d'une matrice : {\tt =< }}\index{=<}\label{sec:progref}
On peut utiliser l'opérateur infix\'e {\tt =<} pour stocker par référence le 
deuxième argument dans une variable (d\'esignant un \'el\'ement d'une liste ou 
d'une matrice) donnée comme premier argument.\\
Voir aussi \ref{sec:copie} et \ref{sec:diffaffectation}.
On tape  :
\begin{center}{\tt a:=[1,2,3,4,5]}\end{center}
Pour changer la valeur de {\tt a[1]} il est pr\'ef\'erable de le faire par 
référence c'est \`a dire sans faire de recopie, on tape :
\begin{center}{\tt a[1]=<5}\end{center}
Dans un programme, il est pr\'ef\'erable d'utiliser l'opérateur infix\'e 
{\tt =<} pour changer un \'el\'ement d'une liste ou 
d'une matrice contenue dans une variable .
 {\bf Exemple}\\
On cherche pour tout $n\in \N$, la liste des nombres entiers $k$ v\'erifiant 
$0<k<2^n$ et dont la somme des chiffres, dans l'\'ecriture en base 2, est 
\'egale \`a  $p$ ou qui s'\'ecrivent en base 2 avec des 0 et $p$ 1.\\
On sait que {\tt convert(k,base,2)} renvoie la liste de 0 et de 1 de 
l'\'ecriture en base 2 de $k$ en commen\c{c}ant par le chiffre des unit\'es. On
a,  par exemple :\\ 
{\tt convert(2,base,2)=[0,1]}.\\
On connait la longueur de la liste r\'esultat qui est {\tt comb(n,p)} puisque
il peut y avoir $n$ chiffres et que parmi ces $n$ chiffres il doit y avoir 
$p$ 1. On peut donc initialiser la liste par :\\
{\tt L:=makelist(0,1,comb(n,p));}.\\
On peut aussi vouloir initialiser la liste {\tt L} par la liste vide et dans 
ce cas il faut mettre  {\tt L:=[0\$0]} et ne pas mettre {\tt L:=[]}. La 
diff\'erence est subtile : {\tt [0\$0]} est une liste qui est cr\'ee lors de 
chaque ex\'ecution du programme alors que apr\`es la compilation du programme,
{\tt L:=[]} fait pointer {\tt L} sur la liste  {\tt []} et cette liste sera 
modifi\'ee par les diff\'erents {\tt L[k]=<j} en {\tt LR} et restera modifi\'ee
en fin d'ex\'ecution ce qui fait que si on effectue une autre ex\'ecution du 
programme{\tt L} est initialis\'ee par {\tt LR} car elle pointe sur la liste  
{\tt LR}.\\
On tape :
\begin{verbatim}
truc(p,n):={
local j,k,L;
L:=makelist(0,1,comb(n,p));
k:=0;
for (j:=2^p-1;j<=2^n-2^(n-1-p);j++){
if (sum(convert(j,base,2))==p){
L[k]=<j;
k:=k+1;
};
}
return L;
}
:;
\end{verbatim}
 Puis : {\tt J:=truc(10,17):;J[0];J[10]}
renvoie : {\tt Done,1023,2046}\\
{\tt convert(1023,base,2)} renvoie {\tt [1,1,1,1,1,1,1,1,1,1]}\\
{\tt convert(2046,base,2)} renvoie {\tt [0,1,1,1,1,1,1,1,1,1,1]}\\
Comme la liste J a pour longueur {\tt comb(17,10)=19448}
si on met dans le programme {\tt L[k]:=j;} au lieu de {\tt L[k]=<j;},
{\tt Xcas} effectue 19448 recopie de cette liste ce qui allonge l'execution du 
programme....
\subsection{L'incr\'ementation d'une variable : {\tt += -= *= /=}}\index{:+=}\index{-=}\index{*=}\index{/=}
{\tt +=} est un raccourci pour ajouter une expression \`a la valeur contenue
dans une variable.\\
On tape :
\begin{center}{\tt a:=a+4}\end{center}
ou
\begin{center}{\tt a+=4}\end{center}
{\tt -=} est un raccourci pour soustraire une expression \`a la valeur contenue
dans une variable.\\
On tape :
\begin{center}{\tt a:=a-4}\end{center}
ou
\begin{center}{\tt a-=4}\end{center}
{\tt *=} est un raccourci pour multipliser la valeur contenue
dans une variable par une expression.\\
On tape :
\begin{center}{\tt a:=a*4}\end{center}
ou
\begin{center}{\tt a*=4}\end{center}
{\tt /=} est un raccourci pour diviser la valeur contenue
dans une variable par une expression.\\
On tape :
\begin{center}{\tt a:=a/4}\end{center}
ou
\begin{center}{\tt a/=4}\end{center}
\subsection{Archiver et d\'esarchiver des variables et leur contenu : {\tt archive unarchive}}\index{archive}\index{unarchive}
\noindent{\tt archive} a comme argument une chaine de caract\`ere (le nom du 
fichier d'archive) et une liste de variables.\\
{\tt archive} sauve le contenu de ces variables dans le fichier ayant pour nom 
la chaine donn\'ee en argument.\\
Le format de sauvegarde est un format interne  \`a {\tt Xcas}, ce qui a comme 
int\'er\^et de pouvoir relire ces valeurs plus rapidement.
On tape :
\begin{center}{\tt archive("toto",[a,b,f])}\end{center}
On obtient :
\begin{center}{\tt cr\'ee le fichier "toto" contenant les valeurs des variables a,b,f}\end{center}

\noindent{\tt unarchive} a comme argument une chaine de caract\`ere (le nom 
d'un fichier d'archive cr\'e\'e avec la commande {\tt archive}).\\
{\tt unarchive} lit les valeurs se trouvant dans le fichier ayant 
pour nom la chaine donn\'ee en argument, si ce fichier a \'et\'e cr\'e\'e 
avec la commande {\tt archive}.\\
On tape :
\begin{center}{\tt unarchive("toto")}\end{center}
On obtient :
\begin{center}{\tt les contenus des variables sauv\'ees avec archive}\end{center}
\subsection{Copier sans l'\'evaluer le contenu d'une variable : {\tt CopyVar}}\index{CopyVar}
\noindent{\tt CopyVar} a comme arguments le nom de deux variables.\\
{\tt CopyVar} copie sans l'\'evaluer le contenu de la premi\`ere variable dans 
la deuxi\`eme variable.\\
On tape (attention \`a l'ordre) :
\begin{center}{\tt a:=c}\end{center}
\begin{center}{\tt c:=5}\end{center}
\begin{center}{\tt CopyVar(a,b)}\end{center}
\begin{center}{\tt b}\end{center}
On obtient :
\begin{center}{\tt 5 }\end{center}
puis on tape :
\begin{center}{\tt c:=10}\end{center}
\begin{center}{\tt b}\end{center}
On obtient :
\begin{center}{\tt 10}\end{center}
Une modification du contenu de {\tt c} va modifier le contenu de {\tt b} car
{\tt b} contient {\tt c}.\\ 
On tape :
\begin{center}{\tt a:=d}\end{center}
\begin{center}{\tt b}\end{center}
On obtient :
\begin{center}{\tt 10}\end{center}
On tape :
\begin{center}{\tt purge(c)}\end{center}
\begin{center}{\tt b}\end{center}
On obtient :
\begin{center}{\tt c}\end{center}
puisque {\tt b} contient {\tt c}.
\subsection{Faire une hypoth\`ese sur une variable : {\tt assume supposons}}\index{assume|textbf}\label{sec:assume}\index{element}\index{integer|textbf}\index{supposons|textbf}\index{additionally@{\sl additionally}}
\noindent{\tt assume} ou {\tt supposons} permet de faire des hypoth\`eses sur 
une variable.\\
{\tt assume} ou {\tt supposons} a comme argument un nom de variable suivi d'une
\'egalit\'e ou d'une in\'egalit\'e repr\'esentant l'hypoth\`ese faite ou bien
 un nom de variable suivi d'une virgule et de son type. 
On peut mettre plusieurs hypoth\`eses \`a condition de les relier par {\tt and}
ou {\tt or} selon ce que l'on veut faire ! Toutefois, il faut utiliser 
{\tt additionally} comme deuxi\`eme argument de {\tt assume} pour sp\'ecifier 
le type de la variable et une plage de valeurs pour cette variable.\\
{\tt assume} renvoie le nom de la variable sur laquelle on a fait les 
hypoth\`eses ou le type de cette variable.\\
{\bf Attention} Si on fait une autre hypoth\`ese avec {\tt assume}, l'ancienne
hypoth\`ese est effac\'ee : si vous voulez rajoutez une nouvelle hypoth\`ese il
faut utiliser la commande {\tt additionally} ou mettre {\tt additionally} 
comme deuxi\`eme argument de {\tt assume}.\\
{\bf Remarque}
Si l'argument de {\tt assume} est juste  un nom de variable
{\tt assume} est alors synonyme de {\tt about}.\\
On tape
\begin{center}{\tt assume(a=2)}\end{center}
Ou on tape
\begin{center}{\tt supposons(a=2)}\end{center}
Ou on tape
\begin{center}{\tt assume(a=2)}\end{center}
Ou on tape
\begin{center}{\tt supposons(a:=2)}\end{center}
Ou on tape directement :
\begin{center}{\tt supposons(a=[2,-5,5,0.1])}\end{center}
On obtient :
\begin{center}{\tt un curseur permettant de faire varier a}\end{center}
Lorsque l'on fait varier {\tt a} la commande {\tt assume(a=2)} se transforme en
{\tt supposons(a=[2.1,-5.0,5.0,0.1])} et les niveaux qui suivent sont 
\'evalu\'es. Si il n'y a rien sur le niveau suivant on aura {\tt undef} en 
r\'eponse.\\
Cela signifie que {\tt a} peut varier entre {\tt -5} et {\tt 5} avec un pas 
de {\tt 0.1} et que {\tt a} vaut {\tt 2.1}.
Si sur les deux niveaux suivants on a \\
{\tt evalf(a+2)} et {\tt evalf(a+3)}\\
les r\'eponses \'evolueront selon la position du curseur (curseur en {\tt 2.1}, 
on aura {\tt 4.1} et {\tt 5.1} puis curseur en {\tt 2.2}, on aura {\tt 4.2} et 
{\tt 5.2}). Mais si sur les deux niveaux suivants on a {\tt a+2} et {\tt a+3},
les r\'eponses seront toujours {\tt a+2} et {\tt a+3}.\\
On tape pour supposer que la variable formelle {\tt a } est positive :
\begin{center}{\tt assume(a>0)}\end{center}
On obtient :
\begin{center}{\tt a}\end{center}
On tape :
\begin{center}{\tt assume(a)}\end{center}
On obtient :
\begin{center}{\tt assume[DOM\_FLOAT,[line[0,+(infinity)]],[0]]}\end{center}
cela signifie que {\tt a} est une variable r\'eelle appartenant \`a 
$[0;+\infty$ et que $0$ est exclu (on a le domaine, l'intervalle et les valeurs
exclues).\\
On tape pour supposer que la variable formelle {\tt a } est dans
$[2;4[\cup ]6;\infty[$ :
\begin{center}{\tt assume((a>=2 and a<4) or a>6)}\end{center}
On obtient :
\begin{center}{\tt a}\end{center}
On tape :
\begin{center}{\tt assume(a)}\end{center}
On obtient :
\begin{center}{\tt assume[DOM\_FLOAT,[[2,4],[6,+(infinity)]],[4,6]]}\end{center}
cela signifie que {\tt a} est une variable r\'eelle  appartenant \`a
$[2;4]\cup [6;\infty[$ et que 4 et 6 sont exclus (on a le domaine, l'intervalle
 et les valeurs exclues).\\
On tape :
\begin{center}{\tt abs(1-a)}\end{center}
On obtient :
\begin{center}{\tt -1+a}\end{center}
On tape pour dire que {\tt b} est un entier :
\begin{center}{\tt assume(b,integer)}\end{center}
On obtient :
\begin{center}{\tt DOM\_INT}\end{center}
On tape :
\begin{center}{\tt assume(b)}\end{center}
On obtient :
\begin{center}{\tt [DOM\_INT]}\end{center}
On tape pour dire que {\tt b} est un entier sup\'erieur strictement \`a 5 :
\begin{center}{\tt assume(b,integer);}\end{center}
\begin{center}{\tt assume(b>5,additionally)}\end{center}
On obtient :
\begin{center}{\tt DOM\_INT}\end{center}
puis
\begin{center}{\tt b}\end{center}
On tape :
\begin{center}{\tt assume(b)}\end{center}
On obtient :
\begin{center}{\tt [DOM\_INT]}\end{center}

{\bf Remarque}\\
Lorsque {\tt assume} a comme argument une seule \'egalit\'e et que la commande 
est tap\'ee dans une ligne d'entr\'ee d'un \'ecran de g\'eom\'etrie, cela met
un petit curseur en haut et \`a droite de cet \'ecran.  Le nom du param\`etre 
est not\'e \`a droite du curseur. Ce curseur permet de changer la valeur du 
param\`etre et cette valeur sera not\'ee \`a gauche du curseur.
On tape par exemple :\\
{\tt assume(a=[2,-10,10,0.1])}\\
Cela signifie que tous les calculs seront faits avec {\tt a} quelconque, \`a 
condition que les points  aient des  coordonn\`ees exactes, mais que la figure 
sera trac\'ee avec {\tt a=2} et que l'on pourra faire varier cette figure avec 
le petit curseur en fonction de {\tt a} de {\tt -10} \`a {\tt +10}, avec un pas
de {\tt 0.1}. Si on met {\tt assume(a=[2,-5,5)}, {\tt a} varie de {\tt -5} \`a 
{\tt +5} avec un pas de {\tt (5-(-5))/100}), et si on met {\tt assume(a=2)},
{\tt a} varie de {\tt WX-} \`a {\tt WX+} et le pas est {\tt ((WX+)-(WX-))/100}.

{\bf Attention} En g\'eom\'etrie il faut donc travailler avec des coordonn\`ees
exactes par exemple :\\
{\tt A:=point(i);assume(b:=2); B:=point(b);}
puis on tape :\\
{\tt longueur(A,B);}\\
On obtient :\\
{\tt sqrt((-b)\verb|^|2+1)}\\
Mais :\\
{\tt A:=point(0.0+i);assume(b:=2); B:=point(b);}
puis on tape :\\
{\tt longueur(A,B);}\\
On obtient la valeur approch\'ee de $\sqrt{(1+4)}$ :\\
{\tt 2.2360679775}\\
{\bf Attention} \`a la diff\'erence entre {\tt assume} et {\tt element}\\
Si {\tt b:=element(0..3,1,0.1)} est tap\'e dans une ligne d'entr\'ee d'un 
\'ecran de g\'eom\'etrie, cela met aussi un petit curseur en haut et \`a droite
de cet \'ecran avec {\tt b=1} et on pourra faire
varier  {\tt b} avec le petit curseur de {\tt 0} \`a {\tt 3} avec un pas 
de {\tt 0.1}. Mais la variable {\tt b} n'est pas formelle ! \\
On tape
\begin{center}{\tt a;b}\end{center}
On obtient :
\begin{center}{\tt (a,1)}\end{center}
\subsection{Faire une hypoth\`ese suppl'ementaire sur une variable : {\tt additionally}}\index{additionally|textbf}\index{additionally@{\sl additionally}}
\noindent{\tt additionally} permet de faire des hypoth\`eses suppl\'ementaires
sur une variable. En effet, si on fait une autre hypoth\`ese avec {\tt assume}, 
l'ancienne hypoth\`ese est effac\'ee. Donc, si vous voulez rajoutez une 
nouvelle hypoth\`ese il faut utiliser la commande {\tt additionally} ou mettre 
{\tt additionally} comme deuxi\`eme argument de {\tt assume}.\\
{\tt additionally} a les m\^emes arguments que {\tt assume} ou {\tt supposons} :
un nom de variable suivi d'une\'egalit\'e ou d'une in\'egalit\'e repr\'esentant
l'hypoth\`ese faite ou bien un nom de variable suivi d'une virgule et de son 
type. On peut mettre plusieurs hypoth\`eses \`a condition de les relier par 
{\tt and} ou {\tt or} selon ce que l'on veut faire ! \\
On est oblig\'e d'utiliser 
{\tt additionally} pour sp\'ecifier le type de la variable et une plage de 
valeurs pour cette variable.\\
On tape pour dire que {\tt b} est un entier sup\'erieur strictement \`a 5 :
\begin{center}{\tt assume(b,integer);}\end{center}
\begin{center}{\tt additionally(b>5)}\end{center}
ou bien 
\begin{center}{\tt assume(b,integer);}\end{center}
\begin{center}{\tt  assume(b>5,additionally)}\end{center}
On obtient :
\begin{center}{\tt DOM\_INT}\end{center}
puis
\begin{center}{\tt b}\end{center}
On tape :
\begin{center}{\tt assume(b)}\end{center}
On obtient :
\begin{center}{\tt [DOM\_INT]}\end{center}



\subsection{Connaitre les hypoth\`eses faites sur une variable : {\tt about}}\index{about|textbf}\label{sec:about}
\noindent{\tt about} a comme argument un nom de variable.\\
{\tt about} permet de connaitre les hypoth\`eses faites sur cette variable.\\
On tape :
\begin{center}{\tt about(a)}\end{center}
Ou on tape :
\begin{center}{\tt assume(a)}\end{center}
On obtient :
\begin{center}{\tt assume[DOM\_FLOAT,[line[0,+(infinity)]],[0]]}\end{center}
{\tt assume[ ]} signifie que l'on a une liste d'un type particulier.\\
Le dernier {\tt 0} veut dire que {\tt 0} est exclus de l'intervalle
{\tt line[0,+(infinity)]}.\\
On tape :
\begin{center}{\tt about(b)}\end{center}
On obtient :
\begin{center}{\tt assume[DOM\_FLOAT,[line[0,2]],[2]]}\end{center}
Le dernier {\tt 2} veut dire que {\tt 2} est exclus de l'intervalle
{\tt line[0,2]}.\\
On tape :
\begin{center}{\tt about(x)}\end{center}
On obtient :
\begin{center}{\tt x}\end{center}
ce qui veut dire que {\tt x} est une variable formelle.
\subsection{Effacer le contenu d'une variable : {\tt purge DelVar}}\index{purge}\index{DelVar}\label{sec:purge}
\noindent{\tt purge} ou {\tt DelVar} permet d'effacer le  contenu d'une 
variable ou d'annuler une hypoth\`ese faite sur cette variable.\\
On tape :
\begin{center}{\tt purge(a)}\end{center}
si {\tt a} n'est pas affect\'e on obtient en mode direct {\tt "a not assigned"}
et sinon l'ancienne valeur est renvoy\'ee (ou les hypoth\`eses faites sur cette
variable sont renvoy\'ees) et la variable {\tt a} redevient formelle et sans
hypoth\`ese.\\
On peut aussi taper :
\begin{center}{\tt purge(a,b)} \end{center}
pour effacer le  contenu des variables {\tt a} et {\tt b}.

\subsection{Effacer le contenu de toutes les variables : {\tt restart}}\index{restart}
\noindent{\tt restart} permet d'effacer le contenu de toutes les variables et
d'annuler les hypoth\`eses faites sur ces variables.\\
On tape :
\begin{center}{\tt A:=point(1+i);assume(n>0);}\end{center}
puis
\begin{center}{\tt restart}\end{center}
On obtient :
\begin{center}{\tt [A,n]}\end{center}
si les variables {\tt [A,n} avaient \'et\'e les seules variables affect\'ees.

\subsection{Acc\`es aux r\'eponses : {\tt ans(n)}}\index{ans}\label{sec:ans}
\noindent {\tt ans} doit \^etre utilis\'e si on travaille sans modifier les 
lignes d\'ej\`a valid\'ees. En effet, les questions et les r\'eponses sont 
numerot\'ees en partant de 0 et ce num\'ero ne correspond pas aux num\'eros des
lignes d'entr\'ee, puisque l'on peut, par exemple, modifier la premi\`ere ligne
apr\`es avoir rempli  4 lignes et cette modification aura comme num\'ero 4.\\
Si $ n \geq 0$, {\tt ans(n)} permet de d\'esigner la r\'eponse
 de num\'ero $n+1$  et,\\
Si $ n < 0$, {\tt ans(n)} permet de d\'esigner la ($-n$)-i\`eme r\'eponse 
pr\'ec\'edente.\\ 
Ainsi :\\
{\tt ans()} ou  {\tt ans(-1)} d\'esigne la r\'eponse pr\'ec\'edente,\\
{\tt ans(0)} d\'esigne la premi\`ere r\'eponse (celle correspondant \`a la 
premi\`ere commande demand\'ee).
{\bf Attention} Si vous avez effac\'e des niveaux, les r\'eponses de ces 
niveaux ne sont pas effac\'ees et sont compt\'ees dans les {\tt ans(n).} 

\subsection{Pour ne pas afficher la r\'eponse : {\tt nodisp :;}}\index{nodisp|textbf}\index{:;|textbf}
Pour ne pas encombrer la feuille, on peut vouloir que la r\'eponse ne 
s'affiche pas : pour cela il faut appliquer la fonction {\tt nodisp}
 \`a la question ou bien termin\'e la question par {\tt :;}.\\
On tape par exemple dans une ligne d'entr\'ee :
\begin{center}{\tt  A:=[1,2,3,4]}\end{center}
On obtient :
\begin{center}{\tt [1,2,3,4]}\end{center}
et {\tt ans()} d\'esigne {\tt [1,2,3,4]} c'est\`a dire {\tt A}.\\
On tape :
\begin{center}{\tt  nodisp(A:=[1,2,3,4])}\end{center}
Ou on tape :
\begin{center}{\tt  A:=[1,2,3,4]:;}\end{center}
On obtient :
\begin{center}{\tt Done}\end{center}
ce qui veut dire que l'affectation a bien eu lieu et dans ce cas 
{\tt ans()} d\'esigne {\tt Done}.

\subsection{Acc\`es aux questions : {\tt quest(n)}}\index{quest}\label{sec:quest}
{\tt quest} doit \^etre utilis\'e si on travaille sans modifier les 
lignes d\'ej\`a valid\'ees. En effet, les questions et les r\'eponses sont 
numerot\'ees en partant de 0 et ce num\'ero ne correspond pas aux num\'eros des
lignes d'entr\'ee, puisque l'on peut, par exemple, modifier la premi\`ere ligne
apr\`es avoir rempli  4 lignes et cette modification aura comme num\'ero 4.\\
Si $n \geq 0$, {\tt quest(n)} permet de d\'esigner la question de num\'ero $n$ 
et, si $n < 0$ {\tt quest(n)} permet de d\'esigner la ($-n$)-i\`eme question 
pr\'ec\'edente.\\ 
Ainsi :\\
{\tt quest()} ou  {\tt quest(-1)} d\'esigne la question pr\'ec\'edente,\\
{\tt quest(0)} d\'esigne la premi\`ere question demand\'ee.\\
{\bf Remarque}\\
Pour ne pas avoir \`a retaper une commande, on peut se d\'eplacer
dans la liste des commandes 
tap\'ees pr\'ec\'edemment en mettant le curseur dans une ligne de commandes et
en tapant une ou plusieurs fois {\tt Ctrl+$\uparrow$} ou 
{\tt Ctrl+$\downarrow$}. 


\section{Les r\'epertoires}\label{sec:rep}
\subsection{Comment cr\'eer un r\'ep\'ertoire sur v\^otre disque dur}
{\tt Xcas} peut se d\'eplacer dans le r\'epertoire de v\^otre disque dur.
On rappelle que sous {\tt Unix} la commande {\tt mkdir} permet de
cr\'eer de nouveaux r\'epertoires.\\
On tape par exemple (sous {\tt Unix}):
{\tt mkdir toto}\\
 et cela cr\'ee le sous r\'epertoire {\tt toto} \`a partir du r\'epertoire 
courant.
\subsection{Comment sauver un fichier dans un r\'ep\'ertoire de v\^otre disque dur}
Vous avez cr\'ee un r\'epertoire sur votre disque dur qui s'appelle 
{\tt toto}.\\
Travailler dans ce r\'epertoire depuis {\tt Xcas} est facile : il suffit de 
taper dans la ligne de commande :\\
{\tt cd} puis entre guillemets, le chemin pour acc\'eder \`a ce r\'ep\'ertoire.\\
On tape :
\begin{center}{\tt cd("toto")}\end{center} 
ou en indiquant entre guillemets, un chemin depuis le r\'epertoire racine par 
exemple :\\
\begin{center}{\tt cd("/home/texte/toto")}\end{center}
Ainsi les fichiers que vous sauverez depuis {\tt Xcas}, dans v\^otre disque dur
 seront sauv\'es dans ce r\'epertoire.\\
{\bf Attention!!!}\\
 %En mode {\tt Sauver\_var} (cf configuration du {\tt cas}), 
Quand on change de r\'ep\'ertoire les variables qui sont conserv\'ees dans des 
fichiers d'extention {\tt .cas} sont celles du nouveau r\'ep\'ertoire. 
Donc les variables changent quand on change de r\'ep\'ertoire.
\subsection{Comment cr\'eer un r\'ep\'ertoire de travail : {\tt NewFold}}\index{NewFold}
On peut aussi cr\'eer des r\'epertoires de travail qui sont internes \`a
 {\tt Xcas} avec la commande {\tt NewFold}.
Cela permet d'avoir des variables de m\^eme nom mais dans des r\'epertoires 
 diff\'erents.\\
Depuis {\tt Xcas} on tape par exemple :
\begin{center}{\tt NewFold(toto)}\end{center}
On obtient :
\begin{center}{\tt la cr\'eation du sous-r\'epertoire "toto"}\end{center}
\subsection{Comment aller dans un r\'ep\'ertoire de travail : {\tt SetFold}}\index{SetFold}
On utilise la commande {\tt SetFold} pour aller dans un r\'ep\'ertoire de 
travail interne \`a {\tt Xcas}.\\
On tape par exemple dans {\tt Xcas} :
\begin{center}{\tt  SetFold(toto)}\end{center}
On obtient :
\begin{center}{\tt on se trouve dans le sous-r\'epertoire "toto"}\end{center}
On tape par exemple dans {\tt Xcas} :
\begin{center}{\tt  SetFold(home)}\end{center}
Ou
\begin{center}{\tt  SetFold(main)}\end{center}
On obtient :
\begin{center}{\tt on se trouve dans le r\'epertoire courant}\end{center}
{\bf Attention!!! }\\
Quand on change de r\'ep\'ertoire de travail les variables sont 
celles du nouveau r\'ep\'ertoire : vous pouvez donc avoir des variables de 
m\^eme nom contenant des valeurs diff\'erentes dans diff\'erents r\'epertoires.
Donc les variables changent quand on change de r\'ep\'ertoire de travail.
\subsection{Nom du r\'ep\'ertoire en cours : {\tt GetFold}}\index{GetFold}
\noindent {\tt GetFold} renvoie le nom du r\'ep\'ertoire dans lequel on se 
trouve.
On tape par exemple dans {\tt Xcas} :
\begin{center}{\tt  SetFold(toto)}\end{center}
puis
\begin{center}{\tt  GetFold()}\end{center}
On obtient :
\begin{center}{\tt toto([])}\end{center}
\subsection{Effacer un r\'ep\'ertoire vide : {\tt DelFold}}\index{DelFold}
\noindent {\tt DelFold} efface le r\'ep\'ertoire vide de nom donn\'e dans 
l'argument. {\tt Xcas} renvoie une erreur si ce r\'epertoire n'est pas vide.
On tape par exemple dans {\tt Xcas} :
\begin{center}{\tt  DelFold(toto)}\end{center}
On obtient :
\begin{center}{\tt ([])}\end{center}
\subsection{Comment connaitre les variables et les r\'ep\'ertoires cr\'e\'es : {\tt VARS}}\index{VARS}
\noindent {\tt VARS} n'a pas d'argument.\\
{\tt VARS()} renvoie la liste des variables du r\'ep\'ertoire courant 
%(tous les noms en {\tt .cas}si on a coch\'e {\tt Sauver\_var} dans la configuration du {\tt cas})
et des noms des sous-r\'ep\'ertoires du r\'ep\'ertoire courant.\\
On peur aussi utiliser le bouton {\tt var} du bandeau si on a choisi 
{\tt Montrer->Bandeau} dans le menu {\tt Cfg}.
Ce bouton {\tt var} affiche dans le bandeau les noms des variables 
affect\'ees et les noms des sous-r\'ep\'ertoires du r\'ep\'ertoire courant.\\
{\bf Attention!!!}\\
 %En mode {\tt Sauver\_var} (cf configuration du {\tt cas}), 
Quand on change de r\'ep\'ertoire les variables 
%qui sont conserv\'ees dans des fichiers d'extention {\tt .cas} 
sont celles du nouveau r\'ep\'ertoire. 
Donc les variables changent quand on change de r\'ep\'ertoire.
\subsection{Lire un fichier depuis {\tt Xcas} : {\tt read}}\index{read|textbf}
Pour valider une ou des fonctions se trouvant dans un fichier ou pour
 ex\'ecuter une suite d'instructions se trouvant dans un fichier, on utilise 
{\tt read} en mettant le nom du fichier entre des guillemets ({\tt "..."}).\\
On tape :\\
{\tt read("pgcd.cxx")}\\ 
ou encore si {\tt pgcd.cxx} se trouve dans le r\'ep\'ertoire {\tt toto} :\\
{\tt read("/home/texte/toto/pgcd.cxx")} ou {\tt read("toto/pgcd.cxx")}\\
On peut aussi faire :\\
{\tt Charger session} du menu {\tt Fich} puis mettre {\tt pgcd.cxx} comme nom 
de fichier ou si {\tt pgcd.cxx} se trouve dans le r\'ep\'ertoire {\tt toto} 
mettre 
{\tt toto/pgcd.cxx} comme nom de fichier.\\
{\bf Remarque}\\
On utilise plut\^ot {\tt read} pour des fichiers contenant des fonctions 
(fichiers {\tt .cxx}) et {\tt Charger session}  pour des fichiers contenant 
des scripts (fichiers {\tt .cas}).\\
Par exemple un script contenant des instructions g\'eom\'etriques sera
 ex\'ecut\'e mais restera fig\'e avec {\tt read} (on ne peut pas faire bouger 
les points) par contre avec {\tt Charger session} un  script contenant des 
instructions g\'eom\'etriques sera ex\'ecut\'e et sera interactif (on peut 
faire bouger les points).

\chapter{Le graphique}\label{sec:plot}
\section{G\'en\'eralit\'es}
Si le graphe d\'epend d'une fonction utilisateur, il faut 
que la fonction soit d\'efinie lorsque le(s) param\`etre(s)
a (ont) une valeur formelle, ce qui peut se faire en testant
le type du param\`etre, comme dans l'exemple suivant :
Je d\'efinis $f$ avec le test du type du param\`etre et $g$ sans le test par :
\begin{verbatim}
f(x):= {
  if (type(x)!=DOM_FLOAT) return 'f'(x); 
  while(x>0){ x--; } 
  return x; 
}:;
g(x):= {
  while(x>0){ x--; } 
  return x; 
}:;
\end{verbatim}
Si je tape :\\
{\tt F:=plotfunc(f(x))} ou {\tt G:=plotfunc(g(x))} j'obtiens le m\^eme graphe.
Le probl\`eme apparait lorsque $x$ n'a pas de valeur et que l'on r\'eutilise 
{\tt G}.\\
Mais si on fait :\\
{\tt G:=plotfunc(g(x))} puis {\tt symetrie(droite(y=x),G)}
ou m\^eme simplement {\tt G} on a l'erreur :\\
{\tt "Unable to eval test in loop : x>0.0 Error: Bad Argument Value"}\\
parce que l'\'evaluation de $g(x)$ ne peut pas se faire si $x$ est formel.\\
Par contre, {\tt F:=plotfunc(f(x))} puis 
{\tt symetrie(droite(y=x),F)} renvoie bien le sym\'etrique du graphe par 
rapport \`a la premi\`ere bissectrice gr\^ace au test de la ligne :\\
{\tt if (type(x)!=DOM\_FLOAT) return 'f'(x);}. D'ou l'int\'er\^et de rajouter 
le test.\\
Par contre on peut taper directement sans provoquer d'erreurs :\\
{\tt symetrie(droite(y=x),plotfunc(g(x)))}.\\
{\bf Explications} \\
Il faut savoir que dans les r\'eponses de certaines commandes 
(par exemple {\tt G:=plotfunc(g(x))}) il va figurer l'expression l'expression 
formelle de {\tt g(x)} (par exemple  {\tt G} contient
{\tt expr("curve(group[pnt[x+(i)*g(x),x,x,-5.0,5.0125,0]...]))}).
Lors de l'\'evaluation de {\tt G} il y aura une erreur car {\tt x+(i)*g(x)}
ne pourra pas \^etre \'evalu\'e puisque l'\'evaluation de {\tt g(x)} provoque 
l'\'evaluation du test {\tt x>0} qui ne peut pas \^etre \'evalu\'e car {\tt x} 
n'a pas de valeur ....d'o\`u une erreur mais si dans 
la fonction figure le test  : {\tt if (type(x)!=DOM\_FLOAT) return 'g'(x);}
cela supprime l'\'evaluation de {\tt g(x)} et donc l'erreur due au test 
{\tt x>0}.\\

 En effet, {\tt F:=plotfunc(f(x))} puis 
{\tt symetrie(droite(y=x),F)} renvoie bien le sym\'etrique du graphe par 
rapport \`a la premi\`ere bissectrice gr\^ace au test de la ligne :\\
{\tt if (type(x)!=DOM\_FLOAT) return 'f'(x);}.\\
Par contre on peut taper directement sans provoquer d'erreurs :\\
{\tt symetrie(droite(y=x),plotfunc(g(x)))}
\section{L'\'ecran graphique et ses boutons}
 Un \'ecran graphique 2D ou 3D s'ouvre automatiquement en r\'eponse d'une 
commande graphique 2D ou 3D. \`A un \'ecran graphique 2D ou 3D est attach\'e 
des boutons situ\'es en haut et \`a droite de cet \'ecran.\\ 
Un \'ecran de g\'eom\'etrie plane s'ouvre avec les touches {\tt Alt+g} : 
c'est un \'ecran graphique 2D interactif muni de lignes d'entr\'ee, d'une barre
de menus contenant les menus {\tt Fich Edit} et d'un bouton {\tt Save}. Cet
\'ecran graphique est interactif : on peut d\'efinir des points et des segments
en cliquant avec la souris.\\
Un \'ecran de g\'eom\'etrie 3D s'ouvre avec les touches {\tt Alt+h} : 
c'est un \'ecran graphique 3D muni de lignes d'entr\'ee, d'une barre de
 menus contenant les menus {\tt Fich Edit} et d'un bouton {\tt Save}.
Les boutons d'un \'ecran graphique 2D  et 3D sont les m\^emes en apparence mais
leurs contenus sont quelquefois diff\'erents :\\
\begin{itemize}
\item les fl\`eches de couleur rouge servent \`a se promener sur l'axe des x,\\
\item les fl\`eches de couleur verte servent \`a se promener sur l'axe des y,\\
\item les fl\`eches de couleur bleue servent en 2D \`a augmenter ou \`a 
diminuer l'\'echelle des y (pour faire un zoom selon les y), et en 3D \`a se 
promener sur l'axe des z,\\
\item les boutons {\tt in} (resp {\tt out}) permettent de faire des zooms c'est
\`a dire augmente (resp  diminue) l'\'echelle des x et des y,
\item le bouton ${\tt \perp}$ permet d'avoir un rep\`ere orthonorm\'e,

\item le bouton {\tt cfg} permet de changer de configuration 
(cf \ref{sec:bcfg})
\item le bouton $\blacktriangleright${\bf |} permet de d\'emarrer ou 
d'arr\^eter une animation,
\item le bouton {\tt M} permet avec ses menus
\begin{itemize} 
\item {\tt Voir} d'avoir des menus simulant les boutons ci-dessus,
\item  {\tt Trace} d'intervenir sur une trace,
\item  {\tt Animation} d'intervenir sur une animation, 
\item  {\tt 3-d} d'avoir diff\'erentes vues d'un graphique 3D,
\item  {\tt Export/Imprimer} d'imprimer le graphique avec un fichier {\tt .eps}
ou de traduire le graphique en Latex.
\end{itemize}
\end{itemize}

\section{La configuration de l'\'ecran graphique}
Avant de faire un trac\'e, il faut r\'egler les diff\'erents param\`etres de la
configuration de l'\'ecran graphique :\\
 le menu {\tt Cfg$\blacktriangleright$Configuration graphique} (cf section \ref{sec:configgeo}) r\`egle les 
param\`etres de tous les graphiques qui se feront lors de la session. On peut 
changer ensuite ses param\`etres au coup par coup avec le bouton {\tt cfg} 
attach\'e \`a chaque \'ecran graphique (cf\ref{sec:bcfg}).\\
Les commandes du {\tt cas} qui ont comme r\'eponses un graphique 2D ou 3D 
seront tap\'ees dans une ligne d'entr\'ee. Toutefois les commandes du {\tt cas}
qui ont comme r\'eponses un graphique 2D peuvent aussi \^etre tap\'ees soit 
dans une ligne d'entr\'ee d'un \'ecran de g\'eom\'etrie.
{\bf Attention!} Un \'ecran de g\'eom\'etrie est un \'ecran graphique 
interactif.\\
Les commandes  graphiques se trouvent dans le sous-menu {\tt Graphe} du menu 
{\tt Maths}.\\
Les commandes de g\'eom\'etrie se trouvent dans le menu {\tt Geo}.\\

\section{Configuration graphique avec {\tt cfg}}\index{xyztrange}\label{sec:bcfg}
Le bouton {\tt cfg} permet de r\'egler la fen\^etre graphique.\\
%{\tt X, Y, Z} d\'esignent  les coordonn\'ees o\`u sont faits les calculs,\\ 
\begin{itemize}
\item{\tt WX-,...,WZ} d\'esignent les coordonn\'ees de ce qui est visible.
Pour effacer facilement les cases, on peut mettre les plages en surbrillance en
utilisant soit {\tt Shift+Tab} qui met en surbrillance la plage qui pr\'ec\`ede
celle o\`u se trouve le curseur, soit {\tt Ctrl+Tab} qui met 
en surbrillance la plage qui est suit  celle o\`u se trouve le curseur.
\item{\tt Pixels} en 2D, permet de d\'efinir les valeurs de
{\tt X-tick} et de {\tt Y-tick} en prenant comme unit\'e le pixel,
\item{\tt X-tick, Y-tick} pour modifier l'\'ecartement des graduations mises 
sur les axes x et y, l'unit\'e est le pixel si {\tt Pixels} a \'et\'e coch\'e
ou sinon l'unit\'e depent des unit\'es d\'efinies par {\tt WX-,WX+,WY-,WY+},
\item{\tt ry,rz,rx} en 3D, sont les valeurs en degr\'es des angles d'Euler : 
ces valeurs permettent
de retrouver facilement la position que l'on a choisie  pour le rep\`ere (cf 
\ref{sec:euler}),  
\item{\tt Montrer les noms} pour voir les noms des points ou des objets 
g\'eom\'etrique ou ne pas les voir,
\item{\tt Autoname} il faut mettre une lettre. Ainsi, au fur et \`a mesure que 
l'on clique dans l'\'ecran de g\'eom\'etrie, les noms des points 
seront d\'efinis automatiquement en commen\c{c}ant par cette lettre en sautant 
les points d\'ej\`a d\'efinis,
\item{\tt Montrer les axes} pour voir les axes ou ne pas les voir,
\item{\tt animate} pour donner le temps d'affichage des objets lors d'une 
animations (en faisant bouger la souris \`a droite ou \`a gauche on augmente ou
on diminue ce temps ou on tape un nombre),
\item{\tt Round} pour avoir les coordonn\`ees visibles arrondies 
automatiquement au dizaines,
\item{\tt Default} remet les param\`etre choisis par d\'efaut,
\item{\tt Autoscale} choisit les \'echelles de fa\c{c}on automatique et 
appropri\'ee,
\item{\tt Apply} a le m\^eme effet que la touche {\tt enter} (pour valider une 
valeur sans fermer la fen\^etre {\tt cfg}),
\item{\tt OK} pour valider et fermer la fen\^etre {\tt cfg},
\item{\tt Annuler} pour annuler (annule cequi n'a pas \'et\'e valid\'e par 
{\tt enter} ou {\tt Apply}) et fermer la fen\^etre {\tt cfg}.
\end{itemize}
%pas fait

\section{Pour transformer un  graphique en un fichier Latex}\index{graph2tex|textbf}\index{graph3d2tex|textbf}\label{sec:latexgeo23}
{\bf Voir aussi :} \ref{sec:latexgeo} et \ref{sec:latex3d}
Il faut  employer la commande {\tt graph2tex("nom.tex")} (ou pour un graphique 
3D {\tt graph3d2tex("nom.tex")}) pour transformer tous les 
graphiques r\'ealis\'es en le fichier Latex {\tt nom.tex}. \\
Ce fichier pourra 
\^etre visualis\'e seul ou bien ins\'er\'e dans un autre fichier Latex en otant
l'en t\^ete \verb|\documentclass{article}...\begin{document}|, et le 
\verb|\end{document}| de la fin et de rajouter \verb|\usepackage{pstricks}|  
dans l'en-t\^ete du fichier dans lequel on l'ins\`ere.\\
{\bf Attention} Dans ce fichier tous les graphiques seront superpos\'es : pour 
n'avoir qu'un seul graphique, il faut supprimer les niveaux contenant les 
autres graphiques avant de faire  {\tt graph2tex("nom.tex")}.
%fin de pas fait

\section{Menu Maths, sous-menu Graphe : Dessiner s\'election}
Dans le menu {\tt Maths}, sous-menu {\tt Graphe}, on trouve le nom des 
principales commandes graphiques et la possibilit\`e de faire le graphe d'une 
sous expression avec  {\tt Dessiner s\'election}.\\
 Il faut tout d'abord s\'electionner une sous-expression se trouvant dans la 
ligne de commandes : lorsqu'on clique sur {\tt Dessiner s\'election} on obtient
la repr\'esentation de l'expression s\'electionn\'ee : 
{\tt Dessiner s\'election} ex\'ecute la commande {\tt plotfunc} sur la 
s\'election.

\section{Graphe d'une fonction : {\tt plotfunc funcplot DrawFunc Graph}}\index{plotfunc|textbf}\index{funcplot|textbf}\index{DrawFunc|textbf}\index{Graph|textbf}\index{xstep@{\sl xstep}}\index{ystep@{\sl ystep}}\index{zstep@{\sl zstep}}\index{nstep@{\sl nstep}}
\subsection{Graphe en 2D}\label{sec:plotfunc}
\noindent{\tt plotfunc(f(x),x)} trace la repr\'esentation graphique de 
$y=f(x)$ et \\
{\tt plotfunc(f(x),x=a..b)} trace la repr\'esentation graphique 
de $y=f(x)$ lorsque $a\leq x\leq b$.\\
On tape :
\begin{center}{\tt  plotfunc(x\verb|^|2-2)}\end{center}
ou
\begin{center}{\tt  plotfunc(a\verb|^|2-2,a=-1..2)}\end{center}
On obtient :
\begin{center}{\tt la repr\'esentation graphique de y=x\verb|^|2-2}\end{center}
On peut rajouter un param\`etre pour indiquer le saut 
d'\'echantillonnage en $x$ c'est \`a dire le pas en $x$ que l'on veut 
utiliser pour faire le graphe en utilisant \verb|xstep|.\\
On tape :
\begin{center}{\tt  plotfunc(x\verb|^|2-2,x,xstep=1)}\end{center}
On obtient :
\begin{center}{\tt une ligne polygonale qui est la repr\'esentation grossi\`ere de y=x\verb|^|2-2 }\end{center}
On peut aussi spécifier le nombre de points d'échantillonage de la
fonction à représenter en utilisant \verb|nstep| à la place de \verb|xstep|. 
Par exemple, on tape~:
\begin{center}{\tt  plotfunc(x\verb|^|2-2,x=-2..3,nstep=30)}\end{center}

\subsection{Graphe en 3D}\label{sec:plotfunc3}
\noindent{\tt plotfunc} a deux arguments principaux et \'eventuellement
le saut d'\'echantillonnage des variables ({\tt xstep=} et {\tt ystep=}) c'est 
\`a dire le pas en $x$ et en $y$ que l'on choisi pour le graphe. On peut aussi 
spécifier le nombre de points d'échantillonnage de la fonction à représenter en
utilisant \verb|nstep|.\\
Les deux arguments principaux de {\tt plotfunc} sont : une expression de deux 
variables  ou une liste de plusieurs expressions de deux 
variables et la liste des deux variables.\\
{\tt plotfunc} trace la (ou les) surfaces d\'efinie par le premier argument.\\ 
On peut faire tourner ce graphique selon l'axe des {\tt x}, l'axe des {\tt y} 
ou l'axe des {\tt z}. Pour cela, il faut 
cliquer avec la souris dans la fen\^etre graphique en dehors du 
parall\'el\'epip\'ede servant \`a la repr\'esentation, puis faire bouger la 
souris  (sans relacher son bouton) ou  utiliser les  touches 
{\tt x}, {\tt X}, {\tt y}, {\tt Y}, {\tt z} et {\tt Z}.\\
%On tape sur {\tt OK} quand on est satisfait. \\
On tape :
\begin{center}{\tt plotfunc( x\verb|^|2+y\verb|^|2,[x,y])}\end{center}
On obtient :
\begin{center}{\tt Un graphique en 3D repr\'esentant z=x\verb|^|2+y\verb|^|2}\end{center}
On tape :
\begin{center}{\tt plotfunc(x*y,[x,y]) }\end{center}
On obtient :
\begin{center}{La surface z=x*y}\end{center}
On tape :
\begin{center}{\tt plotfunc([x*y-10,x*y,x*y+10],[x,y]) }\end{center}
On obtient :
\begin{center}{Les surfaces z=x*y-10, z=x*y et z=x*y+10}\end{center}
Pour n'avoir qu'une portion de surface on peut indiquer l'intervalle de 
variation dans le deuxi\`eme et le trois\`eme argument.\\
On tape :
\begin{center}{\tt plotfunc(x*sin(y),[x=0..2,y=-pi..pi]) }\end{center}
On obtient :
\begin{center}{\tt Une portion de  surface $z=x*y$}\end{center}

On peut rajouter un param\`etre pour indiquer le saut 
d'\'echantillonnage en $x$ et en $y$ c'est \`a dire le pas en $x$ et en $y$ que
l'on veut utiliser pour faire le graphe, en utilisant\verb|xstep| et 
\verb|ystep|.\\ 
On tape :
\begin{center}{\tt plotfunc(x*sin(y),[x=0..2,y=-pi..pi],xstep=1,ystep=0.5) }\end{center}
On obtient :
\begin{center}{\tt Une portion de  surface $z=x*y$}\end{center}
On peut aussi spécifier le nombre de points d'échantillonage de la
fonction à représenter en utilisant \verb|nstep| à la place de \verb|xstep| et
\verb|ystep|. 
Par exemple, on tape~:
\begin{center}{\tt plotfunc(x*sin(y),[x=0..2,y=-pi..pi],nstep=300)}\end{center}
On obtient :
\begin{center}{\tt Une portion de  surface $z=x*y$}\end{center}
{\bf Remarque}\\
 Si vous voulez l'impression ou la traduction en Latex, il faut utiliser :\\
{\tt M$\blacktriangleright$Exporter/Imprimer$\blacktriangleright$Print(with Latex)}. 

\subsection{Graphe "3D" avec les couleurs de l'arc en ciel}\label{sec:plotfunc3d}
\noindent{\tt plotfunc} permet aussi de repr\'esenter une expression {\tt E}
d\'ependant de deux variables \`a valeur dans $\mathbb{R}$, en repr\'esentant
{\tt z=E} par une couleur. Cela permet de visualiser les points ayant m\^eme
cote.\\
Les deux arguments principaux de {\tt plotfunc} sont alors {\tt i*E} et la 
liste des noms de deux variables.\\
Pour n'avoir qu'une portion de surface on peut indiquer l'intervalle de 
variation dans le deuxi\`eme et le trois\`eme argument.\\
On peut rajouter un param\`etre pour indiquer le pas en $x$ et en $y$ que
l'on veut utiliser pour faire le graphe, en utilisant\verb|xstep| et 
\verb|ystep|.\\ 
On peut aussi spécifier le nombre de points d'échantillonage de la
fonction à représenter en utilisant \verb|nstep| à la place de \verb|xstep| et
\verb|ystep|. \\
On tape :
\begin{center}{\tt plotfunc(i*x*sin(y),[x=0..2,y=-pi..pi]) }\end{center}
On obtient :
\begin{center}{\tt Une portion de surface $z=x*y$ avec les couleurs de l'arc en ciel}\end{center}

\subsection{Graphe en "4D"}\label{sec:plotfunc4}
\noindent{\tt plotfunc} permet aussi de repr\'esenter une expression {\tt E}
\`a valeur dans $\mathbb{C}$ mais non imaginaire pur : on repr\'esente 
{\tt abs(E)} selon $Oz$ et {\tt arg(E)} par une couleur. Cela permet de 
visualiser les points ayant m\^eme argument.\\
Si {\tt E} est imaginaire pur c'est {\tt E/i} qui est represent\'e en 
d\'egrad\'e (cf \ref{sec:plotfunc3d})
Les deux arguments principaux de {\tt plotfunc} sont alors  une expression de 
deux variables \`a valeur dans  $\mathbb{C}$ et la liste des noms des deux 
variables.\\
On peut aussi spécifier le nombre de points d'échantillonnage de la
fonction à représenter en utilisant \verb|nstep| et demander un affichage en 
une forme pleine ({\tt affichage=rempli}.\\
{\tt plotfunc} trace la  surface aux couleurs de l'arc en ciel d\'efinie par le
module du premier argument soit {\tt z=abs(E)}, chaque couleur est une 
valeur de {\tt arg(E)}.\\ 
On peut faire tourner ce graphique selon 
l'axe des {\tt x}, l'axe des {\tt y} ou l'axe des {\tt z}. Pour cela, il faut 
cliquer avec la souris dans la fen\^etre graphique  en dehors du 
parall\'el\'epip\'ede servant \`a la repr\'esentation, puis faire bouger la 
souris  (sans relacher son bouton) ou utiliser les  touches {\tt x}, {\tt X}, 
{\tt y}, {\tt Y}, {\tt z} et {\tt Z}.\\
%On tape sur {\tt OK} quand on est satisfait. \\
On tape :
\begin{center}{\tt plotfunc((x+i*y)\verb|^|2,[x,y])}\end{center}
On obtient :
\begin{center}{\tt Un graphique en 3D color\'e repr\'esentant z=abs((x+i*y)\verb|^|2 et permettant de visualiser les points ayant m\^eme argument}\end{center}
On tape :
\begin{center}{\tt plotfunc((x+i*y)\verb|^|2,[x,y],affichage=rempli)}\end{center}
On obtient :
\begin{center}{La surface pr\'ecedente selon une forme pleine aux couleur de l'arc en ciel}\end{center}
Pour n'avoir qu'une portion de surface on peut indiquer l'intervalle de 
variation dans le deuxi\`eme et le trois\`eme argument.\\
On tape :
\begin{center}{\tt plotfunc((x+i*y)\verb|^|2,[x=-1..1,y=-2..2], nstep=900, affichage=rempli)}\end{center}
On obtient :
\begin{center}{La portion de la surface pr\'ecedente selon une forme pleine aux couleur de l'arc en ciel avec x entre -1 et 1, y entre -2 et 2 et avec 900 points d'\'echantillonnage}\end{center}
{\bf Remarque}\\
 Si vous voulez l'impression ou la traduction en Latex, il faut utiliser :\\
{\tt M$\blacktriangleright$Exporter/Imprimer$\blacktriangleright$Print(with Latex)}. 

\section{Graphe 2D pour compatibilit\'e Maple : {\tt plot graphe}}
\index{plot}\index{graphe} \label{sec:plot2d}
\noindent{\tt plot(f(x),x)} trace la repr\'esentation graphique de $y=f(x)$.\\
On tape :
\begin{center}{\tt  plot(x\verb|^|2-2,x)}\end{center}
On obtient :
\begin{center}{\tt la repr\'esentation graphique de y=x\verb|^|2-2}\end{center}
On peut rajouter un param\`etre pour indiquer le saut 
d'\'echantillonnage en $x$ c'est \`a dire le pas en x que l'on veut 
utiliser pour faire le graphe.
On tape :
\begin{center}{\tt  plot(x\verb|^|2-2,xstep=1)}\end{center}
ou encore
\begin{center}{\tt  plot(x\verb|^|2-2,x,xstep=1)}\end{center}
On obtient :
\begin{center}{\tt une ligne polygonale qui est la repr\'esentation grossi\`ere de y=x\verb|^|2-2}\end{center}
On peut aussi spécifier le nombre de points d'échantillonage de la
fonction à représenter en utilisant \verb|nstep| à la place
de \verb|xstep|. Par exemple, on tape~:
\begin{center}{\tt  plot(x\verb|^|2-2,x=-2..3,nstep=30)}\end{center}

\section{Surface 3D pour compatibilit\'e Maple {\tt plot3d graphe3d}}\index{plot3d}\index{graphe3d}
\noindent{\tt plot3d} a trois arguments une fonction de deux variables (ou une 
expression de deux variables  ou une liste de trois fonctions de deux variables
ou encore une liste de trois expressions de deux variables) et les noms de ces
deux variables.\\
{\tt plot3d} trace la surface d\'efinie par le premier argument (soit $z=f(x,y)$, soit $x=f(u,v),y=g(u,v),z=h(u,v)$).\\ 
On peut faire tourner ce graphique selon 
l'axe des {\tt x}, l'axe des {\tt y} ou l'axe des {\tt z}. Pour cela, il faut 
cliquer avec la souris dans la fen\^etre graphique  en dehors du 
parall\'el\'epip\'ede servant \`a la repr\'esentation, puis faire bouger la 
souris  (sans relacher son bouton) ou utiliser les  touches {\tt x}, {\tt X}, 
{\tt y}, {\tt Y}, {\tt z} et {\tt Z}.\\
On tape :
\begin{center}{\tt plot3d(x*y,x,y)}\end{center}
On obtient :
\begin{center}{La surface $z=x*y$}\end{center}
On tape :
\begin{center}{\tt plot3d([v*cos(u),v*sin(u),v],u,v) }\end{center}
On obtient :
\begin{center}{Le c\^one $x=v*\cos(u),y=v*\sin(u),z=v$}\end{center}
Pour n'avoir qu'une portion de surface on peut indiquer l'intervalle de variation dans le deuxi\`eme et le trois\`eme argument.\\
On tape :
\begin{center}{\tt plot3d([v*cos(u),v*sin(u),v],u=0..pi,v=0..3)}\end{center}
On obtient :
\begin{center}{Une portion du c\^one $x=v*\cos(u),y=v*\sin(u),z=v$}\end{center}

\section{Graphe d'une droite et les tangentes \`a un graphe}
\subsection{Trac\'e d'une droite : {\tt line droite}}\index{line}\index{droite}\label{sec:droite}
{\bf Voir aussi :} \ref{sec:droite2} et \ref{sec:droite3} pour la droite en 
g\'eom\'etrie et \ref{sec:axe2} et \ref{sec:axe3} pour la droite orient\'ee.\\
\noindent {\tt droite} a comme argument son \'equation cart\'esienne :
\begin{itemize}
\item en 2D \\
une \'equation de droite,
\item en 3D \\
deux \'equations de plan.
\end{itemize}
 {\tt droite} d\'efinit et trace la droite d'\'equation donn\'ee en argument.\\
On tape :
\begin{center}{\tt droite(2*y+x-1=0)}\end{center}
On obtient :
\begin{center}{\tt le trac\'e de la droite 2*y+x-1=0}\end{center}
On tape : 
\begin{center}{\tt droite(y=1)}\end{center}
On obtient :
\begin{center}{\tt le trac\'e de la droite horizontale y=1}\end{center}
On tape :
\begin{center}{\tt droite(x=1)}\end{center}
On obtient :
\begin{center}{\tt le trac\'e de la droite verticale x=1}\end{center}
On tape :
\begin{center}{\tt droite(x+2*y+z-1=0,z=2)}\end{center}
On obtient :
\begin{center}{\tt le trac\'e de la droite x+2*y+1=0 dans le plan z=2}\end{center}
On tape :
\begin{center}{\tt droite(y=1,x=1)}\end{center}
On obtient :
\begin{center}{\tt le trac\'e de la droite verticale passant par (1,1,0)}\end{center}
{\bf Remarque}\\
{\tt droite} d\'efinit une droite orient\'ee :
\begin{itemize}
\item Lorsque la droite 2D est donn\'ee par son \'equation, on met cette 
\'equation sous la forme "membre\_gauche-membre\_droite={\tt ax+by+c=0}", cela 
d\'etermine
son vecteur normal {\tt [a,b]} et l'orientation est donn\'ee par le vecteur 
{\tt [b,-a]}) (ou encore son orientation est d\'efinie par le produit vectoriel
3D de son vecteur normal (de cote 0) et du vecteur de coordonn\'ees [0,0,1]).\\
Par exemple {\tt droite(y=2*x)} d\'efinit une droite orient\'ee par le vecteur 
 de coordonn\'ees {\tt [1,2]}.
\item Lorsque la droite 3D est donn\'ee par deux \'equations de plans, son 
orientation est d\'efinie par le produit vectoriel des normales aux plans (en 
mettant les \'equations des plans sous la forme 
"membre\_gauche-membre\_droite=0" on  d\'etermine les normales orient\'ees de 
ces plans).\\
Par exemple, {\tt droite(x=y,y=z)} est orient\'ee par :\\ 
{\tt cross([1,-1,0],[0,1,-1])}={\tt [1,1,1]}.
\end{itemize}

\subsection{Trac\'e d'une droite horizontale en 2D : {\tt LineHorz}}\index{LineHorz}
\noindent {\tt LineHorz} a comme argument une expression $a$.\\
 {\tt LineHorz} trace la droite horizontale $y=a$.\\
On tape :
\begin{center}{\tt LineHorz(1)}\end{center}
On obtient :
\begin{center}{\tt le trac\'e de la droite y=1}\end{center}

\subsection{Trac\'e d'une droite verticale en 2D : {\tt LineVert}}\index{LineVert}
\noindent {\tt LineVert} a  comme arguments une expression $a$.\\
 {\tt LineVert} trace la la droite verticale $x=a$.\\
On tape :
\begin{center}{\tt LineVert(1)}\end{center}
On obtient :
\begin{center}{\tt le trac\'e de la droite x=1}\end{center}

\subsection{Tangente \`a un graphe en 2D : {\tt LineTan droite\_tangente}}\index{LineTan}\index{droite\_tangente}
\noindent {\tt LineTan} a deux arguments : une expression $E$ de la 
variable $x$ et une valeur $x0$ de $x$.\\
 {\tt LineTan} trace la tangente en $x=x0$ \`a la repr\'esentation graphique
de $y=E$.\\
On tape :
\begin{center}{\tt LineTan(ln(x),1)}\end{center}
On obtient :
\begin{center}{\tt le trac\'e de la droite y=x-1}\end{center}
On tape :
\begin{center}{\tt equation(LineTan(ln(x),1))}\end{center}
On obtient :
\begin{center}{\tt l'\'equation y=(x-1)}\end{center}

\subsection{Tangente en un point d'un graphe en 2D : {\tt tangent tangente}}\index{tangent|textbf}\index{tangente|textbf}\label{sec:tangente}
{\bf Voir aussi :} \ref{sec:tangent} pour la g\'eom\'etrie plane et 
\ref{sec:tangent3} pour la g\'eom\'etrie 3D.\\
noindent {\tt tangent} a deux arguments : un objet g\'eom\'etrique et un 
point {\tt A}.\\
Mais quand l'objet g\'eom\'etrique est le graphe {\tt G} d'une fonction 2D, 
le deuxi\`eme argument doit \^etre soit, un nombre r\'eel ${\tt x_0}$, soit un 
point {\tt A} situ\'e sur {\tt G}.\\

Par exemple on tape :\\
{\tt G:=plotfunc(g(x),x)}\\
{\tt tangent(G, 1.2)}\\
 trace la tangente au graphe {\tt G} de la fonction {\tt g} au point 
d'abscisse {\tt x=1.2},\\ 
ou on tape :\\
{\tt A:=point(1.2+i*g(1.2)}\\
{\tt tangent(G, A)}\\
trace la tangente au point {\tt A} du graphe {\tt G} de la fonction {\tt g}.\\
Par exemple, pour avoir le trac\'e de la tangente au graphe de $g(x)=x^2$ au 
point d'abscisse $x_0=1$, on tape :
\begin{center}{\tt g(x):=x\verb|^|2; G:=plotfunc(g(x),x)}\end{center}
\begin{center}{\tt T:=tangent(G,1)}\end{center}
ou on tape :
\begin{center}{\tt T:=tangent(G,point(1+i))}\end{center}
On obtient  
\begin{center}{\tt La tangente au graphe de $g(x)=x^2$ au point 1+i}\end{center}
L'\'equation de la tangente est alors obtenue en tapant :
\begin{center}{\tt equation(T)}\end{center}
\subsection{Trac\'e d'une droite donnée par un point et sa pente : {\tt DrawSlp}}\index{DrawSlp}
\noindent {\tt DrawSlp} a comme argument trois réels {\tt a,b,m}.\\
 {\tt DrawSlp} renvoie et trace la droite de pente {\tt m} et passant par le 
point de coordonnées {\tt a,b}.\\
On tape :
\begin{center}{\tt DrawSlp(2,1,-1)}\end{center}
On obtient :
\begin{center}{\tt la droite d'équation y=(-x+3) qui a pour pente -1 et qui passe par le point(2,1)}\end{center}



\subsection{Intersection d'un graphe en 2D  avec les axes}\index{solve}\index{resoudre}
Pour avoir l'ordonn\'ee de l'intersection du graphe de $f$ avec l'axe des 
$y$ on tape :
\begin{center}{\tt f(0)}\end{center}
le point de coordonn\'ees : $(0,f(0))$ est donc le point d'intersection du 
graphe de $f$ avec l'axe des $y$.\\
Pour avoir l'intersection du graphe de $f$ avec l'axe des $x$ il faut
r\'esoudre $f(x)=0$. On peut essayer d'avoir les valeurs exactes des 
abscisses de ces points en tapant :
\begin{center}{\tt solve(f(x),x)}\end{center}
ou avoir les valeurs approch\'ees de ces abscisses en utilisant la 
repr\'esentation graphique puis, en utilisant {\tt fsolve} pour avoir une 
meilleure pr\'ecision.

\section{Repr\'esentation graphique d'in\'equations \`a 2 variables : {\tt plotinequation inequationplot}}\index{plotinequation|textbf}\index{inequationplot|textbf}
\noindent{\tt plotinequation([f1(x,y)<a1,..,fk(x,y)<ak],[x=x1..x2,y=y1..y2])}
trace la surface du plan d\'efinie par les in\'equations \`a 2 variables :
$$f1(x,y)<a1$$
$$...$$
$$fk(x,y)<ak$$
$$ x1<x<x2$$
$$ y1<y<y2$$
On tape :
\begin{center}{\tt plotinequation(x\verb|^|2-y\verb|^|2<3, [x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)}\end{center}
On obtient :
\begin{center}{\tt la partie contenant l'origine et d\'elimit\'ee par l'hyperbole x\verb|^|2-y\verb|^|2=3 est remplie}\end{center}
On tape :
\begin{center}{\tt plotinequation([x+y>3,x\verb|^|2<y], [x-2..2,y=-1..10],xstep=0.2,ystep=0.2)}\end{center}
On obtient :
\begin{center}{\tt le morceau du plan d\'efinit par -2<x<2,y<10,x+y>3,y>x\verb|^|2 est rempli}\end{center}
{\bf Attention}\\
Si on ne met pas les bornes pour $x$ et $y$ ce sont les valeurs de 
{\tt X-,X+,Y-,Y+} mises dans la configuration g\'en\'erale du graphique 
({\tt Cfg$\blacktriangleright$Configuration graphique}) qui
seront prises en compte.

\section{Repr\'esentation graphique de l'aire sous une courbe : {\tt plotarea areaplot}}\index{plotarea|textbf}\index{areaplot|textbf}\index{rectangle\_droit@{\sl rectangle\_droit}|textbf}\index{rectangle\_gauche@{\sl rectangle\_gauche}|textbf}\index{trapeze@{\sl trapeze}|textbf}\index{point\_milieu@{\sl point\_milieu}|textbf}\index{trapezoid@{\sl trapezoid}|textbf}\index{right\_rectangle@{\sl right\_rectangle}|textbf}\index{left\_rectangle@{\sl left\_rectangle}|textbf}\index{middle\_point@{\sl middle\_point}|textbf}
\begin{itemize}
\item  Avec deux arguments, {\tt plotarea} permet de repr\'esenter l'aire sous 
une courbe.\\
Ainsi, {\tt plotarea(f(x),x=a..b)} trace l'aire sous 
la courbe $y=f(x)$ pour $a<x<b$, c'est \`a dire la portion du plan d\'efinie 
par les in\'equations $a<x<b$ et selon le signe de 
$f(x)$ $0<y<f(x)$ ou $0>y>f(x)$.\\
On tape :
\begin{center}{\tt plotarea(sin(x),x=0..2*pi)}\end{center}
On obtient :
\begin{center}{\tt  la portion de plan situ\'e dans les deux arches de sin(x)}\end{center}

\item Avec quatre arguments, {\tt plotarea} permet de repr\'esenter l'aire qui est cacul\'ee avec la m\'ethode num\'erique choisie parmi :\\
{\tt trapezoid, left\_rectangle, right\_rectangle, middle\_point} ou
{\tt trapeze, rectangle\_gauche, rectangle\_droit, point\_milieu}.\\
 Ainsi, {\tt plotarea(f(x),x=a..b,n,trapeze)} trace l'aire
de $n$ trap\`ezes : le troisi\`eme argument est un entier $n$, et le
quatri\`eme argument est le nom de la m\'ethode num\'erique d'int\'egration 
lorsqu'on partage $[a,b]$ en $n$ parties \'egales.\\
On tape :
\begin{center}{\tt plotarea((x\verb|^|2,x=0..1,5,trapeze)}\end{center}
Ou on tape pour voir la courbe en rouge :
\begin{center}{\tt plotarea(x\verb|^|2,x=0..1,5,trapeze); plot(x\verb|^|2,x=0..1,affichage=rouge)}\end{center}
On obtient :
\begin{center}{\tt les 5 trap\`ezes qui sont utilis\'es dans la m\'ethode dite des trap\`ezes, pour approcher une int\'egrale}\end{center}
On tape :
\begin{center}{\tt plotarea((x\verb|^|2,x=0..1,5,point\_milieu)}\end{center}
Ou on tape pour voir la courbe en rouge :
\begin{center}{\tt plotarea(x\verb|^|2,x=0..1,5,point\_milieu); plot(x\verb|^|2,x=0..1,affichage=rouge)}\end{center}
On obtient :
\begin{center}{\tt les 5 rectangles qui sont utilis\'es dans la m\'ethode dite du point milieu, pour approcher une int\'egrale}\end{center}
\end{itemize}

\section{Lignes de niveaux : {\tt plotcontour contourplot \\DrwCtour}}\index{plotcontour|textbf}\index{contourplot|textbf}\index{DrwCtour|textbf}\label{sec:plotcontour}
\noindent{\tt plotcontour(f(x,y),[x,y])} (ou {\tt DrwCtour(f(x,y),[x,y])} ou \\
encore {\tt contourplot(f(x,y),[x,y])})
trace les 6 lignes de niveaux $z=-10$, $z=-8$,.., $z=0$, $z=2$,.., $z=10$ de la
surface d\'efinie par $z=f(x,y)$.\\
On tape :
\begin{center}{\tt  plotcontour(x\verb|^|2+y\verb|^|2,[x=-3..3,y=-3..3],[1,2,3], affichage=[vert,rouge,noir]+[rempli\$3])}\end{center}
On obtient :
\begin{center}{\tt  le graphe des trois ellipses x\verb|^|2-y\verb|^|2=n pour n=1,2,3; les zones comprises entre ces ellipses sont remplies avec la couleur verte,rouge ou noire }\end{center}
On tape :
\begin{center}{\tt  plotcontour(x\verb|^|2-y\verb|^|2,[x,y])}\end{center}
On obtient :
\begin{center}{\tt  le graphe des six hyperboles x\verb|^|2-y\verb|^|2=n pour n=-10,-8,..10}\end{center}

Pour visualiser la surface, on tape ({\tt plotfunc(f(x,y),[x,y])} trace la 
repr\'esentation graphique de $z=f(x,y)$, voir \ref{sec:plotfunc3}):
\begin{center}{\tt plotfunc( x\verb|^|2-y\verb|^|2,[x,y])}\end{center}
On obtient :
\begin{center}{\tt Un graphique en 3D repr\'esentant z=x\verb|^|2+y\verb|^|2}\end{center}
On peut faire tourner ce graphique selon l'axe des {\tt x}, l'axe des {\tt y} 
ou l'axe des {\tt z}. Pour cela, il faut 
cliquer avec la souris dans la fen\^etre graphique  en dehors du 
parall\'el\'epip\'ede servant \`a la repr\'esentation, puis faire bouger la 
souris (sans relacher son bouton) ou utiliser aux touches 
{\tt x}, {\tt X}, {\tt y}, {\tt Y}, {\tt z} et {\tt Z}.

\section{Graphe d'une fonction par niveaux de couleurs : {\tt plotdensity densityplot}}
\index{plotdensity|textbf}\index{densityplot|textbf}
\noindent{\tt plotdensity(f(x,y),[x,y])}  ou 
encore {\tt densityplot(f(x,y),[x,y])}
trace le graphe de $z=f(x,y)$ dans le plan en repr\'esentant
$z$ par une des couleurs de l'arc en ciel.\\
On tape :
\begin{center}{\tt  plotdensity(x\verb|^|2-y\verb|^|2,[x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)}\end{center}
On obtient :
\begin{center}{\tt Un graphique en 2D repr\'esentant pour chaque z, l'hyperbole d\'efinie par x\verb|^|2-y\verb|^|2=z par une couleur de l'arc en ciel}\end{center}
On remarquera que l'on a l'echelle des couleurs en dessous du graphe.

\section{Courbe en implicite : {\tt plotimplicit implicitplot}}\index{plotimplicit}\index{implicitplot}\index{unfactored}\index{sans\_factoriser} 
{\tt plotimplicit} ou {\tt implicitplot} permet de tracer des courbes ou des 
surfaces d\'efinies de façon implicite par une expression. 
Pour que {\tt Xcas} ne cherche pas \`a  factoriser l'expression, la commande 
{\tt plotimplicit} ou {\tt implicitplot} peut \^etre utilis\'ee avec l'option 
{\tt unfactored} ou {\tt sans\_factoriser} mise comme dernier param\`etre, : 
\begin{itemize}
\item avec {\tt unfactored} l'expression ne sera pas modifi\'ee,
\item sans {\tt unfactored} {\tt Xcas}  r\'eduit l'expression au m\^eme 
d\'enominateur puis cherche \`a  factoriser le num\'erateur. 
\end{itemize}

\subsection{Courbe implicite en 2D}\label{sec:implicitplot}
\begin{itemize}
\item {\tt plotimplicit(f(x,y),x,y)} ou {\tt plotimplicit(f(x,y),[x,y])} trace 
la repr\'esentation graphique
de la courbe d\'efinie implicitement par $f(x,y)=0$ lorsque $x$ (resp $y$) 
varie selon {\tt WX-, WX+} (resp  {\tt WY-, WY+}) d\'efini dans {\tt cfg},
\item {\tt plotimplicit(f(x,y),x=0..1,y=-1..1)} ou \\
{\tt plotimplicit(f(x,y),[x=0..1,y=-1..1])} trace la repr\'esentation 
graphique de la courbe d\'efinie implicitement par $f(x,y)=0$ lorsque 
$0\leq x \leq 1$ et $-1\leq y \leq 1$ (mettre des bornes un peu plus grandes 
pour ne pas avoir de manques !).\\ 
\end{itemize}
On peut \'eventuellement rajouter encore deux param\`etres pour sp\'ecifier
le saut d'\'echantillonnage des variables avec {\tt xstep=} et {\tt ystep=}, 
c'est \`a dire le pas en $x$ et en $y$ que l'on choisi pour le graphe.\\
On tape :
\begin{center}{\tt plotimplicit(x\verb|^|2+y\verb|^|2-1,[x,y])}\end{center}
Ou on tape :
\begin{center}{\tt plotimplicit(x\verb|^|2+y\verb|^|2-1,x,y,unfactored)}\end{center}
On obtient :
\begin{center}{\tt Le dessin du cercle unit\'e}\end{center}
On tape :
\begin{center}{\tt plotimplicit(x\verb|^|2+y\verb|^|2-1,x,y,xstep=0.2,ystep=0.3)}\end{center}
Ou on tape :
\begin{center}{\tt plotimplicit(x\verb|^|2+y\verb|^|2-1,[x,y],xstep=0.2,ystep=0.3)}\end{center}
Ou on tape :
\begin{center}{\tt plotimplicit(x\verb|^|2+y\verb|^|2-1,[x,y], xstep=0.2,ystep=0.3,unfactored)}\end{center}
On obtient :
\begin{center}{\tt Le dessin du cercle unit\'e}\end{center}
On tape :
\begin{center}{\tt plotimplicit(x\verb|^|2+y\verb|^|2-1,x=-2..2,y=-2..2, xstep=0.2,ystep=0.3)}\end{center}
On obtient :
\begin{center}{\tt Le dessin du cercle unit\'e}\end{center}

\subsection{Surface implicite en 3D}\label{sec:implicitplot3}
\begin{itemize}
\item {\tt plotimplicit(f(x,y,z),x,y,z)} trace la repr\'esentation graphique
de la surface d\'efinie implicitement par : $f(x,y,z)=0$,
\item {\tt plotimplicit(f(x,y,z),x=0..1,y=-1..1,z=-1..1)} trace la 
repr\'esentation graphique de la surface d\'efinie implicitement par 
$f(x,y,z)=0$ lorsque $0\leq x \leq 1$, $-1\leq y \leq 1$ et $-1\leq z \leq 1$.
\end{itemize}
On peut \'eventuellement rajouter trois param\`etres pour sp\'ecifier
le saut d'\'echantillonnage des variables ({\tt xstep=}, {\tt ystep=} et 
{\tt zstep=}) c'est \`a dire le pas en $x$, en $y$ et en $z$ que l'on choisi 
pour le graphe.\\
On tape :
\begin{center}{\tt plotimplicit(x\verb|^|2+y\verb|^|2+z\verb|^|2-1,x,y,z, xstep=0.2,ystep=0.1,zstep=0.3)}\end{center}
On tape :
\begin{center}{\tt plotimplicit(x\verb|^|2+y\verb|^|2+z\verb|^|2-1,x,y,z, xstep=0.2,ystep=0.1,zstep=0.3,unfactored)}\end{center}
On obtient :
\begin{center}{\tt Le dessin de la sph\`ere unit\'e}\end{center}
On tape :
\begin{center}{\tt plotimplicit(x\verb|^|2+y\verb|^|2+z\verb|^|2-1,x=-1..1,y=-1..1,z=-1..1)}\end{center}
On obtient :
\begin{center}{\tt Le dessin de la sph\`ere unit\'e}\end{center}

\section{Courbe et surface en param\'etrique : {\tt plotparam paramplot DrawParm courbe\_parametrique}}\index{plotparam|textbf}\index{paramplot|textbf}\index{DrawParm|textbf}\index{courbe\_parametrique|textbf}
\subsection{Courbe 2D en param\'etrique}
\noindent{\tt plotparam(f(t)+i*g(t),t)} 
(resp {\tt plotparam(f(t)+i*g(t),t=t1..t2)})
trace la repr\'esentation param\'etrique de la courbe d\'efinie par 
$x=f(t),y=g(t)$ (resp par  $x=f(t),y=g(t)$ et $t1 \geq t\geq t2$).\\
Si on ne pr\'ecise pas les bornes de l'intervalle de variation du param\`etre
ce sont les valeurs de {\tt t-} et {\tt t+} (cf \ref{sec:configgeo}) qui 
seront ces bornes.\\ 
On tape :
\begin{center}{\tt plotparam(cos(x)+i*sin(x),x) }\end{center}
ou 
\begin{center}{\tt plotparam([cos(x),sin(x)],x) }\end{center}
On obtient :
\begin{center}{\tt Le dessin du cercle unit\'e}\end{center}
On peut p\'eciser les bornes de l'intervalle de 
variation du param\`etre.\\ 
On tape si dans la configuration du graphique {\tt t} va de -4 \`a 1 :
\begin{center}{\tt plotparam(sin(t)+i*cos(t))}\end{center}
ou encore :
\begin{center}{\tt plotparam(sin(t)+i*cos(t),t=-4..1) }\end{center}
ou encore :
\begin{center}{\tt plotparam(sin(x)+i*cos(x),x=-4..1) }\end{center}
On obtient :
\begin{center}{\tt Le dessin de l'arc du cercle unit\'e allant de -4 \`a 1}\end{center}
On peut rajouter un param\`etre pour indiquer le saut d'\'echantillonnage du 
param\`etre $t$ avec {\tt tstep=} c'est \`a dire le pas en $t$ que l'on 
veut utiliser pour faire le graphe.\\
On tape si dans la configuration du graphique {\tt t} va de -4 \`a 1 :
\begin{center}{\tt plotparam(sin(t)+i*cos(t),t,tstep=0.5)}\end{center}
Ou on tape :
\begin{center}{\tt plotparam(sin(t)+i*cos(t),t=-4..1,tstep=0.5)}\end{center}
On obtient :
\begin{center}{Le dessin grossier de l'arc du cercle unit\'e allant de -4 \`a 1}\end{center}

\subsection{Surface 3D en param\'etrique : {\tt plotparam paramplot DrawParm courbe\_parametrique}}\index{plotparam}\index{paramplot}\index{DrawParm}\index{courbe\_parametrique}
\noindent{\tt plotparam} a deux arguments principaux et \'eventuellement
les sauts d'\'echantillonnage des variables avec {\tt ustep=} et {\tt vstep=}, 
c'est \`a dire le pas en $u$ et en $v$ que l'on choisi pour le graphe.\\
Les deux arguments principaux de {\tt plotparam} sont : une liste de trois 
expressions de deux variables et la liste des deux variables.\\
{\tt plotparam([f(u,v),g(u,v),h(u,v)],[u,v])} trace la surface d\'efinie par le
premier argument soit $x=f(u,v),y=g(u,v),z=h(u,v)$).\\
On peut faire tourner ce graphique selon 
l'axe des {\tt x}, l'axe des {\tt y} ou l'axe des {\tt z}. Pour cela, il faut 
cliquer avec la souris dans la fen\^etre graphique  en dehors du 
parall\'el\'epip\'ede servant \`a la repr\'esentation, puis faire bouger la 
souris  (sans relacher son bouton) ou utiliser les  touches {\tt x}, {\tt X}, 
{\tt y}, {\tt Y}, {\tt z} et {\tt Z}.\\
On tape :
\begin{center}{\tt plotparam([v*cos(u),v*sin(u),v],[u,v]) }\end{center}
On obtient :
\begin{center}{\tt Le c\^one $x=v*\cos(u),y=v*\sin(u),z=v$}\end{center}
Pour n'avoir qu'une portion de surface on peut indiquer l'intervalle de 
variation dans le deuxi\`eme et le trois\`eme argument.\\
On tape :
\begin{center}{\tt plotparam([v*cos(u),v*sin(u),v],[u=0..pi,v=0..3]) }\end{center}
On obtient :
\begin{center}{\tt Une portion du c\^one $x=v*\cos(u),y=v*\sin(u),z=v$}\end{center}
On tape :
\begin{center}{\tt plotparam([v*cos(u),v*sin(u),v],[u=0..pi,v=0..3], ustep=0.5,vstep=0.5)}\end{center}
On obtient :
\begin{center}{\tt Une portion du c\^one $x=v*\cos(u),y=v*\sin(u),z=v$}\end{center}
{\bf Remarque}\\
 Si vous voulez l'impression ou la traduction en Latex, il faut utiliser :\\
{\tt M$\blacktriangleright$Exporter/Imprimer$\blacktriangleright$Print(with Latex)}. 

\section{Courbe en polaire : {\tt plotpolar polarplot DrawPol courbe\_polaire}}\index{plotpolar|textbf}\index{polarplot|textbf}\index{DrawPol|textbf}\index{courbe\_polaire|textbf}
\noindent{\tt plotpolar(f(t),t)} trace la repr\'esentation polaire
de la courbe d\'efinie par : $\rho=f(t)$.\\
On tape si dans la configuration du graphique {\tt t} va de 0 \`a 10 :
\begin{center}{\tt  plotpolar(t,t)}\end{center}
On obtient :
\begin{center}{\tt La spirale $\rho$=t est dessin\'ee}\end{center}
On peut rajouter un param\`etre ({\tt tstep=}) pour indiquer le saut 
d'\'echantillonnage en $t$ c'est \`a dire le pas en $t$ que 
l'on veut utiliser pour faire le graphe.
On tape si dans la configuration du graphique {\tt t} va de 0 \`a 10 :
\begin{center}{\tt  plotpolar(t,t,tstep=1)}\end{center}
ou :
\begin{center}{\tt  plotpolar(t,t=0..10,tstep=1)}\end{center}
On obtient :
\begin{center}{\tt La spirale $\rho$=t est dessin\'ee grossi\`erement}\end{center}

\section{Trac\'e d'une suite r\'ecurrente : {\tt plotseq seqplot graphe\_suite}}\index{plotseq}\index{seqplot}\index{graphe\_suite}\label{sec:plotseq}
\noindent{\tt plotseq(f(x),a,n)} ou  {\tt plotseq(f(t),t=a,n)} permet de 
visualiser les $n$ premiers termes d'une suite r\'ecurrente d\'efinie par :\\
$u_0=a,\ \ u_n=f(u_{n-1})$\\
On tape :
\begin{center}{\tt plotseq(sqrt(1+x),3,5)}\end{center}
On obtient :
\begin{center}{\tt Le dessin de y=sqrt(1+x), de y=x et des 5 premiers termes de la suite u\_0=3 et u\_n=sqrt(1+u\_(n-1))}\end{center}

\section{Le champ des tangentes : {\tt plotfield
    fieldplot}}\index{plotfield}\index{fieldplot}\index{normalize@{\sl normalize}|textbf}
\begin{itemize}
\item
Soit $f(t,y)$ une expression dependant de deux variables $t$ et $y$, alors
{\tt plotfield(f(t,y),[t,y])} trace le 
champ des tangentes de l'\'equation diff\'erentielle 
$y'=f(t,y)$ o\`u $y$ repr\'esente une variable r\'eelle et $t$ est
repr\'esent\'e en abscisse,

\item
Soit $V$ est un vecteur 2D de coordonn\'ees deux expressions d\'ependant
de 2 variables $x,y$ mais ind\'ependant du temps, alors
{\tt plotfield(V,[x,y])} trace le champ de vecteurs,
\item Les plages de valeurs de $t,y$ ou de $x,y$ peuvent \^etre
sp\'ecifi\'ees par {\tt t=tmin..tmax}, {\tt x=xmin..xmax}, 
{\tt y=ymin..ymax} \`a la place du nom de variable seul.

\item On peut sp\'ecifier le cadrage en mettant par exemple :\\
{\tt plotfield(f(t,y),[t=tmin..tmax,y=ymin..ymax])}

\item On peut sp\'ecifier  que  le 
champ des tangentes soit, dans un rep\`ere orthonorm\'e, de norme 1 avec 
l'option {\tt normalize}. Sans l'option {\tt normalize} le point de contact est
l'origine du vecteur tangent et avec l'option {\tt normalize} le point de 
contact se trouve au milieu des tangentes.
\item On peut aussi sp\'ecifier la valeur des pas en $t$ et en $y$ avec
{\tt xstep=...} et {\tt ystep=...}.
\end{itemize}
On tape :
\begin{center}
{\tt plotfield(4*sin(t*y),[t=0..2,y=-3..7]) }
\end{center}
On obtient :
\begin{center}{\tt Des segments de pente 4*sin(t*y) sont 
trac\'es en diff\'erents points. Ces segments repr\'esentent les vecteurs tangents dirig\'es selon les $t$ croissants et dont l'origine est le point de contact}\end{center}
On tape :
\begin{center}
{\tt plotfield(4*sin(t*y),[t=0..2,y=-3..7],normalize, xstep=0.7,ystep=0.7)) }
\end{center}
On obtient :
\begin{center}{\tt Des segments de longueur 1 et de pente 4*sin(t*y) qui repr\'esentent les tangentes au point situ\'e en leur milieu. Ces points espac\'es de 0.7}\end{center}
On tape :
\begin{center}
{\tt plotfield(5*[-y,x],[x=-1..1,y=-1..1])}
\end{center}
On obtient :
\begin{center}{\tt Des  vecteurs $[-y,x]$ sont 
trac\'es aux points $(x,y)$. Ces vecteurs repr\'esentent des vecteurs tangents en leur origine aux courbes solutions du syst\`eme $x(t)'=-y,y(t)'=x$. Ils sont dirig\'es selon les $t$ croissants.}\end{center}
On tape :
\begin{center}
{\tt plotfield(5*[-y,x],[x=-1..1,y=-1..1])}
\end{center}
On obtient :
\begin{center}{\tt Des segments de longueur 1 et de pente $-y/x$ qui repr\'esentent les tangentes au point situ\'e en leur milieu aux courbes solutions du syst\`eme $x(t)'=-y,y(t)'=x$.}\end{center}

\section{Trac\'e de solutions d'\'equation diff\'erentielle : 
{\tt   plotode odeplot}}\index{plotode}\index{odeplot}\index{plan@{\sl plan}|textbf}\index{plane@{\sl plane}|textbf}
\begin{itemize}
\item
\noindent{\tt plotode(f(t,y),[t,y],[t0,y0])} 
trace en fonction du temps la solution $y(t)$ de 
l'\'equation diff\'erentielle $y'=f(t,y)$ passant par le point
{\tt (t0,y0)}, o\`u $f(t,y)$ d\'esigne une expression d\'ependant 
de la variable de temps $t$ et de la variable $y$. 
\item
Par d\'efaut, $t$ varie dans les 2 directions. On peut 
sp\'ecifier la plage du temps par le param\`etre optionnel
{\tt t=tmin..tmax}.
\item
Lorsque $y=(X,Y)$ est un vecteur de longueur 2 et $f$ \`a valeurs 
dans $\R^2$, on peut \'egalement repr\'esenter dans l'espace $(t,X,Y)$ ou dans 
le plan $(X,Y)$ la solution d'une \'equation diff\'erentielle 
$y'=f(t,y)$ c'est \`a dire $[X',Y']=[f(t,X,Y)$.
Pour cela, il suffit de remplacer $y$ par le noms des variables $X,Y$
et la valeur initiale par les deux valeurs initiales des
variables au temps $t_0$.
\end{itemize}
On tape :
\begin{center}{\tt plotode(sin(t*y),[t,y],[0,1]) }\end{center}
On obtient :
\begin{center}{Le graphe de la solution de y'=sin(t,y) 
passant par le point (0,1) est trac\'e }\end{center}
On tape~:
\begin{center}
{\tt S:=odeplot([h-0.3*h*p, 0.3*h*p-p], [t,h,p],[0,0.3,0.7])}
\end{center}
On obtient le graphe dans l'espace de la solution de
\[ [h,p]'=[h-0.3 h p, 0.3 h p-p] \quad [h,p](0)=[0.3,0.7] \]
Pour avoir le graphe dans le plan, on ajoute l'option {\tt plan} ou {\tt plane}
\begin{center}
{\tt S:=odeplot([h-0.3*h*p, 0.3*h*p-p], [t,h,p],[0,0.3,0.7],plan)}
\end{center}
Pour visualiser les valeurs de la solution, se reporter
\`a la section \ref{sec:odesolve}

\section{Trac\'e interactif des solutions d'\'equation diff\'erentielle : {\tt interactive\_plotode interactive\_odeplot}}\index{interactive\_plotode}\index{interactive\_odeplot}\index{normalize@{\sl normalize}}
\noindent{\tt interactive\_plotode(f(t,y),[t,y])} trace  le champ des tangentes
de  l'\'equation diff\'erentielle $y'=f(t,y)$ dans l'\'ecran {\tt DispG} et\\  
{\tt interactive\_plotode(f(t,y),[t=a...b,y])} trace  le champ des tangentes
pour {\tt t} allant de {\tt a} \`a {\tt b} de  l'\'equation diff\'erentielle $y'=f(t,y)$ dans l'\'ecran {\tt DispG}.\\
Lorsqu'on clique sur un point, on obtient le trac\'e de la solution de 
$y'=f(t,y)$ passant par ce point.\\
On peut faire autant de trac\'es que l'on veut (un trac\'e se fait chaque fois
 que l'on clique sur un point avec la souris). On termine les trac\'es en 
tapant sur la touche {\tt Esc} ou {\tt Echap}.\\
On peut aussi sp\'ecifier, comme dans {\tt plotfield}, que le champ des 
tangentes soit de norme 1 avec l'option {\tt normalize}.
{\bf Attention}
Si on ne veut pas de superposition avec les dessins faits auparavant, il ne 
faut pas oublier de taper {\tt ClrGraph}, avant d'utiliser 
{\tt interactive\_plotode}, pour effacer l'\'ecran {\tt DispG}.
On tape :
\begin{center}{\tt interactive\_plotode(-y+x+1,[x=-4..4,y]) }\end{center}
On obtient :
\begin{center}{\tt Le champ des tangentes est trac\'e ainsi que la
    solution de y'=sin(t,y) passant par le point qui a \'et\'e
    cliqu\'e avec la souris}\end{center}
IL se trouve que l'on sait r\'esoudre cette \'equation : les solutions sont 
{\tt y(x)=C*exp(-x)+x} et on peut donc v\'erifier...\\
On tape :
\begin{center}{\tt interactive\_plotode(sin(t*y),[t=-4..4,y]) }\end{center}
On obtient :
\begin{center}{\tt Le champ des tangentes est trac\'e ainsi que la
    solution de y'=sin(t,y) passant par le point qui a \'et\'e
    cliqu\'e avec la souris}\end{center}
On tape :
\begin{center}{\tt interactive\_plotode(sin(t*y),[t=-4..4,y],normalize)}\end{center}
On obtient :
\begin{center}{\tt Le trac\'e du champ des tangentes  avec une norme \'egale 
\`a 1 et le graphe de la solution de y'=sin(t,y) passant par le point qui a 
\'et\'e cliqu\'e avec la souris}\end{center}

\section{Trac\'e interactif des solutions d'\'equation diff\'erentielle dans un niveau de g\'eom\'etrie : {\tt plotfield fieldplot} et {\tt plotode odeplot}}\index{plotode}\index{odeplot}\index{plotfield}\index{fieldplot}
Dans un niveau de g\'eom\'etrie, le menu {\tt Graphe->Slopefield/Ode(2d)} ouvre
une boite de dialogues qui demande :
\begin{itemize}
\item si on veut que soit trac\'e le champ des tangentes,
\item si on veut que ces tangentes soient normalis\'ees dans un rep\`ere 
orthonorm\'e,
\item la valeur de $y'$,
\item le nom des variables,
\item les diff\'erentes valeurs de cadrage et de pas.
\end{itemize}
Lorsqu'on appuie sur {\tt OK}, l'\'ecran de g\'eom\'etrie est en mode 
{\tt plotode} et si l'on a coch\'e {\tt Field}, le champ des tangentes apparait
et la commande correspondante s'inscrit au niveau suivant de l'\'ecran de 
g\'eom\'etrie, par exemple :
\begin{center}{\tt plotfield(sin(t*y),[t=-5.7..5.7,y=-5.7..5.7],normalize, xstep=0.7,ystep=0.7)}\end{center}
Si on a coch\'e {\tt Field} et {\tt ||=1}, et que $y'=\sin(t*y)$.\\
Ensuite, il suffit de cliquer en diff\'erents points de l\'ecran de 
g\'eom\'etrie pour avoir les trac\'es des solutions passant par ces points et 
les commandes correspondantes stock\'ees dans une variable, par exemple :
\begin{center}{\tt A:=plotode(sin(t*y),[t,y],point(-2.863,1.327),plan)}\end{center}
Pour terminer, il suffit de changer de mode, par exemple passer en mode 
{\tt Repere}. Il faut noter que le mode {\tt plotode} n'est pas accessible 
directement : on doit r\'eouvrir la boite de dialogue avec le menu 
{\tt Graphe->Slopefield/Ode(2d)}.\\
Si on trouve que le champ des tangentes est g\'enant, on peut le supprimer 
facilement en supprimant le niveau correspondant \`a sa commande.

\section{Faire une animation en 2D, 3D ou "4D"}
{\tt Xcas} permet d'animer des graphes en 2D, 3D ou "4D" en 
calculant une fois pour toute une suite d'objets graphiques et en 
affichant chaque objet de la sequence en boucle.
\begin{itemize}
\item Le temps d'affichage d'un objet peut se r\'egler avec {\tt animate} dans 
{\tt cfg} (plus le nombre est petit et plus le temps d'affichage est petit i.e 
la vitesse d'animation est grande).
\item Si on met {\tt animate} \`a {\tt 0}, \`a chaque clic de la souris dans 
l'\'ecran graphique, on a un affichage.
\item Le nombre d'images peut se r\'egler avec un argument de la forme 
{\tt frames=} ou {\tt trames=}\index{frames@{\sl frames}|textbf}
\index{trames@{\sl trames}|textbf}.
\item On peut interrompre ou relancer l'affichage en boucle en cliquant sur le 
bouton $\blacktriangleright \mid$ (\`a droite de {\tt M}).
\end{itemize}
\subsection{Animation d'un graphe 2D~:{\tt animate}}\index{animate}
\noindent{\tt animate} permet de cr\'eer une animation en boucle d'un graphe
de fonctions d\'ependant d'un param\`etre. Le param\`etre doit \^etre
indiqu\'e en 3\`eme argument de {\tt animate}, le nombre d'images
en 4\`eme argument sous la forme 
{\tt frames=} ou {\tt trames=}, les autres arguments
sont identiques \`a ceux de la commande {\tt plot}, section \ref{sec:plot2d}, 
p. \pageref{sec:plot2d}.\\
On tape :
\begin{center}
{\tt animate(sin(a*x),x=-pi..pi,a=-2..2,trames=10,couleur=rouge)}
\end{center}
On obtient :
\begin{center}{\tt une \`a une la repr\'esentation graphique de y=sin($a$x) pour 
11 valeurs de $a$ entre -2 et 2}\end{center}

\subsection{Animation d'un graphe 3D~:{\tt animate3d}}\index{animate3d}
\noindent{\tt animate3d} permet de cr\'eer une animation en boucle 
d'un graphe 3D
de fonctions d\'ependant d'un param\`etre. Le param\`etre doit \^etre
indiqu\'e en 3\`eme argument de {\tt animate3d}, le nombre d'images
en 4\`eme argument sous la forme 
{\tt frames=} ou {\tt trames=}, les autres arguments
sont identiques \`a ceux de la commande {\tt plotfunc}, voir
section \ref{sec:plotfunc3}, p. \pageref{sec:plotfunc3}.\\
On tape :
\begin{center}
{\tt animate3d(x\verb|^|2+a*y\verb|^|2,[x=-2..2,y=-2..2],a=-2..2, frames=10,affichage=rouge+rempli)}
\end{center}
On obtient :
\begin{center}{\tt une \`a une la repr\'esentation graphique de z=x\verb|^|2+$a$*y\verb|^|2 pour 11 valeurs de $a$ entre -2 et 2}\end{center}

\subsection{Animation d'une s\'equence d'objets graphiques~:{\tt animation}}\index{animation}
\noindent{\tt animation} permet de dessiner chaque objet d'une suite d'objets 
graphiques avec un temps d'affichage donn\'e. En g\'en\'eral les objets de la 
suite d\'ependent d'un param\`etre, il faut alors cr\'eer une suite en faisant 
varier ce param\`etre.\\
{\tt animation} a comme param\`etre une s\'equence d'objets graphiques.\\
{\bf Remarque} \\
Si on veut que dans l'animation plusieurs objets graphiques soient affich\`es 
en m\^eme temps, il faut mettre ces objets dans une liste, par exemple :\\
On tape :
\begin{center}{\tt plotfunc(x\verb|^|2);animation([point(1),segment(1,1+i), point(1+i)],droite(y=2*x-1))}\end{center}
On obtient :
\begin{center}{\tt le graphe de $y=x^2$ puis une animation de 2 objets (le premier objet est 2 points et un segment et le deuxi\`eme une droite)}\end{center}  
{\bf Attention} \\
Pour d\'efinir la s\'equence d'objets graphiques avec {\tt seq} on peut quoter 
ou ne pas quoter la commande dessinant l'objet graphique.\\
On peut aussi sp\'ecifier le pas de la s\'equence si on utilise 5 arguments 
pour {\tt seq} : l'objet graphique, le nom du param\`etre, sa valeur 
minimum, sa valeur maximum et le pas.\\
On tape :
\begin{center}{\tt animation(seq(plotfunc(cos(a*x),x),a,0,10))}\end{center}
On obtient :
\begin{center}{\tt La suite des diff\'erentes repr\'esentations de la courbe d\'efinies par $y=\cos(ax)$, pour $a=0,1,2..10$}\end{center}
On tape :
\begin{center}
{\tt animation(seq(plotfunc(cos(a*x),x),a,0,10,0.5))}\\
ou\\
{\tt animation(seq(plotfunc(cos(a*x),x),a=0..10,0.5))}
\end{center}
On obtient :
\begin{center}{\tt La suite des diff\'erentes repr\'esentations de la courbe d\'efinies par $y=\cos(ax)$, pour $a=0,0.5,1,1.5..10$ }\end{center}
On tape :
\begin{center}{\tt animation(seq(plotfunc([cos(a*x),sin(a*x)],x=0..2*pi/a), a,1,10))}\end{center}
On obtient :
\begin{center}{\tt La suite des diff\'erentes repr\'esentations des 2 courbes d\'efinies par $y=\cos(ax)$ et $y=\sin(ax)$, pour $a=1..10$ et pour $x=0..2\pi/a$ }\end{center}
On tape :
\begin{center}{\tt animation(seq(plotparam([cos(a*t),sin(a*t)], t=0..2*pi),a,1,10))}\end{center}
On obtient :
\begin{center}{\tt La suite des diff\'erentes repr\'esentations des courbes d\'efinies param\'etriquement par $x=\cos(at)$ et $y=\sin(at)$, pour $a=1..10$ et pour $t=0..2\pi$ }\end{center}
On tape :
\begin{center}{\tt animation(seq(plotparam([sin(t),sin(a*t)], t,0,2*pi,tstep=0.01),a,1,10))}\end{center}
On obtient :
\begin{center}{\tt La suite des diff\'erentes repr\'esentations des courbes param\'etr\'ees d\'efinies par $x=\sin(t),y=\sin(at)$, pour $a=0..10$ et $t=0..2\pi$}\end{center}
On tape :
\begin{center}{\tt animation(seq(plotpolar(1-a*0.01*t\verb|^|2, t,0,5*pi,tstep=0.01),a,1,10))}\end{center}
On obtient :
\begin{center}{\tt La suite des diff\'erentes repr\'esentations des courbes polaires d\'efinies par $\rho=1-a*0.01*t^2$, pour $a=0..10$ et $t=0..5\pi$}\end{center}
On tape :
\begin{center}{\tt plotfield(sin(x*y),[x,y]); animation(seq(plotode(sin(x*y),[x,y],[0,a]),a,-4,4,0.5))}\end{center}
On obtient :
\begin{center}{\tt Le champ des tangentes de y'=sin(xy) et la suite des diff\'erentes courbes int\'egrales passant par le point $(0;a)$ pour $a$=-4,-3.5...3.5,4}\end{center}
On tape :
\begin{center}{\tt animation(seq(affichage(carre(0,1+i*a),rempli),a,-5,5))}\end{center}
On obtient :
\begin{center}{\tt La suite des diff\'erents carr\'es d\'efinis par les points 0 et 1+i*$a$ pour $a=-5..5$}\end{center}
On tape :
\begin{center}{\tt animation(seq(droite([0,0,0],[1,1,a]),a,-5,5))}\end{center}
On obtient :
\begin{center}{\tt La suite des diff\'erentes droites  d\'efinies par les points [0,0,0] et [1,1,$a$] pour $a=-5..5$}\end{center}
On tape :
\begin{center}{\tt animation(seq(plotfunc(x\verb|^|2-y\verb|^|a,[x,y]), a=1..3))}\end{center}
On obtient :
\begin{center}{\tt La suite des diff\'erentes repr\'esentations 3D des surfaces  d\'efinies par $x^2-y^a$, pour $a=1..3$ avec les couleurs de l'arc en ciel}\end{center}
On tape :
\begin{center}{\tt animation(seq(plotfunc((x+i*y)\verb|^|a,[x,y], affichage=rempli),a=1..10)}\end{center}
On obtient :
\begin{center}{\tt La suite des diff\'erentes repr\'esentations "4D" des surfaces  d\'efinies par $(x+i*y)^a$, pour $a=0..10$ avec les couleurs de l'arc en ciel}\end{center}

{\bf Remarque}
0n peut construire la s\'equence avec un programme, par exemple on 
veut dessiner les segments de longueur $1,\sqrt 2...\sqrt 20$ construit avec 
un triangle rectangle de c\^ot\'es 1 et le segment pr\'ec\'edent.\\
Voici ce programme (bien mettre {\tt c:=evalf(..)} pour que les calculs soient 
approch\'es sinon le temps de calcul est trop long) :
\begin{verbatim}
essai(n):={
local a,b,c,j,aa,bb,L;
a:=1;
b:=1;
L:=[point(1)];
for(j:=1;j<=n;j++){
L:=append(L,point(a+i*b));
c:=evalf(sqrt(a^2+b^2));
aa:=a;
bb:=b;
a:=aa-bb/c;
b:=bb+aa/c;
}
L;
}
\end{verbatim}
Puis on tape :
\begin{center}{\tt animation(essai(20))}\end{center}
On voit, en boucle, chaque point, l'un apr\`es l'autre, avec un temps 
d'affichage plus ou moins grand selon la valeur de {\tt animate} de {\tt cfg}.\\
Ou on tape :
\begin{center}{\tt L:=essai(20); s:=segment(0,L[k])\$(k=0..20)}\end{center}
On voit les 21 segments. \\
Puis on tape :
\begin{center}{\tt animation(s)}\end{center}
On voit, en boucle, chaque segment, l'un apres l'autre avec un temps 
d'affichage plus ou moins grand selon la valeur de {\tt animate} de {\tt cfg}.

\chapter{Calcul num\'erique}\label{sec:numeric}
\section{Codage des r\'eels et des d\'ecimaux}
Voici comment sont cod\'ees les nombres r\'eels lorsque le nombre de chiffres 
significatifs demand\'es est inf\'erieur ou \'egal \`a 16 (par exemple
{\tt Digits:=15}).\\
On \'ecrit  $d$, un nombre r\'eel ou d\'ecimal, sous la forme :\\
$d=2^\alpha (1+m)$ avec $0<m<1$ et $-2^{10}<\alpha\geq 2^{10}$.\\
On utilse 64 bits pour repr\'esenter ce nombre :
\begin{itemize}
\item le premier bit pour le signe de $d$ (0 pour '+' et 1 pour '-'),
\item les 11 bits suivant sont pour cod\'es l'exposant 
(on code $\alpha+2^{10}-1$), 
\item les 52 derniers sont pour cod\'es la mantisse $m$.\\
\end{itemize}
Codage de $2^\alpha$ :\\
$\alpha=0$ est cod\'e 011 1111 1111\\
$\alpha=1$ est cod\'e 100 0000 0000\\
$\alpha=4$ est cod\'e 100 0000 0011\\
$\alpha=5$ est cod\'e 100 0000 0100\\
$\alpha=-1$ est cod\'e 011 1111 1110\\
$\alpha=-4$ est cod\'e 011 1111 1011\\
$\alpha=-5$ est cod\'e 011 1111 1010\\
$\alpha=2^{10}$ est cod\'e 111 1111 1111\\
$\alpha=2^{-10}-1$ est cod\'e 000 0000 0000.

{\bf Remarque}\\
$2^{-52}=0.2220446049250313e-15$

\subsection{Un exemple : codage de  3.1 et de 3}
\begin{itemize}
\item  codage de 3.1 :\\
On a :\\
$3.1=2*(1+1/2+1/2^5+1/2^6+1/2^9+1/2^{10}+....)=2*(1+1/2+\sum_{k=01}^\infty 1/2^{4*k+1}+1/2^{4*k+12})$ \\
donc $\alpha=1$ et $m=1/2+\sum_{k=1}^\infty 1/2^{4*k+1}+1/2^{4*k+2}$ \\
On obtient le codage de 3.1 :\\
40 (01000000), 8 (00001000), cc (11001100), cc (11001100), \\
cc (11001100), cc (11001100), cc (11001100), cd (11001101), \\
le dernier octet est 1101 car il y a eu un arrondi du dernier bit a 1, car le
 chiffre suivant etait 1.
 
\item  codage de 3 :\\
On a :\\
$3=2*(1+1/2)$\\
On obtient le codage de 3 :\\
40 (01000000), 8 (00001000), 0 (00000000), 0 (00000000), 0 (00000000),\\
0 (00000000), 0 (00000000), 0 (00000000).
\end{itemize}

\subsection{Diff\'erence de codage entre (3.1-3) et 0.1}
\begin{itemize}
\item  codage de  0.1 :\\
On a :\\
$0.1=2^{-4}*(1+1/2+1/2^4+1/2^5+1/2^8+1/2^9+...)=2^{-4}*\sum_{k=0}^\infty 1/2^{4*k}+1/2^{4*k+1}$\\
donc $\alpha=1$ et $m=1/2+\sum_{k=1}^\infty 1/2^{4*k}+1/2^{4*k+1}$ \\
On obtient le codage de 0.1 :\\
 the code of3f (00111111), b9 (10111001), 99 (10011001), 99 (10011001),\\
99 (10011001), 99 (10011001), 99 (10011001), 9a (10011010),\\
le dernier octet est 1010 car il y a eu un arrondi les 2 derniers bits 01
sont devenus 10  car le  chiffre suivant etait 1.

\item codage de  a:=3.1-3 :\\
L'exposant sera donc $\alpha=-4$ (qui correspond \`a $2*2^{-5}$) et les bits 
qui correspondent \`a la mantisse vont d\'ebuter \`a $1/2=2*2^{-6}$ : ainsi
les nombres de la mantisse subissent un d\'ecalage vers la gauche de 5 places
et  on  obtient :\\
3f (00111111), b9 (10111001), 99 (10011001), 99 (10011001),\\
99 (10011001), 99 (10011001), 99 (10011001), 9a (10100000),\\
On voit alors que :\\
$a>0.1$ et que $a-0.1=1/2^{50}+1/2^{51}$ (car 100000-11010=110)
\end{itemize}
{\tt Remarque}\\
Ce qui pr\'ec\'ede permet d'expliquer pourquoi lorsque {\tt Digits:=15} :\\
{\tt floor(1/(3.1-3))} renvoie {\tt 9} et non {\tt 10}.

\section{\'Evaluation des r\'eels : {\tt evalf approx} et {\tt Digits}}\index{evalf|textbf}\index{approx|textbf}\index{DIGITS}\index{Digits}
\noindent On peut \'evaluer une expression num\'erique gr\^ace \`a la 
commande {\tt evalf} ou {\tt approx}.\\
On peut sp\'ecifier le nombre de chiffres significatifs en mettant ce nombre
comme deuxi\`eme argument ce qui a l'avantage de ne pas modifier la case 
{\tt Chiffres} de la configuration du CAS.\\ 
{\bf Attention !}\\
\begin{itemize}
\item Si le deuxi\`eme argument {\tt a} est inf\'erieur \`a 14 il n'est pas 
pris en compte et c'est le nombre {\tt n} de {\tt Digits} qui donnera le nombre
de chiffres significatifs de l'affichage sachant que si {\tt n} est inf\'erieur
\`a 14, les calculs seront quand m\^eme faits avec 14 chiffres significatifs.
\item Si le deuxi\`eme argument {\tt a} est sup\'erieur \`a 14, l'affichage et 
les calculs se feront  avec {\tt a} chiffres significatifs sans tenir compte de la valeur de {\tt Digits}.
\end{itemize}
On tape :
\begin{center}{\tt evalf(sqrt(2))}\end{center}
On obtient, si dans la configuration du {\tt cas} (menu {\tt Cfg}) on a
choisit {\tt Chiffres=7} (ou si on a tap\'e {\tt Digits:=7}) :
\begin{center}{\tt 1.414214}\end{center}
On tape :
\begin{center}{\tt evalf(sqrt(2),3)}\end{center}
Ou on tape :
\begin{center}{\tt evalf(sqrt(2),10)}\end{center}
On obtient toujours, si dans la configuration du {\tt cas} (menu {\tt Cfg}) on 
a choisit {\tt Chiffres=7} (ou si on a tap\'e {\tt Digits:=7}) :
\begin{center}{\tt 1.414214}\end{center}
On tape :
\begin{center}{\tt evalf(sqrt(2),3)-1.414214}\end{center}
On obtient toujours, si dans la configuration du {\tt cas} (menu {\tt Cfg}) on 
a choisit {\tt Chiffres=7} (ou si on a tap\'e {\tt Digits:=7}) :
\begin{center}{\tt -4.376269e-07}\end{center}
ce qui montre que {\tt Xcas} fait les calculs avec 14 chiffres significatifs.\\
On tape :
\begin{center}{\tt evalf(sqrt(2),20)}\end{center}
On obtient, si dans {\tt Configuration du CAS} (menu {\tt Cfg}) on a
choisit {\tt chiffres=7} (7 repr\'esente le nombre de chiffres significatifs) :
\begin{center}{\tt 1.41421356237309504880}\end{center}
et cela n'a pas modifi\'e la configuration du CAS.\\
On peut changer le nombre de chiffres significatifs avec la variable 
{\tt DIGITS} ou {\tt Digits}.\\
On tape :
\begin{center}{\tt DIGITS:=20}\end{center}
Cela a pour effet de changer {\tt Configuration du CAS} et de mettre 20 dans la
case {\tt Chiffres}.
\begin{center}{\tt evalf(sqrt(2))}\end{center}
On obtient 20 chiffres apr\`es la virgule :
\begin{center}{\tt 1.41421356237309504880}\end{center}
{\bf  Notation} : Le nombre r\'eel $10^{-4}$ est un nombre exact alors que 
$1e-4$ est un nombre approch\'e. \\
On tape : 
\begin{center}{\tt evalf(10\verb|^|-5)}\end{center}
On obtient :
\begin{center}{\tt 1e-05}\end{center}
On tape : 
\begin{center}{\tt evalf(10\verb|^|15)}\end{center}
On obtient :
\begin{center}{\tt 1e+15}\end{center}
On tape : 
\begin{center}{\tt evalf(sqrt(2))*10\verb|^|-5}\end{center}
On obtient :
\begin{center}{\tt 1.41421356237e-05}\end{center}
{\bf Remarques}
On tape :
\begin{center}{\tt DIGITS:=20}\end{center}
\begin{center}{\tt a:=evalf(sqrt(2))}\end{center}
On obtient :
\begin{center}{\tt 1.41421356237309504880}\end{center}
On tape :
\begin{center}{\tt evalf(a,10)}\end{center}
On obtient :
\begin{center}{\tt 1.4142135624}\end{center}
On tape :
\begin{center}{\tt evalf(sqrt(2),10)}\end{center}
On obtient :
\begin{center}{\tt 1.414213562373}\end{center}
On tape :
\begin{center}{\tt DIGITS:=10}\end{center}
\begin{center}{\tt b:=evalf(sqrt(2))}\end{center}
On obtient :
\begin{center}{\tt 1.414213562}\end{center}
On tape :
\begin{center}{\tt evalf(b,10)}\end{center}
On obtient :
\begin{center}{\tt 1.414213562}\end{center}
On tape :
\begin{center}{\tt evalf(sqrt(2),10)}\end{center}
On obtient :
\begin{center}{\tt 1.414213562}\end{center}
\section{Quelques fonctions}
\subsection{Solution approch\'ee d'une \'equation : {\tt newton}}\index{newton}
\noindent{\tt newton} a comme arguments : une expression {\tt ex}, le nom de la
variable de cette expression (par d\'efaut {\tt x}), and trois valeurs {\tt a} 
(par d\'efaut {\tt a=0}), {\tt eps} (par d\'efaut {\tt eps=1e-8}) and 
{\tt nbiter} (par d\'efaut {\tt nbiter=12}).\\
{\tt newton(ex,x,a,eps,nbiter)} calcule de fa\c{c}on approch\'ee par la 
m\'ethode de Newton, une solution {\tt x} proche de {\tt a} de l'\'equation
{\tt ex=0}. Le nombre maximum d'it\'erations est {\tt nbiter} 
et la pr\'ecision demand\'ee est {\tt eps}.\\
On tape :
\begin{center}{\tt newton(x\verb|^|2-2,x,1) }\end{center}
On obtient :
\begin{center}{\tt 1.41421356237}\end{center}
On tape :
\begin{center}{\tt newton(x\verb|^|2-2,x,-1) }\end{center}
On obtient :
\begin{center}{\tt -1.41421356237}\end{center}
On tape :
\begin{center}{\tt newton(cos(x)-x,x,0)}\end{center}
On obtient :
\begin{center}{\tt0.739085133215 }\end{center}

\subsection{Calcul approch\'e du nombre dérivé : {\tt nDeriv}}\index{nDeriv}
\noindent{\tt nDeriv} a comme arguments : une expression {\tt ex}, le nom de
la variable de cette expression (par d\'efaut {\tt x}), and {\tt h} (par 
d\'efaut {\tt h=0.001}).\\
{\tt nDeriv(f(x),x,h)} calcule de fa\c{c}on approch\'ee la valeur de 
la d\'eriv\'ee de l'expression {\tt f(x)} au point {\tt x} et renvoie :\\ 
{\tt (f(x+h)-f(x+h))/2*h}.\\
On tape :
\begin{center}{\tt nDeriv(x\verb|^| 2,x)}\end{center}
On obtient :
\begin{center}{\tt ((x+0.001)\verb|^|2-(x+-0.001)\verb|^|2)*500.0}\end{center}
On tape :
\begin{center}{\tt subst(nDeriv(x\verb|^| 2,x),x=1)}\end{center}
On obtient :
\begin{center}{\tt 2}\end{center}
On tape :
\begin{center}{\tt nDeriv(exp(x\verb|^| 2),x,0.00001)}\end{center}
On obtient :
\begin{center}{\tt (exp((x+1e-05)\verb|^|2)-exp((x+-1e-05)\verb|^|2))*50000}\end{center}
On tape :
\begin{center}{\tt subst(exp(nDeriv(x\verb|^| 2),x,0.00001),x=1)}\end{center}
On obtient :
\begin{center}{\tt 5.43656365783}\end{center}
On a {\tt 2.0*e=5.43656365692}

\subsection{Calcul approch\'e d'int\`egrales : {\tt romberg nInt}}\index{romberg}\index{nInt}
\noindent{\tt romberg} ou {\tt nInt} a comme arguments : une expression 
{\tt ex}, le nom de la variable de cette expression (par d\'efaut {\tt x}), et 
deux valeurs {\tt a,b}.\\
{\tt romberg(ex,x,a,b)} ou {\tt nInt(ex,x,a,b)} calcule de 
fa\c{c}on approch\'ee l'int\'egrale  $\int_a^b ex\ dx$.\\
On tape :
\begin{center}{\tt romberg(exp(x\verb|^|2),x,0,1)}\end{center}
On obtient :
\begin{center}{\tt 1.46265174591}\end{center}


\subsection{Solution approch\'ee de y'=f(t,y) : {\tt
    odesolve}}\index{odesolve|textbf}\index{curve{\sl curve}|textbf}
\begin{itemize}
\item Soit $f$ une fonction de $\mathbb R^2$ 
dans $\mathbb R$.\\
{\tt odesolve(f(t,y),[t,y],[t0,y0],t1)} ou\\
{\tt odesolve(f(t,y),t=t0..t1,y,y0)} ou\\
{\tt odesolve(t0..t1,f,y0)} ou\\
{\tt odesolve(t0..t1,(t,y)->f(t,y),y0)}\\
renvoie  la valeur approch\'ee de 
$y(t1)$ lorsque $y(t)$ est la  
solution de $y'(t)=f(t,y(t))$ qui v\'erifie $ y(t0)=y0$.
\item On peut ajouter un param\`etre optionnel pour
indiquer la discr\'etisation en temps souhait\'ee
({\tt tstep=valeur}). Cette valeur n'est pas forc\'ement
respect\'ee par le solver.
\item On peut indiquer en param\`etre optionnel {\tt curve}
pour obtenir la liste des [$t,[y(t)]$] calcul\'es au lieu
de la seule valeur de $y(t1)$.
\end{itemize}
On tape :
\begin{center}{\tt odesolve(sin(t*y),[t,y],[0,1],2)}\end{center}
ou :
\begin{center}
{\tt odesolve(sin(t*y),t=0..2,y,1)}
\end{center}
ou :
\begin{center}
{\tt odesolve(0..2,(t,y)->sin(t*y),1)}
\end{center}
ou encore on d\'efinit la fonction :
\begin{center}
{\tt f(t,y):=sin(t*y)}
\end{center}
et on tape:
\begin{center}{\tt odesolve(0..2,f,1)}\end{center}
On obtient :
\begin{center}{\tt [1.82241255675]}\end{center}
puis on tape :
\begin{center}{\tt odesolve(0..2,f,1,tstep=0.3)}\end{center}
On obtient :
\begin{center}{\tt [1.82241255675]}\end{center}
On tape :
\begin{center}{\tt odesolve(sin(t*y),t=0..2,y,1,tstep=0.5)}\end{center}
On obtient :
\begin{center}{\tt [1.82241255675]}\end{center}
On tape :
\begin{center}{\tt odesolve(sin(t*y),t=0..2,y,1,tstep=0.5,curve)}\end{center}
On obtient :
\begin{center}{\tt [[0.760963063136,[1.30972370515]],[1.39334557388,[1.86417104853]]]}\end{center}


\subsection{Solution approch\'ee du syst\`eme v'=f(t,v) : {\tt
    odesolve}}\index{odesolve} \label{sec:odesolve}
\begin{itemize}
\item Si $v$ est un vecteur
de variables $[x1,..,xn]$ et si $f$ est donn\'e par
un vecteur  de coordonn\'ees les expressions
{\tt [e1,...,en]} d\'ependant de $t$ et des {\tt xi},
si la valeur initiale de $v$ en {\tt t0}
est le vecteur  de coordonn\'ees $[x10,...,xn0]$ alors l'instruction
\begin{center}
{\tt odesolve([e1,..,en],t=t0..t1,[x1,...,xn],
[x10,...,xn0])} 
\end{center}
renverra une valeur approch\'ee
de $v$ au temps $t=t1$. Le param\`etre
optionnel {\tt curve} permet d'avoir les valeurs 
interm\'ediaires sous forme d'une liste de couples $[t,v(t)$] calcul\'es.

Pour r\'esoudre le syst\`eme :\\
$x'(t)=-y(t)$\\
$y'(t)=x(t)$\\
On tape :
\begin{center}
{\tt odesolve([-y,x],t=0..pi,[x,y],[0,1])}\end{center}
On obtient :
\begin{center}{\tt  [-1.79045146764e-15,-1]}\end{center}

\item Si $f$ est une fonction de 
$\mathbb R \times \mathbb R^n$ dans $\mathbb R^n$.\\
{\tt odesolve(t0..t1,(t,v)->f(t,v),v0)} ou\\
{\tt odesolve(t0..t1,f,v0)}\\
calcule de fa\c{c}on approch\'ee la valeur de 
$v(t1)$ lorsque le vecteur  de coordonn\'ees $v(t)$
de $\mathbb R^n$ est la  solution de
$v'(t)=f(t,v(t))$ qui v\'erifie $ v(t0)=v0$.\\
 Le param\`etre
optionnel {\tt curve} permet d'avoir les valeurs 
interm\'ediaires sous forme d'une liste de couples $[t,v(t)$] calcul\'es.

Pour r\'esoudre le syst\`eme :\\
$x'(t)=-y(t)$\\
$y'(t)=x(t)$\\
On tape :
\begin{center}{\tt odesolve(0..pi,(t,v)->[-v[1],v[0]],[0,1])}\end{center}
Ou on d\'efinit la fonction :
\begin{center}{\tt f(t,v):=[-v[1],v[0]]}\end{center}
puis on tape :
\begin{center}{\tt odesolve(0..pi,f,[0,1])}\end{center}
On obtient :
\begin{center}{\tt  [-1.79045146764e-15,-1]}\end{center}
On d\'efinit la fonction :
\begin{center}{\tt f(t,v):=[-v[1],v[0]]}\end{center}
puis on tape :\\
\begin{center}{\tt odesolve(0..pi/4,f,[0,1],curve)}\end{center}
On obtient :
\begin{center}{\tt  [[0.1781,[-0.177159948386,0.984182072936]], [0.3781,[-0.369155338156,0.929367707805]], [0.5781,[-0.54643366953,0.837502384954]], [0.7781,[-0.701927414872,0.712248484906]]]}\end{center}
\end{itemize}

\section{R\'esolution d'\'equations avec {\tt nSolve}}\index{nSolve}
\noindent{\tt nSolve} permet de r\'esoudre num\'eriquement des \'equations non 
polynomiales : $f(x)=0$ pour $x \in ]a,b[$ ({\tt nSolve} est une commande 
compatible {\tt ti}).\\
Les param\`etres de {\tt nSsolve} sont {\tt f(x)=0}, {\tt x}, ou {\tt x=x0}
o\`u  {\tt x0} est un point de $]a,b[$.\\
On tape :
\begin{center}{\tt nSolve((cos(x))=x,x)}\end{center}
On obtient soit :
\begin{center}{\tt 0.739085133215}\end{center}
soit une solution complexe :
\begin{center}{\tt -9.10998745394-2.95017086176*i}\end{center}
En effet, si on ne pr\'ecise pas la valeur qui d\'emarre
l'it\'eration, {\tt Xcas}
 d\'emarre l'it\'eration avec une valeur al\'eatoire r\'eelle ou complexe.\\
On v\'erifie : \\
{\tt cos(-9.10998745394-2.95017086176*i)=-9.10998745394-2.95017086176*i}\\
On tape :
\begin{center}{\tt nSolve((cos(x))=x,x=0)}\end{center}
On obtient :
\begin{center}{\tt 0.739085133215}\end{center}

\section{R\'esolution d'\'equations avec {\tt fsolve}}\index{fsolve}
\noindent{\tt fsolve} permet de r\'esoudre num\'eriquement des 
\'equations non polynomiales : $f(x)=0$ pour $x \in ]a,b[$.\\
On peut utiliser diff\'erents algorithmes pour r\'esoudre num\'eriquement
$f(x)=0$ pour $x \in ]a,b[$.\\
Les param\`etres de {\tt fsolve} sont {\tt f(x)=0}, {\tt x}, {\tt a..b} ou 
selon les m\'ethodes un point {\tt x0} de $]a,b[$ et le nom de la m\'ethode 
utilis\'ee.\\  
Les diff\'erentes m\'ethodes sont d\'etaill\'ees ci dessous.

\subsection{{\tt fsolve} avec l'option {\tt bisection\_solver}}\index{bisection\_solver@{\sl bisection\_solver}|textbf}
 Cet algorithme de dichotomie est le plus simple mais aussi le plus lent. Il
permet d'encadrer le z\'ero d'une fonction sur un intervalle. \` A chaque it\'eration, on coupe l'intervalle en deux, on calcule la valeur au point milieu et,
le signe de la fonction en ce point nous dit sur quel morceau de l'intervalle on doit recommencer l'iteration.\\
On tape :
\begin{center}{\tt fsolve((cos(x))=x,x,-1.. 1,bisection\_solver)}\end{center}
On obtient :
\begin{center}{\tt [0.739085078239,0.739085137844]}\end{center}
On tape :
\begin{center}{\tt fsolve((cos(x))=x,x,0,bisection\_solver)}\end{center}
On obtient :
\begin{center}{\tt Bad Argument Type}\end{center}

\subsection{{\tt fsolve} avec l'option {\tt brent\_solver}}\index{brent\_solver@{\sl brent\_solver}|textbf}\index{color@{\sl color}}
La m\'ethode de Brent combine l'interpolation de $f$ et la dichotomie. 
%: on prend l'intersection de la courbe d'interpolaton passant par 3 points avec l'axe des $x$
Cette m\'ethode est rapide.\\
On tape :
\begin{center}{\tt fsolve((cos(x))=x,x,-1..1,brent\_solver)}\end{center}
On obtient :
\begin{center}{\tt [0.73908513321 5,0.739085133215]}\end{center}
On tape :
\begin{center}{\tt fsolve((cos(x))=x,x,0,brent\_solver)}\end{center}
On obtient :
\begin{center}{\tt Bad Argument Type}\end{center}

\subsection{{\tt fsolve} avec l'option {\tt falsepos\_solver}}\index{falsepos\_solver@{\sl falsepos\_solver}|textbf}
L'algorithme de "fausse position" est it\'eratif et est bas\'e sur 
l'interpolation lin\'eaire :
on calcule la valeur de $f$ au point d'intersection de la droite passant par 
les points d'affixe $a+i*f(a)$ et $b+i*f(b)$ avec l'axe des $x$. Cette valeur 
permet de savoir sur quelle partie de l'intervalle se 
trouve la racine, on peut ainsi recommencer l'iteration.\\
La convergence est lin\'eaire mais est plus rapide que la dichotomie (bisection).\\
 On tape :
\begin{center}{\tt fsolve((cos(x))=x,x,-1..1,falsepos\_solver)}\end{center}
On obtient :
\begin{center}{\tt [0.739085133215,0.739085133215]}\end{center}

\subsection{{\tt fsolve} avec l'option {\tt newton\_solver}}\index{newton\_solver@{\sl newton\_solver}|textbf}
La m\'ethode de  Newton est la m\'ethode standard. 
L'algorithme d\'emarre par une valeur initiale $x_0$, on cherche 
l'intersection $x_1$
de la tangente en $x_0$ au graphe de $f$, avec l'axe des $x$, puis \`a chaque 
it\'eration on recommence en prenant $x_1$ comme valeur $x_0$ :\\
La suite des $x_i$ est donc d\'efinie par :\\
$x_0=x_0$ et $x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}$\\
La m\'ethode de Newton quand elle converge, converge de fa\c{c}on quadratique pour les racines simples.\\
On tape :
\begin{center}{\tt fsolve(cos(x)=x,x,0,newton\_solver)}\end{center}
On obtient :
\begin{center}{\tt 0.739085133215}\end{center}

\subsection{{\tt fsolve} avec l'option {\tt secant\_solver}}\index{secant\_solver@{\sl secant\_solver}|textbf}
La m\'ethode de la s\'ecante est une m\'ethode simplifi\'ee de la m\'ethode de 
Newton.\\
Le calcul de $f'(x_n)$ se fait de fa\c{c}on approch\'ee : cela peut \^etre utile quand le calcul de la deriv\'ee est couteux.\\
On a :\\
$x_{i+1} = x_i-\frac{ f(x_i)}{f'_{est}}$ et
$f'_{est} = \frac{f(x_i) - f(x_{i-1})}{(x_i - x_{i-1})}$\\
Pour le calcul de $x_1$ on utilise la m\'ethode de Newton.\\
La convergence pour les racines simples est d'ordre $(1 + \sqrt5)/2=1.62 $.\\
On tape :
\begin{center}{\tt fsolve((cos(x))=x,x,-1..1,secant\_solver)}\end{center}
On obtient :
\begin{center}{\tt [0.739085078239,0.739085137844]}\end{center}
On tape :
\begin{center}{\tt fsolve((cos(x))=x,x,0,secant\_solver)}\end{center}
On obtient :
\begin{center}{\tt 0.739085133215}\end{center}

\subsection{{\tt fsolve} avec l'option {\tt steffenson\_solver}}\index{steffenson\_solver@{\sl steffenson\_solver}|textbf}
La m\'ethode de Steffenson est la plus rapide de toutes les m\'ethodes.\\
Elle combine la m\'ethode de Newton avec l'acc\'eleration  du "delta-deux"
d'Aitken : avec la m\'ethode de Newton on obtient la suite $x_i$ et 
l'acc\'eleration de convergence produit la suite :\\
$R_i =x_i - \frac{(x_{i+1} - x_i)^2}{ (x_{i+2} - 2 x_{i+1} + x_{i})}$\\
On tape :
\begin{center}{\tt fsolve(cos(x)=x,x,0,steffenson\_solver)}\end{center}
On obtient :
\begin{center}{\tt  0.739085133215}\end{center}
On tape :
\begin{center}{\tt fsolve(cos(x)=x,x,-1..1,steffenson\_solver)}\end{center}
On obtient :
\begin{center}{\tt  0.739085133215}\end{center}

\section{R\'esolution des syst\`emes d'\'equations avec {\tt fsolve}}\index{fsolve}
On propose six m\'ethodes pour r\'esoudre num\'eriquement des syst\`emes 
d'\'equations de la forme $f(x)=0$. \\
Trois  m\'ethodes  utilisent la matrice jacobienne $f'(x)$ et leurs noms se 
terminent par {\tt j\_solver}. \\
Les trois autres  m\'ethodes utilisent des m\'ethodes d'approximation de 
$f'(x)$ et utilisent uniquement $f$.\\
Les six m\'ethodes utilisent une it\'eration de type Newton :\\ 
$x_{n+1}=x_n-{f'(x_n)}^{-1}*f(x_n)$.\\
Les quatre m\'ethodes {\tt hybrid*\_solver} utilisent aussi une m\'ethode de 
descente de gradient lorsque l'it\'eration Newtonienne donne un pas trop 
grand.\\
 La longueur du pas est calcul\'e sans facteur d'\'echelle pour {\tt hybrid\_solver} et {\tt hybridj\_solver}
ou avec facteur d'echelle (calcul\'e \`a partir de $f'(x_n)$) pour 
{\tt hybrids\_solver} et {\tt hybridsj\_solver}
\subsection{{\tt fsolve} avec l'option {\tt dnewton\_solver}}\index{dnewton\_solver@{\sl dnewton\_solver}|textbf}
\noindent On tape :
\begin{center}{\tt fsolve([x\verb|^|2+y-2,x+y\verb|^|2-2],[x,y],[2,2],dnewton\_solver)}\end{center}
On obtient :
\begin{center}{\tt [1.0,1.0]}\end{center}
\subsection{{\tt fsolve} avec l'option {\tt hybrid\_solver}}\index{hybrid\_solver@{\sl hybrid\_solver}|textbf}
\noindent On tape :
\begin{center}{\tt fsolve([x\verb|^|2+y-2,x+y\verb|^|2-2],[x,y],[2,2],}\end{center}
\begin{center}{\tt cos(x)=x,x,0,hybrid\_solver)}\end{center}
On obtient :
\begin{center}{\tt [1.0,1.0]}\end{center}
\subsection{{\tt fsolve} avec l'option {\tt hybrids\_solver}}\index{hybrids\_solver@{\sl hybrids\_solver}|textbf}
\noindent On tape :
\begin{center}{\tt fsolve([x\verb|^|2+y-2,x+y\verb|^|2-2],[x,y],[2,2],hybrids\_solver)}\end{center}
On obtient :
\begin{center}{\tt [1.0,1.0]}\end{center}
\subsection{{\tt fsolve} avec l'option {\tt newtonj\_solver}}\index{newtonj\_solver@{\sl newtonj\_solver}|textbf}
\noindent On tape :
\begin{center}{\tt fsolve([x\verb|^|2+y-2,x+y\verb|^|2-2],[x,y],[0,0],newtonj\_solver)}\end{center}
On obtient :
\begin{center}{\tt [1.0,1.0]}\end{center}
\subsection{{\tt fsolve} avec l'option {\tt hybridj\_solver}}\index{hybridj\_solver@{\sl hybridj\_solver}|textbf}
\noindent On tape :
\begin{center}{\tt fsolve([x\verb|^|2+y-2,x+y\verb|^|2-2],[x,y],[2,2],hybridj\_solver)}\end{center}
On obtient :
\begin{center}{\tt  [1.0,1.0]}\end{center}
\subsection{{\tt fsolve} avec l'option {\tt hybridsj\_solver}}\index{hybridsj\_solver@{\sl hybridsj\_solver}|textbf}
\noindent On tape :
\begin{center}{\tt fsolve([x\verb|^|2+y-2,x+y\verb|^|2-2],[x,y],[2,2],hybridsj\_solver)}\end{center}
On obtient :
\begin{center}{\tt  [1.0,1.0]}\end{center}

\section{Racines num\'eriques d'un polyn\^ome : {\tt proot}}\index{proot}
\noindent{\tt proot} a comme argument un polyn\^ome ou le vecteur de 
composantes les coefficients d'un polyn\^ome (par ordre d\'ecroissant).\\
{\tt proot} renvoie un vecteur dont les composantes sont les racines 
num\'eriques non multiples du polyn\^ome.\\
Pour chercher les racines num\'eriques de $P(x)=x^3+1$, on tape :
\begin{center}{\tt proot([1,0,0,1]) }\end{center}
ou on tape :
\begin{center}{\tt proot(x\verb|^|3+1) }\end{center}
On obtient :
\begin{center}{\tt [0.5+0.866025403784*i,0.5-0.866025403784*i,-1.0]}\end{center}
On tape pour avoir les racines num\'eriques de $x^2-3$ :
\begin{center}{\tt proot([1,0,-3])}\end{center}
ou :
\begin{center}{\tt proot(x\verb|^|2-3)}\end{center}
On obtient :
\begin{center}{\tt [1.73205080757,-1.73205080757]}\end{center} 
%proot([1,0,-15,0,90,0,-270,0,405,0,-243])


\section{Factorisation num\'erique d'une matrice : {\tt cholesky qr lu svd}}
Pour avoir les factorisations num\'eriques de :\\
- Cholesky,\\
- QR,\\
- LU,\\
- svd,\\
 d'une matrice,  on se repotera \`a la section \ref{sec:factormatrice}.

\chapter{Les unit\'es et les constantes physiques}\label{sec:unit}
Les constantes physiques (sous-menu {\tt Constante}), les fonctions de 
conversion (sous-menu {\tt Unit\_convert}), les pr\'efixes  (sous-menu 
{\tt  Unit\_prefix}) et les unit\'es 
class\'ees par th\`eme, se trouvent dans le menu {\tt Phys}.
\section{Les unit\'es}
\subsection{La notation des unit\'es}\index{\_|textbf}
Les noms des unit\'es sont pr\'ec\'ed\'es du symbole {\tt \_} ("underscore").
Par exemple {\tt 2\_m} for 2 meters.\\
Vous pouvez mettre un pr\'efixe devant le nom d'une unit\'e qui indique une 
multiplication par une puissance de 10. Par exemple {\tt k}
ou {\tt K} pour kilo (indique une multiplication par $10^3$), {\tt D} pour 
d\'eca (indique une multiplication par $10$), {\tt d} pour 
d\'eci (indique une multiplication par $10^{-1}$) etc...\\ 
Lorsqu'on combine un nombre r\'eel avec des unit\'es on cr\'ee un 
objet-unit\'e.\\
On tape :
\begin{center}{\tt 10.5\_m}\end{center}
On obtient :
\begin{center}{\tt un objet-unit\'e valant 10.5 m\`etres}\end{center}
On tape :
\begin{center}{\tt 10.5\_km}\end{center}
On obtient :
\begin{center}{\tt un objet-unit\'e valant 10.5 kilom\`etres}\end{center}


\subsection{Les calculs avec des unit\'es}
On peut faire les op\'erations de base (+, -, *, /) avec des objets-unit\'es.\\
Dans les op\'erations, on peut utiliser des unit\'es diff\'erentes (mais 
compatibles pour + et -) et le r\'esultat sera exprim\'e selon l'unit\'e 
correspondante. Pour la multiplication et la division de deux unit\'es 
diff\'erentes {\tt \_u1} et {\tt \_u2} l'unit\'e r\'esultat s'\'ecrit 
{\tt \_(u1*u2)} ou {\tt \_(u1/u2)} (ne pas oublier les parenth\`eses!!!)\\ 
On peut aussi \'elever un  objet-unit\'e \`a une puissance 
enti\`ere : on obtient l'objet-unit\'e correspondant.\\
Il faut noter que lors d''une addition ou d'une soustraction, le r\'esultat 
sera exprim\'e selon l'unit\'e du premier terme de l'op\'eration.\\
On tape :
\begin{center}{\tt 1\_m+100\_cm}\end{center}
On obtient :
\begin{center}{\tt 2\_m}\end{center}
 On tape :
\begin{center}{\tt 100\_cm+1\_m}\end{center}
On obtient :
\begin{center}{\tt 200\_cm}\end{center}
On tape :
\begin{center}{\tt 1\_m*100\_cm}\end{center}
On obtient :
\begin{center}{\tt 1\_m\verb|^|2}\end{center}
On tape :
\begin{center}{\tt 3\_h10\_mn-1\_h 45\_mn}\end{center}
On obtient :
\begin{center}{\tt 1\_m\verb|^|2}\end{center}


\subsection{Les changements d'unit\'es en unit\'es MKSA : {\tt mksa}}\index{mksa}
\noindent{\tt mksa} permet d'obtenir la conversion d'un objet-unit\'e en 
un objet-unit\'e exprim\'e en unit\'es {\tt MKSA}.\\ 
\noindent On tape :
\begin{center}{\tt mksa(15\_C)}\end{center}
On obtient :
\begin{center}{\tt 15\_A*s}\end{center}

\subsection{Les conversions d'unit\'es : {\tt convert convertir}}\index{convert}\index{convertir}\label{sec:convertunit}
\noindent {\tt convert} permet de changer d'unit\'es : on met l'unit\'e de 
son choix comme deuxi\`eme param\`etre.\\
On tape :
\begin{center}{\tt convert(1\_h,\_s) }\end{center}
On obtient :
\begin{center}{\tt 3600\_s}\end{center}
On tape :
\begin{center}{\tt convert(3600\_s,\_h) }\end{center}
On obtient :
\begin{center}{\tt 1\_h}\end{center}
\subsection{Mise en facteur d'une unit\'e : {\tt ufactor}}\index{ufactor|textbf}
\noindent {\tt ufactor} permet de factoriser une unit\'e dans 
un objet-unit\'e : on obtient un objet-unit\'e multipli\'e par les unit\'es 
{\tt MKSA} restantes .\\
On tape :
\begin{center}{\tt ufactor(3\_J,\_W) }\end{center}
On obtient :
\begin{center}{\tt 3\_(W*s)}\end{center}
On tape :
\begin{center}{\tt ufactor(3\_W,\_J) }\end{center}
On obtient :
\begin{center}{\tt 3\_(J/s)}\end{center}
\subsection{Simplifier une unit\'e : {\tt usimplify}}\index{usimplify}
\noindent {\tt usimplify} permet de simplifier une unit\'e dans 
un objet-unit\'e.\\
On tape :
\begin{center}{\tt usimplify(3\_(W*s))}\end{center}
On obtient :
\begin{center}{\tt 3\_J}\end{center}
\subsection{Les pr\'efixes disponibles pour les noms d'unit\'es}
Vous pouvez mettre des pr\'efixes devant les noms d'unit\'es : chaque pr\'efixe
 correspond au nom de l'unit\'e mulipli\'e par une puissance de 10.\\
Voici les diff\'erents pr\'efixes disponibles :\\

\begin{tabular}{|l|c|r||l|c|r|}
\hline
Pr\'efixe & Nom & (*10\verb|^|) n & Pr\'efixe & Nom & (*10\verb|^|) n \\
\hline
Y & yota & 24 & d & d\'eci & -1\\
Z & z\^eta & 21 & c & cent & -2\\
E & exa & 18 & m & mili & -3\\
P & p\'eta & 15 & mu & micro &-6\\
T & t\'era & 12 & n & nano & -9\\
G & giga & 9 & p & pico & -12\\
M & m\'ega & 6 & f & femto & -15\\
k ou K & kilo & 3 & a & atto & -18\\
h ou H & hecto & 2 & z & zepto & -21\\
D & d\'eca & 1 & y & yocto &-24\\
\hline
\end{tabular}\\

{\bf Remarque}\\
Bien s\^ur vous ne pouvez pas utiliser le pr\'efixe avec une unit\'e  
int\'egr\'ee si la combinaison donne une autre unit\'e int\'egr\'ee.\\
Par exemple, 
{\tt 1\_a} est un are et {\tt 1\_Pa} est un pascal et non {\tt 10\verb|^|15\_a}.
 
\section{Les constantes physiques}
\subsection{La notation des constantes physiques}\index{\_}
Les noms des constantes physiques commencent et se terminent par le 
caract\`ere {\tt \_} ("underscore"). Il ne faut pas confondre les constantes 
physiques avec les constantes symboliques, par exemple, $e,\pi$ sont des 
constantes symboliques alors que $\_c\_,\_NA\_$ sont des constantes 
physiques.\\
On tape :
\begin{center}{\tt \_c\_ }\end{center}
On obtient la vitesse de la lumi\`ere dans le vide :
\begin{center}{\tt 299792458\_m*s\verb|^|-1}\end{center}
On tape :
\begin{center}{\tt \_NA\_ }\end{center}
On obtient le nombre d'Avogadro :
\begin{center}{\tt 6.0221367e23\_gmol\verb|^|-1}\end{center}
\subsection{Biblioth\`eque des  constantes physiques}
Vous trouverez certaines constantes physiques dans le menu {\tt Phys} 
sous-menu {\tt Constante} ou encore dans l'aide.\\ 
Pour avoir la valeur d'une constante il suffit de taper le nom de la constante 
 dans la ligne de commande de {\tt Xcas} et de valider (sans oublier de  mettre
 un {\tt \_} au d\'ebut et un {\tt \_} \`a la fin du nom).\\
Voici la biblioth\`eque des constantes :\\
\begin{tabular}{|l|l|}
\hline
Nom & Déscription\\
\hline
{\tt \_NA\_} &Nombre d'Avogadro\\
{\tt \_k\_} &Constante de Boltzmann\\
{\tt \_Vm\_} &Volume molaire\\
{\tt \_R\_} &Constante universelle des gaz\\
{\tt \_StdT\_} &Température standard\\
{\tt \_StdP\_} &Pression standard\\
{\tt \_sigma\_} &Constante de Stefan-Boltzmann\\
{\tt \_c\_} &Vitesse de la lumière\\
{\tt \_epsilon0\_} &Permitivité du vide\\
{\tt \_mu0\_} &Perméabilité du vide\\
{\tt \_g\_} &Accélération de la gravité\\
{\tt \_G\_} &Constante gravitationnelle\\
{\tt \_h\_} &Constante de Planck\\
{\tt \_hbar\_} &Constante de Dirac\\
{\tt \_q\_} &Charge de l'électron\\
{\tt \_me\_} &Masse élémentaire de l'électron\\
{\tt \_qme\_} &Rapport q/me (charge/masse de l'électron)\\
{\tt \_mp\_} &Masse élémentaire du proton\\
{\tt \_mpme\_} &Rapport mp/me (masse du proton/masse de l'électron)\\
{\tt \_alpha\_} &Constante de structure fine\\
{\tt \_phi\_} &Quantum de flux magn\'etique\\
{\tt \_F\_} &Constante de Faraday\\
{\tt \_Rinfinity\_} &Constante de Rydberg\\
{\tt \_a0\_} &Rayon de Bohr\\
{\tt \_muB\_} &Magnéton de Bohr\\
{\tt \_muN\_} &Magnéton nucléaire\\
{\tt \_lambda0\_} &Longueur d'onde du photon (ch/e)\\
{\tt \_f0\_} &Fréquence du photon (e/h)\\
{\tt \_lambdac\_} &Longueur d'onde du Compton\\
{\tt \_rad\_} &1 radian\\
{\tt \_twopi\_} &2*pi radians\\
{\tt \_angl\_} &Angle de 180 degrés\\
{\tt \_c3\_} &Constante de la loi de répartition de Wien\\
{\tt \_kq\_} & k/q (Boltzmann/charge de l'électron)\\
{\tt \_epsilon0q\_} &epsilon0/q (permitivité /charge de l'électron)\\
{\tt \_qepsilon0\_} &q*epsilon0 (charge de l'électron*permitivité)\\
{\tt \_epsilonsi\_} &Constante diélectrique du silicium\\
{\tt \_epsilonox\_} &Constante diélectrique du bioxyde de silicium\\
{\tt \_I0\_} &Intensité de référence\\
\hline
\end{tabular}

\chapter{Les fonctions de calcul formel}\label{sec:cas}
\section{Les constantes symboliques : {\tt e pi infinity i euler\_gamma}}\index{e}\index{pi}\index{euler\_gamma}
\index{i}\index{+infinity}\index{inf}\index{-infinity}\index{infinity}\index{-inf}\index{\%e}\index{\%i}\index{\%pi}
\noindent {\tt e} ou {\tt \%e} d\'esigne le nombre $\exp(1)$;\\ 
{\tt pi} ou {\tt \%pi} d\'esigne le nombre $\pi$.\\
{\tt infinity} d\'esigne $\infty$.\\
{\tt +infinity} ou {\tt inf} d\'esigne $+\infty$.\\
{\tt -infinity} ou {\tt -inf} d\'esigne $-\infty$.\\
{\tt i} ou {\tt \%i} d\'esigne le nombre complexe $i$.\\
{\tt euler\_gamma} d\'esigne la constante d'Euler. On a :\\
 {\tt euler\_gamma=limit(sum(1/k,k,1,n)-ln(n),n,+infinity)=}$\gamma$.
\section{Les bool\'eens}
\subsection{Les valeurs d'un bool\'een : {\tt true false}}\index{true}\index{false}\index{TRUE}\index{FALSE}
Un bool\'een a comme valeur {\tt true} ou {\tt false}.\\
On a les synonymes suivant :\\
{\tt true} ou {\tt TRUE} ou {\tt 1} et,\\
{\tt false} ou {\tt FALSE} ou {\tt 0}.\\
Les tests ou les conditions sont des fonctions bool\'eennes.
\subsection{Les tests : {\tt ==, !=, >, >=, <, <=}}\index{==}\index{>}\index{<}\index{>=}\index{<=}\index{\symbol{33}=}
{\tt ==, !=, >, >=, <, <=} sont des op\'erateurs infix\'es.\\
{\tt a==b} teste l'\'egalit\'e entre {\tt a} et {\tt b} et renvoie {\tt 1} si
 {\tt a} est \'egal \`a {\tt b} et {\tt 0} sinon.\\ 
{\tt a!=b} renvoie {\tt 1} si {\tt a} est diff\'erent de {\tt b} et {\tt 0} 
sinon.\\
 {\tt a>=b} renvoie {\tt 1} si {\tt a} est sup\'erieur ou \'egal \`a {\tt b} 
et {\tt 0} sinon.\\ 
{\tt a>b} renvoie {\tt 1} si {\tt a} est strictement sup\'erieur \`a {\tt b}
 et {\tt 0} sinon.\\ 
{\tt a<=b} renvoie {\tt 1} si {\tt a} est inf\'erieur ou \'egal \`a {\tt b} et 
{\tt 0} sinon.\\
{\tt a<b} renvoie {\tt 1} si {\tt a} est strictement inf\'erieur \`a {\tt b} 
et {\tt 0} sinon.\\ 
On tape pour d\'efinir la fonction bool\'eenne qui vaut {\tt true} sur 
$]0;+\infty[$ et qui vaut {\tt false} sur $]-\infty;0]$  :
\begin{center}{\tt f(x):=ifte(x>0,true,false)}\end{center}
On tape :
\begin{center}{\tt f(0)==0}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
{\bf Attention}\\
{\tt a=b} n'est pas un bool\'een !!!!\\
Pour tester l'\'egalit\'e entre {\tt a} et {\tt b} il faut mettre {\tt a==b}.

\subsection{Les op\'erateurs bool\'eens : {\tt or xor and not}}\index{or|textbf}\index{not|textbf}\index{and|textbf}\index{$\parallel$}\index{\&\&|textbf}\index{\symbol{33}=|textbf}\index{xor|textbf}
{\tt or} (ou {\tt ||}), {\tt xor}, {\tt and} (ou {\tt \&\&}) sont des op\'erateurs infix\'es.\\ 
{\tt not} est un op\'erateur pr\'efix\'e.\\ 
Soient {\tt a} et {\tt b} deux bool\'eens :\\
{\tt (a or b)} ou {\tt (a || b)} renvoie {\tt 0}  (ou {\tt false}) si {\tt a} 
et {\tt b} valent 0 et renvoie {\tt 1} (ou {\tt true}) sinon.\\ 
{\tt (a xor b)}  renvoie {\tt 1} si {\tt a} vaut 1 et {\tt b} vaut 0 ou si
{\tt a} vaut 0 et {\tt b} vaut 1  et renvoie 0 si {\tt a} et {\tt b} valent 0
 ou si  {\tt a} et {\tt b} valent 1 (c'est le "ou exclusif").\\ 
{\tt (a and b)} ou {\tt (a \&\& b)} renvoie {\tt 1} (ou {\tt true}) si {\tt a} 
et {\tt b} valent 1 et {\tt 0} (ou {\tt false}) sinon.\\
sinon.\\
{\tt not(a)} renvoie {\tt 1} (ou {\tt true}) si {\tt a} vaut 0 (ou 
{\tt false}), et {\tt 0} (ou {\tt false})  si {\tt a} vaut 1 (ou 
{\tt true}).\\ 
On tape :
\begin{center}{\tt 1>=0 or 1<0}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
On tape :
\begin{center}{\tt 1>=0 xor 1>0}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
On tape :
\begin{center}{\tt 1>=0 and 1>0}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
On tape :
\begin{center}{\tt not(0==0)}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}

\subsection{Transformer une expression en liste : {\tt exp2list}}\index{exp2list}
\noindent{\tt exp2list} renvoie la liste {\tt [expr0,expr1]} lorsque l'argument
est {\tt (var=expr0) or (var=expr1)}.\\
{\tt exp2list} est utile en mode TI pour utiliser la réponse renvoyée par 
{\tt solve}.\\
On tape :
\begin{center}{\tt exp2list((x=2) or (x=0))}\end{center}
On obtient :
\begin{center}{\tt [2,0]}\end{center}
On tape :
\begin{center}{\tt exp2list((x>0) or (x<2))}\end{center}
On obtient :
\begin{center}{\tt [0,2]}\end{center}
En mode TI on tape :
\begin{center}{\tt exp2list(solve((x-1)*(x-2)))}\end{center}
On obtient :
\begin{center}{\tt [1,2]}\end{center}
\section{\'Evaluation des bool\'eens : {\tt evalb}}\index{evalb}
\noindent On peut \'evaluer une expression bool\'eenne gr\^ace \`a la 
commande {\tt evalb} cette commande sert surtout pour la compatibilit\'e Maple
car en {\tt Xcas}, les bool\'eens sont toujours \'evalu\'es.\\
On tape :
\begin{center}{\tt evalb(sqrt(2)>1.41)}\end{center}
Ou on tape :
\begin{center}{\tt sqrt(2)>1.41}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
On tape :
\begin{center}{\tt evalb(sqrt(2)>1.42)}\end{center}
Ou on tape :
\begin{center}{\tt sqrt(2)>1.42}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}

\section{Les op\'erateurs bit \`a bit}
\subsection{Les op\'erateurs {\tt bitor, bitxor, bitand}}\index{bitor|textbf}\index{bitxor|textbf}\index{bitand|textbf}
Les entiers peuvent etre entrés avec la notation 0x... en hexadécimal
par exemple 0x1f représente 16+15=31 en décimal. On peut faire afficher
les entiers en hexadécimal (bouton de la ligne d'\'etat du cas avec le
bouton  {\tt Base (Entiers)}).\\
{\tt bitor} est le {\tt ou} logique inclusif bit à bit.\\
On tape :
\begin{center}{\tt bitor(0x12,0x38)}\end{center}
ou on tape :
\begin{center}{\tt bitor(18,56)}\end{center}
On obtient :
\begin{center}{\tt 58}\end{center}
en effet :\\
{\tt 18} s'\'ecrit {\tt 0x12} en base 16 et {\tt 0b010010} en base 2,\\
{\tt 56} s'\'ecrit {\tt 0x38} en base 16 et {\tt 0b111000} en base 2,\\
{\tt bitor(18,56)} s'\'ecrit {\tt 0b111010} en base 2 et donc vaut {\tt 58}.\\

{\tt bitxor} est le {\tt ou} logique exclusif bit à bit.\\
On tape :
\begin{center}{\tt bitxor(0x12,0x38)}\end{center}
ou on tape :
\begin{center}{\tt bitxor(18,56)}\end{center}
On obtient :
\begin{center}{\tt 42}\end{center}
en effet :\\
{\tt 18} s'\'ecrit {\tt 0x12} en base 16 et {\tt 0b010010} en base 2,\\
{\tt 56} s'\'ecrit {\tt 0x38} en base 16 et {\tt 0b111000} en base 2,\\
{\tt bitxor(18,56)} s'\'ecrit {\tt 0b101010} en base 2 et donc vaut {\tt 42}.\\

{\tt bitand} est le {\tt et} logique bit à bit.\\
On tape :
\begin{center}{\tt bitand(0x12,0x38)}\end{center}
ou on tape :
\begin{center}{\tt bitand(18,56)}\end{center}
On obtient :
\begin{center}{\tt 16}\end{center}
en effet :\\
{\tt 18} s'\'ecrit {\tt 0x12} en base 16 et {\tt 0b010010} en base 2,\\
{\tt 56} s'\'ecrit {\tt 0x38} en base 16 et {\tt 0b111000} en base 2,\\
{\tt bitand(18,56)} s'\'ecrit {\tt 0b010000} en base 2 et donc vaut
{\tt 16}.

\subsection{Distance de Hamming bit à bit : {\tt hamdist}}\index{hamdist|textbf}
La distance de Hamming bit à bit est la somme des valeurs absolues
des diff\'erences bit à bit des 2 nombres c'est-à-dire le nombre de bits 
différents.\\
On tape :
\begin{center}{\tt hamdist(0x12,0x38)}\end{center}
ou on tape 
\begin{center}{\tt hamdist(18,56)}\end{center}
On obtient :
\begin{center}{\tt 3}\end{center}
en effet :\\
{\tt 18} s'\'ecrit {\tt 0x12} en base 16 et {\tt 0b010010} en base 2,\\
{\tt 56} s'\'ecrit {\tt 0x38} en base 16 et {\tt 0b111000} en base 2,\\
{\tt hamdist(18,56)} vaut {\tt 1+0+1+0+1+0} et donc vaut {\tt 3}.

\section{Les cha\^ines de caract\`eres}
\subsection{\'Ecriture d'une cha\^ine ou d'un caract\`ere : {\tt "}}\index{\symbol{34}|textbf}
Les cha\^ines de caract\`eres s'\'ecrivent en utilisant {\tt "} (guillemets) 
comme d\'elimiteurs.\\
 Un caract\`ere est une cha\^ine ayant un caract\`ere;  en effet les
 d\'elimiteurs {\tt '} ou ({\tt quote}) servent \`a pr\'eciser que l'on ne 
doit pas \'evaluer la variable mise entre les quotes\index{quote}.\\
Exemple :\\
{\tt "a"} est un caract\`ere mais {\tt 'a'} ou {\tt quote(a)} d\'esigne la variable {\tt a} non \'evalu\'ee.\\
Les caract\`eres d'une cha\^ine sont rep\'er\'es par un indice (comme pour les listes).\\
Exemple :\\
On tape :
\begin{center}{\tt "bonjour"[2]}\end{center}
On obtient :
\begin{center}{\tt "n"}\end{center}
{\bf Remarque}\\
Lorsque l'on tape une cha\^ine de caract\`eres dans la ligne de commande, 
cela  g\'en\`ere un \'echo en r\'eponse.\\
Exemple :\\
On tape :
\begin{center}{\tt "bonjour"}\end{center}
On a {\tt "bonjour"} s'inscrit comme question et on a {\tt bonjour} comme 
r\'eponse.\\
On tape :
\begin{center}{\tt "bonjour"+", ca va?"}\end{center}
On a {\tt "bonjour"+", ca va?"} s'inscrit comme question et en r\'eponse.\\ 
On obtient :
\begin{center}{\tt "bonjour, ca va?"}\end{center}

\subsection{D\'ebut milieu et fin d'une cha\^ine : {\tt head mid tail}}\index{head|textbf} \index{tail|textbf}\index{mid}
\begin{itemize}
\item {\tt head(s)} renvoie le premier caract\`ere de la cha\^ine 
{\tt s}.\\ 
 On tape :
\begin{center}{\tt head("bonjour")}\end{center}
On obtient :
\begin{center}{\tt "b"}\end{center}
\item {\tt mid(s,p,q)} renvoie un morceau de longueur {\tt q} de la cha\^ine {\tt s} 
commen\c{c}ant au caract\`ere d'indice {\tt p} (attention! les indices 
commencent \`a 0).\\
 On tape :
\begin{center}{\tt mid("bonjour",2,4)}\end{center}
On obtient :
\begin{center}{\tt "njou"}\end{center}
\item {\tt tail(s)} renvoie la cha\^ine {\tt s} priv\'ee de son premier 
caract\`ere.\\ 
On tape :
\begin{center}{\tt tail("bonjour")}\end{center}
On obtient :
\begin{center}{\tt "onjour"}\end{center}
\end{itemize}

\subsection{Concat\'enation d'une suite de mots : {\tt cumSum}}\index{cumSum}
\noindent{\tt cumSum} permet de faire la concat\'enation d'une liste de
 cha\^ines.\\
{\tt cumSum} a comme argument une liste de cha\^ines.\\
{\tt cumSum} renvoie  une liste de cha\^ines, l'\'el\'ement d'indice $k$ 
\'etant obtenu en concat\'enant la cha\^ine d'indice $k$ avec les cha\^ines 
la pr\'ec\'edant (i.e celles d'indice $k-1$ .. 0).\\
 On tape :
\begin{center}{\tt cumSum("jour","bon","Madame ")}\end{center}
On obtient :
\begin{center}{\tt "jour","bonjour","Madame bonjour"}\end{center}

\subsection{Le code ASCII d'un caract\`ere : {\tt ord}}\index{ord|textbf}
\noindent {\tt ord} a pour argument une cha\^ine {\tt s} (resp une liste 
{\tt l} de cha\^ines.\\
{\tt ord} renvoie le code ASCII du premier caract\`ere de {\tt s}
cha\^ine ou la liste des  codes ASCII des premiers caract\`eres des 
\'el\'ements de {\tt l}.\\
On tape :
\begin{center}{\tt ord("a")}\end{center}
On obtient :
\begin{center}{\tt 97}\end{center}
On tape :
\begin{center}{\tt ord("abcd")}\end{center}
On obtient :
\begin{center}{\tt 97}\end{center} 
On tape :
\begin{center}{\tt ord(["abcd","cde"])}\end{center}
On obtient :
\begin{center}{\tt [97,99]}\end{center} 
On tape :
\begin{center}{\tt ord(["a","b","c","d"])}\end{center}
On obtient :
\begin{center}{\tt [97,98,99,100]}\end{center} 

\subsection{Le code ASCII d'une cha\^ine : {\tt asc}}\index{asc}
\noindent {\tt asc}  a pour argument une cha\^ine {\tt s}.\\
{\tt asc} renvoie la liste des codes ASCII des caract\`eres de {\tt s}.\\
On tape :
\begin{center}{\tt asc("abcd")}\end{center}
On obtient :
\begin{center}{\tt [97,98,99,100]}\end{center} 
On tape :
\begin{center}{\tt asc("a")}\end{center}
On obtient :
\begin{center}{\tt [97]}\end{center}

\subsection{La cha\^ine associ\'ee \`a une suite d'ASCII : {\tt char}}\index{char}
\noindent {\tt char} a pour argument une liste {\tt l} des code ASCII.\\
{\tt char} renvoie la cha\^ine dont les caract\`eres ont pour codes 
ASCII les \'el\'ements de la liste {\tt l}.\\
On tape :
\begin{center}{\tt char([97,98,99,100])}\end{center}
On obtient :
\begin{center}{\tt "abcd"}\end{center} 
On tape :
\begin{center}{\tt char(97)}\end{center}
On obtient :
\begin{center}{\tt "a"}\end{center}
On tape :
\begin{center}{\tt char(353)}\end{center}
On obtient :
\begin{center}{\tt "a"}\end{center}
En effet 353-256=97.
\subsection{Rep\'erer un caract\`ere dans une cha\^ine : {\tt inString}}\index{inString}
\noindent {\tt inString} a deux param\`etres : une cha\^ine de caract\`eres 
{\tt S} et un caract\`ere {\tt c}.\\
{\tt inString} est une fonction qui teste si le caract\`ere {\tt c}
 est dans la cha\^ine de caract\`eres {\tt S}.\\
 {\tt inString}  renvoie  {\tt -1} si {\tt c} n'est
 pas dans {\tt S} et,\\ 
sinon renvoie {\tt "l'indice de sa premi\`ere apparition"}.\\
On tape :
\begin{center}{\tt inString("abcded","d")}\end{center}
On obtient :
\begin{center}{\tt  3}\end{center}
On tape :
\begin{center}{\tt inString("abcd","e")}\end{center}
On obtient :
\begin{center}{\tt  -1}\end{center}

\subsection{Concat\'ener des objets en une cha\^ine : {\tt cat}}\index{cat|textbf}
\noindent {\tt cat} a comme param\`etre une s\'equence d'objets.\\ 
{\tt cat} concat\'ene ces objets en une cha\^ine de caract\`eres.\\
On tape :
\begin{center}{\tt cat("abcd",3,"d")}\end{center}
On obtient :
\begin{center}{\tt  "abcd3d"}\end{center}
On tape :
\begin{center}{\tt c:=5}\end{center}
\begin{center}{\tt cat("abcd",c,"e")}\end{center}
On obtient :
\begin{center}{\tt  "abcd5e"}\end{center}
On tape :
\begin{center}{\tt purge(c)}\end{center}
\begin{center}{\tt cat(15,c,3)}\end{center}
On obtient :
\begin{center}{\tt  "15c3"}\end{center}

\subsection{Concat\'ener des objets en une cha\^ine : {\tt +}}\index{+}
\noindent {\tt +} est un op\'erateur pr\'efix\'e ou infix\'e qui a comme 
param\`etre une s\'equence d'objets comprenant une cha\^ine de caract\`eres.\\ 
{\tt +} concat\'ene ces objets en une cha\^ine de caract\`eres.\\
{\bf Attention}\\
Quand l' op\'erateur {\tt +} est pr\'efix\'e il faut le quot\'e c'est \` a dire
l'\'ecrire {\tt '+'}

On tape :
\begin{center}{\tt '+'("abcd",3,"d")}\end{center}
Ou on tape :
\begin{center}{\tt "abcd"+3+"d"}\end{center}
On obtient :
\begin{center}{\tt  "abcd3d"}\end{center}
On tape :
\begin{center}{\tt c:=5}\end{center}
On tape ensuite:
\begin{center}{\tt "abcd"+c+"e"}\end{center}
Ou on tape ensuite:
\begin{center}{\tt '+'("abcd",c,"d")}\end{center}
On obtient :
\begin{center}{\tt  "abcd5e"}\end{center}
\subsection{Pour transformer un nombre entier en une cha\^ine : {\tt cat +}}\index{+}\index{cat}
\noindent {\tt +} ou {\tt cat} permet de transformer un nombre entier en 
une cha\^ine de caract\`eres.\\
On tape :
\begin{center}{\tt " "+123}\end{center}
Ou on tape :
\begin{center}{\tt cat(123)}\end{center}
On obtient :
\begin{center}{\tt  "123"}\end{center}

\subsection{Pour transformer une cha\^ine en un nombre : {\tt expr}}\index{expr|textbf}\label{sec:expr1}
Voici , selon la cha\^ine, les transformations que fait {\tt expr} :
\begin{itemize}
\item {\tt expr} permet de transformer une cha\^ine de chiffres ou lettres
en un nombre entier ayant comme \'ecriture en base 8,ou 10 ou 16 cette cha\^ine
 de chiffres. Il faut bien s\^ur que l'\'ecriture soit valide et repr\'esente 
un nombre entier dans la base donn\'ee : toutefois {\tt expr("019")} renvoie
le nombre d\'ecimale {\tt 19.0} (voir aussi \ref{sec:expr2}.\\
{\tt Attention}\\
Si la cha\^ine commence par {\tt 0x}, {\tt expr} transforme cette cha\^ine en 
le nombre entier \'ecrit en base 16, sinon,\\
si la cha\^ine commence par 0, {\tt expr} transforme cette cha\^ine en 
le nombre entier \'ecrit en base 8 et sinon\\
{\tt expr} transforme cette cha\^ine en le nombre entier \'ecrit en base 10.\\
On tape :
\begin{center}{\tt expr("123")}\end{center}
On obtient :
\begin{center}{\tt  123}\end{center}
On tape :
\begin{center}{\tt expr("0123")}\end{center}
On obtient :
\begin{center}{\tt  83}\end{center}
En effet : $1*8^2+2*8+3=83$
On tape :
\begin{center}{\tt expr("0x12f")}\end{center}
On obtient :
\begin{center}{\tt 303}\end{center}
En effet $1*16^2+2*16+15=303$
\item  {\tt expr} permet aussi de transformer une cha\^ine de chiffres 
repr\'esentant un nombre d\'ecimal en ce nombre.\\
On tape :
\begin{center}{\tt expr("123.4567")}\end{center}
On obtient :
\begin{center}{\tt  123.4567}\end{center}
On tape :
\begin{center}{\tt expr("123e-5")}\end{center}
On obtient :
\begin{center}{\tt 0.00123}\end{center}
\item  {\tt expr}  permet aussi de transformer une cha\^ine de caract\`eres 
pouvant \^etre interpr\'et\'ee comme une commande en une commande.\\
On tape :
\begin{center}{\tt expr("a:=1")}\end{center}
On obtient :
\begin{center}{\tt 1 et, la variable a contient 1}\end{center}
\end{itemize}

\section{\'Ecriture en base b d'un entier}\label{sec:convertbase}
\subsection{Transformer un entier en la liste des coefficients de son \'ecriture en base b : {\tt convert convertir}}\index{convert}\index{convertir}\index{base@{\sl base}|textbf}
{\tt convert} ou {\tt convertir} permet de faire diff\'erente conversions selon
l'option choisie par le deuxi\`eme argument.
Pour convertir un entier {\tt n} en son \'ecriture en base {\tt b}, cette 
option est {\tt base}. Les arguments de {\tt convert} ou {\tt convertir} sont 
alors un entier {\tt n}, {\tt base} et la valeur de la base {\tt b}.\\
{\tt convert} ou {\tt convertir} renvoie la liste des coefficients de 
l'\'ecriture en base {\tt b} de l'entier {\tt n}.\\
On tape :
\begin{center}{\tt convert(123,base,8)}\end{center}
On obtient :
\begin{center}{\tt [3,7,1]}\end{center}
On v\'erifie en tapant {\tt expr("0173")} ou  {\tt horner(revlist([3,7,1]),8)}
ou {\tt convert([3,7,1],base,8)} et on obtient bien {\tt 123}\\
On tape :
\begin{center}{\tt convert(142,base,12)}\end{center}
On obtient :
\begin{center}{\tt [10,11]}\end{center}

\subsection{Transformer la liste des coefficients d' une \'ecriture en base b en un entier : {\tt convert convertir}}\index{convert}\index{convertir}
\noindent{\tt convert} ou {\tt convertir} permet de faire diff\'erentes 
conversions selon l'option choisie par le deuxi\`eme argument.\\
Pour convertir la liste des coefficients d' une \'ecriture en base {\tt b} d'un
entier {\tt n} en l'entier {\tt n}, cette option est {\tt base}. Les arguments 
de {\tt convert} ou {\tt convertir} sont 
alors une list {\tt l}, {\tt base} et la valeur de la base {\tt b}.\\
{\tt convert} ou {\tt convertir} renvoie l'entier {\tt n}.\\ 
On tape :
\begin{center}{\tt convert([3,7,1],base,8)}\end{center}
Ou
\begin{center}{\tt horner(revlist([3,7,1]),8)}\end{center}
On obtient :
\begin{center}{\tt 123}\end{center}
On tape :
\begin{center}{\tt convert([10,11],base,12)}\end{center}
Ou
\begin{center}{\tt horner(revlist([10,11]),12)}\end{center}
On obtient :
\begin{center}{\tt 142}\end{center}

\section{Les entiers (et les entiers de Gauss)}
Dans tout ce paragraphe, on peut utiliser des entiers de Gauss (nombres 
complexes de la forme $a+i*b$ avec $a$ et $b$ dans $\mathbb Z$), à la place
 des entiers dans les diff\'erentes fonctions. 
\subsection{La factorielle : {\tt factorial}}\index{factorial}
{\tt Xcas} peut g\'erer des nombres entiers en pr\'ecision infinie.\\ 
On tape :
\begin{center}{\tt factorial(100)}\end{center}
On obtient :
\begin{verbatim}
   9332621544394415268169923885626670049071596826438162
   1468592963895217599993229915608941463976156518286253
   697920827223758251185210916864000000000000000000000000
\end{verbatim}
\subsection{Le PGCD : {\tt gcd igcd}}\index{gcd|textbf}\index{igcd|textbf}\label{sec:igcd}
\noindent{\tt gcd} ou {\tt igcd} d\'esigne le PGCD de deux (ou de plusieurs) 
entiers ou rationnels (pour les polyn\^omes voir alors \ref{sec:gcd}).\\ 
On tape :
\begin{center}{\tt gcd(18,15) }\end{center}
ou
\begin{center}{\tt igcd(18,15) }\end{center}
On obtient :
\begin{center}{\tt 3}\end{center} 
On tape :
\begin{center}{\tt igcd(15/7,50/9)}\end{center}
ou
\begin{center}{\tt gcd(15/7,50/9)}\end{center}
On obtient :
\begin{center}{\tt 5/63}\end{center}
en effet $\frac{15}{7}=27\frac{5}{63}$ et $\frac{50}{9}=70\frac{5}{63}$.\\ 
On tape :
\begin{center}{\tt  gcd(18,15,21,36)}\end{center}
ou
\begin{center}{\tt  igcd(18,15,21,36)}\end{center}
On obtient :
\begin{center}{\tt 3}\end{center}
On tape :
\begin{center}{\tt  gcd([18,15,21,36])}\end{center}
On obtient :
\begin{center}{\tt 3}\end{center}
On peut aussi mettre comme param\`etres deux listes de m\^eme longueur (ou une 
matrice ayant 2 lignes), dans ce 
cas {\tt  gcd} renvoie le PGCD des \'el\'ements de m\^eme indice (ou d'une 
m\^eme colonne).
On tape :
\begin{center}{\tt  gcd([6,10,12],[21,5,8])}\end{center}
Ou on tape :
\begin{center}{\tt  gcd([[6,10,12],[21,5,8]])}\end{center}
On obtient :
\begin{center}{\tt [3,5,4]}\end{center}
On peut aussi utiliser la librairie Pari qui a une fonction {\tt gcd} plus 
g\'en\'erale car  {\tt pari("gcd",x,y)} fonctionne aussi lorsque $x$ et $y$ 
sont rationnels et aussi lorsque $x$ et $y$ sont des listes ou des matrices qui
n'ont pas forc\'ement la m\^eme dimension (c'est alors le type de $y$ qui donne
le type du r\'esultat.\\
On tape :
\begin{center}{\tt pari("gcd",5/7,50/9)}\end{center}
On obtient :
\begin{center}{\tt 5/63}\end{center} 
car $\frac{5}{7}= 9*\frac{5}{63}$ et $\frac{50}{9}=70*\frac{5}{63}$
On tape :
\begin{center}{\tt pari("gcd", [4,3],[20,30,50,75]))}\end{center}
On obtient une matrice $A$ de dimension $4\times 2$, c'est aussi une liste de 
m\^eme longueur que $y$ i.e. de longueur 4:
\begin{center}{\tt [[4,1],[2,3],[2,1],[1,3]]}\end{center} 
car gcd$(4,20)=4$, gcd$(3,20)=1$, gcd$(4,30)=2$, gcd$(3,30)=3$...\\
Pour obtenir ce r\'esultat avec {\tt Xcas}, on doit taper 2 instructions :
\begin{center}{\tt gcd( [4,4,4,4],[20,30,50,75])}\end{center}
On obtient la premi\`ere colonne de $A$:
\begin{center}{\tt [4,2,2,1]}\end{center} 
et on tape 
\begin{center}{\tt gcd( [3,3,3,3],[20,30,50,75])}\end{center}
On obtient la deuxi\`eme colonne de $A$ :
\begin{center}{\tt [1,3,1,3] }\end{center} :
On tape :
\begin{center}{\tt diag(pari("gcd", [5,4,3,2],[20,30,50,75])))}\end{center}
ou on tape :
\begin{center}{\tt gcd([5,4,3,2],[20,30,50,75])}\end{center}
On obtient :
\begin{center}{\tt [5,2,1,1]}\end{center} 
{\bf Un exemple}\\
D\'eterminer le pgcd de $4n+1$ et de $5n+3$ quand $n \in \mathbb N$.\\
On d\'efinit :\\
\begin{center}{\tt  f(n):=gcd(4*n+1,5*n+3)}\end{center}
Puis on tape le programme {\tt essai(n)} qui renvoie pour $j=-n$ \`a $n$ la 
liste des valeurs de $j,a$ lorsque le pgcd de $4j+1$ et $5j+3$ est \'egal \`a
$a\neq 1$ :
\begin{verbatim}
  essai(n):={
    local j,a,L; 
    L:=NULL;
    for (j:=-n;j<n;j++) {
      a:=f(j);
      if (a!=1) {
        L:=L,[j,a];
      } 
    }
    return L;
  }
\end{verbatim}
Puis on tape :\\
\begin{center}{\tt essai(20)}\end{center}
On obtient :
\begin{center}{\tt [-16,7],[-9,7],[-2,7],[5,7],[12,7],[19,7]}\end{center}
On voit donc que $4n+1$ et $5n+3$ sont soit premiers entre eux soit leur pgcd 
 vaut 7 lorsque $n\in [-16,-9,-2,5,12,19]$ c'est \`a dire lorsque $n=5+k*7$.\\
 On doit donc montrer que :\\
si $n!=5+k*7$ pour $k \in \mathbb Z$, $4n+1$ et $5n+3$ sont premiers entre eux,
et\\
si $n=5+k*7$ pour $k \in \mathbb Z$, $4n+1$ et $5n+3$ ont 7 comme pgcd.
\subsection{Le PGCD : {\tt Gcd}}\index{Gcd|textbf}
\noindent{\tt Gcd} est la forme inerte de {\tt gcd}. Voir la section
\ref{sec:Gcd} sur les polynômes à coefficients dans $\Z/p\Z$ 
pour utiliser cette instruction.\\
On tape :
\begin{center}{\tt Gcd(18,15)}\end{center}
On obtient :
\begin{center}{\tt gcd(18,15)}\end{center}
\subsection{Le PGCD d'une liste d'entiers : {\tt lgcd}}\index{lgcd}\index{pari}
\noindent{\tt lgcd} d\'esigne le PGCD des \'el\'ements d'une liste d'entiers 
(ou d'une liste de  polyn\^omes).\\ 
On tape :
\begin{center}{\tt lgcd([18,15,21,36])}\end{center}
On obtient :
\begin{center}{\tt 3}\end{center} 
On peut aussi utiliser la librairie Pari et taper :
\begin{center}{\tt pari("content",([18,15,21,36])}\end{center}
On obtient :
\begin{center}{\tt 3}\end{center} 
{\bf Attention}\\
On ne peut pas  mettre comme param\`etres deux listes de m\^eme longueur.

\subsection{Le PPCM : {\tt lcm}}\index{lcm|textbf}\label{sec:ilcm}
\noindent {\tt lcm} d\'esigne le PPCM de deux entiers ou de deux rationnels
(ou deux polyn\^omes voir alors \ref{sec:lcm}).\\
On tape :
\begin{center}{\tt lcm(18,15) }\end{center}
On obtient :
\begin{center}{\tt 90}\end{center}
On tape :
\begin{center}{\tt lcm(15/7,50/9)}\end{center}
On obtient :
\begin{center}{\tt 150}\end{center}
en effet {\tt gcd(15/7,50/9)=5/63} et $\frac{15}{7}*\frac{50}{9}=150*\frac{5}{63}$
\subsection{Factoriser un entier : {\tt ifactor factoriser\_entier}}\index{ifactor}\index{factoriser\_entier}
\noindent{\tt ifactor} a comme param\`etre un entier.\\
{\tt ifactor} d\'ecompose cet entier en produit de facteurs premiers.\\
On tape :
\begin{center}{\tt ifactor(90) }\end{center}
On obtient :
\begin{center}{\tt 2*3\verb|^|2*5}\end{center}
On tape :
\begin{center}{\tt ifactor(-90) }\end{center}
On obtient :
\begin{center}{\tt (-1)*2*3\verb|^|2*5}\end{center}

\subsection{Liste des facteurs d'un entier : {\tt ifactors facteurs\_premiers}}\index{ifactors}\index{facteurs\_premiers}
\noindent{\tt ifactors} a comme param\`etre un entier (ou une liste d'entiers).\\
{\tt ifactors} effectue aussi la d\'ecomposition de cet entier (ou des entiers 
de la liste) en produit de facteurs premiers, mais le r\'esultat est donn\'e 
sous la forme d'une liste (ou d'une liste de listes), form\'ee par les 
diviseurs premiers et par leur multiplicit\'e.\\
On tape :
\begin{center}{\tt ifactors(90) }\end{center}
On obtient :
\begin{center}{\tt [2,1,3,2,5,1] }\end{center}
On tape :
\begin{center}{\tt ifactors(-90) }\end{center}
On obtient :
\begin{center}{\tt [-1,1,2,1,3,2,5,1] }\end{center}
On tape :
\begin{center}{\tt ifactor([36,52]) }\end{center}
On obtient :
\begin{center}{\tt [[2,2,3,2],[2,2,13,1]]}\end{center}
\subsection{Matrice des facteurs d'un entier : {\tt maple\_ifactors}}\index{maple\_ifactors}
\noindent{\tt maple\_ifactors} a comme param\`etre un entier $n$ 
(ou une liste d'entiers).\\
{\tt maple\_ifactors} effectue aussi la d\'ecomposition de cet entier (ou des 
entiers de la liste) en produit de facteurs premiers, mais selon la syntaxe 
{\tt Maple} : le r\'esultat est donn\'e 
sous la forme d'une liste, form\'ee de +1 ou -1 (pour le signe) et d'une 
matrice ayant 2 colonnes et dont les lignes sont form\'ees des diviseurs 
premiers de $n$ et de leur multiplicit\'es (ou d'une liste de listes...).\\
On tape :
\begin{center}{\tt maple\_ifactors(90) }\end{center}
On obtient :
\begin{center}{\tt [1,[[2,1],[3,2],[5,1]]]}\end{center}
On tape :
\begin{center}{\tt maple\_ifactor([36,52]) }\end{center}
On obtient :
\begin{center}{\tt [[1,[[2,2],[3,2]]],[1,[[2,2],[13,1]]]]}\end{center}
\subsection{Liste des diviseurs d'un entier : {\tt idivis divisors}} \index{idivis}\index{divisors}
\noindent{\tt idivis} ou {\tt divisors} donne la liste des diviseurs d'un 
entier (ou d'une liste 
d'entiers).\\
On tape :
\begin{center}{\tt idivis(36) }\end{center}
On obtient :
\begin{center}{\tt  [1,2,4,3,6,12,9,18,36] }\end{center}
On tape :
\begin{center}{\tt idivis([36,22]) }\end{center}
On obtient :
\begin{center}{\tt [[1,2,4,3,6,12,9,18,36],[1,2,11,22]]}\end{center}
%\item Les diff\'erentes commandes arithm\'etiques enti\`eres
\subsection{Quotient entier infix\'e de la division euclidienne : {\tt div}}\index{div}
\noindent{\tt div} est un op\'erateur infix\'e qui d\'esigne le quotient entier
$q$ de la division euclidienne des deux entiers ou de deux entiers de Gauss $a$
et $b$ donn\'es en argument
($a=b*q+r$ avec $0\leq r< b$).\\ 
On tape :
\begin{center}{\tt 148 div 5}\end{center}
On obtient :
\begin{center}{\tt 29}\end{center}
On tape :
\begin{center}{\tt factorial(148) div (factorial(145)+2)}\end{center}
On obtient :
\begin{center}{\tt 3176375}\end{center}
\begin{center}{\tt factorial(148) div factorial(145)+2}\end{center}
On obtient :
\begin{center}{\tt 3176378}\end{center}
On tape :
\begin{center}{\tt (25+12*i) div (5+7*i)}\end{center}
On obtient :
\begin{center}{\tt 3-2*i}\end{center}

\subsection{Quotient entier de la division euclidienne : {\tt iquo intDiv}}\index{iquo}\index{intDiv}
\noindent{\tt iquo} (ou {\tt intDiv}) d\'esigne le quotient entier $q$ de la 
division euclidienne des deux entiers $a$ et $b$ donn\'es en argument 
($a=b*q+r$ avec $0\leq r< b$).\\ 
{\tt iquo} travaille avec des entiers ou des entiers de Gauss.\\
Pour les entiers de Gauss, on choisit $q$ pour $b*q$ soit le plus proche 
possible de $a$ et on peut montrer que l'on peut choisir $r$ tel que 
$|r|^2 \leq |b|^2/2$.\\
On tape :
\begin{center}{\tt iquo(148,5)}\end{center}
On obtient :
\begin{center}{\tt 29}\end{center}
On tape :
\begin{center}{\tt iquo(factorial(148),factorial(145)+2)}\end{center}
On obtient :
\begin{center}{\tt 3176375}\end{center}
ou encore
\begin{center}{\tt iquo(25+12*i,5+7*i) }\end{center}
On obtient :
\begin{center}{\tt 3-2*i}\end{center}
On a :\\
$a-b*q=-4+i$ et on a $|-4+i|^2=17<|5+7*i|^2/2=74/2=37$

\subsection{Reste entier de la division euclidienne : {\tt irem remain smod mods mod \%}}\index{irem}\index{remain}
\begin{itemize}
\item
{\tt irem} (ou {\tt remain}) d\'esigne le reste entier $r$ de la 
division euclidienne des deux entiers $a$ et $b$ donn\'es en argument 
($a=b*q+r$ avec $0\leq r< b$).\\
Pour les entiers de Gauss, on choisit $q$ pour $b*q$ soit le plus proche 
possible de $a$ et on peut montrer que l'on peut choisir $r$ tel que 
$|r|^2 \leq |b|^2/2$.\\
On tape :
\begin{center}{\tt irem(148,5) }\end{center}
On obtient :
\begin{center}{\tt 3}\end{center}
{\tt irem} travaille avec des entiers longs ou des entiers de Gauss.\\
On tape :
\begin{center}{\tt irem(factorial(148),factorial(45)+2 )}\end{center}
On obtient :
\begin{center}{\tt 111615339728229933018338917803008301992120942047239639312}\end{center}
ou encore
\begin{center}{\tt irem(25+12*i,5+7*i) }\end{center}
On obtient :
\begin{center}{\tt -4+i}\end{center}
On a :\\
$a-b*q=-4+i$ et on a $|-4+i|^2=17<|5+7*i|^2/2=74/2=37$

\item
{\tt smod} ou {\tt mods}\index{smod|textbf}\index{mods|textbf} est pr\'efix\'e
et a 2 entiers comme arguments.\\
{\tt smod} ou {\tt mods}d\'esigne le reste entier 
sym\'etrique $s$ de la division euclidienne des deux entiers  $a$ et $b$ 
donn\'es en argument ($a=b*q+s$ avec $-b/2<s \leq b/2$).\\
On tape :
\begin{center}{\tt smod(148,5) }\end{center}
On obtient :
\begin{center}{\tt -2}\end{center}

\item 
{\tt mod} ou {\tt \%} sert \`a d\'esigner un nombre modulaire.\\
{\tt mod} ou {\tt \%} est infix\'e et renvoie un nombre modulaire.\\
On tape :\index{mod}\index{\%}
\begin{center}{\tt 148\ mod\ 5 }\end{center}
ou
\begin{center}{\tt 148 \%  5 }\end{center}
On obtient :
\begin{center}{\tt 3 \% 5}\end{center}
ce qui veut dire que ${\tt 148 \ mod \ 5=3\ mod\ 5 }$ et que 
${\tt 148\ mod\ 5 }$ est un
\'el\'ement de $Z/5Z$ (voir \ref{sec:modulaire} pour avoir les op\'erations 
possibles dans  $Z/5Z$).
\end{itemize}
\subsection{Le quotient et le reste de la division euclidienne : {\tt iquorem}}\index{iquorem}\label{sec:iquorem}
\noindent{\tt iquorem} donne la liste du quotient $q$ et du reste entier $r$
 de la division euclidienne des deux entiers  $a$ et $b$ donn\'es en argument ($a=b*q+r$ avec $0\leq r< b$).\\.\\  
On tape :
\begin{center}{\tt iquorem(148,5) }\end{center}
On obtient :
\begin{center}{\tt [29,3] }\end{center}

\subsection{Test de parit\'e : {\tt even est\_pair}}\index{even}\index{est\_pair}
\noindent {\tt even} ou {\tt est\_pair} a comme argument un entier {\tt n}.\\
{\tt even} ou {\tt est\_pair} renvoie {\tt 1} si {\tt n} est pair et renvoie 
{\tt 0} si {\tt n} est impair.\\
On tape :
\begin{center}{\tt even(148) }\end{center}
On tape :
\begin{center}{\tt est\_pair(148) }\end{center}
On obtient :
\begin{center}{\tt 1 }\end{center}
On tape :
\begin{center}{\tt even(149) }\end{center}
On tape :
\begin{center}{\tt est\_pair(149) }\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}


\subsection{Test de non parit\'e : {\tt odd est\_impair}}\index{odd}\index{est\_impair}
\noindent {\tt odd} ou {\tt est\_impair} a comme argument un entier {\tt n}.\\
{\tt odd} ou {\tt est\_impair} renvoie {\tt 1} si {\tt n} est impair et renvoie
{\tt 0} si {\tt n} est pair.\\
On tape :
\begin{center}{\tt odd(148) }\end{center}
On tape :
\begin{center}{\tt est\_impair(148) }\end{center}
On obtient :
\begin{center}{\tt 0 }\end{center}
On tape :
\begin{center}{\tt odd(149) }\end{center}
On tape :
\begin{center}{\tt est\_impair(149) }\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}


\subsection{Test de pseudo-primalit\'e : {\tt is\_pseudoprime}}\index{is\_pseudoprime}
\begin{itemize}
\item Si  {\tt n} est premier, {\tt is\_pseudoprime(n)} renvoie {\tt 2} (vrai),
\item Si {\tt n} est pseudo-premier, {\tt is\_pseudoprime(n)} renvoie {\tt 1} 
(vrai),
\item Si {\tt n} n'est pas premier, {\tt is\_pseudoprime(n)} renvoie {\tt 0} 
(faux).
\end{itemize}
{\bf D\'efinition} : Pour les nombres inf\'erieurs à $10^{14}$ \^etre 
pseudo-premier et premier c'est la m\^eme chose ! ...mais au delà de $10^{14}$ 
un nombre pseudo-premier est premier avec une probabilit\'e tr\`es forte (cf 
l'algorithme de Rabin et de Miller-Rabin dans la partie Algorithmique et 
traduction {\tt Xcas} (menu {\tt Aide->Manuels->Programmation}).\\ 
On tape :
\begin{center}{\tt is\_pseudoprime(100003) }\end{center}
On obtient :\begin{center}{\tt 2}\end{center}
On tape :
\begin{center}{\tt is\_pseudoprime(9856989898997) }\end{center}
On obtient :
\begin{center}{\tt 2}\end{center} 
On tape :
\begin{center}{\tt is\_pseudoprime(14) }\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
On tape :
\begin{center}{\tt is\_pseudoprime(9856989898997789789) }\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}

\subsection{Test de primalit\'e : {\tt is\_prime isprime isPrime}}\index{is\_prime}\index{isprime}\index{isPrime}\index{pari}
\noindent {\tt is\_prime(n)}  renvoie {\tt 1} (vrai) ou {\tt 0} (faux).
selon que est premier ou non. {\tt isprime} ou {\tt isPrime} renvoie {\tt true}
ou {\tt false}. Utiliser la commande {\tt pari("isprime",n,1)}
pour obtenir un certificat de primalité (voir la documentation
de PARI/GP, depuis le menu {\tt Aide->Manuels->PARI-GP)}) et
{\tt pari("isprime",n,2)} ou {\tt is\_prime(n)} pour utiliser le test APRCL.

On tape :
\begin{center}{\tt is\_prime(100003)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
On tape :
\begin{center}{\tt isprime(100003)}\end{center}
On obtient :
\begin{center}{\tt true}\end{center}
On tape :                    
\begin{center}{\tt is\_prime(98569898989987)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center} 
On tape :
\begin{center}{\tt is\_prime(14)}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
On tape :
\begin{center}{\tt isprime(14)}\end{center}
On obtient :
\begin{center}{\tt false}\end{center}
Pour obtenir un certificat de primalit\'e pour $n=9856989898997789789$, 
on tape :
\begin{center}{\tt pari("isprime",9856989898997789789,1)}\end{center}
On obtient les coefficients prouvant la primalité par le test
"p-1" de Selfridge-Pocklington-Lehmer~:
\begin{center}
{\tt [[2,2,1],[19,2,1],[941,2,1],[1873,2,1],[94907,2,1]]}
\end{center}
sinon, on tape :
\begin{center}{\tt pari("isprime",9856989898997789789,2)}\end{center}
Ou on tape :
\begin{center}{\tt is\_prime(9856989898997789789)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}

\subsection{Nombre pseudo-premier apr\`es {\tt n} : {\tt nextprime}}\index{nextprime}
\noindent{\tt nextprime(n)} d\'esigne le plus petit nombre pseudo-premier (ou 
premier) plus grand que {\tt n}. \\
On tape :
\begin{center}{\tt  nextprime(75) }\end{center}
On obtient :
\begin{center}{\tt 79}\end{center}
\subsection{Nombre pseudo-premier avant {\tt n} : {\tt prevprime}}\index{prevprime}
\noindent{\tt prevprime(n)} d\'esigne le premier nombre pseudo-premier (ou premier) trouv\'e avant 
{\tt n}.\\
On tape :
\begin{center}{\tt prevprime(75)}\end{center}
On obtient :
\begin{center}{\tt 73}\end{center}
\subsection{Le {\tt n}-i\`eme nombre premier : {\tt ithprime}}\index{ithprime}
\noindent{\tt ithprime(n)} d\'esigne le {\tt n}-i\`eme nombre premier 
inf\'erieur \`a 10000 (pour l'instant !).\\
On tape :
\begin{center}{\tt ithprime(75)}\end{center}
On obtient :
\begin{center}{\tt 379}\end{center}
On tape :
\begin{center}{\tt ithprime(1229)}\end{center}
On obtient :
\begin{center}{\tt 9973}\end{center}
On tape :
\begin{center}{\tt ithprime(1230)}\end{center}
On obtient  :
\begin{center}{\tt ithprime(1230)}\end{center}
car cela d\'esigne un nombre premier > 10000.
\subsection{Identit\'e de B\'ezout : {\tt iegcd igcdex bezout\_entiers}}\index{iegcd}\index{igcdex}\index{bezout\_entier}
\noindent{\tt iegcd(a,b)} ou  {\tt igcdex(a,b)} d\'esigne le PGCD \'etendu 
(identit\'e de B\'ezout) de deux  entiers.\\
{\tt iegcd(a,b)}  ou  {\tt igcdex(a,b)} renvoie {\tt [u,v,d]} v\'erifiant {\tt au+bv=d} et tel que 
{\tt d=gcd(a,b)}.\\
On tape :
\begin{center}{\tt iegcd(48,30) }\end{center}
On obtient :
\begin{center}{\tt [2,-3,6]}\end{center}
En effet :
$$2 \cdot 48+ (-3) \cdot 30 =6$$
\subsection{R\'esolution de au+bv=c dans $\Z$ : {\tt iabcuv}}\index{iabcuv}
\noindent{\tt iabcuv(a,b,c)} donne {\tt [u,v]} v\'erifiant {\tt au+bv=c}.\\
Il faut bien s\^ur que {\tt c} soit un multiple de {\tt gcd(a,b)} pour obtenir une solution.\\
On tape :
\begin{center}{\tt iabcuv(48,30,18) }\end{center}
On obtient :
\begin{center}{\tt [6,-9]}\end{center}
\subsection{Reste chinois : {\tt ichinrem, ichrem}}\index{ichinrem}\index{ichrem}
\noindent{\tt ichinrem([a,p],[b,q])} ou {\tt ichrem([a,p],[b,q])} d\'esigne 
une liste {\tt [c,lcm(p,q)]} form\'ee de deux entiers.\\
Le premier nombre {\tt c} est tel que 
\[ \forall k \in \mathbb Z, \quad d=c+ k \times \mbox{lcm}(p,q) \]l
v\'erifie
\[ d=a \pmod  p, \quad d=b \pmod q \]
Si {\tt p} et {\tt q} sont premiers entre eux, il existe toujours une solution 
{\tt d}  et toutes les solutions sont alors congrues modulo {\tt p*q}   \\
{\bf Exemples} : \\
Trouver les solutions de :
$${\tt \left \{ \begin{array}{rl} x=&3\ (\bmod\ 5)\\ 
x=&9\ (\bmod\ 13) \end{array}\right.}$$
On tape :
\begin{center}{\tt ichinrem([3,5],[9,13])}\end{center}
ou on tape :
\begin{center}{\tt ichrem([3,5],[9,13])}\end{center}
On obtient :
\begin{center}{\tt [-17,65] }\end{center}
ce qui veut dire que {\tt x=-17 (mod 65)}\\
On peut aussi taper :
\begin{center}{\tt ichrem(3\%5,9\%13)}\end{center}
On obtient :
\begin{center}{\tt -17\%65 }\end{center}
Trouver les solutions de :
$${\tt \left \{ \begin{array}{rl} x=&3\ (\bmod\ 5)\\ 
x=&4\ (\bmod\ 7) \\ 
x=&1\ (\bmod\ 9)\end{array}\right.}$$
On tape tout d'abord :
\begin{center}{\tt tmp:=ichinrem([3,5],[4,7])}\end{center}
ou on tape :
\begin{center}{\tt tmp:=ichrem([3,5],[4,7])}\end{center}
On obtient :
\begin{center}{\tt [-17,35] }\end{center}
puis on tape 
\begin{center}{\tt ichinrem([1,9],tmp)}\end{center}
ou on tape :
\begin{center}{\tt ichrem([1,9],tmp)}\end{center}
On obtient :
\begin{center}{\tt [-17,315] }\end{center}
ce qui veut dire que {\tt x=-17 (mod 315)}\\
On peut aussi taper directement :\\
\begin{center}{\tt ichinrem([3\%5,4\%7,1\%9])}\end{center}
On obtient :
\begin{center}{\tt -17\%315 }\end{center}

{\bf Remarque}\\
{\tt ichrem} (ou {\tt ichinrem})  peut aussi \^etre utiliser pour trouver les 
coefficients de polyn\^omes qui sont connus modulo plusieurs entiers, par 
exemple trouver
$ax+b$ modulo $315=5 \times 7 \times 9$ tel que :\\
$${\tt \left \{ \begin{array}{rl} a=&3\ (\bmod\ 5)\\ 
a=&4\ (\bmod\ 7) \\ 
a=&1\ (\bmod\ 9) \end{array}\right.},
\quad
{\tt \left \{ \begin{array}{rl} b=&1\ (\bmod\ 5)\\ 
b=&2\ (\bmod\ 7) \\ 
b=&3\ (\bmod\ 9) \end{array}\right.}$$
On tape :
\begin{center}{\tt ichrem((3x+1)\%5,(4x+2)\%7,(x+3)\%9)}\end{center}
On obtient :
\begin{center}{\tt (-17\%315$\times$ x+156\%315 }\end{center}
ce qui veut dire que {\tt a=-17 (mod 315)} et {\tt b=156 (mod 315)}.

\subsection{Reste chinois pour des listes d'entiers: {\tt chrem}}\index{chrem}
\noindent{\tt chrem} a comme argument deux listes de m\^eme longueur.\\
{\tt chrem} renvoie une liste de deux entiers.\\
Par exemple, {\tt chrem([a,b,c],lcm(p,q,r))} d\'esigne une liste form\'ee de 
deux entiers : \\
le premier entier est un nombre {\tt x} v\'erifiant :\\
 {\tt x=a mod  p} et {\tt x=b mod q} et {\tt x=c mod r}.\\
Il existe toujours une solution 
{\tt x} si {\tt p} et {\tt q} sont premiers entre eux, et toutes les solutions
 sont congrues modulo {\tt p*q*r} \\
{\sc Attention} \`a l'ordre des param\`etres, en effet on a :\\
{\tt chrem([a,b],[p,q])=ichrem([a,p],[b,q])=\\
ichinrem([a,p],[b,q])}\\
{\bf Exemples} : \\
Trouver les solutions de :
$${\tt \left \{ \begin{array}{rl} x=&3\ (\bmod\ 5)\\ 
x=&9\ (\bmod\ 13) \end{array}\right.}$$
On tape :
\begin{center}{\tt chrem([3,9],[5,13])}\end{center}
On obtient :
\begin{center}{\tt [-17,65] }\end{center}
ce qui veut dire que {\tt x=-17 (mod 65)}
Trouver les solutions de :
$${\tt \left \{ \begin{array}{rl} x=&3\ (\bmod\ 5)\\ 
x=&4\ (\bmod\ 6) \\ 
x=&1\ (\bmod\ 9)\end{array}\right.}$$
On tape :
\begin{center}{\tt chrem([3,4,1],[5,6,9])}\end{center}
On obtient :
\begin{center}{\tt [28,90] }\end{center}
ce qui veut dire que {\tt x=28 (mod 90)}\\
{\bf Remarque}\\
{\tt chrem}   peut aussi \^etre utiliser pour trouver les 
coefficients de polyn\^omes qui sont connus modulo plusieurs entiers, par 
exemple trouver
$ax+b$ modulo $315=5 \times 7 \times 9$ tel que :

$${\tt \left \{ \begin{array}{rl} a=&3\ (\bmod\ 5)\\ 
a=&4\ (\bmod\ 7) \\ 
a=&1\ (\bmod\ 9) \end{array}\right.},
\quad
{\tt \left \{ \begin{array}{rl} b=&1\ (\bmod\ 5)\\ 
b=&2\ (\bmod\ 7) \\ 
b=&3\ (\bmod\ 9) \end{array}\right.}$$
On tape :
\begin{center}{\tt chrem([3x+1,4x+2,x+3],[5,7,9])}\end{center}
On obtient :
\begin{center}{\tt [-17x+156),315] }\end{center}
ce qui veut dire que {\tt a=-17 (mod 315)} et que {\tt b=156 (mod 315)}.
\subsection{R\'esolution de $a^2+b^2=p$ dans $\Z$ : {\tt pa2b2}}\index{pa2b2}
\noindent{\tt pa2b2} d\'ecompose un entier $p$ premier, congru à 1 modulo 4, en
 la somme de deux carr\'es : $p= a^2+b^2$.\\
Le r\'esultat est donn\'e sous la forme d'une liste.\\
On tape :
\begin{center}{\tt pa2b2(17)}\end{center}
On obtient :
\begin{center}{\tt [4,1] }\end{center}
en effet $17=4^2+1^2$
\subsection{Indicatrice d'Euler : {\tt euler Phi}}\index{euler}\index{phi}
\noindent{\tt euler} (ou {\tt Phi}) d\'esigne l'indicatrice d'Euler d'un 
entier. \\
{\tt euler(n)} (ou {\tt Phi(n)}) est \'egale au cardinal de l'ensemble des 
nombres  inf\'erieurs à {\tt n} qui sont premiers avec {\tt n}. \\
On tape :
\begin{center}{\tt euler(21)}\end{center}
On obtient :
\begin{center}{\tt 12}\end{center}
En effet l'ensemble :\\
 E=\{2,4,5,7,8,10,11,13,15,16,17,19\} correspond aux nombres inf\'erieurs à 21 
qui sont premiers avec 21, et E a comme cardinal 12.

Euler a introduit cette fonction pour formuler la g\'en\'eralisation du petit 
th\'eor\`eme de Fermat :\\
\centerline{$a^{euler(n)}=1\ \bmod \ n$ si $a$ et $n$ sont premiers entre eux.}
\subsection{Symbole de Legendre : {\tt legendre\_symbol}}\index{legendre\_symbol}
Lorsque $n$ est premier, on d\'efinit le symbole de Legendre de $a$ 
not\'e $\left(\frac{a}{n}\right)$ par :\\
$$\left(\frac{a}{n}\right)=\left\{\begin{array}{rl}
0 & \mbox{si }a=0\ \bmod n \\
1 & \mbox{si } a \neq 0 \bmod n \mbox{ et si } a=b^2 \bmod n\\
-1 & \mbox{si } a \neq 0 \bmod n \mbox{ et si } a \neq b^2 \bmod n\\
\end{array}
\right.$$
Quelques propri\'et\'es
\begin{itemize}
\item Si $n$ est premier :\\
\[ a^{\frac{n-1}{2}}=\left(\frac{a}{n}\right) \bmod n \]
\item
\begin{eqnarray*}
\left(\frac{p}{q}\right).\left(\frac{q}{p}\right)
&=&(-1)^{\frac{p-1}{2}}.(-1)^{\frac{q-1}{2}}
\mbox{ si $p$ et $q$ sont impairs et positifs} \\
\left(\frac{2}{p}\right)&=&(-1)^{\frac{p^2-1}{8}} \\
\left(\frac{-1}{p}\right)&=&(-1)^{\frac{p-1}{2}}
\end{eqnarray*}
\end{itemize}

{\tt legendre\_symbol} a deux param\`etres $a$ et $n$ et renvoie le symbole de 
Legendre $\left(\frac{a}{n}\right)$.\\
On tape :
\begin{center}{\tt legendre\_symbol(26,17)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
On tape :
\begin{center}{\tt legendre\_symbol(27,17)}\end{center}
On obtient :
\begin{center}{\tt -1}\end{center}
On tape :
\begin{center}{\tt legendre\_symbol(34,17)}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
\subsection{Symbole de Jacobi : {\tt jacobi\_symbol}}\index{jacobi\_symbol}
Lorsque $n$ n'est pas premier on d\'efinit le symbole de Jacobi de $a$, 
not\'e encore $\left(\frac{a}{n}\right)$, \`a partir du symbole de Legendre et 
de la d\'ecomposition de $n$ en facteur premier.\\ 
Soit
\[ n=p_1^{\alpha _1}..p_k^{\alpha _k} \] 
o\`u $p_j$ est premier and $\alpha _j$ est un entier pour $j=1..k$.
Le symbole de Jacobi de $a$ est d\'efinit par :
\[ \left(\frac{a}{n}\right)=\left(\frac{a}{p_1}\right)^{\alpha _1}...\left(\frac{a}{p_k}\right)^{\alpha _k} \]
{\tt jacobi\_symbol} a deux param\`etres $a$ et $n$ et renvoie le symbole de Jacobi $\left(\frac{a}{n}\right)$.\\
On tape :
\begin{center}{\tt jacobi\_symbol(25,12)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
On tape :
\begin{center}{\tt jacobi\_symbol(35,12)}\end{center}
On obtient :
\begin{center}{\tt -1}\end{center}
On tape :
\begin{center}{\tt jacobi\_symbol(33,12)}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}

\section{Analyse combinatoire}
\subsection{La factorielle : {\tt factorial \ !}}\index{factorial|textbf}\index{\symbol{33}|textbf}
\noindent{\tt factorial} a comme param\`etre un entier $n$.\\
{\tt factorial(n)} calcule $n!$ (on peut aussi \'ecrire directement {\tt n!}).\\
On tape :
\begin{center}{\tt factorial(10)}\end{center}
ou
\begin{center}{\tt 10!}\end{center}
On obtient :
\begin{center}{\tt 3628800}\end{center}

\subsection{Les coefficients binomiaux : {\tt binomial comb nCr}}\index{binomial}\index{comb|textbf}\index{nCr|textbf}
\noindent{\tt comb} (ou {\tt nCr} ou {\tt binomial}) a comme param\`etre deux entiers {\tt n} et {\tt p}.\\
{\tt comb(n,p)} ou {\tt nCr(n,p)} ou {\tt binomial(n,p)} calcule $C_n^p$.\\
On tape :
\begin{center}{\tt comb(5,2)}\end{center}
On obtient :
\begin{center}{\tt 10}\end{center}
{\bf Remarque}\\
{\tt binomial} et seulement {\tt binomial} peut admettre un param\`etre 
suppl\'ementaire et dans ce cas {\tt binomial(n,p,a)} calcule 
$C_n^p*a^p*(1-a)^{n-p}$.

\subsection{Les arrangements : {\tt perm nPr}}\index{perm}\index{nPr}
\noindent{\tt perm} ou {\tt nPr} a comme param\`etre deux entiers $n$ et $p$.\\
{\tt perm(n,p)} ou {\tt nPr(n,p)} calcule $A_n^p$.\\
On tape :
\begin{center}{\tt perm(5,2)}\end{center}
On obtient :
\begin{center}{\tt 20}\end{center}
\subsection{Les nombres entiers al\'eatoires : {\tt rand alea hasard}}\index{rand}\index{alea}
\index{hasard}
\noindent{\tt rand} a comme param\`etre un entier $n$ ou aucun param\`etre.\\
\begin{itemize}
\item {\tt rand(n)} renvoie un entier $p$ al\'eatoire v\'erifiant $0 \leq p<n$.\\   
On tape :
\begin{center}{\tt rand(10)}\end{center}
On obtient par exemple :
\begin{center}{\tt 8}\end{center}

\item {\tt rand()} renvoie un entier $p$ al\'eatoire v\'erifiant $0 \leq p<2^{31}$ 
(ou sur une architecture de 64 bits $0 \leq p<2^{63}$).\\ 
On tape :
\begin{center}{\tt rand()}\end{center}
On obtient par exemple :
\begin{center}{\tt 846930886}\end{center}
\end{itemize}

\section{Les rationnels}
\subsection{Transformer un nombre d\'ecimal en rationnel : {\tt float2rational exact}}\index{float2rational|textbf}\index{exact|textbf}\index{evalf}
\noindent {\tt float2rational}  ou {\tt exact} a comme param\`etre un nombre 
d\'ecimal {\tt d} et renvoie un nombre rationnel {\tt q} qui approche {\tt d} 
\`a moins de {\tt epsilon}. On
d\'efinit {\tt epsilon} dans la configuration du {\tt cas} (menu {\tt Cfg}) ou 
avec la commande {\tt cas\_setup}.\\
On tape :
\begin{center}{\tt float2rational(0.3670520231)}\end{center}
On obtient pour {\tt epsilon=1e-10}:
\begin{center}{\tt 127/346}\end{center}
Essayez d'entrer:
\begin{center}{\tt 123/12+57/21}\end{center}
On obtient :
\begin{center}{\tt 363/28}\end{center}
Puis :
\begin{center}{\tt evalf(363/28)}\end{center}
On obtient :
\begin{center}{\tt 12.9642857143}\end{center}
On tape :
\begin{center}{\tt float2rational(12.9642857143)}\end{center}
On obtient :
\begin{center}{\tt 363/28}\end{center}
Si on m\'elange les deux repr\'esentations par exemple :
\begin{center}{\tt 1/2+0.7}\end{center}
On obtient
\begin{center}{\tt 1.2}\end{center} 
On tape :
\begin{center}{\tt 1/2+float2rational(0.7)}\end{center}
On obtient :
\begin{center}{\tt 6/5}\end{center}

\subsection{Partie enti\`ere et fractionnaire : {\tt propfrac propFrac}}\index{propfrac}\index{propFrac}\label{sec:ipropfrac}
\noindent{\tt propfrac(A/B)} ou {\tt propFrac(A/B)} \'ecrit la fraction
 $\displaystyle \frac{A}{B}$ apr\`es simplification en 
$\displaystyle \frac{a}{b}$ (avec $\mbox{gcd}(a,b)=1$) sous la forme :
$$q+\frac{r}{b}\ \mbox{ avec } \ 0\leq r<b$$
Pour les fractions rationnelles on se reportera \`a  \ref{sec:propfrac}.\\
On tape :
\begin{center}{\tt propfrac(42/15)}\end{center}
On obtient :
\begin{center}{\tt 2+4/5}\end{center}
On tape :
\begin{center}{\tt  propfrac(43/12)}\end{center}
On obtient :
\begin{center}{\tt  3+7/12}\end{center}
\subsection{Num\'erateur d'une fraction apr\`es simplification : {\tt numer}, {\tt getNum}}\index{numer|textbf}\index{getNum|textbf}\label{sec:inumer}
\noindent{\tt numer} ou {\tt  getNum} a comme argument une 
fraction et renvoie le num\'erateur de cette fraction simplifi\'ee (pour les fractions rationnelles on se reportera \`a \ref{sec:numer}).\\
On tape :
\begin{center}{\tt  numer(42/12)}\end{center}
Ou :
\begin{center}{\tt getNum(42/12)}\end{center}
On obtient :
\begin{center}{\tt 7}\end{center}
Si on veut le num\'erateur de cette fraction non simplifi\'ee il faut quoter 
l'argument (pour les fractions rationnelles on se reportera \`a 
\ref{sec:getnum}).\\
On tape :
\begin{center}{\tt  numer('42/12')}\end{center}
Ou :
\begin{center}{\tt  getNum('42/12')}\end{center}
On obtient :
\begin{center}{\tt 42}\end{center}


\subsection{D\'enominateur d'une fraction  apr\`es simplification : {\tt denom getDenom}}\index{denom|textbf}\index{getDenom|textbf}\label{sec:idenom}
\noindent{\tt denom} ou {\tt getDenom} a comme argument une fraction et 
renvoie le d\'enominateur de cette fraction simplifi\'ee (pour les fractions 
rationnelles on se reportera \`a \ref{sec:denom})
On tape :
\begin{center}{\tt denom(42/12)}\end{center}
Ou :
\begin{center}{\tt getDenom(42/12)}\end{center}
On obtient :
\begin{center}{\tt 2}\end{center}
Si on veut le d\'enominateur de cette fraction non simplifi\'ee  il faut 
quoter l'argument (pour les fractions rationnelles on se reportera \`a 
\ref{sec:getdenom}).\\
On tape :
\begin{center}{\tt denom('42/12')}\end{center}
Ou :
\begin{center}{\tt getDenom('42/12')}\end{center}
On obtient :
\begin{center}{\tt 12}\end{center}
\subsection{Num\'erateur et d\'enominateur d'une fraction : {\tt f2nd fxnd}}\index{fxnd}\index{f2nd}\label{sec:ifxnd}
\noindent{\tt f2nd} (ou {\tt fxnd}) a comme argument une fraction et renvoie, 
la liste form\'ee par le num\'erateur et le d\'enominateur de cette fraction 
simplifi\'ee (pour les fractions rationnelles on se reportera \`a 
\ref{sec:fxnd}).\\
On tape :
\begin{center}{\tt  f2nd(42/12)}\end{center}
On obtient :
\begin{center}{\tt [7,2]}\end{center}
\subsection{Simplification d'un couple : {\tt simp2}}\index{simp2|textbf}\label{sec:isimp2}
\noindent{\tt simp2} a pour argument deux entiers ou
une liste de deux entiers repr\'esentant une fraction (pour deux polyn\^omes voir alors \ref{sec:simp2}).\\
{\tt simp2} renvoie une liste form\'ee par le 
num\'erateur et le d\'enominateur de cette fraction simplifi\'ee.\\
 On tape :
\begin{center}{\tt simp2(18,15) }\end{center}
On obtient :
\begin{center}{\tt [6,5]}\end{center} 
On tape :
\begin{center}{\tt  simp2([42,12])}\end{center}
On obtient :
\begin{center}{\tt [7,2]}\end{center}

\subsection{D\'eveloppement en fraction continue d'un r\'eel : {\tt dfc}}\index{dfc}\label{sec:convertdfc}\index{confrac@{\sl confrac}|textbf}
\noindent {\tt dfc} a comme argument un nombre r\'eel ou 
 fractionnaire ou d\'ecimal  {\tt a} et un entier {\tt n} (ou un r\'eel 
{\tt epsilon}).\\
{\tt dfc} renvoie une liste repr\'esentant le d\'eveloppement en fractions 
continues de {\tt a} d'ordre {\tt n} (ou de pr\'ecision {\tt epsilon} c'est \`a
dire le d\'eveloppement en fractions continues qui approche {\tt a} ou 
{\tt evalf(a)} \`a moins de {\tt epsilon}, par d\'efaut {\tt epsilon} est 
\'egal \`a la valeur du {\tt epsilon} d\'efinit dans la configuration du 
{\tt cas} \`a l'aide du menu 
{\tt Cfg$\blacktriangleright$Configuration du CAS}).\\ 
On peut aussi utiliser {\tt convert} avec l'option {\tt confrac} : dans ce cas
la valeur de {\tt epsilon} est \'egal \`a la valeur du {\tt epsilon} d\'efinit 
dans la configuration du {\tt CAS} \`a l'aide du menu 
{\tt Cfg$\blacktriangleright$Configuration du CAS} (voir \ref{sec:convert}).\\ 
{\bf Remarques} \\
Si le dernier \'el\'ement de la liste r\'esultat est une liste il repr\'esente 
la p\'eriode et si le dernier \'el\'ement de la liste r\'esultat n'est pas entier, il repr\'esente le reste $r$ ($a=a0+1/....+1/an+1/r$).\\
Si on a  {\tt dfc(a)=[a0,a1,a2,[b0,b1]} cela veut dire que :\\
$\displaystyle a=a0+\frac{1}{a1+\frac{1}{a2+\frac{1}{b0+\frac{1}{b1+\frac{1}{b0+...}}}}}$ \\
Si on a  {\tt dfc(a)=[a0,a1,a2,r]} cela veut dire que :\\
$\displaystyle a=a0+\frac{1}{a1+\frac{1}{a2+\frac{1}{r}}}$\\
On tape :
\begin{center}{\tt dfc(sqrt(2),5)}\end{center}
On obtient :
\begin{center}{\tt [1,2,[2]]}\end{center} 
On tape :
\begin{center}{\tt dfc(evalf(sqrt(2)),1e-9)}\end{center}
Ou : 
\begin{center}{\tt dfc(sqrt(2),1e-9)}\end{center}
On obtient :
\begin{center}{\tt [1,2,2,2,2,2,2,2,2,2,2,2,2]}\end{center} 
On tape :
\begin{center}{\tt convert(sqrt(2),confrac,'dev')}\end{center}
On obtient si dans la configuration du {\tt cas} {\tt epsilon=1e-9} :
\begin{center}{\tt [1,2,2,2,2,2,2,2,2,2,2,2,2]}\end{center} 
et {\tt dev} contient {\tt [1,2,2,2,2,2,2,2,2,2,2,2,2]}\\
On tape :
\begin{center}{\tt dfc(9976/6961,5)}\end{center}
On obtient :
\begin{center}{\tt [1,2,3,4,5,43/7]}\end{center} 
En effet
% on calcule :\\
%$\displaystyle 1+\frac{1}{2+\frac{1}{3+\frac{1}{4+\frac{1}{5+\frac{1}{43/7}}}}$\\pour cela 
on tape :\\
{\tt 1+1/(2+1/(3+1/(4+1/(5+7/43))))} \\
et on obtient :\\
{\tt 9976/6961}\\
On tape :
\begin{center}{\tt convert(9976/6961,confrac,'l')}\end{center}
On obtient si dans la configuration du {\tt cas} {\tt epsilon=1e-9} :
\begin{center}{\tt [1,2,3,4,5,6,7]}\end{center} 
et {\tt l} contient {\tt [1,2,3,4,5,6,7]}\\
On tape :
\begin{center}{\tt dfc(pi,5)}\end{center}
On obtient :
\begin{center}{\tt [3,7,15,1,292,(-113*pi+355)/(33102*pi-103993)]}\end{center} 
On tape :
\begin{center}{\tt dfc(evalf(pi),5)}\end{center}
On obtient (si on travaille avec 12 chiffres significatifs) :
\begin{center}{\tt [3,7,15,1,292,1.57581843574]}\end{center} 
On tape :
\begin{center}{\tt dfc(evalf(pi),1e-9)}\end{center}
Ou :
\begin{center}{\tt dfc(pi,1e-9)}\end{center}
Ou (si {\tt epsilon=1e-9} dans la configuration du {\tt cas}) :
\begin{center}{\tt convert(pi,confrac,'ll')}\end{center}
On obtient :
\begin{center}{\tt [3,7,15,1,292]}\end{center} 

\subsection{Transformer une fraction continue en un r\'eel : {\tt dfc2f}}\index{dfc2f}
\noindent {\tt dfc2f} a comme argument une liste repr\'esentant le 
d\'eveloppement en fraction continue d'un nombre rationnel ou d'un nombre 
quadratique (nombre qui est racine d'une \'equation du second degr\'e): quand 
le d\'eveloppement est p\'eriodique, le dernier \'el\'ement de la liste est une
 liste qui repr\'esente la p\'eriode du d\'eveloppement en fraction continue
 et si le dernier \'el\'ement de la liste n'est ni une liste ni un entier cet 
 \'el\'ement repr\'esente le reste $r$ ($a=a0+1/....+1/an+1/r$).\\
{\tt dfc2f} renvoie le nombre rationnel ou le nombre quadratique ayant 
l'argument comme d\'eveloppement en fraction continue.\\
On tape :
\begin{center}{\tt dfc2f([1,2,[2]])}\end{center}
On obtient :
\begin{center}{\tt 1/(1/(1+sqrt(2))+2)+1}\end{center} 
Apr\`es simplification avec {\tt normal} :
\begin{center}{\tt sqrt(2)}\end{center} 
On tape :
\begin{center}{\tt dfc2f([1,2,3])}\end{center}
On obtient :
\begin{center}{\tt 10/7}\end{center} 
On tape :
\begin{center}{\tt normal(dfc2f([3,3,6,[3,6]]))}\end{center}
On obtient :
\begin{center}{\tt sqrt(11)}\end{center} 
On tape :
\begin{center}{\tt dfc2f([1,2,3,4,5,6,7])}\end{center}
On obtient :
\begin{center}{\tt 9976/6961}\end{center} 
En effet 
%on calcule :\\
%$\displaystyle 1+\frac{1}{2+\frac{1}{3+\frac{1}{4+\frac{1}{5+\frac{1}{6\frac{1}{7}}}}}}$\\pour cela 
on tape :\\
{\tt 1+1/(2+1/(3+1/(4+1/(5+1/(6+1/7)))))} \\
et on obtient :\\
{\tt 9976/6961}\\
On tape :
\begin{center}{\tt dfc2f([1,2,3,4,5,43/7])}\end{center}
On obtient :
\begin{center}{\tt 9976/6961}\end{center} 
En effet 
%on calcule :\\
%$\displaystyle 1+\frac{1}{2+\frac{1}{3+\frac{1}{4+\frac{1}{5+\frac{1}{43/7}}}}$\\pour cela 
on tape :\\
{\tt 1+1/(2+1/(3+1/(4+1/(5+7/43))))} \\
et on obtient :\\
{\tt 9976/6961}

\subsection{Le $n^{i\`eme}$ nombre de Bernoulli : {\tt bernoulli}}\index{bernoulli}
\noindent {\tt bernoulli} a comme argument un entier $n$.\\
{\tt bernoulli} renvoie le $n^{i\`eme}$ nombre de Bernoulli $B(n)$.\\
On a :
$$\frac{t}{e^t-1}=\sum_{n=0}^{+\infty} \frac{B(n)}{n!}t^n$$
On rappelle que les polyn\^omes de Bernoulli $B_k$ sont d\'efinis par :
$$B_0=1$$
$$B_k{'}(x)=kB_{k-1}(x)$$
$$\int_0^1B_k(x)dx=0$$
On a alors :\\
$B(n)=B_n(0)$\\
On tape :
\begin{center}{\tt bernoulli(6)}\end{center}
On obtient :
\begin{center}{\tt 1/42}\end{center}

\subsection{Accès aux fonctions de PARI/GP: commande {\tt pari}}\index{pari}
La commande {\tt pari} sans argument exporte les fonctions de pari
qui n'ont pas d'homonymes sous {\tt Xcas} en leur nom habituel sous PARI/GP.\\
Toutes les commandes sont aussi exportées sous leur nom d'origine
avec le préfixe {\tt pari\_}.

La commande {\tt pari} avec en premier argument un chaine de caractère
- le nom d'une commande PARI - et d'éventuels autres arguments
exécute la commande PARI avec les autres arguments. \\
Par exemple :
\begin{itemize}
\item On tape :\\
{\tt pari()} puis {\tt weber(1+i)} ou directement\\
{\tt pari("weber",1+i)}, cela exécute la commande {\tt weber} de PARI
avec comme argument {\tt 1+i}. La commande {\tt weber} n'existant pas sous 
{\tt Xcas}.
\item On tape :\\
{\tt pari("content",[25,15,50,75])} ou \\
{\tt pari\_content([25,15,50,75])}, cela exécute la commande 
{\tt content} de PARI avec comme argument {\tt [25,15,50,75]} et renvoie 
{\tt 5} qui est le pgcdde la liste d'entiers donn\'ee en argument alors que 
{\tt pari()} puis {\tt content([25,15,50,75])} ex\'ecute la commande 
{\tt content} de {\tt Xcas} et renvoie aussi {\tt 5} car {\tt content}
est une commande {\tt Xcas} qui a comme argument un polyn\^ome donn\'e sous sa
forme symbolique ou par la liste de ses coefficients et qui renvoie le m\^eme 
r\'esultat que la commande {\tt content} de PARI car on a :\\
{\tt content([25,15,50,75])=content(25x\verb|^|3)+15x\verb|^|2+50x+75=5}
\item  On tape :\\
{\tt pari("gcd",[4,3,2,15],[20,30,50,75])} ou\\
{\tt pari\_gcd([4,3,2,15],[20,30,50,75])}, cela exécute la 
commande {\tt gcd} de PARI d'arguments {\tt L1=[4,3,2,15]} et
{\tt L2=[20,30,50,75]} qui renvoie la matrice :\\
{\tt [[4,1,2,5],[2,3,2,15],[2,1,2,5],[1,3,1,15]]} :c'est la matrice
{\tt M[j,k]}  \'egale au pgcd des entiers {\tt L1[j]} et {\tt L2[k]} alors que, :\\ 
{\tt pari()} puis\\ 
{\tt gcd([4,3,2,15],[20,30,50,75])} renvoie {\tt [4,3,2,15]} car {\tt gcd}
est une commande {\tt Xcas} qui avec comme argument 2 listes {\tt L1} et  
{\tt L2} renvoie la liste {\tt L3[j]} des pgcd de {\tt L1[j]} et {\tt L2[j]}
c'est \`a dire la diagonale de la matrice pr\'ec\'edente car on a :\\
{\tt gcd([4,3,2,15],[20,30,50,75])=\\diag(pari("gcd", [4,3,2,15],[20,30,50,75]))}
\end{itemize}
La documentation de PARI/GP est disponible  depuis le menu
Aide->Manuels.

\section{Les r\'eels}
\subsection{\'Evaluer un r\'eel et nombre de digits : {\tt evalf} et {\tt Digits}, {\tt DIGITS})}\index{evalf}\index{Digits}\index{DIGITS}
Il faut distinguer le nombre r\'eel de sa valeur num\'erique qui est un nombre 
flottant.\\
La pr\'ecision des nombres flottants, en nombre de chiffres est contr\^ol\'ee
 par la variable {\tt Digits} qui vaut 12 par d\'efaut. \\
Une expression peut \^etre \'evalu\'ee en flottant gr\^ace \`a la commande 
{\tt evalf}.\\
{\bf Attention !!!!}\\
 Les nombres flottants sont contagieux (!) car une expression 
qui comporte un nombre flottant est calcul\'ee en flottant.\\
 On tape :
\begin{center}{\tt 1+1/2}\end{center}
On obtient :
\begin{center}{\tt 3/2}\end{center}
On tape :
\begin{center}{\tt 1.0+1/2}\end{center}
On obtient :
\begin{center}{\tt 1.5}\end{center}
On tape :
\begin{center}{\tt exp(pi*sqrt(20))}\end{center}
On obtient :
\begin{center}{\tt exp(pi*2*sqrt(5)) }\end{center}
Avec la commande {\tt evalf}, on tape :
\begin{center}{\tt evalf(exp(pi*2*sqrt(5)))}\end{center}
On obtient :
\begin{center}{\tt 1263794.75367}\end{center}
On tape :
\begin{center}{\tt 1.1\verb|^|{20}}\end{center}
On obtient :
\begin{center}{\tt 6.72749994933}\end{center}
On tape :
\begin{center}{\tt sqrt(2)\verb|^|21}\end{center}
On obtient :
\begin{center}{\tt sqrt(2)*2\verb|^|10}\end{center}
On tape pour avoir 30 chiffres significatifs :
\begin{center}{\tt Digits:=30}\end{center}
On tape pour avoir la valeur num\'erique de $e^{\pi\sqrt{163}}$:
\begin{center}{\tt evalf(exp(pi*sqrt(163)))}\end{center}
On obtient :
\begin{center}{\tt 0.262537412640768743999999999985e18}\end{center}

\subsection{Les fonctions infix\'ees de base sur les r\'eels : {\tt +,-,*,/,\^{ }}}\index{+,-,*,/,\^{ }}
\noindent {\tt +,-,*,/,\^{ }} sont les op\'erateurs habituels pour faire
des additions, des soustractions, des multiplications, des divisions et des 
\'el\'evations \`a une puissance enti\`ere ou fractionnaire.\\
On tape :
\begin{center}{\tt 3+2}\end{center}
On obtient :
\begin{center}{\tt 5}\end{center}
 On tape :
\begin{center}{\tt 3-2}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
 On tape :
\begin{center}{\tt 3*2}\end{center}
On obtient :
\begin{center}{\tt 6}\end{center}
On tape :
\begin{center}{\tt 3/2}\end{center}
On obtient :
\begin{center}{\tt 3/2}\end{center}
On tape :
\begin{center}{\tt 3.2/2.1}\end{center}
On obtient :
\begin{center}{\tt 1.52380952381}\end{center}
On tape :
\begin{center}{\tt 3\verb|^|2}\end{center}
On obtient :
\begin{center}{\tt 9}\end{center}
On tape :
\begin{center}{\tt 3.2\verb|^|2.1}\end{center}
On obtient :
\begin{center}{\tt 11.5031015682}\end{center}
{\bf Remarque}\\
Si vous avez une touche carr\'ee ou une touche cube sur votre clavier vous 
pouvez l'utiliser, par exemple : ${\tt 3^2}$  vaut 9.\\
{\bf Remarque sur les puissances fractionnaires}\\
Par d\'efinition  $a^frac{p}{q}=\exp(frac{p}{q}*\ln(a))$ et donc $a^frac{p}{q}$
n'est d\'efini que pour $a>0$.\\
Il y a donc une diff\'erence entre :\\
$\sqrt[n]{a}$ et $a^frac{1}{n}$ lorsque $n$ est impair.\\
Si on veut, par exemple, tracer la courbe $y=\sqrt[3]{x^3-x^2}$, il faut 
taper :\\
{\tt plotfunc([(x\verb|^|3-x\verb|^|2)\verb|^|(1/3),-(x\verb|^|2-x\verb|^|3)\verb|^|(1/3)],x,xstep=0.01)}\\
on peut aussi taper : \\
{\tt plotimplicit(y\verb|^|3=x\verb|^|3-x\verb|^|2)} 

\subsection{Les fonctions prefix\'ees de base sur les r\'eels : {\tt rdiv}}\index{rdiv} 
{\tt rdiv} est l'op\'erateur prefix\'e pour faire des divisions.\\
On tape :
\begin{center}{\tt rdiv(3,2}\end{center}
On obtient :
\begin{center}{\tt 3/2}\end{center}
On tape :
\begin{center}{\tt rdiv(3.2,2.1}\end{center}
On obtient :
\begin{center}{\tt 1.52380952381}\end{center}

\subsection{La fonction racine n-i\`eme : {\tt root}}\index{root}
\noindent{\tt root} a deux arguments : un entier $n$ et un nombre $a$.\\
{\tt root} renvoie la racine $n$-i\`eme de $a$ (i.e. $a^{1/n}$).\\
On tape :
\begin{center}{\tt root(3,2)}\end{center}
ou on tape :
\begin{center}{\tt 2\verb|^|(1/3)}\end{center}
On obtient :
\begin{center}{\tt 2\verb|^|(1/3)}\end{center}
On tape :
\begin{center}{\tt root(3,2.0)}\end{center}
ou on tape :
\begin{center}{\tt 2.\verb|^|(1/3)}\end{center}
On obtient :
\begin{center}{\tt 1.259921049892}\end{center}
On tape :
\begin{center}{\tt root(3,sqrt(2))}\end{center}
ou on tape :
\begin{center}{\tt sqrt(2)\verb|^|(1/3)}\end{center}
On obtient :
\begin{center}{\tt 2\verb|^|(1/6)}\end{center}

\subsection{La fonction exponentielle integrale $Ei$ : {\tt Ei}}\index{Ei}
\noindent{\tt Ei} a comme argument un nombre complexe $a$.\\ 
{\tt Ei} calcule les valeurs de la fonction $Ei$ au point $a$.\\
On a par d\'efinition :
\[ Ei(x)=\int_{t=-\infty}^x\frac{\exp(t)}{t} dt \]
Pour $x>0$, on prolonge par la valeur principale de l'intégrale
(les morceaux en $0^-$ et $0^+$ se compensent).
On a : 
\[ Ei(0)=-\infty, \quad Ei(-\infty)=0 \]
Lorsque l'on est proche de $x=0$ on sait que~:
\[ \frac{\exp(x)}{x}=\frac{1}{x}+1+\frac{x}{2!}+\frac{x^2}{3!}+...+\frac{x^n}{(n-1)!}.... \]
on a donc pour $x\in \C-\R^+$, (la fonction est discontinue sur $\R^+$)~:
\[ Ei(x)=\ln(-x)+\gamma + x+\frac{x^2}{2.2!}+\frac{x^3}{3.3!}+...\]
o\`u $\gamma$ = la constante d'Euler = 0.57721566490..\\
sur l'axe $x>0$ on prend :
$Ei(x)=\ln(x)+\gamma + x+\frac{x^2}{2.2!}+\frac{x^3}{3.3!}+...$\\ 
On tape :
\begin{center}{\tt Ei(1.)}\end{center}
On obtient :
\begin{center}{\tt 1.89511781636}\end{center}
On tape :
\begin{center}{\tt Ei(-1.)}\end{center}
On obtient :
\begin{center}{\tt -0.219383934396}\end{center}
On tape :
\begin{center}{\tt  Ei(1.)-Ei(-1.)}\end{center}
On obtient :
\begin{center}{\tt 2.11450175075}\end{center}
On tape :
\begin{center}{\tt int((exp(x)-1)/x,x=-1..1.)}\end{center}
On obtient :
\begin{center}{\tt 2.11450175075}\end{center}
On tape :
\begin{center}{\tt evalf(Ei(-1)-sum((-1)\verb|^|n/n/n!,n=1..100))}\end{center}
On obtient la constante d'Euler $\gamma$ :
\begin{center}{\tt 0.577215664901532860606507}\end{center}

\subsection{La fonction cosinus integral $Ci$ : {\tt Ci}}\index{Ci}
\noindent{\tt Ci} a comme argument un nombre  complexe $a$.\\ 
{\tt Ci} calcule les valeurs de la fonction $Ci$ au point $a$.\\
On a par d\'efinition :
\[ Ci(x)=\int_{t=+\infty}^x\frac{\cos(t)}{t} dt
=\ln(x)+\gamma+\int_0^x \frac{cos(t)-1}{t} \ dt \]
On a : $Ci(0)=-\infty$, $ Ci(-\infty)=i\pi$, $ Ci(+\infty)=0$.
Lorsque l'on est proche de $x=0$ on sait que 
\[ \frac{\cos(x)}{x}=\frac{1}{x}-\frac{x}{2}+\frac{x^3}{4!}+...+(-1)^n\frac{x^{2n-1}}{(2n)!}.... \]
ce qui donne par intégration le développement en séries de Ci.\\
On tape :
\begin{center}{\tt Ci(1.)}\end{center}
On obtient :
\begin{center}{\tt 0.337403922901}\end{center}
On tape :
\begin{center}{\tt Ci(-1.)}\end{center}
On obtient :
\begin{center}{\tt 0.337403922901+3.14159265359*i}\end{center}
On tape :
\begin{center}{\tt  Ci(1.)-Ci(-1.)}\end{center}
On obtient :
\begin{center}{\tt -3.14159265359*i}\end{center}
On tape :
\begin{center}{\tt int((cos(x)-1)/x,x=-1..1.)}\end{center}
On obtient :
\begin{center}{\tt -3.14159265359*i}\end{center}

\subsection{La fonction sinus integral $Si$ : {\tt Si}}\index{Si}
\noindent{\tt Si} a comme argument un nombre complexe $a$.\\ 
{\tt Si} calcule les valeurs de la fonction $Si$ au point $a$.\\
On a par d\'efinition 
\[ Si(x)=\int_{t=0}^x\frac{\sin(t)}{t} dt \]
On a $Si(0)=0$, $ Si(-\infty)=-\frac{\pi}{2}$, $ Si(+\infty)=\frac{\pi}{2}$.
Lorsque l'on est proche de $x=0$ on sait que :
\[ \frac{\sin(x)}{x}=1-\frac{x^2}{3!}+\frac{x^4}{5!}+...+(-1)^n\frac{x^{2n}}{(2n+1)!}.... \]
ce qui donne par intégration le développement en séries de Si en 0.
On observe aussi que {\tt Si} est une fonction impaire.\\
On tape :
\begin{center}{\tt Si(1.)}\end{center}
On obtient :
\begin{center}{\tt 0.946083070367}\end{center}
On tape :
\begin{center}{\tt Si(-1.)}\end{center}
On obtient :
\begin{center}{\tt -0.946083070367}\end{center}
On tape :
\begin{center}{\tt  Si(1.)+Si(-1.)}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
On tape :
\begin{center}{\tt  Si(1.)-Si(-1.)}\end{center}
On obtient :
\begin{center}{\tt 1.89216614073}\end{center}
On tape :
\begin{center}{\tt int(sin(x)/x,x=-1..1.)}\end{center}
On obtient :
\begin{center}{\tt 1.89216614073}\end{center}

\subsection{La fonction de $Heaviside$ : {\tt Heaviside}}\index{Heaviside}
\noindent{\tt Heaviside} a comme argument un nombre $a$.\\ 
{\tt Heaviside} calcule les valeurs de la fonction $Heaviside$ au point $a$.\\
On a par d\'efinition :\\
$$Heaviside(x)=0 \mbox{ si } x<0 \mbox{ et } 1 \mbox{ sinon}$$
On tape :
\begin{center}{\tt Heaviside(2)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
On tape :
\begin{center}{\tt Heaviside(-4)}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}

\subsection{La distribution de $Dirac$ : {\tt Dirac}}\index{Dirac}
\noindent{\tt Dirac} a comme argument un nombre $a$.\\ 
{\tt Dirac} est la  distribution de $Dirac$, c'est la distribution associ\'ee 
\`a la fonction {\tt Heaviside}.\\
On a par d\'efinition :\\
$$Dirac(x)=0 \mbox{ si } x\neq 0 \mbox{ et } \infty \mbox{ sinon}$$

et si $a\geq 0$ et $b\neq 0$ on a :\\
$$\int_{b}^{a}Dirac(x)dx=1$$
$$\int_{b}^{a}Dirac(x)f(x)dx=[Heaviside(x)f(x)]_{b}^{a}-\int_{b}^{a}Heaviside(x)f'(x)dx=f(0)$$

$$\int_{-\infty}^{+\infty}Dirac(x)*f(x)dx=f(0)$$
On tape :
\begin{center}{\tt int(Dirac(x)*sin(x),x,-1,2)}\end{center}
On obtient :
\begin{center}{\tt sin(0)}\end{center}
On tape :
\begin{center}{\tt int(Dirac(x-1)*sin(x),x,-1,2)}\end{center}
On obtient :
\begin{center}{\tt sin(1)}\end{center}
\subsection{La fonction $erf$ : {\tt erf}}\index{erf}
\noindent{\tt erf} a comme argument un nombre $a$.\\ 
{\tt erf} calcule les valeurs de la fonction $erf$ au point $a$.\\
On a par d\'efinition :\\
$$erf(x)=\frac{2}{\sqrt{\pi}}\int_0^{x}e^{-t^2}dt$$
On a : $$erf(+\infty)=1$$
$$ erf(-\infty)=-1$$
En effet on sait que :\\
$$\int_0^{+\infty}e^{-t^2}dt=\frac{\sqrt{\pi}}{2}$$
On tape :
\begin{center}{\tt erf(1)}\end{center}
On obtient :
\begin{center}{\tt 0.84270079295}\end{center}
On tape :
\begin{center}{\tt erf(1/(sqrt(2)))*1/2+0.5}\end{center}
On obtient :
\begin{center}{\tt 0.841344746069}\end{center}
{\bf Remarque}\\
Il y a une relation entre les fonctions {\tt erf}  et {\tt normal\_cdf} :\\
{\tt normal\_cdf}$(x)=\frac{1}{2}+\frac{1}{2}${\tt erf}$(\frac{x}{\sqrt{2}})$\\
En effet :\\
normal\_cdf$(x)=\frac{1}{2}+\frac{1}{\sqrt{2\pi}}\int_0^{x}e^{-t^2/2}dt$\\
donc avec le changement de variables $t=u* \sqrt{2}$ on a :\\
normal\_cdf$(x)=\frac{1}{2}+\frac{1}{\sqrt{\pi}}\int_0^{\frac{x}{\sqrt{2}}}e^{-u^2}du=\frac{1}{2}+\frac{1}{2}$erf$(\frac{x}{\sqrt{2}})$\\
On v\'erifie en tapant :\\
{\tt normal\_cdf(1)=0.841344746069}

\subsection{La fonction $erfc$ : {\tt erfc}}\index{erfc}
\noindent{\tt erfc}  a comme argument un nombre $a$.\\
{\tt erfc} calcule les valeurs de la fonction $erfc$ au point $a$.\\
On a par d\'efinition :\\
$$erfc(x)=\frac{2}{\sqrt{\pi}}\int_x^{+\infty}e^{-t^2}dt=1-erf(x)$$
On a : $$erfc(0)=1$$
$$ erfc()=-1$$
En effet on sait que :\\
$$\int_0^{+\infty}e^{-t^2}dt=\frac{\sqrt{\pi}}{2}$$
On tape :
\begin{center}{\tt erfc(1)}\end{center}
On obtient :
\begin{center}{\tt 0.15729920705}\end{center}
On tape :
\begin{center}{\tt 1- erfc(1/(sqrt(2)))*1/2}\end{center}
On obtient :
\begin{center}{\tt 0.841344746069}\end{center}
{\bf Remarque}\\
 Il y a une relation entre les fonctions {\tt erfc}  et {\tt normal\_cdf} :\\
{\tt normal\_cdf}$(x)=1-\frac{1}{2}${\tt erfc}$(\frac{x}{\sqrt{2}})$\\
En effet :\\
normal\_cdf$(x)=\frac{1}{2}+\frac{1}{\sqrt{2\pi}}\int_0^{x}e^{-t^2/2}dt$\\
donc avec le changement de variables $t=u* \sqrt{2}$\\
normal\_cdf$(x)=\frac{1}{2}+\frac{1}{\sqrt{\pi}}\int_0^{\frac{x}{\sqrt{2}}}e^{-u^2}du=1-\frac{1}{2}$erfc$(\frac{x}{\sqrt{2}})$\\
On v\'erifie en tapant :\\
{\tt normal\_cdf(1)=0.841344746069}

\subsection{La fonction $\Gamma$ : {\tt Gamma}}\index{Gamma}
\noindent{\tt Gamma} a comme argument un nombre $a$.\\
{\tt Gamma} calcule les valeurs de la fonction $\Gamma$ au point $a$.\\
On a par d\'efinition :\\
$$\Gamma(x)=\int_0^{+\infty}e^{-t}t^{x-1}dt, \mbox{ si } x>0$$
et on utilise la formule : 
$$\Gamma(x+1)=x*\Gamma(x) \mbox{ si } x \mbox{ n'est pas un entier negatif}$$
Donc : 
$$\Gamma(1)=1$$
$$ \Gamma(x+1)=x*\Gamma(x)$$
et ainsi :
$$\Gamma(n+1)=n!$$
On tape :
\begin{center}{\tt Gamma(5)}\end{center}
On obtient :
\begin{center}{\tt 24}\end{center}
On tape :
\begin{center}{\tt Gamma(1/2)}\end{center}
On obtient :
\begin{center}{\tt sqrt(pi)}\end{center}
On tape :
\begin{center}{\tt Gamma(0.7)}\end{center}
On obtient :
\begin{center}{\tt 1.29805533265}\end{center}
On tape :
\begin{center}{\tt Gamma(-0.3)}\end{center}
On obtient :
\begin{center}{\tt -4.32685110883}\end{center}
En effet : {\tt Gamma(0.7)=-0.3*Gamma(-0.3)}\\
On tape :
\begin{center}{\tt Gamma(-1.3)}\end{center}
On obtient :
\begin{center}{\tt 3.32834700679}\end{center}
En effet :\\
 {\tt Gamma(0.7)=-0.3*Gamma(-0.3)=(-0.3)*(-1.3)*Gamma(-1.3)}

\subsection{La fonction $\beta$ : {\tt Beta}}\index{Beta}
\noindent{\tt Beta} a comme argument deux r\'eels $a,b$.\\
{\tt Beta} calcule les valeurs de la fonction $\beta$ au point $a,b$ de 
$\mathbb R^2$.\\
On a par d\'efinition :\\
$$\beta(x,y)=\frac{\Gamma(x)*\Gamma(y)}{\Gamma(x+y)}$$
On a : $$\beta(1,1)=1$$
$$ \beta(n,1)=\frac{1}{n}$$
et :
$$\beta(n,2)=\frac{1}{n(n+1)}$$
{\tt Beta(x,y)}  est d\'efini pour $x$ et $y$ r\'eels positifs (pour que 
l'int\'egrale $\int_0^{+\infty}e^{-t}t^{x-1}dt$ soit convergente) et pour $x$ 
et $y$ non entiers n\'egatifs.\\
On tape :
\begin{center}{\tt Beta(5,2)}\end{center}
On obtient :
\begin{center}{\tt 1/30}\end{center}
On tape :
\begin{center}{\tt Beta(x,y)}\end{center}
On obtient :
\begin{center}{\tt Gamma(x)*Gamma(y)/Gamma(x+y)}\end{center}
On tape :
\begin{center}{\tt Beta(5.1,2.2)}\end{center}
On obtient :
\begin{center}{\tt 0.0242053671402}\end{center}

\subsection{Les derivées de la fonction DiGamma : {\tt Psi}}\index{Psi}
\noindent{\tt Psi} a comme arguments un r\'eel $a$ et un entier $n$
(par d\'efault$n=0$\\ 
{\tt Psi} est la valeur de la $n$-i\`eme  d\'eriv\'ee de la fonction DiGamma
au point $a$. \\
La fonction DiGamma est la d\'eriv\'ee de $\ln(\Gamma(x))$.\\
On tape :
\begin{center}{\tt Psi(3,1)}\end{center}
On obtient :
\begin{center}{\tt pi\verb|^|2/6-5/4}\end{center}
On peut ommettre le param\`etre $n$ lorsque $n=0$.\\
Lorsque
{\tt Psi} a comme seul param\`etre un nombre $a$,
{\tt Psi} renvoie la valeur de la fonction DiGamma au point $a$ :\\ 
on a donc {\tt Psi(a,0)=Psi(a)}.\\
 On tape :
\begin{center}{\tt Psi(3)}\end{center}
On obtient :
\begin{center}{\tt  Psi(1)+3/2}\end{center}
 On tape :
\begin{center}{\tt evalf(Psi(3))}\end{center}
On obtient :
\begin{center}{\tt  .922784335098}\end{center}

\subsection{La fonction $\zeta$ : {\tt Zeta}}\index{Zeta}
\noindent{\tt Zeta} a comme argument un r\'eel $x$.\\ 
{\tt Zeta} renvoie pour $x>1$ : $\displaystyle \sum_{n=1}^{+\infty} \frac{1}{n^x}$.\\
On tape :
\begin{center}{\tt Zeta(2)}\end{center}
On obtient :
\begin{center}{\tt pi\verb|^|2/6}\end{center}
On tape :
\begin{center}{\tt Zeta(4)}\end{center}
On obtient :
\begin{center}{\tt pi\verb|^|4/90}\end{center}

\subsection{Les fonctions de Airy : {\tt Airy\_Ai} et {\tt Airy\_Bi}}\index{Airy\_Ai}\index{Airy\_Bi}
\noindent{\tt Airy\_Ai} et {\tt Airy\_Bi} a comme argument un r\'eel $x$.\\
{\tt Airy\_Ai} et {\tt Airy\_Bi} sont deux solutions ind\'ependantes
de l'\'equation : \\
$y^{\prime\prime}-x*y=0$.\\
On d\'efinit :\\
$Airy\_Ai(x) = (1/\pi) \int_0^\infty \cos(t^3/3 + x*t) dt$\\
$Airy\_Bi(x) = (1/\pi) \int_0^\infty (e^{- t^3/3} + \sin( t^3/3 + x*t)) dt$\\
On a aussi :\\
{\tt Airy\_Ai(x)} v\'erifie :\\
${\tt Airy\_Ai(x)=Airy\_Ai(0)*f(x)+Airy\_Ai^\prime (0)*g(x)}$ et\\
{\tt Airy\_Bi} v\'erifie :\\
${\tt Airy\_Bi(x)=\sqrt{3}(Airy\_Ai(0)*f(x)-Airy\_Ai^\prime (0)*g(x))}$\\
o\`u f et g sont deux s\'eries enti\`eres solutions de  
$w^{\prime\prime}-x*w=0$ :\\
$$f(x)=\sum_{k=0}^\infty 3^k\left (\frac{\Gamma(k+\frac{1}{3})}{\Gamma(\frac{1}{3})}\right ) \frac{x^{3k}}{(3k)!}$$
$$g(x)=\sum_{k=0}^\infty 3^k\left (\frac{\Gamma(k+\frac{2}{3})}{\Gamma(\frac{2}{3})}\right ) \frac{x^{3k+1}}{(3k+1)!}$$
On tape :
\begin{center}{\tt Airy\_Ai(1)}\end{center}
On obtient :
\begin{center}{\tt 0.135292416313}\end{center}
On tape :
\begin{center}{\tt Airy\_Bi(1)}\end{center}
On obtient :
\begin{center}{\tt 1.20742359495}\end{center}
On tape :
\begin{center}{\tt Airy\_Ai(0)}\end{center}
On obtient :
\begin{center}{\tt 0.355028053888}\end{center}
On tape :
\begin{center}{\tt Airy\_Bi(0)}\end{center}
On obtient :
\begin{center}{\tt 0.614926627446}\end{center}

\section{Les permutations}
Une permutation $p$ de longueur $n$ est une bijection de $[0..n-1]$ sur 
$[0..n-1]$ et est repr\'esent\'ee par la liste :
 $[p(0),p(1),p(2)...p(n-1)]$.\\
Par exemple, la permutation $p$ repr\'esent\'ee par $[1,3,2,0]$ est 
l'application de $[0,1,2,3]$ sur  $[0,1,2,3]$ d\'efinie par :
$p(0)=1,\ p(1)=3,\ p(2)=2,\  p(3)=0$.\\
Un cycle $c$ d'ordre $p$ est  repr\'esent\'e par la  liste 
$[(a_0,...,a_{p-1}]$ ($0\leq p\leq n-1$); c'est une permutation telle que :\\
$c(a_i)=a_{i+1}$ pour $(i=0..p-2)$, $c(a_{p-1})=a_0$ et
 $c(a_i)=a_i (i=p+1..n)$. \\
Un cycle $c$ est  repr\'esent\'e par la  liste et une d\'ecomposition en 
cycles par une liste de listes.\\
 Par exemple, le cycle $c$  repr\'esent\'e par la  liste $[3,2,1]$ est la 
permutation $c$ d\'efinie par  $c(3)=2,\ c(2)=1,\ c(1)=3,\ c(0)=0$ (qui est
 repr\'esent\'e en tant que permutation par la liste $[0,3,1,2]$).
 
\subsection{Permutation aléatoire : {\tt randperm}}\index{randperm}
\noindent{\tt randperm} a comme argument un entier $n$.\\
{\tt randperm} renvoie une permutation aléatoire de $[0..n-1]$.\\
On tape :
\begin{center}{\tt randperm(3)}\end{center}
On obtient :
\begin{center}{\tt [2,0,1]}\end{center}

\subsection{Permutation pr\'ec\'edente : {\tt prevperm}}\index{prevperm}
\noindent{\tt prevperm} a comme argument une permutation.\\
{\tt prevperm} renvoie la permutation pr\'ec\'edente dans l'ordre 
lexicographique, ou {\tt undef} s'il n'y en a pas.\\
On tape :
\begin{center}{\tt prevperm([0,3,1,2])}\end{center}
On obtient :
\begin{center}{\tt [0,2,3,1]}\end{center}

\subsection{Permutation suivante : {\tt nextperm}}\index{nextperm}
\noindent{\tt nextperm} a comme argument une permutation.\\
{\tt  nextperm} renvoie la permutation suivante dans l'ordre 
lexicographique, ou {\tt undef} s'il n'y en a pas.\\
On tape :
\begin{center}{\tt nextperm([0,2,3,1])}\end{center}
On obtient :
\begin{center}{\tt [0,3,1,2]}\end{center}

\subsection{Décomposition en cycles : {\tt permu2cycles}}\index{permu2cycles}
\noindent {\tt permu2cycles} a comme argument une permutation.\\
{\tt permu2cycles} renvoie sa d\'ecomposition en cycles.\\
On tape :
\begin{center}{\tt permu2cycles([1,3,4,5,2,0])}\end{center}
On obtient :
\begin{center}{\tt [[0,1,3,5],[2,4]]}\end{center}
Dans la r\'eponse les cycles d'ordre 1 sont omis sauf celui qui vaut $[n-1]$ (pour pouvoir d\'eterminer la valeur de $n$).\\
On tape :
\begin{center}{\tt permu2cycles([0,1,2,4,3,5])}\end{center}
On obtient :
\begin{center}{\tt [[5],[3,4]]}\end{center}
On tape :
\begin{center}{\tt permu2cycles([0,1,2,3,5,4])}\end{center}
On obtient :
\begin{center}{\tt [[4,5]]}\end{center}
\subsection{Produit de cycles : {\tt cycles2permu}}\index{cycles2permu}
\noindent{\tt cycles2permu} a comme argument une liste de cycles.\\
{\tt cycles2permu} renvoie la permutation (de longueur $n$ la plus petite 
possible) \'egale au produit des cycles de
la liste donn\'ee en argument (voir {\tt permu2cycles}).\\
On tape :
\begin{center}{\tt cycles2permu([[1,3,5],[2,4]])}\end{center}
On obtient :
\begin{center}{\tt [0,3,4,5,2,1]}\end{center}
On tape :
\begin{center}{\tt cycles2permu([[2,4]])}\end{center}
On obtient :
\begin{center}{\tt [0,1,4,3,2]}\end{center}
On tape :
\begin{center}{\tt cycles2permu([[5],[2,4]])}\end{center}
On obtient :
\begin{center}{\tt [0,1,4,3,2,5]}\end{center}
\subsection{Transformer un cycle en permutation : {\tt cycle2perm}}\index{cycle2perm}
\noindent{\tt cycle2perm} a comme argument un cycle.\\
{\tt cycle2perm} renvoie la  permutation de longueur la plus petite possible
correspondant au cycle
donn\'e en argument (voir aussi {\tt permu2cycles} et {\tt cycles2permu}).\\
On tape :
\begin{center}{\tt cycle2perm([1,3,5])}\end{center}
On obtient :
\begin{center}{\tt [0,3,2,5,4,1]}\end{center}
\subsection{Transformer une permutation en une matrice : {\tt permu2mat}}\index{permu2mat}
\noindent{\tt permu2mat} a comme argument une permutation $p$ de 
longueur $n$.\\
{\tt permu2mat} renvoie la matrice obtenue en permutant, selon la permutation 
$p$, les lignes de la matrice identité d'ordre $n$.\\
On tape :
\begin{center}{\tt permu2mat([2,0,1])}\end{center}
On obtient :
\begin{center}{\tt [[0,0,1],[1,0,0],[0,1,0]]}\end{center}

\subsection{Reconnaitre une permutation : {\tt is\_permu}}\index{is\_permu}
\noindent{\tt is\_permu} a comme argument une liste.\\
{\tt is\_permu} est une fonction bool\'eenne qui renvoie 1 ou 0 selon que 
l'argument est ou n'est pas une permutation.\\
On tape :
\begin{center}{\tt is\_permu([2,1,3]) }\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
On tape :
\begin{center}{\tt is\_permu([2,1,3,0]) }\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}

\subsection{Reconnaitre un cycle : {\tt is\_cycle}}\index{is\_cycle}
\noindent{\tt is\_cycle} est une fonction bool\'eenne qui renvoie 1 ou 0 selon que l'argument est ou n'est pas un cycle.\\
On tape :
\begin{center}{\tt is\_cycle([2,1,3]) }\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
On tape :
\begin{center}{\tt is\_cycle([2,1,3,2]) }\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}

\subsection{Composition de deux permutations : {\tt p1op2}}\index{p1op2}
\noindent{\tt p1op2} a comme arguments deux permutations.\\
{\tt p1op2} renvoie la  permutation obtenue par la composition :
$$1^{\mbox{er}}\mbox{arg} \circ 2^{\mbox{i\`eme}} \mbox{arg}$$ 
On tape :
\begin{center}{\tt p1op2([3,4,5,2,0,1],[2,0,1,4,3,5])}\end{center}
On obtient :
\begin{center}{\tt [5,3,4,0,2,1]}\end{center}
{\bf Attention}\\
C'est la permutation donn\'ee comme deuxi\`eme argument qui est 
effectu\'ee la premi\`ere.
\subsection{Produit d'un cycle et d'une permutation : {\tt c1op2}}\index{c1op2}
\noindent{\tt c1op2} a comme arguments un cycle et une permutation.\\
{\tt c1op2} renvoie la  permutation obtenue par la composition :
$$1^{\mbox{er}}\mbox{arg} \circ 2^{\mbox{i\`eme}} \mbox{arg}$$ 
On tape :
\begin{center}{\tt c1op2([3,4,5],[2,0,1,4,3,5])}\end{center}
On obtient :
\begin{center}{\tt [2,0,1,5,4,3]}\end{center}
{\bf Attention}\\
C'est la permutation donn\'ee comme deuxi\`eme argument qui est 
effectu\'ee la premi\`ere.
\subsection{Produit d'une permutation et d'un cycle : {\tt p1oc2}}\index{p1oc2}
\noindent{\tt p1oc2} a comme arguments une permutation et un cycle.\\
{\tt p1oc2} renvoie la  permutation obtenue par la composition :
$$1^{\mbox{er}}\mbox{arg} \circ 2^{\mbox{i\`eme}} \mbox{arg}$$ 
On tape :
\begin{center}{\tt p1oc2([3,4,5,2,0,1],[2,0,1])}\end{center}
On obtient :
\begin{center}{\tt [4,5,3,2,0,1]}\end{center}
{\bf Attention}\\
C'est le cycle donn\'e comme deuxi\`eme argument qui est 
effectu\'e en premier.
\subsection{Produit de deux cycles : {\tt c1oc2}}\index{c1oc2}
\noindent {\tt c1oc2} a comme arguments deux cycles.\\
{\tt c1oc2} renvoie la  permutation obtenue par la composition :
$$1^{\mbox{er}}\mbox{arg} \circ 2^{\mbox{i\`eme}} \mbox{arg}$$
On tape :
\begin{center}{\tt c1oc2([3,4,5],[2,0,1])}\end{center}
On obtient :
\begin{center}{\tt [1,2,0,4,5,3]}\end{center}
{\bf Attention}\\
C'est le cycle donn\'e comme deuxi\`eme argument qui est 
effectu\'e en premier.

\subsection{Signature d'une permutation : {\tt signature}}\index{signature}
\noindent{\tt signature} a comme argument une permutation.\\
{\tt signature} renvoie la signature de la permutation donn\'ee en argument.\\
La signature d'une permutation vaut :
\begin{itemize}
\item 1 si elle peut se d\'ecomposer en un produit pair de transpositions,
\item -1 si elle peut se d\'ecomposer en un produit impair de transpositions.
\end{itemize}
La signature d'un cycle d'ordre $k$ est : $(-1)^{k+1}$.\\ 
 On tape :
\begin{center}{\tt signature([3,4,5,2,0,1])}\end{center}
On obtient :
\begin{center}{\tt -1}\end{center}
En effet {\tt permu2cycles([3,4,5,2,0,1])=[[0,3,2,5,1,4]]}.
\subsection{Inverse d'une permutation : {\tt perminv}}\index{perminv}
\noindent{\tt perminv} a comme argument une permutation.\\
{\tt perminv} renvoie la permutation inverse de la permutation donn\'ee en 
argument.\\
On tape :
\begin{center}{\tt perminv([1,2,0])}\end{center}
On obtient
\begin{center}{\tt [2,0,1]}\end{center}
\subsection{Inverse d'un cycle : {\tt cycleinv}}\index{cycleinv}
\noindent{\tt cycleinv} a comme argument un cycle.\\
{\tt cycleinv} renvoie le cycle inverse du cycle donn\'e en argument.\\
On tape :
\begin{center}{\tt cycleinv([2,0,1])}\end{center}
On obtient
\begin{center}{\tt [1,0,2]}\end{center}

\subsection{Ordre d'une permutation : {\tt permuorder}}\index{permuorder}
\noindent{\tt permuorder} a comme argument une permutation.\\
{\tt permuorder} renvoie l'ordre $k$ de la permutation $p$ donn\'ee en argument
 (c'est le plus petit entier $m$ telle que $p^m$ soit l'identit\'e.\\
On tape :
\begin{center}{\tt permuorder([0,2,1])}\end{center}
On obtient
\begin{center}{\tt 2}\end{center}
On tape :
\begin{center}{\tt permuorder([3,2,1,4,0])}\end{center}
On obtient
\begin{center}{\tt 6}\end{center}
%\subsection{Ordre d'un produit de cycles : {\tt cyclesorder}}\index{cyclesorder}
%\noindent{\tt cyclesorder} a comme argument une liste de cycles disjoints.\\
%{\tt cyclesorder} renvoie l'ordre du produit des cycles de cette liste.\\
%Remarque : \\
%Un cycle de longueur $n$ a pour ordre $n$, donc {\tt cyclesorder} est le PPCM
%des longueurs des cycles de la liste puisque les cycles sont disjoints.\\  
%On tape :
%\begin{center}{\tt cyclesorder([[2,0,1],[3,4]])}\end{center}
%On obtient
%\begin{center}{\tt 6}\end{center}
\subsection{Groupe engendré par deux permutations : {\tt groupermu}}\index{groupermu}
\noindent{\tt groupermu} a comme argument deux permutations {\tt a} et {\tt b}.\\
{\tt groupermu} renvoie le groupe des permutations engendré par {\tt a} et {\tt b}.\\
On tape :
\begin{center}{\tt groupermu([0,2,1,3],[3,1,2,0])}\end{center}
On obtient
\begin{center}{\tt [[0,2,1,3],[3,1,2,0],[0,1,2,3],[3,2,1,0]]}\end{center}

\section{Les complexes}
Vous trouverez dans le menu {\tt Math (Cmplx)} les fonctions
 ayant comme param\`etre une expression à valeur complexe.\\
{\bf Remarque}\\
Les nombres complexes sont utilis\'es pour repr\'esenter un point sur l'\'ecran graphique : par exemple, le graphe de $y=f(x)$ est l'ensemble des points $x+i*f(x)$ pour $x$
variant entre {\tt WX-} et {\tt WX+} ({\tt WX-} et {\tt WX+} sont initialis\'es
 avec le menu {\tt Cfg$\blacktriangleright$Configuration graphique}).
\subsection{Les fonctions de base sur les complexes : {\tt +,-,*,/,\^{ }}}\index{+,-,*,/,\^{ }}
\noindent {\tt +,-,*,/,\^{ }} sont les op\'erateurs habituels pour faire
des additions, des soustractions, des multiplications, des divisions et des 
\'el\'evations \`a une puissance enti\`ere ou fractionnaire.\\
On tape :
\begin{center}{\tt (1+2*i)\verb|^|2}\end{center}
On obtient :
\begin{center}{\tt -3+4*i}\end{center}
\subsection{La partie r\'eelle d'un nombre complexe : {\tt re real}}\index{re}\index{real}
\noindent{\tt re} (ou {\tt real}) a comme argument un nombre complexe (resp un 
point $A$).\\
{\tt re} (ou {\tt real}) renvoie la partie r\'eelle de ce nombre complexe (resp
 le point d'affixe la partie r\'eelle de l'affixe de $A$).\\
On tape :
\begin{center}{\tt re(3+4*i)}\end{center}
On obtient :
\begin{center}{\tt 3}\end{center}
\subsection{La partie imaginaire d'un nombre complexe : {\tt im imag}}\index{im}\index{imag}
\noindent{\tt im} (ou {\tt imag}) a comme argument un nombre complexe (resp un 
point $A$).\\
{\tt im} (ou {\tt imag}) renvoie la partie imaginaire de ce nombre complexe 
(resp le point d'affixe la partie imaginaire de l'affixe de $A$).\\
On tape :
\begin{center}{\tt im(3+4*i)}\end{center}
On obtient :
\begin{center}{\tt 4}\end{center}
\subsection{\'Ecriture des complexes sous la forme {\tt re(z)+i*im(z)} : {\tt evalc}}\index{evalc}
\noindent{\tt evalc} a comme argument un nombre complexe {\tt z}.\\
{\tt evalc} renvoie ce nombre complexe, \'ecrit sous la forme 
{\tt re(z)+i*im(z)}.\\
On tape :
\begin{center}{\tt evalc(sqrt(2)*exp(i*pi/4))}\end{center}
On obtient :
\begin{center}{\tt 1+i}\end{center}
\subsection{Le module d'un nombre complexe : {\tt abs}}\index{abs}
\noindent{\tt abs} a comme argument un nombre complexe.\\
{\tt abs} renvoie le module de ce nombre complexe.\\
On tape :
\begin{center}{\tt abs(3+4*i)}\end{center}
On obtient :
\begin{center}{\tt 5}\end{center}
\subsection{L'argument d'un nombre complexe : {\tt arg}}\index{arg|textbf}
\noindent{\tt arg} a comme argument un nombre complexe.\\
{\tt arg} renvoie l'argument de ce nombre complexe.\\
On tape :
\begin{center}{\tt arg(3+4.i)}\end{center}
On obtient :
\begin{center}{\tt atan(4/3)}\end{center}
\subsection{Le nombre complexe normalis\'e : {\tt normalize unitV}}\index{unitV}\index{normalize}
\noindent{\tt normalize} ou {\tt unitV} a comme argument un nombre complexe.\\
{\tt normalize} ou {\tt unitV} renvoie le nombre complexe divis\'e par le
module de ce nombre complexe.\\
On tape :
\begin{center}{\tt normalize(3+4*i)}\end{center}
On obtient :
\begin{center}{\tt (3+4*i)/5}\end{center}
\subsection{Le nombre complexe conjugu\'e : {\tt conj}}\index{conj|textbf}
\noindent{\tt conj} a comme argument un nombre complexe.\\
{\tt conj} renvoie le complexe conjugu\'e de ce nombre complexe.\\
On tape :
\begin{center}{\tt conj(3+4*i)}\end{center}
On obtient :
\begin{center}{\tt 3-4*i}\end{center}
\subsection{Multiplier par le complexe conjugu\'e : {\tt mult\_c\_conjugate multiplier\_conjugue\_complexe}}\index{mult\_c\_conjugate} \index{multiplier\_conjugue\_complexe}
\noindent Si une expression a un d\'enominateur complexe,
{\tt mult\_c\_conjugate} multiplie le num\'erateur et le 
d\'enominateur de cette expression  par le complexe conjugu\'e du
d\'enominateur.\\
Si une expression n'a pas de d\'enominateur complexe,
{\tt mult\_c\_conjugate} multiplie le num\'erateur et le 
d\'enominateur de cette expression  par le complexe conjugu\'e du num\'erateur.\\
On tape :
\begin{center}{\tt mult\_c\_conjugate((2+i)/(2+3*i))}\end{center}
On obtient :
\begin{center}{\tt (2+i)*(2+3*(-i))/((2+3*(i))*(2+3*(-i)))}\end{center}
On tape :
\begin{center}{\tt mult\_c\_conjugate((2+i)/2)}\end{center}
On obtient :
\begin{center}{\tt (2+i)*(2+-i)/(2*(2+-i))}\end{center}
\subsection{Le barycentre de nombres complexes : {\tt barycenter barycentre}}\index{barycentre}\index{barycenter}\label{sec:baryc}
{\bf Voir aussi :} \ref{sec:barycentre2} et \ref{sec:barycentre3}.\\
\noindent{\tt barycentre} a comme argument deux listes de m\^eme longueur 
(resp une matrice ayant deux colonnes) la premi\`ere liste (resp colonne) 
contient des points $A_j$ ou des nombres complexes $a_j$ repr\'esentant 
l'affixe de ces points, la deuxi\`eme liste 
(resp colonne) contient des coefficients r\'eels $\alpha_j$.\\
{\tt barycentre} renvoie le point qui est le barycentre des points $A_j$ 
d'affixes $a_j$ affect\'es des coefficients r\'eels $\alpha_j$ lorsque 
$\sum \alpha_j \neq 0$. Si $\sum \alpha_j = 0$, {\tt barycentre} renvoie une
 erreur.\\
{\bf Attention} pour avoir un nombre complexe il faut demander l'affixe du 
barycentre, sinon vous avez le trac\'e du point barycentre dans l'\'ecran 
g\'eom\'etrique.\\
On tape :
\begin{center}{\tt affixe(barycentre([1+i,1-i],[1,1]))}\end{center}
Ou on tape :
\begin{center}{\tt affixe(barycentre([[1+i,1],[1-i,1]]))}\end{center}
On obtient :
\begin{center}{\tt i}\end{center}

\section{Les expressions alg\'ebriques}
\subsection{Pour \'evaluer une expression : {\tt eval}}\index{eval}\label{sec:evalgeo}
\noindent {\tt eval} sert \`a \'evaluer une expression.\\
 {\tt eval} a un ou deux argument(s) : une expression et \'eventuellement le 
niveau souhait\'e de l'\'evaluation.\\  
Il faut savoir que {\tt Xcas} \'evalue toujours les expressions, sans avoir 
besoin de la commande {\tt eval} : le niveau d'\'evaluation est indiqu\'e dans 
la case {\tt eval} de la {\tt Configuration du CAS} du menu {\tt Cfg} et vaut 
par d\'efaut vaut 25.\\
La commande {\tt eval} est surtout utile lorsqu'on veut \'evaluer une 
sous-expression  dans l'\'editeur d'\'equations.\\
On tape :
\begin{center}{\tt a:=2}\end{center}
On obtient :
\begin{center}{\tt 2}\end{center}
On tape :
\begin{center}{\tt eval(2+3*a)}\end{center}
ou
\begin{center}{\tt 2+3*a}\end{center}
On obtient :
\begin{center}{\tt 8}\end{center}
On tape :
\begin{center}{\tt purge(r);purge(p);a:=1+i*r}\end{center}
\begin{center}{\tt r:=p+1;p:=-4;}\end{center}
on peut alors avoir diff\'erentes \'evaluation de {\tt a} selon le niveau
d\'evaluation demand\'e :
\begin{itemize} 
\item on tape :
\begin{center}{\tt a}\end{center}
On obtient :
\begin{center}{\tt 1-3*i}\end{center}
\item on tape :
\begin{center}{\tt eval(a,1)}\end{center}
On obtient :
\begin{center}{\tt 1+(i)*r}\end{center}
\item on tape :
\begin{center}{\tt eval(a,2)}\end{center}
On obtient :
\begin{center}{\tt 1+(i)*(p+1)}\end{center}
\item on tape :
\begin{center}{\tt eval(a,3)}\end{center}
On obtient :
\begin{center}{\tt 1-3*i}\end{center}
\end{itemize} 
{\bf Remarque}\\
Pour les objets g\'eom\'etriques, en plus de l'\'evaluation exacte (au niveau 
25 par d\'evaut), {\tt Xcas} 
rajoute une \'evaluation num\'erique (au niveau 1) au moment de l'affichage 
pour pouvoir repr\'esenter les objets g\'eom\'etriques dependant de 
param\`etres d\'efinis par {\tt assume} ou par une affectation num\'erique. 

Voici diff\'erents exemples :
\begin{itemize}
\item On tape :
\begin{verbatim}
purge(r);
R:=point(1+i*r);
r:=-3;
\end{verbatim}
Le niveau correspondant \`a {\tt R:=point(1+i*r);} affichera dans tous les cas
le point et sa l\'egende car l'\'evaluation num\'erique pour l'affichage de ce 
niveau est faite au moment de l'affichage donc apr\`es que {\tt r} ait
\'et\'e d\'efini.
\item  On tape :
\begin{verbatim}
purge(r);
purge(p);
R:=point(1+i*r);
r:=p+1;
p:=-4;
\end{verbatim}
Le point {\tt R} n'apparait pas car l'\'evaluation num\'erique au moment de 
l'affichage n'est faite qu'au niveau 1. Ainsi {\tt r} est remplac\'e par 
{\tt p} mais {\tt p} n'est pas remplac\'e donc la commande 
{\tt R:=point(1+i*r);} n'affiche rien.

\item On tape
\begin{verbatim}
purge(r);
R:=point(1+i*r):;
r:=-3;
eval(R,1);
\end{verbatim}
La commande {\tt eval(R,1)} renvoie {\tt point(1+(i)*r)} et dessine le point 
{\tt R} et sa l\'egende. En effet la r\'eponse est \'evalu\'ee formellement
au niveau 1 ce qui donne la r\'eponse {\tt point(1+i*r)} puis pour la 
repr\'esentation graphique, {\tt point(1+i*r)} est \'evalu\'e num\'eriquement 
(sans toucher aux l\'egendes) ce qui permet d'afficher le point.
La l\'egende n' apparait pas, lorsqu'on \'evalue un objet g\'eom\'etrique, mais ici, lorsqu'on fait {\tt eval(R,1)}, {\tt R} est \'evalu\'e en un objet 
g\'eom\'etrique, mais l'objet g\'eom\'etrique lui-m\^eme n'est pas \'evalu\'e.
Donc {\tt eval(R,1)} dessine le point {\tt R} et sa l\'egende.
\item On tape
\begin{verbatim}
purge(r);
purge(p);
R:=point(1+i*r):;
r:=p+1;
p:=-4;
eval(R,1);
\end{verbatim}
La commande {\tt eval(R,1)} renvoie {\tt point(1+(i)*r)}, mais ne dessine pas 
le point {\tt R}. En effet la r\'eponse est \'evalu\'ee formellement au 
niveau 1 ce qui donne la r\'eponse {\tt point(1+i*r)} puis pour la 
repr\'esentation graphique, {\tt point(1+i*r)} est \'evalu\'e num\'eriquement 
au niveau 1 ce qui ne permet pas d'afficher le point.

\item On tape :
\begin{verbatim}
purge(r);
R:=point(1+i*r):;
r:=-3;
eval(R,2);
\end{verbatim}
La commande {\tt eval(R,2)} renvoie {\tt point(1,-3)} et le dessin du point 
{\tt R} sans sa l\'egende. En effet, quand on fait {\tt eval(R,2)}, alors 
{\tt R} est \'evalu\'e en un objet g\'eom\'etrique, et cet l'objet 
g\'eom\'etrique est lui-m\^eme \'evalu\'e et donc la l\'egende  disparait.
\item On tape :
\begin{verbatim}
purge(r);
purge(p);
R:=point(1+i*r):;
r:=p+1;
p:=-4;
eval(R,2);
\end{verbatim}
La commande {\tt eval(R,2)} renvoie {\tt point(1,p+1)} et le dessin du point 
{\tt R} sans sa l\'egende. En effet, quand on fait {\tt eval(R,2)}, alors 
{\tt R} est \'evalu\'e en un objet g\'eom\'etrique, et cet l'objet 
g\'eom\'etrique est lui-m\^eme \'evalu\'e et donc la l\'egende  disparait.
\end{itemize}

\subsection{Pour \'evaluer une expression en mode Maple: {\tt evala}}\index{evala}
\noindent {\tt evala} sert en mode Maple \`a \'evaluer une expression contenant
 des extentions alg\'ebiques, par contre {\tt Xcas} \'evalue toujours les 
expressions, sans avoir besoin de la commande {\tt evala}.\\
\subsection{Pour ne pas \'evaluer une expression : {\tt quote hold ou '}}\index{quote|textbf}\index{hold|textbf}\index{'|textbf}
Si on ne veut pas qu'une expression soit \'evalu\'ee dans un calcul, il faut 
la quoter, soit avec {\tt '}, soit \`a l'aide de la fonction {\tt quote} (ou 
{\tt hold}).\\
{\bf Remarque}
Lorsqu'on tape par exemple  {\tt a:=quote(a)} (ou {\tt a:=hold(a)}) 
cela a pour effet de purger la variable {\tt a} et cette instruction renvoie 
la valeur de cette variable (ou les hypoth\`eses faites sur cette variable). \\
Donc {\tt a:=quote(a)} est synonyme de {\tt purge(a)} (c'est pour avoir la compatibilit\'e Maple).\\
On tape :
\begin{center}{\tt a:=2;quote(2+3*a)}\end{center}
ou
\begin{center}{\tt a:=2;'2+3*a'}\end{center}
On obtient :
\begin{center}{\tt (2,2+3.a)}\end{center}

\subsection{Pour forcer \`a \'evaluer une expression : {\tt unquote}}\index{unquote}
Si on veut qu'une expression quot\'ee soit \'evalu\'ee dans un calcul, il faut
utiliser la fonction {\tt unquote}.\\
Par exemple dans une affectation, la variable est quot\'ee c'est \`a dire non
 \'evalu\'ee.\\
 On peut forcer son \'evaluation pour cela on tape :
\begin{center}{\tt purge(b);a:=b;unquote(a):=3}\end{center}
On obtient :
\begin{center}{\tt a et b contiennent 3}\end{center}

\subsection{Distributivit\'e : {\tt expand fdistrib developper}}\index{fdistrib}\index{expand} \index{developper}
Si on veut effectuer la distributivit\'e de la multiplication par rapport \`a l'addition on utilise la fonction {\tt expand} ou {\tt fdistib}.\\
On tape :
\begin{center}{\tt expand((x+1)*(x-2))}\end{center}
Ou on tape :
\begin{center}{\tt fdistrib((x+1)*(x-2))}\end{center}
On obtient :

\begin{center}{\tt x\verb|^|2-2*x+x-2}\end{center} 
\subsection{Forme canonique : {\tt canonical\_form}}\index{canonical\_form}
\noindent{\tt canonical\_form} a comme param\`etre un trin\^ome du second degr\'e que 
l'on veut mettre  sous la forme canonique.\\
Exemple :\\
Mettre  sous la forme canonique:
$$x^2-6x+1$$
On tape :
\begin{center}{\tt canonical\_form(x\verb|^|2-6*x+1)}\end{center}
On trouve :
\begin{center}{\tt (x-3)\verb|^|2-8}\end{center}
\subsection{Multiplier par la quantit\'e conjugu\'ee : {\tt mult\_conjugate multiplier\_conjugue}}\index{mult\_conjugate} \index{multiplier\_conjugue}
\noindent {\tt mult\_conjugate} a comme argument une expression avec un 
d\'enominateur ou un num\'erateur comportant des racines carr\'ees :
\begin{itemize}
\item {\tt mult\_conjugate} a comme argument une expression avec un 
d\'enominateur comportant des racines carr\'ees.\\
{\tt mult\_conjugate} multiplie le num\'erateur et le d\'enominateur
 de cette expression par la quantit\'e conjugu\'ee du d\'enominateur.
\item {\tt mult\_conjugate} a comme argument une expression avec un 
d\'enominateur ne comportant pas de racines carr\'ees.\\
{\tt mult\_conjugate} multiplie le num\'erateur et le d\'enominateur de cette 
expression  par la quantit\'e conjugu\'ee du num\'erateur. 
\end{itemize}
On tape :
\begin{center}{\tt mult\_conjugate((2+sqrt(2))/(2+sqrt(3)))}\end{center}
On obtient :
\begin{center}{\tt (2+sqrt(2))*(2-sqrt(3))/((2+sqrt(3))*(2-sqrt(3)))}\end{center}
On tape :
\begin{center}{\tt mult\_conjugate((2+sqrt(2))/(sqrt(2)+sqrt(3)))}\end{center}
On obtient :
\begin{center}{\tt (2+sqrt(2))*(-sqrt(2)+sqrt(3))/}\end{center}
\begin{center}{\tt ((sqrt(2)+sqrt(3))*(-sqrt(2)+sqrt(3)))}\end{center}
On tape :
\begin{center}{\tt mult\_conjugate((2+sqrt(2))/2)}\end{center}
On obtient :
\begin{center}{\tt (2+sqrt(2))*(2-sqrt(2))/(2*(2-sqrt(2)))}\end{center}

\subsection{S\'eparation des variables : {\tt split}}\index{split}
\noindent{\tt split} a deux arguments : une expression d\'ependant de deux 
variables et la liste de ces deux variables.\\
Si l'expression est factorisable avec deux facteurs qui ne dependent chacun que
d'une des 2 variables, {\tt split} renvoie une liste form\'ee par ces deux 
facteurs et sinon renvoie la liste {\tt [0]}.\\
On tape :
\begin{center}{\tt split((x+1)*(y-2),[x,y])}\end{center}
Ou on tape :
\begin{center}{\tt split(x*y-2*x+y-2,[x,y])}\end{center}
On obtient :
\begin{center}{\tt [x+1,y-2]}\end{center} 
On tape :
\begin{center}{\tt split((x\verb|^|2*y\verb|^|2-1,[x,y])}\end{center}
On obtient :
\begin{center}{\tt [0]}\end{center} 

\subsection{Factorisation : {\tt factor factoriser}}\index{factor|textbf}\index{factoriser|textbf}\label{sec:factore}
\noindent{\tt factor} a comme param\`etre une expression.\\
{\tt factor} factorise cette  expression sur le corps de ses coefficients.\\
{\bf Exemples} :
\begin{enumerate}
\item Factoriser dans $\mathbb Z$ :
$$x^4-1$$
On tape :
\begin{center}{\tt factor(x\verb|^|4-1)}\end{center}
On trouve :
\begin{center}{\tt (x\verb|^|2+1)*(x+1)*(x-1)}\end{center}
Les coefficients sont entiers donc la factorisation se fera avec des polyn\^omes \`a coefficients entiers.\\
\item Factoriser dans $\mathbb C$ :
$$x^4-1$$
Pour avoir une factorisation complexe, on coche {\tt complex} dans l'\'ecran de
configuration du {\tt cas} (bouton donnant la ligne d'\'etat) on tape~:
\begin{center}{\tt factor(x\verb|^|4-1)}\end{center}
On trouve :
\begin{center}{\tt -i*(-x+-i)*(i*x+1)*(-x+1)*(x+1)}\end{center}
\item Factoriser dans $\mathbb Z$ :
$$x^4+1$$
On tape :
\begin{center}{\tt factor(x\verb|^|4+1)}\end{center}
On trouve :
\begin{center}{\tt x\verb|^|4+1}\end{center}
car $ x^4+1$ ne se fatorise pas sur les entiers.\\
\item  Factoriser sur les entiers de Gauss :
$$x^4+1$$
Si l'on veut une factorisation sur les entiers de Gauss, on coche {\tt complex}
dans l'\'ecran de configuration du {\tt cas} (bouton donnant la ligne 
d'\'etat), on tape~:\\
\begin{center}{\tt factor(x\verb|^|4-1)}\end{center}
On obtient :
\begin{center}{\tt (x\verb|^|2+i)*(x\verb|^|2+-i)}\end{center}
\item  Factoriser dans $\mathbb R$ :
$$x^4+1$$
Si l'on veut une factorisation r\'eelle, afin de connaitre le r\'eel qui sert
dans la factorisation, on coche {\tt complex} dans l'\'ecran de configuration 
du {\tt cas} et on tape tout d'abord :\\
\begin{center}{\tt solve(x\verb|^|4+1,x)}\end{center}\index{solve}\index{resoudre}
On trouve :
\begin{center}{\tt  [sqrt(2)/2+(i)*sqrt(2)/2,sqrt(2)/2+(i)*(-(sqrt(2)/2)),}\end{center}
\begin{center}{\tt  -sqrt(2)/2+(i)*sqrt(2)/2,-sqrt(2)/2+(i)*(-(sqrt(2)/2))]}\end{center}
On voit que les racines d\'ependent de $\sqrt 2$ donc on tape :
\begin{center}{\tt factor(sqrt(2)*(x\verb|^|4+1))}\end{center}
On obtient :
\begin{center}{\tt sqrt(2)*(x\verb|^|2+sqrt(2)*x+1)*(x\verb|^|2+(-(sqrt(2)))*x+1)}\end{center}
Pour factoriser dans $\mathbb C$ l'expression $x^4+1$, il faut cocher
{\tt complex} dans l'\'ecran de configuration du {\tt cas} et taper
{\tt cFactor(sqrt(2)*(x\verb|^|4+1))} (cf {\tt cFactor}.
\end{enumerate}

\subsection{Factorisation dans $\mathcal C$ : {\tt cFactor cfactor factoriser\_sur\_C}}\index{cFactor}\index{cfactor}\index{factoriser\_sur\_C}
\noindent{\tt cFactor} ou {\tt cfactor}  ou {\tt factoriser\_sur\_C} a comme 
param\`etre une expression que l'on veut 
factoriser sur le corps des complexes sans avoir besoin d'\^etre en mode 
complexe.\\
{\bf Exemples}
\begin{enumerate}
\item Factoriser dans $\mathcal C$ :
$$x^4-1$$
On tape :
\begin{center}{\tt cFactor(x\verb|^|4-1)}\end{center}
On obtient :
\begin{center}{\tt -((x+-i)*((-i)*x+1)*((-i)*x+i)*(x+1))}\end{center}
\item Factoriser dans $\mathcal C$ :
$$x^4+1$$
On tape :
\begin{center}{\tt cFactor(x\verb|^|4+1)}\end{center}
On obtient :
\begin{center}{\tt (x\verb|^|2+i)*(x\verb|^|2+-i)}\end{center}
Puis, on tape :
\begin{center}{\tt cFactor(sqrt(2)*(x\verb|^|2+i))*cFactor(sqrt(2)*(x\verb|^|2+-i))}\end{center}
On obtient :
\begin{center}{\tt sqrt(2)*1/2*(sqrt(2)*x+1-i)*(sqrt(2)*x-1+i)*sqrt(2)* 1/2*(sqrt(2)*x+1+i)*(sqrt(2)*x-1-i)}\end{center}
Mais si on tape, input :
\begin{center}{\tt cFactor(sqrt(2)*(x\verb|^|4+1))}\end{center}
On obtient :
\begin{center}{\tt sqrt(2)*(x\verb|^|2+sqrt(2)*x+1)*(x\verb|^|2+(-(sqrt(2)))*x+1)}\end{center}
\end{enumerate}

\subsection{Z\'eros d'une expression : {\tt zeros}}\index{zeros}
\noindent{\tt zeros} a comme param\`etre une expression.\\
{\tt zeros} renvoie la liste des \'el\'ements qui annulent l'expression.\\
Selon le mode choisi, si on est en mode r\'eel ({\tt complex\_mode:=0}) les 
z\'eros seront r\'eels et si on est en mode complexe ({\tt complex\_mode:=1})
les z\'eros seront complexes.\\
On tape en mode r\'eel: 
\begin{center}{\tt zeros(x\verb|^|2+4)}\end{center} 
On obtient :
\begin{center}{\tt []}\end{center} 
On tape en mode complexe: 
\begin{center}{\tt zeros(x\verb|^|2+4)}\end{center} 
On obtient :
\begin{center}{\tt [-2*i,2*i]}\end{center} 
On tape en mode r\'eel : 
\begin{center}{\tt zeros(ln(x)\verb|^|2-2)}\end{center} 
On obtient :
\begin{center}{\tt [exp(sqrt(2)),exp(-(sqrt(2)))]}\end{center} 
On tape en mode r\'eel : 
\begin{center}{\tt zeros(ln(y)\verb|^|2-2,y)}\end{center} 
On obtient :
\begin{center}{\tt [exp(sqrt(2)),exp(-(sqrt(2)))]}\end{center} 
On tape en mode r\'eel : 
\begin{center}{\tt zeros(x*(exp(x))\verb|^|2-2*x-2*(exp(x))\verb|^|2+4)}\end{center} 
On obtient :
 \begin{center}{\tt [[log(sqrt(2)),2]}\end{center} 

\subsection{Z\'eros complexe d'une expression : {\tt cZeros}}\index{cZzeros}
\noindent{\tt cZeros} a comme param\`etre une expression.\\
{\tt cZeros} renvoie la liste des \'el\'ements complexes qui annulent 
l'expression.\\
On tape en mode r\'eel ou complexe: 
\begin{center}{\tt cZeros(x\verb|^|2+4)}\end{center} 
On obtient :
\begin{center}{\tt [-2*i,2*i]}\end{center} 
On tape : 
\begin{center}{\tt cZeros(ln(x)\verb|^|2-2)}\end{center} 
On obtient :
\begin{center}{\tt [exp(sqrt(2)),exp(-(sqrt(2)))]}\end{center} 
On tape : 
\begin{center}{\tt cZeros(ln(y)\verb|^|2-2,y)}\end{center} 
On obtient :
\begin{center}{\tt [exp(sqrt(2)),exp(-(sqrt(2)))]}\end{center} 
On tape : 
\begin{center}{\tt cZeros(x*(exp(x))\verb|^|2-2*x-2*(exp(x))\verb|^|2+4)}\end{center} 
On obtient :
\begin{center}{\tt [[log(sqrt(2)),log(-sqrt(2)),2]}\end{center} 

\subsection{D\'evelopper et simplifier : {\tt normal}}\index{normal|textbf}
\noindent{\tt normal} a comme param\`etre une expression 
{\tt normal} renvoie l'expression d\'evelopp\'ee et simplifi\'ee.\\
On tape :  
\begin{center}{\tt normal((x-1)*(x+1))}\end{center}
On obtient :
 \begin{center}{\tt x\verb|^|2-1}\end{center}  
{\bf Attention} {\tt normal} est moins efficace que {\tt simplify} et on est 
quelquefois oblig\'e de faire plusieurs fois la commande {\tt normal}. \\  
On tape :  
\begin{center}{\tt normal(3-54*sqrt(1/162))}\end{center}
On obtient :
 \begin{center}{\tt (-9*sqrt(2)+9)/3}\end{center}
On tape :  
\begin{center}{\tt normal((-9*sqrt(2)+9)/3)}\end{center}
On obtient :
 \begin{center}{\tt -(3*sqrt(2))+3}\end{center}

\subsection{Simplifier : {\tt simplify simplifier}}\index{simplify|textbf}\index{simplifier|textbf}
\noindent{\tt simplify} simplifie  l'expression de façon automatique.\\
On tape :  
\begin{center}{\tt simplify((x-1)*(x+1))}\end{center}
On obtient :
 \begin{center}{\tt x\verb|^|2-1}\end{center}  
On tape :  
\begin{center}{\tt simplify(3-54*sqrt(1/162))}\end{center}
On obtient :
 \begin{center}{\tt -3*sqrt(2)+3}\end{center} 
{\bf Attention} {\tt simplify} est plus efficace lorsqu'on est en mode 
{\tt radian} pour simplifier des expressions trigonom\'etriques (pour cela on 
coche {\tt radian} dans la configuration du 
{\tt cas} ou  bien on tape {\tt angle\_radian:=1}).\\
On tape :
\begin{center}{\tt simplify((sin(3*x)+sin(7*x))/sin(5*x))}\end{center}
On obtient :
\begin{center}{\tt 4*(cos(x))\verb|^|2-2}\end{center}
 
\subsection{Simplifier \`a l'aide de fractions rationnelles : {\tt ratnormal}}\index{ratnormal}
\noindent{\tt ratnormal} simplifie  l'expression sous forme de fraction 
irréductible.\\
On tape :  
\begin{center}{\tt ratnormal((x\verb|^|3-1)/(x\verb|^|2-1))}\end{center}
On obtient :
 \begin{center}{\tt (x\verb|^|2+x+1)/(x+1)}\end{center}  
On tape :  
\begin{center}{\tt ratnormal((-2x\verb|^|3+3x\verb|^|2+5x-6)/(x\verb|^|2-2x+1))}\end{center}
On obtient :
 \begin{center}{\tt (-2*x\verb|^|2+x+6)/(x-1)}\end{center} 

\subsection{Substituer une valeur \`a une variable : {\tt subst substituer}}\index{subst|textbf}\index{substituer|textbf}\label{sec:subst}
\noindent{\tt subst} a deux ou trois arguments : une expression dependant d'un 
param\`etre et une \'egalit\'e (param\`etre=valeur de substitution) ou
une expression dependant d'un param\`etre , le param\`etre et la valeur de substitution.
\begin{itemize}
\item {\tt subst} effectue la substitution demand\'ee dans l'expression \`a condition
que le param\`etre ne soit pas affect\'e car {\tt subst} \'evalue tout d'abord 
l'expression et remplace donc le param\`etre (si il a \'et\'e affect\'e) 
par sa valeur sans tenir compte de la valeur de substitution donn\'e par le 
deuxi\`eme param\`etre.\\
On tape :
\begin{center}{\tt subst(a\verb|^|2+1,a=2)}\end{center} 
ou :
\begin{center}{\tt subst(a\verb|^|2+1,a,2)}\end{center} 
On obtient si la variable {\tt a} n'est pas affect\'ee :
\begin{center}{\tt 5}\end{center} 
 Si la variable {\tt a} est affect\'ee, il faut taper auparavant 
{\tt purge(a)} pour obtenir {\tt 5}.\\
Lorsque l'on veut substituer plusieurs variables, pour eviter de faire 
plusieurs substitutions \`a la suite, on met comme deuxi\`eme argument la
 liste de ces variables et comme troisi\`eme argument la liste de les valeurs 
de substitution ( ou encore on met comme deuxi\`eme argument la liste form\'ee 
de (nom de variables {\tt =} valeur de substitution).\\
On tape :
\begin{center}{\tt subst(a\verb|^|2+b,[a,b],[2,1])}\end{center} 
Ou on tape :
\begin{center}{\tt subst(a\verb|^|2+b,[a=2,b=1])}\end{center} 
On obtient si les variables {\tt a} et {\tt b} ne sont pas affect\'ees :
\begin{center}{\tt 2\verb|^|2+1}\end{center} 
  
\item {\tt subst} permet aussi d'effectuer des changements de variables dans une 
int\'egrale mais {\tt subst} ne g\`ere les changements de variable dans une 
integrale que si le changement de variable est de la forme {\tt x=f(u)}. Dans 
ce cas il faut quoter l'int\'egrale pour que celle-ci ne 
soit pas calcul\'ee si on utilise {\tt integrate} ou bien il faut utiliser 
la commande {\tt Int}. Dans les deux cas il faut sp\'ecifier le nom 
de la variable d'int\'egration m\^eme si celle-ci est {\tt x}. \\
On tape :
\begin{center}{\tt subst('integrate(sin(x\verb|^|2)*x,x,0,pi/2)',x=sqrt(t))}\end{center}
Ou on tape :
\begin{center}{\tt subst(Int(sin(x\verb|^|2)*x,x,0,pi/2),x=sqrt(t))}\end{center}
On obtient
\begin{center}{\tt integrate(sin(t)*sqrt(t)*1/2*1/t*sqrt(t),t,0,(pi/2)\verb|^|2)}\end{center} 
On tape :
\begin{center}{\tt subst('integrate(sin(x\verb|^|2)*x,x)',x=sqrt(t))}\end{center}
Ou on tape :
\begin{center}{\tt subst(Int(sin(x\verb|^|2)*x,x),x=sqrt(t))}\end{center}
On obtient
\begin{center}{\tt integrate(sin(t)*sqrt(t)*1/2*1/t*sqrt(t),t)}\end{center} 
\end{itemize}
\subsection{Substituer une valeur \`a une variable (compatibilit\'e Maple et Mupad) : {\tt subs}}\index{subs}\label{sec:subs}
\noindent En {\tt Maple} et en {\tt Mupad} la commande synonyme de {\tt subst} 
est {\tt subs}, mais l'ordre des param\`etres de {\tt subs} n'est pas le m\^eme
en {\tt Maple} et en {\tt Mupad}.\\
Ainsi les  arguments de {\tt subs} sont :
\begin{itemize}
\item En mode {\tt Maple}, la fonction  {\tt subs} a deux arguments : une 
\'egalit\'e (param\`etre=valeur de substitution) et une expression 
d\'ependant du param\`etre.\\
Pour faire plusieurs substitutions, {\tt subs} a deux arguments : une liste 
d\'egalit\'e (param\`etre=valeur de substitution) et une expression 
d\'ependant de ces param\`etres.\\
\item En mode {\tt Mupad} ou  {\tt Xcas} ou {\tt TI}, la fonction {\tt subs} a deux ou trois 
arguments : une expression d\'ependant d'un param\`etre et une \'egalit\'e 
(param\`etre=valeur de substitution) ou une expression d\'ependant d'un 
param\`etre, le param\`etre et la valeur de substitution.\\
Pour faire plusieurs substitutions, la fonction {\tt subs} a deux ou trois 
arguments : une expression d\'ependant de param\`etres et une liste 
d'\'egalit\'e (param\`etre=valeur de substitution) ou une expression 
d\'ependant de param\`etres, la liste des param\`etres et la liste des valeurs
 de substitution.\\
\end{itemize}
{\tt subs} effectue la substitution demand\'ee dans l'expression \`a condition
que le param\`etre ne soit pas affect\'e car {\tt subs} \'evalue tout d'abord 
l'expression et remplace donc le param\`etre par sa valeur sans tenir compte 
de la valeur de substitution donn\'ee par le deuxi\`eme param\`etre.\\
On tape en mode Maple :
\begin{center}{\tt subs(a=2,a\verb|^|2+1)}\end{center}
On obtient (si la variable {\tt a} n'est pas affect\'ee, sinon il faut taper 
auparavant {\tt purge(a)}):
\begin{center}{\tt 5}\end{center}  
Lorsque l'on veut substituer plusieurs variables :\\
On tape, en mode {\tt Maple} :
\begin{center}{\tt subs([a=2,b=1],a\verb|^|2+b)}\end{center} 
On obtient (si les variables {\tt a} et {\tt b} ne sont pas affect\'ees, sinon 
il faut taper auparavant {\tt purge(a,b)}):
\begin{center}{\tt 2\verb|^|2+1}\end{center}
On tape, en mode {\tt Mupad} ou  {\tt Xcas} ou {\tt TI} :
\begin{center}{\tt subs(a\verb|^|2+1,a=2)}\end{center} 
ou :
\begin{center}{\tt subs(a\verb|^|2+1,a,2)}\end{center} 
On obtient (si la variable {\tt a} n'est pas affect\'ee, sinon il faut taper 
auparavant {\tt purge(a)}) :
\begin{center}{\tt 5}\end{center} 
Lorsque l'on veut substituer plusieurs variables :\\
On tape, dans les modes {\tt Mupad Xcas TI}  :
\begin{center}{\tt subs(a\verb|^|2+b,[a=2,b=1])}\end{center} 
ou on tape
\begin{center}{\tt subs(a\verb|^|2+b,[a,b],[2,1])}\end{center} 
On obtient (si les variables {\tt a} et {\tt b} ne sont pas affect\'ees, sinon 
il faut taper auparavant {\tt purge(a,b)}):
\begin{center}{\tt 2\verb|^|2+1}\end{center} 


\subsection{\'Evaluer une primitive : {\tt preval}}\index{preval}
\noindent{\tt preval} a trois param\`etres : une expression {\tt F(x)} d\'ependant de la variable {\tt x}, et deux expressions {\tt a} et {\tt b}.\\
{\tt preval}  effectue {\tt F(b)-F(a)}.\\
 {\tt preval} est utile pour calculer une int\'egrale d\'efinie à partir 
d'une primitive : on calcule une primitive, puis  on \'evalue cette primitive entre les deux bornes de l'int\'egrale.\\
On tape :
\begin{center}{\tt preval(x\verb|^|2+x,2,3)}\end{center}
On obtient :
\begin{center}{\tt 6}\end{center}

\subsection{Sous-expression d'une expression : {\tt part}}\index{part}
\noindent{\tt part} a deux arguments : une expression et un entier $n$.\\
{\tt part} \'evalue l'expression puis renvoie la $n$-ième sous-expression de 
l'expression.\\
On tape :
\begin{center}{\tt part(x\verb|^|2+x+1,2)}\end{center}
On obtient :
\begin{center}{\tt x}\end{center}
On tape :
\begin{center}{\tt part(x\verb|^|2+(x+1)*(y-2)+2,2)}\end{center}
On obtient :
\begin{center}{\tt (x+1)*(y-2)}\end{center}
On tape :
\begin{center}{\tt part((x+1)*(y-2)/2,2)}\end{center}
On obtient :
\begin{center}{\tt y-2}\end{center}

\section{Valeurs de $u_n$}
\subsection{Tableau de valeurs des termes d'une suite : {\tt tablefunc\\
 table\_fonction}}\index{tablefunc}\index{table\_fonction}
 {\tt tablefunc} ou {\tt table\_fonction} est une commande qui s'utilise \`a 
l'int\'erieur d'un tableur (que l'oon ouvre avec {\tt Alt+t}) et qui .\\
remplit deux colonnes donnant la table des valeurs d'une fonction.\\ 
{\tt tablefunc(ex,n,n0,1)}, o\`u {\tt ex} est une expression
dependant de  {\tt n}, remplira le tableur avec
les valeurs de la suite $u_n=ex$ pour $n=n0,\ n0+1,\ n0+2,....$.

{\bf Exemple} : Affichage des valeurs de $u_n=\sin(n)$
On ouvre un tableur avec {\tt Alt+t}.\\
Puis, on s\'electionne une case du tableur (par exemple {\tt C0}) et on tape 
dans la ligne de commande du tableur : 
\begin{center}{\tt tablefunc(sin(n),n,0,1)}\end{center}
On obtient :
\begin{center}{\tt deux colonnes : {\tt n} et {\tt sin(n)}}\end{center}
\begin{itemize}
\item dans la colonne {\tt n} il y a la valeur du pas (qui doit \^etre \'egal 
\`a 1) et la valeur de {\tt n0} (ici 0), puis une formule {\tt C2+C\$1} 
qui a \'et\'e recopi\'ee vers le bas.

\item  dans la colonne {\tt sin(n)} il y a {\tt "Tablefunc"},  puis une formule
qui a \'et\'e aussi recopi\'ee vers le bas.\\
Les valeurs de la suite ${\tt u_n=\sin(n)}$ s'affichent alors en face des 
{\tt n} correspondants \`a partir de {\tt n=n0} (ici 0).
\end{itemize} 

\subsection{Valeurs d'une suite r\'ecurrente ou d'un syst\`eme de suites r\'ecurrentes : {\tt seqsolve}}\index{seqsolve|textbf}\label{sec:seqsolve}
Voir aussi {\tt rsolve} \ref{sec:rsolve}.\\ 
{\tt seqsolve} a comme argument l'expression ou la liste des expressions qui 
d\'efini(ssen)t une/des relation(s) de r\'ecurrence (par exemple 
$f(x,n)$ si la relation de r\'ecurrence est $u_{n+1}=f(u_n,n)$ resp $g(x,y,n)$
si la relation de r\'ecurrence est $u_{n+2}=g(u_{n+1},u_n,n)$, 
le nom des variables utilis\'ees  (par exemple $[x,n]$ resp $[x,y,n]$ ) et les 
valeurs de d\'epart de la suite (par exemple $a$ si $u_0=a$ resp $[a,b]$ si
 $u_0=a$ et $u_1=b$).

La relation de r\'ecurrence doit comporter une partie homog\`ene
lin\'eaire, la partie non homog\`ene doit \^etre une combinaison
lin\'eaire de produit de polyn\^ome en $n$ par une suite
g\'eom\'etrique en $n$.
{\tt seqsolve} renvoie alors la valeur de la suite en fonctions de $n$.

{\bf Exemples} :
\begin{itemize}
\item  Valeurs de la suite $u_0=3, \ u_{n+1}=2u_{n}+n$\\
On  tape : 
\begin{center}{\tt seqsolve(2x+n,[x,n],3)}\end{center}
On obtient :
\begin{center}{\tt -n-1+4*2\cir n}\end{center}
(on peut aussi taper {rsolve(u(n+1)=2*u(n)+n,u(n),u(0)=3)} (cf\ref{sec:rsolve})
\item  Valeurs de la suite $u_0=3, \ u_{n+1}=2u_{n}+n3^n$\\
On  tape : 
\begin{center}{\tt seqsolve(2x+n*3\cir n,[x,n],3)}\end{center}
On obtient :
\begin{center}{\tt (n-3)*3\cir n+6*2\cir n}\end{center} 
\item  Valeurs de la suite $u_0=0,u_1=1, \ u_{n+1}=u_n+u_{n-1}$ pour $n>0$.\\
On  tape : 
\begin{center}{\tt seqsolve(x+y,[x,y,n],[0,1])}\end{center}
On obtient :
\begin{center}{\tt (5+sqrt(5))/10*((sqrt(5)+1)/2)\cir(n-1)+(5-(sqrt(5)))/10*((-sqrt(5)+1)/2)\cir (n-1)}\end{center}

\item  Valeurs de la suite $u_0=0,u_1=1, \ u_{n+2}=2*u_{n+1}+u_n+n+1$ pour $n>0$.\\
On  tape : 
\begin{center}{\tt seqsolve(2x+y+n+1,[x,y,n],[0,1])}\end{center}
On obtient :
\begin{center}{\tt (-1)/2-(-8-5*sqrt(2))/8*(sqrt(2)+1)\cir (n-1)-(-8+5*sqrt(2))/8*(-sqrt(2)+1)\cir (n-1)-1/2*n}\end{center}
 
Ou on  tape : 
\begin{center}{\tt seqsolve([2x+y+n,x],[x,y,n],[0,1]) }\end{center}
On obtient :
\begin{center}{\tt [(-1)/2-(-2-3*sqrt(2))/8*(sqrt(2)+1)\cir n-(-2+3*sqrt(2))/8*(-sqrt(2)+1)\cir n-1/2*n,-(-4+sqrt(2))/8*(sqrt(2)+1)\cir n-(-4-sqrt(2))/8*(-sqrt(2)+1)\cir n-1/2*n]}\end{center}

\item  Valeurs de la suite $u_0=0,v_0=1, \ u_{n+1}=u_n+v_n, v_{n+1}=u_n-v_n,$ pour $n>0$.\\
On  tape : 
\begin{center}{\tt seqsolve([x+y,x-y],[x,y,n],[0,1])}\end{center}
On obtient :
\begin{center}{\tt [(sqrt(2))/4*2\cir (n/2)+(-(sqrt(2)))/4*(-(sqrt(2)))\cir n,(2-sqrt(2))/4*2\cir (n/2)+(2+sqrt(2))/4*(-(sqrt(2)))\cir n]}\end{center} 

\item  Valeurs de la suite $u_0=2,v_0=0, \ u_{n+1}=4*v_n+n+1, v_{n+1}=u_n,$ pour $n>0$.\\
On  tape : 
\begin{center}{\tt seqsolve([4y+n+1,x],[x,y,n],[2,0])}\end{center}
On obtient :
\begin{center}{\tt [(-8)/9+2*2\cir n-(-8)/9*(-1)\cir n*2\cir n-1/3*n,(-5)/9+2\cir n-4/9*(-1)\cir n*2\cir n-1/3*n]}\end{center} 
\end{itemize}

\subsection{Valeurs d'une suite r\'ecurrente ou d'un syst\`eme de suites r\'ecurrentes : {\tt rsolve}}\index{rsolve|textbf} \label{sec:rsolve}
Voir aussi {\tt seqsolve} \ref{sec:seqsolve}.\\ 
{\tt rsolve} a comme argument la ou les relation(s) de r\'ecurrence, 
le nom des variables utilis\'ees et les valeurs de d\'epart de la suite.

La relation de r\'ecurrence doit comporter une partie homog\`ene
lin\'eaire, la partie non homog\`ene doit \^etre une combinaison
lin\'eaire de produit de polyn\^ome en $n$ par une suite
g\'eom\'etrique en $n$.
{\tt rsolve} renvoie alors une matrice dont les lignes sont les valeurs de la 
suite en fonctions de $n$.

{\bf Remarques}\\ 
Contrairement \`a {\tt seqsolve}, {\tt rsolve} est plus mall\'eable car
avec {\tt rsolve} :
\begin{itemize}
\item la suite ne d\'ebute pas forc\'ement par {\tt u(0)}, 
\item on peut donner plusieurs valeurs de d\'epart par exemple 
{\tt u(0)\cir2=1}, c'est pourquoi {\tt rsolve} renvoie une liste,
\item on \'ecrit la relation de r\'ecurrence comme en math\'ematiques.
\end{itemize}
{\bf Exemples} :
\begin{itemize}
\item  Valeurs de la suite  $u_0=3, \ u_{n+1}=2u_{n}+n$\\
On  tape : 
\begin{center}{\tt rsolve(u(n+1)=2u(n)+n,u(n),u(0)=3)}\end{center}
On obtient :
\begin{center}{\tt [-1+4*2\cir (n+1-1)-n]}\end{center} 
\item  Valeurs de la suite $u_1^2=1, \  u_{n+1}=2u_{n}+n$\\
On  tape : 
\begin{center}{\tt rsolve(u(n+1)=2u(n)+n,u(n),u(1)\cir 2=1)}\end{center}
On obtient :
\begin{center}{\tt [[-1-(-3)/2*2\cir(n+1-1)-n,-1-(-1)/2*2\cir(n+1-1)-n]]}\end{center} 
\item  Valeurs de la suite $u_0=3, \ u_{n+1}=2u_{n}+n3^n$\\
On  tape : 
\begin{center}{\tt rsolve(u(n+1)=2u(n)+(n)*3\cir n,u(n),u(0)=3)}\end{center}
On obtient :
\begin{center}{\tt [-3*3\cir (n+1-1)+6*2\cir (n+1-1)+n*3\cir (n+1-1)]}\end{center} 
\item  Valeurs de la suite $u_0=0,u_1=1, \ u_{n+1}=u_n+u_{n-1}$ pour $n>0$.\\
On  tape : 
\begin{center}{\tt rsolve(u(n+1)=u(n)+u(n-1),u(n),u(0)=0,u(1)=1)}\end{center}
On obtient :
\begin{center}{\tt [(5+sqrt(5))/10*((sqrt(5)+1)/2)\cir (n+1-1-1)+(5-sqrt(5))/10*((-sqrt(5)+1)/2)\cir (n+1-1-1)]}\end{center} 
\item  Valeurs de la suite $u_0=0,u_1=1, \ u_{n+1}=2*u_n+u_{n-1}+n$ pour $n>0$.\\
On  tape : 
\begin{center}{\tt rsolve(u(n+1)=2*u(n)+u(n-1)+n,u(n),u(0)=0,u(1)=1)}\end{center}
On obtient :
\begin{center}{\tt [(-1)/2-(-2-3*sqrt(2))/8*(sqrt(2)+1)\cir (n+1-1)-(-2+3*sqrt(2))/8*(-sqrt(2)+1)\cir (n+1-1)-1/2*n]}\end{center}
Ou on  tape : 
\begin{center}{\tt rsolve([u(n+1)=2*u(n)+v(n)+n,v(n+1)=u(n)],[u(n),v(n)],u(0)=0,v(0)=1) }\end{center}
On obtient :
\begin{center}{\tt [[(-1)/2-(-2-3*sqrt(2))/8*(sqrt(2)+1)\cir (n+1-1)-(-2+3*sqrt(2))/8*(-sqrt(2)+1)\cir (n+1-1)-1/2*n,-(-4+sqrt(2))/8*(sqrt(2)+1)\cir(n+1-1)-(-4-sqrt(2))/8*(-sqrt(2)+1)\cir (n+1-1)-1/2*n]]}\end{center}

\item  Valeurs de la suite $u_0=0,v_0=1, \ u_{n+1}=u_n+v_n, v_{n+1}=u_n-v_n,$ pour $n>0$.\\
On  tape : 
\begin{center}{\tt rsolve([u(n+1)=u(n)+v(n),v(n+1)=u(n)-v(n)],[u(n),v(n)],[u(0)=0,v(0)=1])}\end{center}
On obtient :
\begin{center}{\tt [[1/2*2\cir((n-1)/2)+1/2*(-(sqrt(2)))\cir(n-1),(-1+sqrt(2))/2*2\cir((n-1)/2)+(-1-sqrt(2))/2*(-(sqrt(2)))\cir(n-1)]]}\end{center} 
\item  Valeurs de la suite $u_0=2,v_0=0, \ u_{n+1}=4*v_n+n+1, v_{n+1}=u_n,$ pour $n>0$.\\
On  tape : 
\begin{center}{\tt rsolve([u(n+1)=4*v(n)+n+1,v(n+1)=u(n)],[u(n),v(n)],[u(0)=2,v(0)=0])}\end{center}
On obtient :
\begin{center}{\tt [[(-8)/9+2*2\cir(n+1-1)-(-8)/9*(-1)\cir(n+1-1)*2\cir(n+1-1)-1/3*n,(-5)/9+2\cir(n+1-1)-4/9*(-1)\cir(n+1-1)*2\cir(n+1-1)-1/3*n]]}\end{center} 
\end{itemize}

\subsection{Tableau de valeurs et graphe d'une suite r\'ecurrente : {\tt tableseq table\_suite} et {\tt plotseq graphe\_suite}}\index{tableseq|textbf}\index{plotseq}\index{table\_suite|textbf}\index{graphe\_suite}
{\tt tableseq} ou {\tt table\_suite} est une commande qui s'utilise \`a 
l'int\'erieur d'un tableur (que l'on ouvre avec {\tt Alt+t}) et qui .\\
remplit une colonne avec ${\tt u_0, \ u_{n+1}=f(u_{n})}$ (r\'ecurrence sur un 
terme) ou plus g\'en\'erallement 
$u_0,...,u_k, \ \ u_{n+k+1}=f(u_n,u_{n+1},...,u_{n+k})$.
{\tt tableseq} ou {\tt table\_suite} remplit une colonne \`a partir de la 
cellule s\'electionn\'ee ou \`a partir de
{\tt 0} si c'est le nom de la colonne qui est s\'electionn\'ee.\\
Voir aussi {\tt plotseq} (section \ref{sec:plotseq}) pour la repr\'esentation 
graphique des suites r\'ecurrentes.

{\bf Exemples} :
\begin{itemize}
\item  Affichage des valeurs de la suite $u_0=3.5, \ u_n=\sin(u_{n-1})$\\
On ouvre un tableur avec {\tt Alt+t}.\\
Puis, on s\'electionne une case du tableur (par exemple  {\tt B0}) et pour 
avoir les valeurs de $u_0=3.5, \ u_n=\sin(u_{n-1})$, on tape, 
dans la ligne de commande du tableur : 
\begin{center}{\tt tableseq(sin(u),u,4)}\end{center}
On obtient :
\begin{center}{\tt une colonne contenant sin(n), n, 3.5 
et une formule evalf(subst(B\$0,B\$1,B2))}
\end{center} 
Les valeurs de la suite
${\tt u_0=4,\ u_n=sin(u_{n-1})}$ s'affichent dans la colonne {\tt B}.\\

\item  Affichage des valeurs de la suite de Fibonacci
$u_0=1, u_1=1 \ u_{n+2}=u_n+u_{n+1}$\\
Apr\`es avoir selectionn\'e {\tt B0}, on tape, dans la ligne de 
commande du tableur :
\begin{center}{\tt tableseq(x+y,[x,y],[1,1])}\end{center}
On obtient, les premiers termes de la suite de Fibonacci :
\begin{center}{\tt \begin{tabular}{|l|l|}
\hline
ligne &B\\
\hline
x+y & \\
\hline
1 & x\\
\hline
2 & y\\
\hline
3 & 1\\
\hline
4 & 1\\
\hline
5 & 2\\
\hline
.. &..\\
\hline
7 & 5\\
\hline
.. &..\\
\hline
\end{tabular}}\end{center}
\end{itemize}

\section{Les fonctions infix\'ees ou op\'erateur}
Un op\'erateur est une fonction infix\'ee.
\subsection{Les op\'erateurs usuels :{\tt +, -, *, /, \^{ }}}\index{+}\index{'+'}\index{-}\index{'-'}\index{\^{ }}
{\tt +, -, *, /, \^{ }} sont les op\'erateurs habituels pour faire
des additions, des soustractions, des multiplications, des divisions et des 
\'el\'evations \`a une puissance.

\subsection{Les autres op\'erateurs de {\tt Xcas}}\index{$\at$}\index{$\at\at$}\index{\$}\index{\%}\index{mod}\index{->}\index{:=}\index{=<} \index{=>}
\index{minus}\index{union}\index{intersect}
\begin{itemize}
\item {\tt \$ } est la version infix\'ee de {\tt seq} par exemple :\\
{\tt (2\verb|^|k)\$(k=0..3)= seq(2\verb|^|k,k=0..3)=(1,2,4,8)} (ne pas oublier 
de parenth\'eser les arguments),
\item {\tt mod} ou {\tt \%} pour d\'efinir un nombre modulaire,
\item {\tt @} pour composer des fonctions par exemple :
{\tt (f@g)(x)=f(g(x))},
\item {\tt @@ } pour composer une fonction avec elle-m\^eme par exemple :\\
{\tt (f@@3)(x)=f(f(f(x)))},
\item {\tt minus union intersect}  pour traduire la diff\'erence, l'union et 
l'intersection de deux ensembles,
\item {\tt ->} pour d\'efinir une fonction,
\item {\tt := ou =>} pour affecter une variable (c'est la version infix\'ee de 
{\tt sto} avec l'ordre permut\'e des arguments pour {\tt :=}), 
par exemple : {\tt a:=2} or {\tt 2=>a} or {\tt sto(2,a)}.
{\tt =<} pour stocker une expression dans une variable, avec une affectation 
par r\'ef\'erence (l'ordre des arguments est le m\^eme que pour {\tt :=})
si la cible est un \'el\'ement d'une matrice ou d'une liste.
Ceci est plus rapide si on modifie les \'el\`ements d'une matrice ou d'une 
liste existante de grande dimension, car on ne fait pas de copie.
A utiliser avec pr\'ecautions car tous les objets pointant sur cette matrice 
seront modifi\'es. Dans un programme il faudra utiliser {\tt copy} lors de 
l'initialisation pour que les modifications se fassent sur la copie 
(cf \ref {sec:copie})
\end{itemize}

\subsection{D\'efinition d'un op\'erateur:  {\tt user\_operator}}\index{user\_operator}\index{Binary@{\sl Binary}|textbf}\index{Delete@{\sl Delete}|textbf}
\noindent {\tt user\_operator} a comme argument :
\begin{itemize}
\item une cha\^ine de caract\`eres qui est le nom de l'op\'erateur,
\item une fonction de deux variables\`a valeur dans $\mathbb R$ ou dans
{\tt true, false},
\item une option {\tt Binary} pour la d\'efinition ou {\tt Delete} pour 
annuler cette d\'efinition.
\end{itemize}
{\tt user\_operator} renvoie 1 si la d\'efinition a eu lieu et 0 sinon.

{\bf Exemple 1}\\
Soit la loi $R$ d\'efinit sur $\mathbb R$ par $x\ R \ y= x*y+x+y$.\\
On tape pour d\'efinir la loi $R$ :
\begin{center}{\tt user\_operator("R",(x,y)->x*y+x+y,Binary)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}  
On tape :
\begin{center}{\tt 5 R 7}\end{center}
Bien mettre les espace autour de {\tt R}.\\
On obtient :
\begin{center}{\tt 47}\end{center}  

{\bf Exemple 2}\\
Soit la relation $S$ d\'efinit sur $\mathbb N$ par :\\
pour  $x$ et $y$ entiers, $x\ S \ y <=> x$ et $y$ ne sont pas premiers entre eux.\\
On tape pour d\'efinir la relation $S$ :
\begin{center}{\tt user\_operator("S",(x,y)->(gcd(x,y))!=1,Binary)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}  
On tape :
\begin{center}{\tt 5 S 7}\end{center}
Bien mettre les espace autour de {\tt S}.\\
On obtient :
\begin{center}{\tt 0}\end{center}  
On tape :
\begin{center}{\tt 8 S 12}\end{center}
Bien mettre les espace autour de {\tt S}.\\
On obtient :
\begin{center}{\tt 1}\end{center}

\section{Les fonctions et les expressions de variables symboliques}
\subsection{Diff\'erence entre fonction et expression}\index{->}\index{:=}
Une fonction {\tt f} est d\'efinie par exemple par :\\
{\tt f(x):=x\verb|^|2-1} ou encore par {\tt f:=x->x\verb|^|2-1} \\
cela signifie que pour tous les $x$, $f(x)$ est \'egale \`a l'expression 
$x^2-1$.\\ 
On pourra ainsi taper {\tt f(2)} pour avoir la valeur de $f$ en $x=2$.\\
Par contre si on d\'efinit :\\
{\tt g:=x\verb|^|2-1} cela signifie que {\tt g} est une variable qui contient 
l'expression $x^2-1$. Pour avoir la valeur de $g$ en $x=2$ il faut alors 
\'ecrire :\\
{\tt subst(g,x=2)} car $g$ est une expression qui d\'epend de $x$.\\
Aussi, lorsque l'argument d'une commande est une fonction il faut mettre 
comme argument, soit par exemple {\tt x->x\verb|^|2-1}, soit {\tt f} (si 
{\tt f} est une fonction qui a \'et\'e d\'efinie auparavant par exemple par 
{\tt f(x):=x\verb|^|2-1}) et \\
lorsque l'argument d'une commande est une expression on met comme argument, 
soit par exemple {\tt x\verb|^|2-1}, soit {\tt g} (si {\tt g} est une variable 
que l'on a d\'efinie auparavant par exemple {\tt g:=x\verb|^|2-1}), soit 
{\tt f(x)} (si {\tt f} est une fonction qui a \'et\'e d\'efinie auparavant par 
exemple {\tt f(x):=x\verb|^|2-1}).
\subsection{Transformer une expression en une fonction : {\tt unapply}}\index{unapply}
\noindent Pour transformer une expression en une fonction, on utilise la 
commande {\tt unapply}.\\
{\tt unapply} a deux arguments une expression et le nom d'une (ou des)
variable(s).\\
{\tt unapply} renvoie une fonction  définie à partir de cette expression et 
de la (ou des) variable(s) donn\'ee(s) en argument.

{\bf Attention} lorsqu'on définit une fonction,
le membre de droite de l'affectation n'est pas évalué,
ainsi l'écriture \verb|g:=x^2; f(x):=g|
ne définit pas la fonction $f: x \rightarrow x^2$ mais la fonction
$f: x \rightarrow g$.\\
On tape :
\begin{center}{\tt g:= sin(x+1); f:=unapply(g,x)}\end{center}
On obtient :
\begin{center}{\tt (sin(x+1), (x)->sin(x+1))}\end{center} 
On a alors la variable {\tt g} qui contient une expression symbolique 
et la variable {\tt f} qui contient une fonction.\\
On tape :
\begin{center}{\tt unapply(exp(x+2),x)}\end{center}
On obtient :
\begin{center}{\tt (x)->exp(x+2)}\end{center} 
On tape :
\begin{center}{\tt f:=unapply(lagrange([1,2,3],[4,8,12]),x)}\end{center}
On obtient :
\begin{center}{\tt (x)->4+4*(x-1)}\end{center} 
On tape :
\begin{center}{\tt f:=unapply(integrate(log(t),t,1,x),x)}\end{center}
On obtient :
\begin{center}{\tt  (x)->x*log(x)-x+1}\end{center} 
On tape :
\begin{center}{\tt f:=unapply(integrate(log(t),t,1,x),x)}\end{center}
\begin{center}{\tt f(x)}\end{center}
On obtient :
\begin{center}{\tt  x*log(x)-x+1}\end{center}
{\bf Remarque}
Pour d\'efinir, \`a partir d'une fonction de 2 variables $f(x,w)$, la fonction
$g$ qui \`a $w$ fait correspondre la fonction $g(w)$ d\'efinie par :
 $g(w)(x)=f(x,w)$, on utilise aussi {\tt unapply}.\\
On tape : 
\begin{center}{\tt f(x,w):=2*x+w}\end{center}
\begin{center}{\tt g(w):=unapply(f(x,w),x)}\end{center}
\begin{center}{\tt g(3)}\end{center}
On obtient :
\begin{center}{\tt  x->2$\cdot$ x+3}\end{center} 
\subsection{Sommet et feuille d'une expression : {\tt sommet feuille op}}\index{sommet|textbf}\index{feuille|textbf}\index{op|textbf}\label{sec:op}
Un op\'erateur est une fonction infix\'ee : par exemple '+' est un 
op\'erateur et 'sin' est une fonction.\\
On peut repr\'esenter une expression par un arbre. Le sommet de l'arbre est 
soit un op\'erateur, soit une fonction et les feuilles de l'arbre sont les 
arguments de l'op\'erateur ou de la fonction (voir aussi \ref{sec:makesuiteop}).\\
La fonction {\tt sommet}  (resp {\tt feuille} (ou {\tt op}))
renvoie le sommet (resp la liste des feuilles) d'une expression.\\
On tape :
\begin{center}{\tt sommet(sin(x+2))}\end{center}
On obtient :
\begin{center}{\tt 'sin'}\end{center}  
On tape :
\begin{center}{\tt sommet(x+2*y)}\end{center}
On obtient :
\begin{center}{\tt '+'}\end{center}  
On tape :
\begin{center}{\tt feuille(sin(x+2))}\end{center}
Ou on tape :
\begin{center}{\tt op(sin(x+2))}\end{center}
On obtient :
\begin{center}{\tt x+2}\end{center}  
On tape :
\begin{center}{\tt feuille(x+2*y)}\end{center}
Ou on tape :
\begin{center}{\tt op(x+2*y)}\end{center}
On obtient :
\begin{center}{\tt (x,2*y) }\end{center} 
{\bf Remarque}\\
Lorsque l'utilisateur d\'efinit une fonction par un programme par exemple la
fonction {\tt pgcd}.\\
On tape :
\begin{center}{\tt pgcd(a,b):=\{local r; while (b!=0) \{r:=irem(a,b);a:=b;b:=r;\} return a;\}}\end{center}
Puis on tape :
\begin{center}{\tt sommet(pgcd)}\end{center}
On obtient :
\begin{center}{\tt 'program'}\end{center}  
Puis on tape :
\begin{center}{\tt feuille(pgcd)[0]}\end{center} 
On obtient :
\begin{center}{\tt (a,b)}\end{center}
Puis on tape :
\begin{center}{\tt feuille(pgcd)[1]}\end{center} 
On obtient :
\begin{center}{\tt (0,0) ou (15,25) si l'on vient d'ex\'ecuter pgcd(15,25)}\end{center}
Puis on tape :
\begin{center}{\tt feuille(pgcd)[2]}\end{center} 
On obtient :
\begin{center}{\tt Le corps du programme : \{local r;....return(a);\}}\end{center}

\section{Les fonctions}
\subsection{Les fonctions ayant plusieurs usages}
\subsubsection{{\tt +} et {\tt -}}\index{+}\index{'+'}\index{-}\index{'-'}
 \noindent{\tt +} (resp {\tt -}) est une fonction infix\'ee et {\tt '+'} 
(resp {\tt '-'}) est une fonction pr\'efix\'ee. Elle renvoie un r\'esultat qui 
d\'epend de la nature de ses arguments.\\
Voici des exemples avec {\tt +} (seul le dernier exemple n'est pas utilisable 
avec {\tt -}) :
\begin{itemize}
\item On tape (1,2)+(3,4) ou (1,2,3)+4=1+2+3+4 ou'+'(1,2,3,4), on obtient 10,
\item On tape 1+i+2+3*i ou '+'(1,i,2,3*i), on obtient 3+4*i,
\item On tape [1,2,3]+[4,1] ou [1,2,3]+[4,1,0] ou '+'([1,2,3],[4,1]), on 
obtient [5,3,3],
\item On tape [1,2]+[3,4] ou '+'([1,2],[3,4]), on obtient [4,6], 
\item On tape [[1,2],[3,4]]+ [[1,2],[3,4]], on obtient [[2,4],[6,8]],
\item On tape [1,2,3]+4 ou '+'([1,2,3],4), on obtient poly1[1,2,7],
\item On tape [1,2,3]+(4,1) ou '+'([1,2,3],4,1), on obtient poly1[1,2,8],
\item On tape "bon"+"jour" ou '+'("bon","jour"), on obtient "bonjour".
\end{itemize}
\subsubsection{{\tt *}}\index{*}\index{'*'}
 \noindent{\tt *} est une fonction infix\'ee et {\tt '*'} 
 est une fonction pr\'efix\'ee. Elle renvoie un r\'esultat qui 
d\'epend de la nature de ses arguments.\\
Voici des exemples avec {\tt *} :
\begin{itemize}
\item On tape (1,2)*(3,4) ou (1,2,3)*4 ou 1*2*3*4 ou '*'(1,2,3,4), on obtient 
24,
\item On tape  1*i*2*3*i ou '*'(1,i,2,3*i), on obtient -6,
\item On tape  [10,2,3]*[4,1] ou [10,2,3]*[4,1,0] ou '+'([10,2,3],[4,1]), 
on obtient 42 (produit scalaire),
\item On tape [1,2]*[3,4] ou '*'([1,2],[3,4]), on obtient 11 (produit scalaire),
\item On tape  [[1,2],[3,4]]* [[1,2],[3,4]], on obtient [[7,10],[15,22]],
\item  On tape [1,2,3]*4='*'([1,2,3],4), on obtient [4,8,12],
\item  On tape [1,2,3]*(4,2)ou '*'([1,2,3],4,2), on obtient [1,2,3]*8=[8,16,24],
\item  On tape (1,2)+i*(2,3), on obtient 1+2+i*2*3=3+6*i.
\end{itemize}
\subsubsection{{\tt /}}\index{/}\index{'/'}
 \noindent{\tt /} est une fonction infix\'ee et {\tt '/'} 
 est une fonction pr\'efix\'ee. Elle renvoie un r\'esultat qui 
d\'epend de la nature de ses arguments.\\
Voici des exemples avec {\tt /} :
\begin{itemize}
%\item(1,2)/(3,4)=(1,2,3)/4=1*2*3*4='/'(1,2,3,4)=24
%\item 1*i*2*3*i='/'(1,i,2,3*i)=-6
\item On tape [10,2,3]/[4,1], on obtient invalid dim,
\item On tape  [1,2]/[3,4] ou '/'([1,2],[3,4]), on obtient [1/3,1/2], 
\item  On tape 1/[[1,2],[3,4]], on obtient [[-2,1],[3/2,(-1)/2]],
\item  On tape [[1,2],[3,4]]*1/ [[1,2],[3,4]], on obtient [[1,0],[0,1]],
\item On tape  [[1,2],[3,4]]/ [[1,2],[3,4]], on obtient [[1,1],[1,1]] (division
terme \`a terme),
\item On tape  [1,2,3]*4 ou '*'([1,2,3],4), on obtient [4,8,12],
\item On tape [1,2,3]/(4,2) ou '*'([1,2,3],4,2)=[1,2,3]*8, on obtient [8,16,24].
%\item (1,2)+i/(2,3)=1+2+i*2*3=3+6*i
\end{itemize}
\subsection{Les fonctions usuelles}
\noindent{\tt max}\index{max|textbf} de deux r\'eels renvoie leur maximum,\\
{\tt min}\index{min|textbf} de deux r\'eels renvoie leur minimum,\\
{\tt abs}\index{abs} d'un r\'eel renvoie sa valeur absolue,\\
{\tt sign}\index{sign|textbf} d'un r\'eel renvoie son signe (+1 si il est 
positif, 0 si il est nul et -1 si il est n\'egatif),\\
{\tt floor}\index{floor|textbf} d'un r\'eel renvoie sa partie enti\`ere,\\
{\tt round}\index{round|textbf} d'un r\'eel renvoie l'entier le plus proche,\\
{\tt ceil} ou {\tt ceiling}\index{ceil|textbf}\index{ceiling|textbf} d'un 
r\'eel renvoie sa partie enti\`ere plus un,\\
{\tt frac}\index{frac|textbf} (ou {\tt fPart}\index{fPart|textbf}) d'un r\'eel 
renvoie sa partie fractionnaire,\\
{\tt trunc}\index{trunc|textbf} (ou {\tt iPart}\index{iPart|textbf}) d'un 
r\'eel renvoie l'entier \'egal au r\'eel sans sa partie fractionnaire,\\
{\tt id}\index{id|textbf} d\'esigne la fonction identit\'e,\\
{\tt sq}\index{sq|textbf} d\'esigne la fonction carr\'ee,\\
{\tt sqrt}\index{sqrt|textbf} d\'esigne la fonction racine carr\'ee,\\
{\tt exp}\index{exp|textbf} d\'esigne la fonction exponentielle,\\
{\tt log}\index{log|textbf} ou {\tt ln}\index{ln|textbf} d\'esigne la fonction logarithme n\'ep\'erien,\\ 
{\tt log10}\index{log10|textbf} d\'esigne la fonction logarithme \`a base 
dix,\\
{\tt logb}\index{logb|textbf} d\'esigne la fonction logarithme \`a base 
donn\'ee comme deuxi\`eme argument : 
{\tt logb(7,10)=log10(7)=log(7)/log(10)},\\
{\tt sinh}\index{sinh|textbf} d\'esigne la fonction sinus hyperbolique,\\
{\tt cosh}\index{cosh|textbf} d\'esigne la fonction cosinus hyperbolique,\\
{\tt tanh}\index{tanh|textbf} d\'esigne la fonction tangente hyperbolique,\\
{\tt asinh} ou {\tt arcsinh}\index{asinh|textbf}\index{arcsinh|textbf} (respectivement {\tt acosh} ou {\tt arccosh}\index{acosh|textbf}\index{arccosh|textbf}, {\tt atanh} ou {\tt arctanh}\index{atanh|textbf}\index{arctanh|textbf})
d\'esigne la fonction r\'eciproque de  {\tt sinh} (respectivement 
{\tt cosh}, {\tt tanh})\\
{\tt sin, cos, tan, cot, sec, csc}) et 
{\tt asin} (ou {\tt arcsin})\index{asin|textbf}\index{arcsin|textbf},{\tt acos}
(ou {\tt arccos})\index{acos|textbf}\index{arccos|textbf}, {\tt atan} (ou 
{\tt arctan})\index{atan|textbf}\index{arctan|textbf}, {\tt acot, asec, acsc} 
pour les fonctions trigonom\'etriques et pour leurs fonctions r\'eciproques (on
se reportera \`a la section \ref{sec:trigo} pour les commandes les concernant).

\subsection{D\'efinition d'une fonction}
\subsubsection{D\'efinition d'une fonction de $\mathbb{R}^p$ dans $\mathbb{R}$}
\noindent On tape pour d\'efinir la fonction $f\ :\ (x)->x*\sin(x)$ :
\begin{center}{\tt f(x):=x*sin(x)}\end{center}
Ou on tape :
\begin{center}{\tt f:=x->x*sin(x)}\end{center}
On obtient :
\begin{center}{\tt  (x)->x*sin(x)}\end{center}
On tape pour d\'efinir la fonction $f\ :\ (x,y)->x*\sin(y)$ :
\begin{center}{\tt f(x,y):=x*sin(y)}\end{center}
Ou on tape :
\begin{center}{\tt f:=(x,y)->x*sin(y)}\end{center}
On obtient :
\begin{center}{\tt  (x,y)->x*sin(y)}\end{center}
{\bf Attention !!!} ce qui se trouve apr\`es {\tt -> } n'est pas \'evalu\'e.
\subsubsection{D\'efinition d'une fonction de $\mathbb{R}^p$ dans $\mathbb{R}^q$}
On tape pour d\'efinir la fonction $h\ :\ (x,y)->(x*\cos(y),x*\sin(y))$ :
\begin{center}{\tt h(x,y):=(x*cos(y),x*sin(y))}\end{center}
On tape pour d\'efinir la fonction $h\ :\ (x,y)->[x*\cos(y),x*\sin(y)]$ :
\begin{center}{\tt h(x,y):=[x*cos(y),x*sin(y)];}\end{center}
Ou on tape :
\begin{center}{\tt h:=(x,y)->[x*cos(y),x*sin(y)];}\end{center}
Ou on tape :
\begin{center}{\tt h(x,y):=\{[x*cos(y),x*sin(y)]\};}\end{center}
Ou on tape :
\begin{center}{\tt h:=(x,y)->return[x*cos(y),x*sin(y)];}\end{center}
Ou on tape 
\begin{center}{\tt h(x,y):=\{return [x*cos(y),x*sin(y)];\}}\end{center}
On obtient :
\begin{center}{\tt   (x,y)->\{return([x*cos(y),x*sin(y)]);\}}\end{center}
{\bf Attention !!!} ce qui se trouve apr\`es {\tt  -> } n'est pas \'evalu\'e.
\subsubsection{D\'efinition d'une fonction de $\mathbb{R}^{p-1}$ dans $\mathbb{R}^q$ \`a partir d'une fonction de $\mathbb{R}^p$ dans $\mathbb{R}^q$}
On d\'efinit la fonction $f(x,y)=x*\sin(y)$, puis on veut d\'efinir la famille
de fonctions d\'ependant du param\`etre $t$ par
$g(t)(y):=f(t,y)$.\\
Comme ce qui se trouve apr\`es {\tt -> } n'est pas \'evalu\'e, on ne peut pas 
d\'efinir $g(t)$ par {\tt g(t):=y->f(t,y)} et on doit utiliser la commande
{\tt unapply}.\\
On tape pour d\'efinir les fonctions $f(x,y)=x\sin(y)$ et $g(t)=y->f(t,y)$ :
\begin{center}{\tt f(x,y):=x*sin(y);g(t):=unapply(f(t,y),y)}\end{center}
On obtient :
\begin{center}{\tt ((x,y)->x*sin(y), (t)->unapply(f(t,y),y))}\end{center}
On tape 
\begin{center}{\tt g(2)}\end{center}
On obtient :
\begin{center}{\tt   y->2$\cdot$ sin(y)}\end{center}
On tape 
\begin{center}{\tt g(2)(1)}\end{center}
On obtient :
\begin{center}{\tt   2$\cdot$ sin(1)}\end{center}

On d\'efinit la fonction $h(x,y)=(x*\cos(y),x*\sin(y))$, 
puis on veut d\'efinir la famille de fonctions d\'ependant du param\`etre $t$ 
par $k(t)(y):=h(t,y)$.\\
Comme ce qui se trouve apr\`es {\tt -> } n'est pas \'evalu\'e, on ne peut pas 
d\'efinir $k(t)$ par $k(t):=y->h(x,y)$ et on est oblig\'e d'utiliser la 
commande {\tt unapply}.\\
On tape pour d\'efinir la fonction $h(x,y)$ :
\begin{center}{\tt h(x,y):=(x*cos(y),x*sin(y))}\end{center}
On tape pour d\'efinir la fonction $k(t)$ :
\begin{center}{\tt k(t):=unapply(h(x,t),x)}\end{center}
On obtient :
\begin{center}{\tt (t)->unapply(h(x,t),x)}\end{center}
On tape 
\begin{center}{\tt k(2)}\end{center}
On obtient :
\begin{center}{\tt (x)->(x*cos(2),x*sin(2))}\end{center}
On tape 
\begin{center}{\tt k(2)(1)}\end{center}
On obtient :
\begin{center}{\tt   (2*cos(1),2*sin(1))}\end{center}
Ou encore
On d\'efinit la fonction $h(x,y)=[x*\cos(y),x*\sin(y)]$, 
puis on veut d\'efinir la famille de fonctions d\'ependant du param\`etre $t$ 
par $k(t)(y):=h(t,y)$.\\
Comme ce qui se trouve apr\`es {\tt -> } n'est pas \'evalu\'e, on ne peut pas 
d\'efinir $k(t)$ par $k(t):=y->h(x,y)$ et on est oblig\'e d'utiliser la 
commande {\tt unapply}.\\
On tape pour d\'efinir la fonction $h(x,y)$ :
\begin{center}{\tt h(x,y):=\{[x*cos(y),x*sin(y)]\}}\end{center}
On tape pour d\'efinir la fonction $k(t)$ :
\begin{center}{\tt k(t):=unapply(h(x,t),x)}\end{center}
On obtient :
\begin{center}{\tt (t)->unapply(h(x,t),x)}\end{center}
On tape 
\begin{center}{\tt k(2)}\end{center}
On obtient :
\begin{center}{\tt (x)->\{[x*cos(2),x*sin(2)];\}}\end{center}
On tape 
\begin{center}{\tt k(2)(1)}\end{center}
On obtient :
\begin{center}{\tt [2$\cdot$ cos(1),2$\cdot$ sin(1)]}\end{center}


\subsection{Composition de fonctions : {\tt @}}\index{$\at$|textbf}
La composition de fonctions se fait avec {\tt Xcas} gr\^ace \`a l'op\'erateur 
 {\tt @} qui est infix\'e.\\
On tape :
\begin{center}{\tt (sq@sin+id)(x)}\end{center}
On obtient :
\begin{center}{\tt (sin(x))\verb|^|2+x}\end{center}  
On tape :
\begin{center}{\tt (sin@sin)(pi/2)}\end{center}
On obtient :
\begin{center}{\tt sin(1)}\end{center}  
\subsection{Puissance $n$-i\`eme de composition d'une fonction : {\tt @@}}\index{$\at\at$|textbf}
La puissance n-i\`eme de  composition d'une fonction se fait avec {\tt Xcas}
 gr\^ace \`a l'op\'erateur {\tt @@} qui est infix\'e.\\
On tape :
\begin{center}{\tt (sin@@3)(x)}\end{center}
On obtient :
\begin{center}{\tt sin(sin(sin(x)))}\end{center}  
On tape :
\begin{center}{\tt (sin@@2)(pi/2)}\end{center}
On obtient :
\begin{center}{\tt sin(1)}\end{center} 

\subsection{Definir une fonction avec l'historique : {\tt as\_function\_of}}\index{as\_function\_of}
\noindent Si on a affect\'e une valeur \`a la variable {\tt a} et si on 
d\'efinit ensuite, dans une autre ligne d'entr\'ee, la variable {\tt b}, 
\`a partir de {\tt a}, on utilise {\tt c:=as\_function\_of(b,a)} pour d\'efinir
une fonction {\tt c} v\'erifiant : {\tt c(a)=b}.\\
On tape :
\begin{center}{\tt  a:=sin(x)}\end{center}
On obtient :
\begin{center}{\tt  sin(x)}\end{center}
On tape :
\begin{center}{\tt  b:=sqrt(1+a\verb|^|2)}\end{center}
On obtient :
\begin{center}{\tt  b:=sqrt(1+sin(x)\verb|^|2)}\end{center}
On tape :
\begin{center}{\tt  c:=as\_function\_of(b,a)}\end{center}
\begin{center}{\tt  c(x)}\end{center}
On obtient :
\begin{center}{\tt sqrt(1+x\verb|^|2)}\end{center}
On tape :
\begin{center}{\tt  a:=2}\end{center}
\begin{center}{\tt  b:=1+a\verb|^|2}\end{center}
On obtient :
\begin{center}{\tt  b:=5}\end{center}
On tape :
\begin{center}{\tt  c:=as\_function\_of(b,a)}\end{center}
On obtient :
\begin{center}{\tt (a)-> \\
\{ local NULL;\\ 
  return(sqrt(1+a\verb|^|2));\\  
\}}\end{center}
On tape :
\begin{center}{\tt  c(x)}\end{center}
On obtient :
\begin{center}{\tt 1+x\verb|^|2}\end{center}
{\bf Attention}\\
 Si la variable {\tt b} a \'et\'e affect\'ee 
plusieurs fois c'est la premi\`ere affectation de {\tt b} apr\`es la 
derni\`ere affectation de {\tt a} qui compte.\\
On tape par exemple :\\
{\tt a:=2} puis\\
{\tt b:=2*a+1} puis\\
{\tt b:=3*a+2} puis\\
{\tt  c:=as\_function\_of(b,a)}\\
On obtient :
\begin{center}{\tt (a)-> \{local NULL; return(2*a+1);\}}\end{center}
c'est \`a dire que {\tt c(x)} vaut {\tt 2*x+1}. \\
Mais si on tape par exemple :\\
{\tt a:=2} puis\\
{\tt b:=2*a+1} puis\\
{\tt a:=2} puis\\
{\tt b:=3*a+2} puis\\
{\tt  c:=as\_function\_of(b,a)}\\
On obtient :
\begin{center}{\tt (a)-> \{local NULL; return(3*a+2);\}}\end{center}
c'est \`a dire que {\tt c(x)} vaut {\tt 3*x+2}. \\
Il est donc pr\'ef\'erable de valider la ligne ou se trouve {\tt a} avant de 
d\'efinir le {\tt b} qui convient. 

\section{D\'erivation et variation}
\subsection{Fonction d\'eriv\'ee d'une fonction : {\tt function\_diff fonction\_derivee}}\index{function\_diff}\index{fonction\_derivee}
{\tt function\_diff} a comme argument une fonction.\\
{\tt function\_diff} renvoie la fonction  d\'eriv\'ee de cette fonction.\\
On tape :
\begin{center}{\tt function\_diff(sin)}\end{center}
On obtient :
\begin{center}{\tt (` x`)->cos(` x`)}\end{center}  
On tape :
\begin{center}{\tt function\_diff(sin)(x)}\end{center}
On obtient :
\begin{center}{\tt cos(x)}\end{center}  
On tape :
\begin{center}{\tt f(x):=x\verb|^|2+x*cos(x)}\end{center} 
\begin{center}{\tt function\_diff(f)}\end{center}
On obtient :
\begin{center}{\tt  (` x`)->2*` x`+cos(` x`)+` x`*(-(sin(` x`)))}\end{center}  
On tape :
\begin{center}{\tt function\_diff(f)(x)}\end{center}
On obtient :
\begin{center}{\tt  cos(x)+x*(-(sin(x)))+2*x}\end{center}  
Pour d\'efinir $g$ comme $f'$, on tape :\\
\begin{center}{\tt g:=function\_diff(f)}\end{center}
Ou :
\begin{center}{\tt g:=unapply(diff(f(x),x),x)}\end{center}
\begin{center}{\tt g(x)}\end{center} 
On obtient :
\begin{center}{\tt  cos(x)+x*(-(sin(x)))+2*x}\end{center}  
{\bf Attention !!!}\\
Lorsqu'on est en mode {\tt Maple}, pour des raisons de compatibilit\'e,
on peut aussi utiliser {\tt D} \`a la place de {\tt function\_diff} et c'est 
pourquoi en g\'eom\'etrie on ne pourra pas avoir d'objet g\'eom\'etrique ayant
comme nom  {\tt D}, lorsqu'on est en mode {\tt Maple}.
\subsection{Longueur d'un arc de courbe : {\tt arcLen}}\index{arcLen}
\noindent {\tt arcLen} a quatre param\`etres : une expression $ex$ (resp une 
liste de 2 expressions $[ex1,ex2]$), le nom d'un paramètre et deux valeurs 
$a$ et $b$ de ce paramètre.\\
{\tt arcLen} calcule la longueur de l'arc de courbe définie par l'\'equation
$y=f(x)=ex$ (resp par $x=ex1,y=ex2$) pour les valeurs du paramètre 
comprises entre $a$ et $b$.\\
On a donc {\tt arcLen(f(x),x,a,b)=} :\\  
{\tt integrate(sqrt(diff(f(x),x)\verb|^|2+1),x,a,b)}\\
ou \\
{\tt integrate(sqrt(diff(x(t),t)\verb|^|2+diff(y(t),t)\verb|^|2),t,a,b)}.\\
{\bf Exemples}
\begin{itemize}
\item Calculer la longueur de l'arc de parabole $y=x^2$ pour $x$ allant de $0$ 
\`a $x=1$.\\
 On tape
\begin{center}{\tt arcLen(x\verb|^|2,x,0,1)}\end{center}
ou
\begin{center}{\tt arcLen([t,t\verb|^|2,t,0,1)}\end{center}
On obtient :
\begin{center}{\tt -1/4*log(sqrt(5)-2)-(-(sqrt(5)))/2}\end{center} 
\item Calculer la longueur de l'arc de la courbe $y=\cosh(x)$ pour $x$ allant 
de $0$ \`a $x=\ln(2)$.\\
On tape :
\begin{center}{\tt arcLen(cosh(x),x,0,log(2))}\end{center}
On obtient :
\begin{center}{\tt 3/4}\end{center}
\item  Calculer la longueur de l'arc de cercle $x=\cos(t),y=\sin(t)$ pour $t$ 
allant de $0$ \`a $t=2*\pi$.\\
 On tape 
\begin{center}{\tt arcLen([cos(t),sin(t)],t,0,2*pi)}\end{center}
On obtient :
\begin{center}{\tt 2*pi}\end{center}
\end{itemize}
\subsection{Maximum et minimum d'une expression : {\tt fMax fMin}}\index{fMax}\index{fMin} 
\noindent{\tt fMax} et {\tt fMin} ont comme argument : une expression d'une 
variable et le nom de cette variable (par d\'efaut {\tt x}).\\
{\tt fMax} renvoie l'abscisse de la solution principale 
du maximum de l'expression.\\
{\tt fMin} renvoie l'abscisse de la solution principale du minimum de 
l'expression.\\
On tape :
\begin{center}{\tt fMax(sin(x),x)}\end{center}
Ou on tape :
\begin{center}{\tt fMax(sin(x))}\end{center}
Ou on tape :
\begin{center}{\tt fMax(sin(y),y)}\end{center}
On obtient :
\begin{center}{\tt pi/2}\end{center} 
On tape :
\begin{center}{\tt fMin(sin(x),x)}\end{center}
Ou on tape :
\begin{center}{\tt fMin(sin(x))}\end{center}
Ou on tape :
\begin{center}{\tt fMin(sin(y),y)}\end{center}
On obtient :
\begin{center}{\tt -pi/2}\end{center} 
On tape :
\begin{center}{\tt fMin(sin(x)\verb|^|2,x)}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
%fin de fait
\subsection{Tableau de valeurs et graphe : {\tt tablefunc table\_fonction} et {\tt plotfunc}}\index{tablefunc|textbf} \index{table\_fonction|textbf}\index{plotfunc}   
On peut avoir, dans le tableur, les diff\'erentes valeurs d'une expression 
$f(x)$ pour $x=x_0,\ x_0+h,....$, gr\^ace \`a  la commande :\\
${\tt tablefunc(f(x),x,x_0,h)}$ ou  ${\tt tablefunc(f(x),x)}$.\\
 Dans ce cas les
 valeurs de d\'epart ${\tt x_0}$ et le pas ${\tt h}$, valent par d\'efaut :
 ${\tt x_0=-5.0}$ et ${\tt h=1.0}$.\\
On ouvre un tableur avec {\tt Alt+t}.\\
Puis, on s\'electionne une case du tableur (par exemple {\tt C0}) et pour 
avoir une table de {\tt "sinus"}, on tape, dans la ligne de commande du 
tableur : 
\begin{center}{\tt tablefunc(sin(x),x)}\end{center}
On obtient deux colonnes {\tt x} et {\tt sin(x)} :\\
- dans la colonne {\tt x} il y a la valeur du  pas {\tt h} (1.0) et le d\'epart
 de l'\'evaluation num\'erique (-5.0), puis une formule, par exemple 
{\tt=C2+C\$1} qui a \'et\'e recopi\'ee vers le bas.\\
- dans la colonne {\tt sin(x)} il y a 
{\tt "Tablefunc"} puis  une formule, par exemple {\tt =evalf(subst(D\$0,C\$0,C2))}, qui a \'et\'e aussi recopi\'ee vers le bas.\\
Les valeurs de {\tt sin(x)} s'affichent alors en face des {\tt x} 
correspondants.\\
On peut bien s\^ur changer le pas ou la valeur de d\'epart ou encore remplacer 
{\tt sin(x)} par {\tt cos(x)} en changeant la valeur de la cellule 
correspondante.\\
La repr\'esentation graphique se fait avec la commande :\\
{\tt plotfunc} pour cela voir \ref{sec:plotfunc}.

\subsection{Deriv\'ees et deriv\'ees partielles : {\tt diff derive deriver}}\index{diff|textbf}\index{derive|textbf}\index{deriver|textbf}
\noindent{\tt diff} ou {\tt derive} a deux arguments pour calculer des 
d\'eriv\'ees et des deriv\'ees partielles du premier ordre et plusieurs 
arguments pour calculer des deriv\'ees partielles de tous les ordres d'une 
expression. 
\subsubsection{Deriv\'ees et deriv\'ees partielles d'ordre 1 : {\tt diff derive deriver}}
Pour d\'eriver une fois :\\
{\tt diff} (ou {\tt derive}) a deux arguments : une expression  
et une variable (resp une liste contenant le nom des variables) 
(voir fonctions de plusieurs variables paragraphe \ref{sec:plusvar}).\\
{\tt diff} renvoie la d\'eriv\'ee de l'expression  par rapport à la variable 
 donn\'ee comme deuxi\`eme param\`etre, tr\'es utile pour calculer des 
d\'eriv\'ees partielles!) (resp renvoie une liste contenant les d\'eriv\'ees
par rapport aux variables de l'argument ).\\
Exemples :
\begin{itemize}
\item Soit à calculer :
$$\frac {\partial (x.y^2.z^3+x.y.z)}{\partial z}$$
On tape :
\begin{center}{\tt  diff(x*y \verb|^|2*z\verb|^|3+x*y*z,z)}\end{center}
On obtient :
\begin{center}{\tt x*y\verb|^|2*3*z\verb|^|2+x*y}\end{center}
\item Soit à calculer les 3 deriv\'ees partielles premi\`eres de $x*y^2*z^3+x*y*z$.\\
On tape :
\begin{center}{\tt  diff(x*y\verb|^|2*z\verb|^|3+x*y,[x,y,z])}\end{center}
On obtient :
\begin{center}{\tt [y\verb|^|2*z\verb|^|3+y*z, x*2*y*z\verb|^|3+x*z, x*y\verb|^|2*3*z\verb|^|2+x*y]}\end{center}
\item Soit à calculer :
$$\frac {\partial^3 (x.y^2.z^3+x.y.z)}{\partial y\partial^2 z}$$
On tape :
\begin{center}{\tt  diff(x*y \verb|^|2*z\verb|^|3+x*y*z,y,z\$2)}\end{center}
On obtient :
\begin{center}{\tt x*2*y*3*2*z}\end{center}
\end{itemize}

\subsubsection{Deriv\'ee et deriv\'ee partielle d'ordre $n$ : {\tt diff derive deriver}}\index{\$}
\noindent Lorsque {\tt derive} (ou {\tt diff}) a plus de deux arguments,
 ce sont : une expression  et le nom des variables par rapport 
auxquelles il faut d\'eriver cette expression (le nom des variables est 
\'eventuellement suivi de \$$n$ pour indiquer le nombre $n$ de fois que l'on 
veut d\'eriver) .\\
{\tt diff} renvoie la d\'eriv\'ee de l'expression  par rapport aux  variables
 donn\'ees apr\`es le premier param\`etre (utile pour calculer des 
d\'eriv\'ees partielles de tous les ordres).\\
Donc pour d\'eriver $n$ fois :\\
{\tt diff} (ou {\tt derive}) a $n+1$ arguments : une expression et le nom de 
la variable qui sera r\'ep\'et\'e $n$ fois. Pour avoir une \'ecriture plus 
facile on \'ecrira plut\^ot le nom de la variable suivi de \$$n$ pour indiquer 
que l'on veut d\'eriver $n$ fois (en effet {\tt x\$3=(x,x,x)}).
Par exemple pour  d\'eriver {\tt exp(x*y)} $1$ fois par 
rapport \`a $x$ et $2$ fois par rapport \`a $y$, on met comme arguments 
l'expression, puis, les noms des variables \'eventuellement suivi de \$ pour 
indiquer le nombre de fois que l'on veut d\'eriver et on tape 
{\tt diff(exp(x*y),x,y\$2)} qui est \'equivalent \`a {\tt diff(exp(x*y),x,y,y)}
(en effet {\tt y\$2=(y,y)}).\\
{\bf Exemples}
\begin{itemize}
\item Soit à calculer :
$$\frac {\partial^2 (x.y^2.z^3+x.y.z)}{\partial x\partial z}$$
On tape :
\begin{center}{\tt diff(x*y \verb|^|2*z\verb|^|3+x*y*z,x,z)}\end{center}
On obtient :
\begin{center}{\tt y\verb|^|2*3*z\verb|^|2+y}\end{center}
\item Soit à calculer :
$$\frac {\partial^3 (x.y^2.z^3+x.y.z)}{\partial x\partial^2 z}$$
On tape :
\begin{center}{\tt  diff(x*y \verb|^|2*z\verb|^|3+x*y*z,x,z,z)}\end{center}
Ou on tape :
\begin{center}{\tt  diff(x*y \verb|^|2*z\verb|^|3+x*y*z,x,z\$2)}\end{center}
On obtient :
\begin{center}{\tt y\verb|^|2*3*2*z}\end{center}
\item Soit à calculer la d\'eriv\'ee troisi\`eme de :
$$\frac{1}{x^2+2}$$
On tape :
\begin{center}{\tt  normal(diff((1)/(x\verb|^|2+2),x,x,x))}\end{center}
Ou on tape :
\begin{center}{\tt  normal(diff((1)/(x\verb|^|2+2),x\$3))}\end{center}
On obtient :
\begin{center}{\tt (-24*x\verb|^|3+48*x)/(x\verb|^|8+8*x\verb|^|6+24*x\verb|^|4+32*x\verb|^|2+16)}\end{center}
\end{itemize}
{\bf Remarque}\\
Bien voir la diff\'erence entre {\tt diff(expr,x,y)} et {\tt  diff(expr,[x,y])} :\\
{\tt diff}$(expr,x,y)$ renvoie $\displaystyle \frac{\partial^2(expr)}{\partial x\partial y}$ et \\
{\tt diff}$(expr,[x,y])$ renvoie $\displaystyle[\frac{\partial(expr)}{\partial x},\frac{\partial (expr)}{\partial y}]$ 

\section{Int\'egration}
\subsection{Primitive et intégrale d\'efinie : {\tt integrate int Int integrer integration}}\index{integrate}\index{int}\index{Int}\index{integrer}\index{integration}
\noindent{\tt integrate} (ou {\tt int}) permettent de calculer une 
primitive ou une int\'egrale d\'efinie. La seule diff\'erence entre ces deux 
commandes est que {\tt  integrate} \'ecrit  avec le symbole $\int$ 
la r\'eponse de la commande {\tt quest()} qui suit l'\'evaluation de 
{\tt  integrate}.\\
Par contre {\tt Int}  renvoie {\tt integrate} sans l'\'evaluer : c'est pour 
avoir la compatibilit\'e avec Maple, lorsque l'on fait un calcul num\'erique 
d'int\'egrales :\\
On tape :
\begin{center}{\tt evalf(Int(exp(x\verb|^|2),x,0,1))}\end{center}
Ou on tape :
\begin{center}{\tt evalf(int(exp(x\verb|^|2),x,0,1))}\end{center}
On obtient :
\begin{center}{\tt 1.46265174591}\end{center}
{\tt  integrate} (ou {\tt int} ou {\tt Int}) a un, deux ou quatre arguments.\\
\begin{itemize}
\item avec un ou deux arguments qui sont :\\
 une expression  ou une expression et une variable (si le nom de la variable 
est {\tt x} il peut \^etre omis),\\
{\tt  integrate} (ou {\tt int}) renvoie alors une primitive de l'expression  
par rapport à  la  variable donn\'ee comme deuxi\`eme param\`etre.\\
On tape :
\begin{center}{\tt integrate(x\verb|^|2)}\end{center}
On obtient :
\begin{center}{\tt x\verb|^|3/3}\end{center}
On tape :
\begin{center}{\tt integrate(t\verb|^|2,t)}\end{center}
On obtient :
\begin{center}{\tt t\verb|^|3/3}\end{center}
\item avec quatre arguments qui sont :\\
une expression, une variable et  les bornes de l'int\'egrale d\'efinie,\\ 
{\tt integrate} (ou {\tt int}) renvoie alors la valeur de l'int\'egrale 
d\'efinie.\\
On tape :
\begin{center}{\tt integrate(x\verb|^|2,x,1,2)}\end{center}
On obtient :
\begin{center}{\tt 7/3}\end{center}
On tape :
\begin{center}{\tt integrate(1/(sin(x)+2),x,0,2*pi)}\end{center}
On obtient apr\`es simplification (appel \`a {\tt simplify}) :
\begin{center}{\tt 2*pi*sqrt(3)/3}\end{center}
\end{itemize}
{\bf Exercice 1}\\
Soit $$f(x)=\frac {x}{x^2-1}+\ln(\frac {x+1}{x-1})$$
Calculer une primitive  de f.\\
On tape :
\begin{center}{\tt int(x/(x\verb|^|2-1)+ln((x+1)/(x-1)))}\end{center}
On trouve : 
\begin{center}{\tt x*log((x+1)/(x-1))+log(x\verb|^|2-1)+1/2*log(2*x\verb|^|2/2-1)}\end{center}
Ou bien on d\'efinit la fonction {\tt f} en tapant :\\
\begin{center}{\tt f(x):=x/(x\verb|^|2-1)+ln((x+1)/(x-1))}\end{center}
puis on tape :
\begin{center}{\tt int(f(x))}\end{center}
On obtient bien s\^ur le m\^eme r\'esultat.\\
{\bf Attention}\\
 Pour {\tt Xcas}, {\tt log} est \'egal \`a {\tt ln} (logarithme n\'ep\'erien) et  {\tt log10} est le logarithme en base 10.\\
{\bf Exercice 2}\\
Calculer :
$$\int \frac {2}{x^6+2 \cdot x^4+x^2} \ dx $$
On tape :
\begin{center}{\tt int(2/(x\verb|^|6+2*x\verb|^|4+x\verb|^|2))}\end{center}
On trouve :
\begin{center}{\tt 2*((3*x\verb|^|2+2)/(-(2*(x\verb|^|3+x)))+-3/2*atan(x))}\end{center}
{\bf Exercice 3}\\
Calculer :
$$\int \frac {1}{\sin(x)+\sin(2 \cdot x )} \ dx $$
On tape :
\begin{center}{\tt integrate(1/(sin(x)+sin(2*x )))}\end{center}
On trouve :
 \begin{center}{\tt (1/-3*log((tan(x/2))\verb|^|2-3)+1/12*log((tan(x/2))\verb|^|2))*2}\end{center} 
\subsection{Primitive et intégrale d\'efinie : {\tt risch}}\index{risch}
\noindent{\tt risch}  calcule une primitive ou une int\'egrale d\'efinie par
l'algorithme de Risch.\\
On tape :
\begin{center}{\tt risch(x\verb|^|2)}\end{center}
On obtient :
\begin{center}{\tt x\verb|^|3/3}\end{center}
On tape :
\begin{center}{\tt risch(x\verb|^|2,x,0,1)}\end{center}
On obtient :
\begin{center}{\tt 1/3}\end{center}
On tape :
\begin{center}{\tt risch(exp(-x\verb|^|2))}\end{center}
On obtient :
\begin{center}{\tt $\int$ exp(x\verb|^|2) dx}\end{center}
ce qui signifie que $\exp(-x^2)$ n'a pas de primitive exprimable avec des 
fonctions connues.

\subsection{Somme indic\'ee finie et infinie et primitive discr\`ete : {\tt sum}}\index{sum|textbf}
\noindent{\tt sum} a deux, quatre ou cinq arguments :\\
\begin {itemize}
\item Avec 5 arguments {\tt sum(Expr,Var,a,b,p)} renvoie la somme demand\'ee 
c'est \`a dire renvoie 
la somme des valeurs de l'expression {\tt Expr} quand la variable {\tt Var} 
va de {\tt a} \`a {\tt b} avec un pas \'egal \`a {\tt p}.\\
On tape :
\begin{center}{\tt sum(x\verb|^|2+1,x,1,5,1)}\end{center}
On obtient :
\begin{center}{\tt 60}\end{center}
En effet :\\ 
$2+5+10+17+26=60$\\
On tape :
\begin{center}{\tt sum(x\verb|^|2+1,x,1,5,2)}\end{center}
On obtient :
\begin{center}{\tt 38}\end{center}
En effet : \\
$2+10+26=38$
\item Avec 4 ou 2 arguments, {\tt sum(Expr,Var,a,b)} ou {\tt sum(Expr,Var=a..b)}
n'a pas la m\^eme valeur selon que {\tt a} est plus petit ou \'egal \`a {\tt b}
ou non, car on veut avoir l'\'egalit\'e :\\
  {\tt sum(Expr,Var,a,b)=sum(Expr,Var,a,c)+sum(Expr,Var,c+1,b)}.\\
 Aussi, lorsque le  pas {\tt p} n'est pas pr\'ecis\'e on a :
\begin{itemize}
\item si  {\tt a} est inf\'erieur à {\tt b},\\
{\tt sum(Expr,Var,a,b)} renvoie la somme des valeurs de l'expression 
{\tt Expr} quand la variable {\tt Var} va de {\tt a} à {\tt b} avec un pas de 
1 : cette syntaxe est compatible avec Maple.\\
Ainsi si {\tt a<= b} on a :\\
{\tt sum(Expr,Var,a,b)}={\tt sum(Expr,Var,a,b,1)}.\\
On tape :
\begin{center}{\tt sum(x\verb|^|2+1,x,1,5)}\end{center}
Ou on tape :
\begin{center}{\tt sum(x\verb|^|2+1,x=1..5)}\end{center}
On obtient :
\begin{center}{\tt 60}\end{center}
En effet :\\
$2+5+10+17+26=60$
\item si  {\tt a} est sup\'erieur à {\tt b+1},\\
{\tt sum(Expr,Var,a,b)} renvoie l'oppos\'e de la somme des valeurs de 
l'expression {\tt Expr} quand la variable 
{\tt Var} va de {\tt b+1} à {\tt a-1} avec un pas de {\tt 1} : cette syntaxe 
est compatible avec Maple.\\
On tape :
\begin{center}{\tt sum(x\verb|^|2+1,x,4,1)}\end{center}
On obtient :
\begin{center}{\tt -15}\end{center}
En effet :\\
$-(5+10)=-15$
\item si  {\tt a} est \'egal à {\tt b+1},\\
{\tt sum(Expr,Var,b+1,b)} renvoie 0.\\
On tape :
\begin{center}{\tt sum(x\verb|^|2+1,x,5,4)}\end{center}
Ou on tape :
\begin{center}{\tt sum(x\verb|^|2+1,x=5..4)}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
\end{itemize}
\item si {\tt sum} a  deux  arguments :\\
{\tt sum} a comme premier argument une expression (par exemple $f(x)$)
 d'une variable (par exemple $x$) qui est donn\'ee comme deuxi\`eme argument.\\
{\tt sum} renvoie la primitive discr\`ete de cette expression, c'est à dire 
la fonction $G$ verifiant $G(x+1)-G(x)=f(x)$.\\ 
On tape :
\begin{center}{\tt sum(1/(x*(x+1)),x)}\end{center}
On obtient :
\begin{center}{\tt -1/x}\end{center}
On tape :
\begin{center}{\tt sum(cos(p*x),p)}\end{center}
On obtient :
\begin{center}{\tt (-cos(p*x)*cos(x)+cos(p*x)-sin(p*x)*sin(x))/(2*cos(x)-2)}\end{center}
\end{itemize}
{\bf Autes Exemples}\\
On tape :
\begin{center}{\tt sum(k,k,2,6) }\end{center}
On obtient :
\begin{center}{\tt 20}\end{center}
On tape :
\begin{center}{\tt sum(k,k,7,2) }\end{center}
On obtient :
\begin{center}{\tt -18}\end{center}
On tape :
\begin{center}{\tt sum(k,k,3,2)}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
On tape :
\begin{center}{\tt sum(1,k,-2,n) }\end{center}
On obtient :
\begin{center}{\tt n+1+2}\end{center}
On tape :
\begin{center}{\tt normal(sum(2*k-1,k,1,n))}\end{center}
On obtient :
\begin{center}{\tt n\verb|^|2}\end{center}
On tape :
\begin{center}{\tt sum(1/(n\verb|^|2),n,1,10)}\end{center}
On obtient :
\begin{center}{\tt 1968329/1270080}\end{center} 
On tape :
\begin{center}{\tt sum(1/(n\verb|^|2),n,1,+(infinity)) }\end{center}
On obtient :
\begin{center}{\tt pi\verb|^|2/6}\end{center}
On tape :
\begin{center}{\tt sum((-1)\verb|^|n/(2*n+1)!,n,0,+(infinity))}\end{center}
On obtient :
\begin{center}{\tt sin(1))}\end{center}
On tape :
\begin{center}{\tt sum(1/(3*n)!,n,0,+(infinity)) }\end{center}
On obtient :
\begin{center}{\tt (2*cos((sqrt(3))/2)*exp(1/-2)+exp(1))/3}\end{center}
On tape :
\begin{center}{\tt sum(1/(n*2\verb|^|n),n,1,+(infinity)) }\end{center}
On obtient :
\begin{center}{\tt -(ln(1/2))}\end{center}
On tape :
\begin{center}{\tt sum((-1)\verb|^|n/(2*n+1),n,0,+(infinity)) }\end{center}
On obtient :
\begin{center}{\tt pi/4}\end{center}
On tape :
\begin{center}{\tt assume(x>0 \&\& x<1);\\
sum(x\verb|^|(2*n)/(2*n+1),n,0,+(infinity))}\end{center}
On obtient :
\begin{center}{\tt x,(-ln(-x+1)+ln(x+1))/(2*x)}\end{center}
On tape :
\begin{center}{\tt sum(1/(n\verb|^|3-n),n,2,10) }\end{center}
On obtient :
\begin{center}{\tt 27/110}\end{center} 
On tape :
\begin{center}{\tt sum(1/(n\verb|^|3-n),n,1,+(infinity)) }\end{center}
On obtient :
\begin{center}{\tt 1/4}\end{center}
Pour justifier ce r\'esultat on d\'ecompose ${\tt 1/(n\verb|^|3-n)}$, on tape :
\begin{center}{\tt partfrac(1/(n\verb|^|3-n)) }\end{center}
On obtient :
\begin{center}{\tt 1/(2*(n+1))-1/n+1/(2*(n-1))}\end{center}
Donc quand on fait la somme de {\tt 2} \`a {\tt N} on a :\\
$\displaystyle \sum_{n=2}^N -\frac{1}{n}=-\sum_{n=1}^{N-1} \frac{1}{n+1}=-\frac{1}{2}-\sum_{n=2}^{N-2} \frac{1}{n+1}-\frac{1}{N}$\\
$\displaystyle \frac{1}{2}*\sum_{n=2}^N \frac{1}{n-1}=\frac{1}{2}*(\sum_{n=0}^{N-2} \frac{1}{n+1})=\frac{1}{2}*(1+\frac{1}{2}+\sum_{n=2}^{N-2}\frac{1}{n+1})$\\
$\displaystyle \frac{1}{2}*\sum_{n=2}^N \frac{1}{n+1}=\frac{1}{2}*(\sum_{n=2}^{N-2} \frac{1}{n+1}+\frac{1}{N}+\frac{1}{N+1})$\\
les termes $\sum_{n=2}^{N-2}$ se d\'etruisent et il reste :\\
 $\displaystyle -\frac{1}{2}+\frac{1}{2}*(1+\frac{1}{2})-\frac{1}{N}+\frac{1}{2}*(\frac{1}{N}+\frac{1}{N+1})=\frac{1}{4}-\frac{1}{2N(N+1)}$\\
d'ou les r\'esultat pr\'ec\'edents :\\
- pour $N=10$ la somme vaut : $1/4-1/220=27/110$\\
- pour $N=+\infty$ la somme vaut : $1/4$ car $\displaystyle \frac{1}{2N(N+1)}$ 
tend vers z\'ero quand $N$ tend vers l'infini.\\

\subsection{Somme de Riemann : {\tt sum\_riemann}}\index{sum\_riemann}
\noindent{\tt sum\_riemann} a deux arguments : une expression d\'ependant de 
deux variables et la liste des noms de ces deux variables.\\ 
{\tt sum\_riemann(expression(n,k),[n,k])} renvoie  un \'equivalent, au 
voisinage de $n=+\infty$, de $\sum_{k=1}^n expression(n,k)$ ou de 
$ \sum_{k=0}^{n-1} expression(n,k)$ ou de $ \sum_{k=1}^{n-1} expression(n,k)$, 
lorsque la somme consid\'er\'ee est une somme de Riemann associ\'ee \`a une 
fonction continue sur [0,1] ou r\'epond quand la recherche a \'et\'e 
infructueuse {\tt "ce n'est probablement pas une somme de Riemann"} .\\
{\bf Exercice 1}\\
Soit $\displaystyle S_n=\sum_{k=1}^n \frac{k^2}{n^3}$.\\
Calculer $\displaystyle \lim_{n \rightarrow +\infty} S_n$.\\
On tape :
\begin{center}{\tt sum\_riemann(k\verb|^|2/n\verb|^|3,[n,k])}\end{center}
On obtient :
\begin{center}{\tt 1/3}\end{center}
{\bf Exercice 2}\\
Soit $\displaystyle S_n=\sum_{k=1}^n \frac{k^3}{n^4}$.\\
Calculer $\displaystyle \lim_{n \rightarrow +\infty} S_n$.\\
On tape :
\begin{center}{\tt sum\_riemann(k\verb|^|3/n\verb|^|4,[n,k])}\end{center}
On obtient :
\begin{center}{\tt 1/4}\end{center}
{\bf Exercice 3}\\
Calculer 
$\displaystyle \lim_{n \rightarrow +\infty}(\frac{1}{n+1}+\frac{1}{n+2}+...+\frac{1}{n+n})$.\\
On tape :
\begin{center}{\tt sum\_riemann(1/(n+k),[n,k])}\end{center}
On obtient :
\begin{center}{\tt log(2)}\end{center}
{\bf Exercice 4}\\
Soit $\displaystyle S_n=\sum_{k=1}^n \frac{32n^3}{16n^4-k^4}$.\\
Calculer $\displaystyle \lim_{n \rightarrow +\infty} S_n$.\\
On tape :
\begin{center}{\tt sum\_riemann(32*n\verb|^|3/(16*n\verb|^|4-k\verb|^|4),[n,k])}\end{center}
On obtient :
\begin{center}{\tt 2*atan(1/2)+log(3)}\end{center}

\subsection{Int\'egration par parties : {\tt ibpdv integrer\_par\_parties\_u} et {\tt ibpu integrer\_par\_parties\_dv}}
\subsubsection{\tt ibpdv}\index{ibpdv}
\noindent{\tt ibpdv} permet de chercher une primitive (ou de calculer une 
int\'egrale d\'efinie) d'une  expression de la forme $u(x).v'(x)$.\\
{\tt ibpdv} a deux  param\`etres pour les primitives et cinq param\`etres pour 
les int\'egrales d\'efinies :
\begin{itemize}
\item soit une expression de la forme
 $u(x).v'(x)$  et $v(x)$ (ou une liste de deux expressions 
$[F(x), u(x)*v' (x)]$ et $v(x)$),
\item soit une expression de la forme
 $g(x)$  et $0$ (ou une liste de deux expressions $[F(x), g(x)]$ et $0$).
\item pour les int\'egrales d\'efinies, il faut rajouter trois autres 
param\`etres : le nom de la variable et les bornes. 
\end{itemize}
Lorsque {\tt ibpdv} a 2 arguments {\tt ibpdv} renvoie :
\begin{itemize}
\item si $v(x) \neq 0$, une liste form\'ee de $u(x).v(x)$ et 
de $-v(x).u'(x)$ (ou une liste form\'ee de $F(x)+u(x).v(x)$ et de 
$-v(x).u'(x)$),
\item si le deuxi\`eme argument est nul, une primitive de 
$g(x)$ (le premier argument) (ou $F(x)$+une primitive de $g(x)$) :\\
donc, {\tt ibpdv(g(x),0)} renvoie une primitive {\tt G(x)} de {\tt g(x)} ou \\
{\tt ibpdv([F(x),g(x)],0)} renvoie {\tt F(x)+G(x)} o\`u {\tt diff(G(x))=g(x)}.
\end{itemize}
C'est à dire {\tt ibpdv} renvoie les termes que l'on doit calculer quand on 
fait une int\'egration par parties, en faisant \'eventuellement plusieurs 
{\tt ibpdv} \`a la suite.\\
Ainsi, lorsque l'on vient d'utiliser la commande {\tt ibpdv(u(x)*v'(x),v(x))}, 
il reste alors
 à calculer l'int\'egrale du deuxi\`eme terme puis à 
faire la somme avec le premier terme pour obtenir une primitive de $u(x).v'(x)$: pour cela on peut utiliser \`a nouveau la commande {\tt ibpdv} avec comme 
premier param\`etre  la liste obtenue et comme deuxi\`eme param\`etre un 
nouveau $v(x)$ (ou $0$ pour terminer l'int\'egration).\\ 
On tape :
\begin{center}{\tt ibpdv(ln(x),x) }\end{center}
On obtient :
\begin{center}{\tt [x.ln(x),-1]}\end{center}
puis
\begin{center}{\tt ibpdv([x.ln(x),-1],0) }\end{center}
On obtient :
\begin{center}{\tt -x+x.ln(x)}\end{center}

Lorsque {\tt ibpdv} a 5 arguments {\tt ibpdv(u(x)*v'(x),v(x),x,a,b)} ou
{\tt ibpdv([F(x),u(x)*v'(x),v(x),x,a,b)} renvoie :
\begin{itemize}
\item si $v(x) \neq 0$, une liste form\'ee de $u(b).v(b)-u(a).v(a)$ et 
de $-v(x).u'(x)$ (ou une liste form\'ee de $F(b)+u(b).v(b)-F(a)-u(a).v(a)$ et 
de $-v(x).u'(x)$),
\item si le deuxi\`eme argument est nul, {\tt ibpdv(g(x),0,x,a,b)}
renvoie $G(b)-G(a)$ o\`u $G(x)$ est une primitive de 
$g(x)$ (le premier argument) (ou {\tt ibpdv([F(x),g(x)],0,x,a,b)}
renvoie $F(x)+G(b)-G(a)$  o\`u $G(x)$ est une primitive de 
$g(x)$) de façon \`a pouvoir faire plusieurs {\tt ibpdv} \`a la suite.
\end{itemize}
On tape :
\begin{center}{\tt ibpdv(ln(x),x,x,2,3) }\end{center}
On obtient :
\begin{center}{\tt [3*ln(3)-2*ln(2),-1]}\end{center}
puis
\begin{center}{\tt ibpdv([3*ln(3)-2*ln(2),-1],0,x,2,3) }\end{center}
On obtient :
\begin{center}{\tt -1+3*ln(3)-2*ln(2)}\end{center}
{\bf Remarque}\\
 Lorsque le premier param\`etre de {\tt ibpdv} est une liste de deux
 \'el\'ements, {\tt ibpdv} n'agit que sur le dernier \'el\'ement de cette 
liste et ajoute le terme int\'egr\'e au premier \'el\'ement de la liste 
(de façon à pouvoir faire plusieurs {\tt ibpdv} à la suite).\\
On a par exemple :\\
{\tt ibpdv((log(x))\verb|^|2,x) = [x*(log(x))\verb|^|2,-(2*log(x))]}\\ 
il reste \`a int\'egrer {\tt -(2*log(x))}, on utilise {\tt ibpdv(ans(),x)} ou 
on tape :\\
{\tt ibpdv([x*(log(x))\verb|^|2,-(2*log(x))],x)}\\
On obtient :\\
{\tt [x*(log(x))\verb|^|2+x*(-(2*log(x))),2]}\\
et il reste \`a int\'egrer {\tt 2}, on utilise {\tt ibpdv(ans(),0)} :\\
{\tt ibpdv([x*(log(x))\verb|^|2+x*(-(2*log(x))),2],0)}.\\
On obtient :
{\tt x*(log(x))\verb|^|2+x*(-(2*log(x)))+2*x}
\subsubsection{\tt ibpu}\index{ibpu}
\noindent{\tt ibpu} permet de chercher une primitive (ou de calculer une 
int\'egrale d\'efinie) d'une  expression de la forme $u(x).v'(x)$.\\
{\tt ibpu} a deux param\`etres pour les primitives et cinq param\`etres pour 
les int\'egrales d\'efinies : 
\begin{itemize}
\item soit une expression de la forme 
$u(x).v'(x)$ et $u(x)$ (ou une liste de deux expressions $[F(x), u(x)*v'(x)]$ 
et $u(x)$),
\item soit une expression de la forme 
$g(x)$ et $0$ (ou une liste de deux expressions $[F(x), g(x)]$ 
et $0$).
\item pour les int\'egrales d\'efinies, il faut rajouter trois autres 
param\`etres : le nom de la variable et les bornes. 
\end{itemize}
Lorsque {\tt ibpu} a 2 arguments {\tt ibpu} renvoie :
{\tt ibpu} renvoie :
\begin{itemize}
\item si $u(x) \neq 0$, une liste form\'ee de $u(x).v(x)$ et de $-v(x).u'(x)$ 
(ou une liste form\'ee de $F(x)+u(x).v(x)$ et de $-v(x).u'(x)$),
\item si le deuxi\`eme argument est nul, une primitive de
 $g(x)$  (le premier argument) 
(ou $F(x)$+une primitive de $g(x)$):\\ 
{\tt ibpu(g(x),0)} renvoie {\tt G(x)} o\`u {\tt diff(G(x))=g(x)} ou\\
 {\tt ibpu([F(x),g(x)],0)} renvoie {\tt F(x)+G(x)} o\`u {\tt diff(G(x))=g(x)}.
\end{itemize}
c'est à dire {\tt ibpu} renvoie les termes que l'on doit calculer quand on 
fait une int\'egration par parties, en faisant \'eventuellement plusieurs 
{\tt ibpu} \`a la suite.\\
Ainsi, lorsque l'on vient d'utiliser la commande {\tt ibpu(u(x)*v'(x),u(x))}, 
il reste à calculer l'int\'egrale du deuxi\`eme terme puis à faire la somme 
avec le premier terme pour obtenir une primitive de $u(x).v'(x)$. Pour cela, 
on peut utiliser \`a nouveau la commande {\tt ibpu} avec comme 
premier param\`etre  la liste obtenue et comme deuxi\`eme param\`etre  un 
nouveau $u(x)$ (ou 0 pour terminer l'int\'egration).\\ 
On tape :
\begin{center}{\tt ibpu(ln(x),ln(x)) }\end{center}
On obtient :
\begin{center}{\tt [x.ln(x),-1]}\end{center}
puis
\begin{center}{\tt ibpu([x.ln(x),-1],0) }\end{center}
On obtient :
\begin{center}{\tt -x+x.ln(x)}\end{center}

Lorsque {\tt ibpu} a 5 arguments {\tt ibpu(u(x)*v'(x),u(x),x,a,b)} ou
{\tt ibpu([F(x),u(x)*v'(x),u(x),x,a,b)} renvoie :
\begin{itemize}
\item si $u(x) \neq 0$, une liste form\'ee de $u(b).v(b)-u(a).v(a)$ et 
de $-v(x).u'(x)$ (ou une liste form\'ee de $F(b)+u(b).v(b)-F(a)-u(a).v(a)$ et 
de $-v(x).u'(x)$),
\item si le deuxi\`eme argument est nul, {\tt ibpu(g(x),0,x,a,b)}
renvoie $G(b)-G(a)$  o\`u $G(x)$ une primitive de 
$g(x)$ (le premier argument) (ou {\tt ibpu([F(x),g(x)],0,x,a,b)}
renvoie $F(x)+G(b)-G(a)$ o\`u $G(x)$ est une primitive de 
$g(x)$) de façon \`a pouvoir faire plusieurs {\tt ibpu} \`a la suite.
\end{itemize}
On tape :
\begin{center}{\tt ibpu(ln(x),ln(x),x,2,3)}\end{center}
On obtient :
\begin{center}{\tt [3*ln(3)-2*ln(2),-1]}\end{center}
puis
\begin{center}{\tt ibpu([3*ln(3)-2*ln(2),-1],0,x,2,3) }\end{center}
On obtient :
\begin{center}{\tt -1+3*ln(3)-2*ln(2)}\end{center}
{\bf Remarque}\\
Lorsque le premier param\`etre de {\tt ibpu} est une liste de deux 
\'el\'ements, {\tt ibpu} n'agit que sur le dernier \'el\'ement de cette liste 
et ajoute le terme int\'egr\'e au premier \'el\'ement de la liste (de façon à 
pouvoir faire plusieurs {\tt ibpu} à la suite).\\

On a par exemple :\\
{\tt ibpu((log(x))\verb|^|2,log(x)) = [x*(log(x))\verb|^|2,-(2*log(x))]}\\ 
il reste \`a int\'egrer {\tt -(2*log(x))}, on utilise {\tt ibpu(ans(),log(x))} 
ou on tape:\\
{\tt ibpu([x*(log(x))\verb|^|2,-(2*log(x))],log(x))}\\
On obtient :\\
{\tt [x*(log(x))\verb|^|2+x*(-(2*log(x))),2]}\\
et il reste \`a int\'egrer {\tt 2}, on utilise {\tt ibpu(ans(),0)} :\\
{\tt ibpu([x*(log(x))\verb|^|2+x*(-(2*log(x))),2],0)}.\\
On obtient :
{\tt x*(log(x))\verb|^|2+x*(-(2*log(x)))+2*x}

\subsection{Changement de variables : {\tt subst substituer}}
On se reportera \`a la commande {\tt subst} de la section \ref{sec:subst}. 

\section{Limites}
\subsection{Limites : {\tt limit limite}}\index{limit|textbf}\index{limite|textbf}\label{sec:limit}
{\tt limit} permet de calculer la limite d'une expression en un point fini (ou 
infini). En utilisant un param\`etre supplementaire, on peut indiquer si on
cherche une limite par valeurs sup\'erieures ou par 
valeurs inf\'erieures (1 pour dire "par valeurs sup\'erieures" et -1 pour dire 
"par valeurs inf\'erieures").\\
{\tt limit} a trois ou quatre  arguments :\\
une expression, le nom de la variable (par exemple {\tt x}), le point limite 
(par exemple {\tt a}) et un argument optionnel qui indique si la limite est 
unidirectionnelle ou bidirectionnelle (par d\'efaut {\tt 0}). 
Cet argument est \'egal \`a 
{\tt -1} pour une limite \`a gauche ({\tt x<a}) ou  est \'egal \`a {\tt  1} 
pour une limite \`a droite ({\tt x>a}) ou \`a {\tt 0} pour une limite.\\
L'argument optionnel est donc utilis\'e lorsque l'on veut calculer une limite 
\`a droite (+1) ou une limite \`a gauche (-1).\\
{\tt limit} renvoie la limite demand\'ee.\\
{\bf Remarque}\\
On peut aussi mettre comme argument {\tt x=a} \`a la place de {\tt x,a} donc :
{\tt limit} a aussi comme arguments une expression d\'ependant d'une variable, 
une \'egalit\'e (variable =la valeur o\`u l'on veut calculer la limite) et 
\'eventuellement 1 ou -1 pour indiquer la direction.\\ 
On tape :
\begin{center}{\tt limit(1/x,x,0,-1)}\end{center}
ou
\begin{center}{\tt limit(1/x,x=0,-1)}\end{center}
On obtient :
\begin{center}{\tt -(infinity)}\end{center} 
On tape :
\begin{center}{\tt limit(1/x,x,0,1)}\end{center}
ou
\begin{center}{\tt limit(1/x,x=0,1)}\end{center}
On obtient :
\begin{center}{\tt +(infinity)}\end{center} 
On tape :
\begin{center}{\tt limit(1/x,x,0,0)}\end{center}
ou
\begin{center}{\tt limit(1/x,x,0)}\end{center}
ou
\begin{center}{\tt limit(1/x,x=0)}\end{center}
On obtient :
\begin{center}{\tt infinity}\end{center} 
cela veut dire que {\tt abs(1/x)} tend vers $+\infty$ 
quand $x$ tend vers $0$.\\
Exercices :
\begin{itemize}
\item Trouver pour $n>2$, la limite quand $x$ tend vers 0 de :
$$ \frac{n\tan(x)-\tan(nx)}{\sin(nx)-n\sin(x)}$$
On tape :
\begin{center}{\tt limit((n*tan(x)-tan(n*x))/(sin(n*x)-n*sin(x)),x=0)}\end{center}
On obtient :
\begin{center}{\tt 2 }\end{center}
\item Trouver la limite quand $x$ tend vers $+\infty$ de :
$$\sqrt{x+\sqrt{x+\sqrt x}}-\sqrt x$$ 
On tape :
\begin{center}{\tt limit(sqrt(x+sqrt(x+sqrt(x)))-sqrt(x),x=+infinity)}\end{center}
On obtient :
\begin{center}{\tt 1/2 }\end{center}
\item Trouver la limite quand $x$ tend vers 0 de :
$$\frac{\sqrt{1+x+x^2/2}-\exp(x/2)}{(1-\cos(x))\sin(x)}$$ 
On tape :
\begin{center}{\tt limit((sqrt(1+x+x\verb|^|2/2)-exp(x/2))/((1-cos(x))*sin(x)),x,0)}\end{center}
On obtient :
\begin{center}{\tt -1/6 }\end{center}
\end{itemize}

Pour calculer quelquefois des limites plus ais\'ement, il peut \^etre 
judicieux de quoter le premier argument.\\  
On tape par exemple :
\begin{center}{\tt limit('(2*x-1)*exp(1/(x-1))',x=+infinity)}\end{center}
On remarquera que l'on a quot\'e ici le premier argument pour qu'il ne soit 
pas \'evalu\'e c'est \`a dire pour qu'il ne soit pas simplifi\'e.\\
On obtient :
\begin{center}{\tt +(infinity)}\end{center}

\subsection{Limite et int\'egrale}\index{limit} \index{limite} 
On ne donne ici que deux exemple :
\begin{itemize}
\item D\'eterminer la limite quand $a$ tend vers l'infini de :
$$  \int _2^a \frac {1}{x^2}\ dx$$
On tape :
\begin{center}{\tt limit(integrate(1/(x\verb|^|2),x,2,a),a,+(infinity))}\end{center}
On obtient (v\'erifier que {\tt a} est formelle sinon faire {\tt purge(a)}) :
\begin{center}{\tt 1/2}\end{center}
\item D\'eterminer la limite quand $a$ tend vers l'infini de :
$$  \int _2^a (\frac {x}{x^2-1}+\ln(\frac {x+1}{x-1}))\ dx$$
On tape :
\begin{center}{\tt limit(integrate(x/(x\verb|^|2-1)+log((x+1)/(x-1)),x,2,a),}\end{center} 
\begin{center}{\tt a,+(infinity))}\end{center} 
On obtient (v\'erifier que {\tt a} est formelle sinon faire {\tt purge(a)}):
\begin{center}{\tt +(infinity)}\end{center}
\end{itemize}

\section{R\'e\'ecrire des expressions transcendantes et trigonom\'etriques}
\subsection{D\'evelopper une expression transcendante et trigonom\'etrique : {\tt texpand tExpand developper\_transcendant}}\index{texpand|textbf}\index{tExpand|textbf}\index{developper\_transcendant|textbf}
\noindent{\tt texpand} ou {\tt tExpand} a comme argument une expression 
transcendante et trigonom\'etrique.\\
{\tt texpand} ou {\tt tExpand} est la g\'en\'eralisation de {\tt expexpand}, 
{\tt lnexpand} et {\tt trigexpand} car elle d\'eveloppe les expressions 
transcendantes et trigonom\'etriques.\\
{\tt texpand} ou {\tt tExpand} permet, par exemple, de transformer $\ln(x^n)$ 
en $n\ln(x)$, $\exp(x)^n$ en $\exp(nx)$ et $\sin(2x)$ en $2\sin(x)\cos(x)$.\\
\begin{itemize}
\item {\tt texpand} ou {\tt tExpand} a comme argument une expression 
transcendante et trigonom\'etrique.\\
{\bf Exemple} :\\
Developper $\exp(x+y)+\cos(x+y)+\ln(3x^2)$.\\
On tape :
\begin{center}{\tt texpand(exp(x+y)+cos(x+y)+ln(3*x\verb|^|2))}\end{center}
On obtient :
\begin{center}{\tt cos(x)*cos(y)-sin(x)*sin(y)+exp(x)*exp(y)+ ln(3)+2*ln(x)}\end{center}
\item  {\tt texpand} ou {\tt tExpand} a comme argument une expression 
trigonom\'etrique.\\
{\tt texpand} ou {\tt tExpand} d\'eveloppe cette expression en fonction de $\sin(x)$ et $\cos(x)$.\\
{\bf Exemples} 
\begin{enumerate}
\item Developper $\cos(x+y)$.\\
On tape :
\begin{center}{\tt texpand(cos(x+y))}\end{center}
On obtient :
\begin{center}{\tt cos(x)*cos(y)-sin(x)*sin(y)}\end{center}
\item Developper $\cos(3x)$.\\
On tape :
\begin{center}{\tt texpand(cos(3*x))}\end{center}
On obtient :
\begin{center}{\tt 4*(cos(x))\verb|^| 3-3*cos(x)}\end{center}
\item Developper $\displaystyle \frac{\sin(3*x)+\sin(7*x)}{\sin(5*x)}$.\\
On tape :
\begin{center}{\tt texpand((sin(3*x)+sin(7*x))/sin(5*x))}\end{center}
On obtient
\begin{center}{\tt (4*(cos(x))\verb|^|2-1)*(sin(x)/(16*(cos(x))\verb|^|4- 12*(cos(x))\verb|^|2+1))/sin(x)+(64*(cos(x))\verb|^|6- 80*(cos(x))\verb|^|4+24*(cos(x))\verb|^|2- 1)*sin(x)/ (16*(cos(x))\verb|^|4-12*(cos(x))\verb|^|2+1)/sin(x)}\end{center}
Et, apr\`es une simplification en tapant {\tt normal(ans())}, on obtient :
\begin{center}{\tt 4*(cos(x))\verb|^|2-2}\end{center}
\end{enumerate}
\item {\tt texpand} ou {\tt tExpand} a comme argument une expression 
transcendante.\\
{\tt texpand} ou {\tt tExpand} d\'eveloppe cette expression.\\
{\bf Exemples} 
\begin{enumerate}
\item Developper $\exp(x+y)$.\\
On tape :
\begin{center}{\tt texpand(exp(x+y))}\end{center}
On obtient :
\begin{center}{\tt exp(x)*exp(y)}\end{center}
\item Developper  $\ln(x+y)$.\\
On tape :
\begin{center}{\tt texpand(log(x*y))}\end{center}
On obtient :
\begin{center}{\tt log(x)+log(y)}\end{center}
\item Developper  $\ln(x^n)$.\\
\begin{center}{\tt  texpand(ln(x\verb|^|n))}\end{center}
On obtient :
\begin{center}{\tt n*ln(x)}\end{center}
\item Developper $\ln((e^2)+\exp(2*\ln(2))+exp(\ln(3)+\ln(2)))$.\\
On tape :
\begin{center}{\tt texpand(log(e\verb|^|2)+exp(2*log(2))+exp(log(3)+log(2)))}\end{center}
On obtient :
\begin{center}{\tt 6+3*2}\end{center}
Ou on tape :
\begin{center}{\tt texpand(log(e\verb|^|2)+exp(2*log(2)))+ lncollect(exp(log(3)+log(2)))}\end{center}
On obtient :
\begin{center}{\tt 12}\end{center}
\end{enumerate}
\end{itemize}

\subsection{Rassembler les termes de m\^eme nature : {\tt combine}}\index{combine}\index{exp@{\sl exp}|textbf}\index{log@{\sl log}|textbf}\index{ln@{\sl ln}|textbf}\index{sin@{\sl sin}|textbf}\index{cos@{\sl cos}|textbf}\index{trig@{\sl trig}|textbf}
\noindent{\tt combine} a deux arguments : une expression et une option 
{\tt exp,log,ln,sin,cos,trig} le nom d'une classe de fonction.\\
{\tt combine} rassemble les termes de l'expression contenant cette fonction.\\
{\tt combine(expr,ln)} ou {\tt combine(expr,log)} donne le m\^eme r\'esultat 
que {\tt lncollect(expr)}\\
{\tt combine(expr,trig)} ou {\tt combine(expr,sin)}  ou {\tt combine(expr,cos)}
donne le m\^eme r\'esultat que {\tt tcollect(expr)}.\\
On tape :
\begin{center}{\tt combine(exp(x)*exp(y)+sin(x)*cos(x)+ln(x)+ln(y),exp)}\end{center}
On obtient :
\begin{center}{\tt exp(x+y)+sin(x)*cos(x)+ln(x)+ln(y)}\end{center}
On tape :
\begin{center}{\tt combine(exp(x)*exp(y)+sin(x)*cos(x)+ln(x)+ln(y),trig)}\end{center}
ou
\begin{center}{\tt combine(exp(x)*exp(y)+sin(x)*cos(x)+ln(x)+ln(y),sin)}\end{center}
ou
\begin{center}{\tt combine(exp(x)*exp(y)+sin(x)*cos(x)+ln(x)+ln(y),cos)}\end{center}
On obtient :
\begin{center}{\tt exp(y)*exp(x)+(sin(2*x))/2+ln(x)+ln(y)}\end{center}
On tape :
\begin{center}{\tt combine(exp(x)*exp(y)+sin(x)*cos(x)+ln(x)+ln(y),ln)}\end{center}
ou
\begin{center}{\tt combine(exp(x)*exp(y)+sin(x)*cos(x)+ln(x)+ln(y),log)}\end{center}
On obtient :
\begin{center}{\tt exp(x)*exp(y)+sin(x)*cos(x)+ln(x*y)}\end{center}


\section{Les expressions trigonom\'etriques}
\subsection{Les diff\'erentes fonctions trigonom\'etriques}\label{sec:trigo}
\noindent{\tt sin} \index{sin} d\'esigne la fonction sinus,\\
{\tt cos} \index{cos} d\'esigne la fonction cosinus,\\ 
{\tt tan} \index{tan} d\'esigne la fonction tangente ({\tt tan(x)= sin(x)/cos(x)}),\\ 
{\tt cot} \index{cot|textbf} d\'esigne la fonction cotangente ({\tt cot(x)= cos(x)/sin(x)}),\\ 
{\tt sec} \index{sec|textbf} d\'esigne la fonction secante ({\tt sec(x)= 1/cos(x)}),\\
{\tt csc} \index{csc|textbf} d\'esigne la fonction cosecante ({\tt csc(x) = 1/sin(x)}),\\
{\tt asin} ou {\tt arcsin}\index{asin}\index{arcsin}, {\tt acos} ou {\tt arccos}\index{acos}\index{arccos}, {\tt atan} ou {\tt arctan}\index{atan}\index{arctan}, {\tt acot}\index{acot|textbf}, {\tt asec}\index{asec|textbf}, {\tt acsc}\index{acsc|textbf}
d\'esignent les fonctions r\'eciproques des fonctions pr\'ec\'edentes.\\
On a :\\
{\tt asec(x) = acos(1/x)}, \\
{\tt acsc(x) = asin(1/x)},\\
{\tt  acot(x) = atan(1/x)}. 
\subsection{D\'evelopper une expression trigonométriques : {\tt trigexpand}}\index{trigexpand}
\noindent{\tt trigexpand} a comme argument une expression trigonom\'etrique.\\
{\tt trigexpand} d\'eveloppe cette expression en fonction de $\sin(x)$ et 
$\cos(x)$.\\
On tape :
\begin{center}{\tt trigexpand(cos(x+y))}\end{center}
On obtient :
\begin{center}{\tt cos(x)*cos(y)-sin(x)*sin(y)}\end{center}

\subsection{Lin\'eariser une  expression trigonom\'etrique : {\tt tlin lineariser\_trigo}}\index{tlin}\index{lineariser\_trigo}
\noindent{\tt tlin} a comme argument une expression trigonom\'etrique.\\
{\tt tlin} lin\'earise cette expression en fonction de $\sin(n.x)$ et $\cos(n.x)$.\\
{\bf Exemples}
\begin{itemize}
\item  Lin\'eariser $\cos(x)*\cos(y)$.\\
On tape :
\begin{center}{\tt tlin(cos(x)*cos(y))}\end{center}
On obtient :
\begin{center}{\tt 1/2*cos(x-y)+1/2*cos(x+y)}\end{center}
\item  Lin\'eariser $\cos(x)^3$.\\
On tape :
\begin{center}{\tt tlin(cos(x)\verb|^|3)}\end{center}
On obtient :
\begin{center}{\tt 3/4*cos(x)+1/4*cos(3*x)}\end{center}
\item  Lin\'eariser  $4\cos(x)^2-2$.\\
On tape :
\begin{center}{\tt tlin(4*cos(x)\verb|^|2-2)}\end{center}
On obtient :
\begin{center}{\tt2*cos(2*x)}\end{center}
\end{itemize}

\subsection{Augmenter la phase de $\frac{\pi}{2}$ dans les expressions trigonom\'etriques : {\tt shift\_phase}}\index{shift\_phase|textbf}\index{tsimplify} 
\noindent{\tt shift\_phase} a comme argument une expression trigonom\'etrique.\\
{\tt shift\_phase} permet d'augmenter  la phase de $\frac{\pi}{2}$ dans les 
expressions trigonom\'etriques une fois que la simplification automatique a eu
lieu.
On tape :
\begin{center}{\tt shift\_phase(x+sin(x))}\end{center}
On obtient :
\begin{center}{\tt x-cos((pi+2*x)/2)}\end{center}
On tape :
\begin{center}{\tt shift\_phase(x+cos(x))}\end{center}
On obtient :
\begin{center}{\tt x-+sin((pi+2*x)/2)}\end{center}
On tape :
\begin{center}{\tt shift\_phase(x+tan(x))}\end{center}
On obtient :
\begin{center}{\tt x+1/(tan((pi+2*x)/2))}\end{center}
Si on ne veut pas que l'expression soit \'evalu\'ee (i.e. qu'il n'y ait pas de 
simplification automatique), il faut quoter l'argument. 
On tape :
\begin{center}{\tt shift\_phase('sin(x+pi/2)')}\end{center}
On obtient :
\begin{center}{\tt -(cos(pi+x))}\end{center}
Mais si on tape sans quoter le sinus :
\begin{center}{\tt shift\_phase(sin(x+pi/2))}\end{center}
On obtient :
\begin{center}{\tt sin((pi+2*x)/2)}\end{center}
car {\tt sin(x+pi/2)} est \'evalu\'ee (i.e. simplifi\'ee) en {\tt cos(x)} avant
que la commande {\tt shift\_phase} ne soit appel\'ee et ensuite 
{\tt shift\_phase(cos(x))} renvoie {\tt sin((pi+2*x)/2)}.
{\bf Exercice}\\
Calcul de $\sum_{n=1}^{+\infty}\frac{\sin(n*x)}{n}$\\
On tape :\\
{\tt normal(sum((sin(n*x))/n,n=1..+infinity))}\\
On obtient :\\
{\tt -atan((sin(x))/(cos(x)-1))}\\
On tape :\\
{\tt normal(shift\_phase(halftan(atan((sin(x))/(-cos(x)+1))))}\\
On obtient :\\
{\tt pi*floor(((pi+x)/2)/pi+1/2)+(-1)/2*pi+(-1)/2*x}\\
si on tape :\\
{\tt tsimplify(atan((sin(x))/(-cos(x)+1))}\\
On obtient car {\tt tsimplify} n'est pas rigoureux vis a vis des $2k\pi$ :\\
{\tt -1/2*pi-1/2*x}

\subsection{Rassembler les sinus et les cosinus de m\^eme angle : {\tt tcollect tCollect rassembler\_trigo}}\index{tcollect}\index{tCollect}\index{rassembler\_trigo}
\noindent{\tt tcollect} ou {\tt tCollect} a comme argument une expression 
trigonom\'etrique.\\
{\tt tcollect} lin\'earise cette expression en fonction de $\sin(n.x)$ et $\cos(n.x)$  puis rassemble les sinus et les cosinus de m\^eme angle.\\
On tape :
\begin{center}{\tt tcollect(sin(x)+cos(x))}\end{center}
On obtient :
\begin{center}{\tt sqrt(2)*cos(x-pi/4)}\end{center}
On tape :
\begin{center}{\tt tcollect(2*sin(x)*cos(x)+cos(2*x))}\end{center}
On obtient :
\begin{center}{\tt sqrt(2)*cos(2*x-pi/4)}\end{center}

\subsection{Simplifier : {\tt simplify simplifier}}\index{simplify}\index{simplifier}
\noindent{\tt simplify} simplifie  l'expression de façon automatique.\\
Comme toutes simplifications automatiques, il ne faut pas s'attendre à des 
miracles et pourtant...\\ 
On tape :
\begin{center}{\tt simplify((sin(3*x)+sin(7*x))/sin(5*x))}\end{center}
On obtient :
\begin{center}{\tt 4*(cos(x))\verb|^|2-2}\end{center}
{\bf Attention} {\tt simplify} est plus efficace qu'en on est en mode 
{\tt radian} (pour cela on coche {\tt radian} dans la configuration du 
{\tt cas}  ou  bien on tape {\tt angle\_radian:=1}).

\subsection{Transformer les arccos en arcsin : {\tt acos2asin}}\index{acos2asin}
\noindent{\tt acos2asin} a comme argument une expression trigonom\'etrique.\\
{\tt acos2asin}  transforme cette expression en remplaçant :\\
$\arccos(x)$ par $\displaystyle \frac{\pi}{2}-\arcsin(x)$.\\
On tape :
\begin{center}{\tt acos2asin(acos(x)+asin(x))}\end{center}
On obtient apr\`es simplification :
\begin{center}{\tt pi/2}\end{center}

\subsection{Transformer les arccos en arctan : {\tt acos2atan}}\index{acos2atan}
\noindent{\tt acos2atan} a comme argument une expression trigonom\'etrique.\\
{\tt acos2atan}  transforme cette expression en remplaçant :\\
$\arccos(x)$ par 
$\displaystyle \frac{\pi}{2}-\arctan(\frac{x}{\sqrt{1-x^2}})$.\\
On tape :
\begin{center}{\tt acos2atan(acos(x))}\end{center}
On obtient :
\begin{center}{\tt  pi/2-atan(x/sqrt(1-x\verb|^|2))}\end{center}
\subsection{Transformer les arcsin en arccos : {\tt asin2acos}}\index{asin2acos}
\noindent{\tt asin2acos} a comme argument une expression trigonom\'etrique.\\
{\tt asin2acos} transforme cette expression en remplaçant :\\
$\arcsin(x)$ par 
$\displaystyle \frac{\pi}{2}-\arccos(x)$.\\
On tape :
\begin{center}{\tt asin2acos(acos(x)+asin(x))}\end{center}
On obtient apr\`es simplification :
\begin{center}{\tt pi/2}\end{center}

\subsection{Transformer les arcsin en arctan : {\tt asin2atan}}\index{asin2atan}
\noindent{\tt asin2atan} a comme argument une expression trigonom\'etrique.\\
{\tt asin2atan} transforme cette expression en remplaçant :\\
$\arcsin(x)$ par 
$\displaystyle \arctan(\frac{x}{\sqrt{1-x^2}})$.\\
On tape :
\begin{center}{\tt asin2atan(asin(x))}\end{center}
On obtient :
\begin{center}{\tt atan(x/sqrt(1-x\verb|^|2))}\end{center}

\subsection{Transformer les arctan en arcsin : {\tt atan2asin}}\index{atan2asin}
\noindent{\tt atan2asin} a comme argument une expression trigonom\'etrique.\\
{\tt atan2asin} transforme cette expression en remplaçant :\\
$\arctan(x)$ par $\displaystyle \arcsin(\frac{x}{\sqrt{1+x^2}})$.\\
On tape :
\begin{center}{\tt atan2asin(atan(x))}\end{center}
On obtient :
\begin{center}{\tt asin(x/sqrt(1+x\verb|^|2))}\end{center}

\subsection{Transformer les arctan en arccos : {\tt atan2acos}}\index{atan2acos}
\noindent{\tt atan2acos} a comme argument une expression trigonom\'etrique.\\
{\tt atan2acos} transforme cette expression en remplaçant :\\
$\arctan(x)$ par $\displaystyle \frac{\pi}{2}-\arccos(\frac{x}{\sqrt{1+x^2}})$.\\
On tape :
\begin{center}{\tt atan2acos(atan(x))}\end{center}
On obtient :
\begin{center}{\tt pi/2-acos(x/sqrt(1+x\verb|^|2))}\end{center}

\subsection{Transformer les exponentielles complexes en sin et en cos : {\tt sincos exp2trig}}\index{sincos}\index{exp2trig}
\noindent{\tt sincos}  ou {\tt exp2trig} a comme argument une expression 
contenant des exponentielles complexes.\\
{\tt sincos} ou {\tt exp2trig} transforme cette expression en fonction de 
$\sin(x)$ et de $\cos(x)$.\\
On tape :
\begin{center}{\tt sincos(exp(i*x))}\end{center}
On obtient :
\begin{center}{\tt cos(x)+(i)*sin(x)}\end{center}
On tape :
\begin{center}{\tt exp2trig(exp(-i*x))}\end{center}
On obtient :
\begin{center}{\tt cos(x)+(i)*(-(sin(x)))}\end{center}
On tape :
\begin{center}{\tt simplify(sincos(((i)*(exp((i)*x))\verb|^|2-i)/(2*exp((i)*x))))}\end{center}
Ou on tape :
\begin{center}{\tt simplify(exp2trig(((i)*(exp((i)*x))\verb|^|2-i)/(2*exp((i)*x))))}\end{center}
On obtient :
\begin{center}{\tt -sin(x)}\end{center}

\subsection{Transformer tan(x) en sin(x)/cos(x) : {\tt tan2sincos}}\index{tan2sincos}
\noindent{\tt tan2sincos} a comme argument une expression trigonom\'etrique.\\
{\tt tan2sincos} transforme cette expression en remplaçant :\\
$\tan(x)$ par $\displaystyle \frac{\sin(x)}{\cos(x)}$.\\
On tape :
\begin{center}{\tt tan2sincos(tan(2*x))}\end{center}
On obtient :
\begin{center}{\tt sin(2*x)/cos(2*x)}\end{center}
\subsection{Transformer sin(x) en cos(x)*tan(x) : {\tt sin2costan}}\index{sin2costan}
\noindent{\tt sin2costan} a comme argument une expression trigonom\'etrique.\\
{\tt sin2costan} transforme cette expression en remplaçant :\\
$\sin(x)$ par $\displaystyle \cos(x)*\tan(x)$.\\
On tape :
\begin{center}{\tt sin2costan(sin(2*x))}\end{center}
On obtient :
\begin{center}{\tt cos(2*x)*tan(2*x)}\end{center}

\subsection{Transformer cos(x) en sin(x)/tan(x) : {\tt cos2sintan}}\index{cos2sintan}
\noindent{\tt cos2sintan} a comme argument une expression trigonom\'etrique.\\
{\tt cos2sintan} transforme cette expression en remplaçant :\\
$\cos(x)$ par $\displaystyle \frac{\sin(x)}{\tan(x)}$.\\
On tape :
\begin{center}{\tt cos2sintan(cos(2*x))}\end{center}
On obtient :
\begin{center}{\tt sin(2*x)/tan(2*x)}\end{center}

\subsection{Transformer tan(x) avec sin(2x) et cos(2x) : {\tt tan2sincos2}}\index{tan2sincos2}
\noindent{\tt tan2sincos2} a comme argument une expression trigonom\'etrique.\\
{\tt tan2sincos2} transforme cette  expression en remplaçant :\\
$\tan(x)$ par 
$\displaystyle \frac{\sin(2.x)}{1+\cos(2.x)}$.\\
On tape :
\begin{center}{\tt tan2sincos2(tan(x))}\end{center}
On obtient :
\begin{center}{\tt sin(2*x)/(1+cos(2*x))}\end{center}

\subsection{Transformer tan(x) avec cos(2x) et sin(2x) : {\tt tan2cossin2}}\index{tan2cossin2}
\noindent{\tt tan2cossin2} a comme argument une expression trigonom\'etrique.\\
{\tt tan2cossin2} transforme cette  expression en remplaçant :\\
$\tan(x)$ par 
$\displaystyle \frac{1-\cos(2.x)}{\sin(2.x)}$.\\
On tape :
\begin{center}{\tt tan2cossin2(tan(x))}\end{center}
On obtient :
\begin{center}{\tt (1-cos(2*x))/sin(2*x)}\end{center}

\subsection{Transformer une expression trigonom\'etrique en fonction de tan(x/2) : {\tt halftan}}\index{halftan}
\noindent{\tt halftan} a comme argument une expression trigonom\'etrique.\\
{\tt halftan} transforme les $\sin(x),\ \cos(x)$ et $ \tan(x)$ contenus dans 
l'expression en fonction de $\tan(\frac{x}{2})$.\\
On tape :
\begin{center}{\tt halftan(sin(2*x)/(1+cos(2*x)))}\end{center}
On obtient :
\begin{center}{\tt 2*tan(2*x/2)/((tan(2*x/2))\verb|^|2+1)/}\end{center}
\begin{center}{\tt (1+(1-(tan(2*x/2))\verb|^|2)/((tan(2*x/2))\verb|^|2+1))}\end{center}
Et, apr\`es simplification avec {\tt simplify(ans())}, on obtient :
\begin{center}{\tt tan(x)}\end{center}
On tape :
\begin{center}{\tt halftan(sin(x)\verb|^|2+cos(x)\verb|^|2)}\end{center}
On obtient :
\begin{center}{\tt (2*tan(x/2)/((tan(x/2))\verb|^|2+1))\verb|^|2+}\end{center}
\begin{center}{\tt ((1-(tan(x/2))\verb|^|2)/((tan(x/2))\verb|^|2+1))\verb|^|2}\end{center}
On obtient, apr\`es simplification avec {\tt normal(ans())} :
\begin{center}{\tt 1}\end{center}
\subsection{Transformer les expressions trigonom\`etriques et hyperboliques en tan(x/2) et en exp(x): {\tt halftan\_hyp2exp}}\index{halftan\_hyp2exp}
\noindent{\tt halftan\_hyp2exp} a comme argument une expression 
trigonom\'etrique ou hyperbolique.\\
{\tt halftan\_hyp2exp} transforme les $\sin(x),\ \cos(x)$ et $ \tan(x)$ 
contenus dans l'expression en fonction de $\tan(\frac{x}{2})$ et 
de $\exp(x)$.\\
On tape :
\begin{center}{\tt halftan\_hyp2exp(tan(x)+tanh(x))}\end{center}
On obtient :
\begin{center}{\tt (2*tan(x/2))/((1-(tan(x/2))\verb|^|2))+(((exp(x))\verb|^|2-1))/ (((exp(x))\verb|^|2+1))}\end{center}
On tape :
\begin{center}{\tt halftan\_hyp2exp(sin(x)\verb|^|2+cos(x)\verb|^|2-sinh(x)\verb|^|2+cosh(x)\verb|^|2)}\end{center}
On obtient, apr\`es simplification avec {\tt normal(ans())} :
\begin{center}{\tt 2}\end{center}

\subsection{Transformer avec des fonctions trigonométriques inverses en logarithmes : {\tt atrig2ln}}\index{atrig2ln}
\noindent{\tt atrig2ln} réécrit l'expression contenant des fonctions 
trigonométriques inverses avec des logarithmes.\\
On tape :
\begin{center}{\tt atrig2ln(asin(x))}\end{center}
On obtient :
\begin{center}{\tt i*log(x+sqrt(x\verb|^|2-1))+pi/2}\end{center}

\subsection{Transformer une expression trigonométrique en des exponentielles complexes: {\tt trig2exp}}\index{trig2exp}
\noindent{\tt trig2exp} a comme argument une expression trigonom\'etrique.\\
{\tt trig2exp}  transforme les fonctions trigonom\'etriques en exponentielles 
complexes {\sc sans} lin\'eariser.\\ 
On tape :
\begin{center}{\tt trig2exp(tan(x))}\end{center}
On obtient :
\begin{center}{\tt ((exp((i)*x))\verb|^|2-1)/((i)*((exp((i)*x))\verb|^|2+1))}\end{center}
On tape :
\begin{center}{\tt trig2exp(sin(x))}\end{center}
On obtient :
\begin{center}{\tt (exp((i)*x)-1/(exp((i)*x)))/(2*i)}\end{center}

\subsection{Simplifier en privil\'egiant les sinus : {\tt trigsin}}\index{trigsin}
\noindent{\tt trigsin} a comme argument une expression trigonom\'etrique.\\
{\tt trigsin} simplifie cette expression à l'aide des formules :\\
$\sin(x)^2+\cos(x)^2=1$, $\displaystyle \tan(x)=\frac{\sin(x)}{\cos(x)}$ et  en
privil\'egiant les sinus.\\ 
On tape :
\begin{center}{\tt trigsin(sin(x)\verb|^|4+cos(x)\verb|^|2+1)}\end{center}
On obtient :
\begin{center}{\tt sin(x)\verb|^|4-sin(x)\verb|^|2+2}\end{center}
\subsection{Simplifier en privil\'egiant les cosinus : {\tt trigcos}}\index{trigcos}
\noindent{\tt trigcos} a comme argument une expression trigonom\'etrique.\\
{\tt trigcos} simplifie cette expression à l'aide des formules :\\
$\sin(x)^2+\cos(x)^2=1$, $\displaystyle \tan(x)=\frac{\sin(x)}{\cos(x)}$  et en privil\'egiant les cosinus.\\ 
On tape :
\begin{center}{\tt trigcos(sin(x)\verb|^|4+cos(x)\verb|^|2+1)}\end{center}
On obtient :
\begin{center}{\tt cos(x)\verb|^|4-cos(x)\verb|^|2+2}\end{center}
\subsection{Simplifier en privil\'egiant les tangentes : {\tt trigtan}}\index{trigtan}
\noindent{\tt trigtan} a comme argument une expression trigonom\'etrique.\\
{\tt trigtan} simplifie cette expression à l'aide des formules :\\
$\sin(x)^2+\cos(x)^2=1$, $\displaystyle \tan(x)=\frac{\sin(x)}{\cos(x)}$ et en privil\'egiant les tangentes.\\ 
On tape :
\begin{center}{\tt trigtan(sin(x)\verb|^|4+cos(x)\verb|^|2+1)}\end{center}
On obtient :
\begin{center}{\tt((tan(x))\verb|^|2/(1+(tan(x))\verb|^|2))\verb|^|2+1/(1+(tan(x)\verb|^|2)+1}\end{center}
 et apr\`es simplification avec {\tt normal} on a :
\begin{center}{\tt (2*tan(x)\verb|^|4+3*tan(x)\verb|^|2+2)/(tan(x)\verb|^|4+2*tan(x))\verb|^|2+1)}\end{center}

\subsection{R\'eecriture d'une expression avec diff\'erentes options : {\tt convert convertir}}\index{convert|textbf}\index{convertir|textbf}\index{sin@{\sl sin}}\index{cos@{\sl cos}}\index{sincos@{\sl sincos}|textbf}\index{exp@{\sl exp}}\index{tan@{\sl tan}|textbf}\index{ln@{\sl ln}}\index{expln@{\sl expln}|textbf}\index{string@{\sl string}|textbf}\index{matrix@{\sl matrix}|textbf}\index{polynom@{\sl polynom}}\index{parfrac@{\sl parfrac}|textbf}\index{partfrac@{\sl partfrac}|textbf}\index{fullparfrac@{\sl fullparfrac}|textbf}\label{sec:convert}
\noindent{\tt convert} a deux arguments une expression et une option.\\
{\tt convert} r\'eecrit cette expression en fonction de l'option.\\
Voici la liste des diff\'erentes options :
\begin{itemize}
\item{\tt sin} convertit une expression comme si on appelait directement 
{\tt trigsin}.
\item {\tt cos} convertit une expression comme si on appelait directement 
{\tt trigcos}.
\item {\tt sincos} convertit une expression comme si on appelait directement 
{\tt sincos}.
\item {\tt trig} convertit une expression comme si on appelait directement 
{\tt sincos}.
\item {\tt tan} convertit une expression comme si on appelait directement 
{\tt halftan}.
\item {\tt exp} convertit une expression comme si on appelait directement 
{\tt trig2exp}.
\item {\tt ln} convertit une expression comme si on appelait directement 
{\tt trig2exp}.
\item {\tt expln} convertit une expression comme si on appelait directement 
{\tt trig2exp}.
\item {\tt string} convertit une expression en une cha\^{i}ne.
\item {\tt matrix} convertit une expression en une matrice.
\item {\tt polynom} convertit un d\'eveloppement de Taylor en un polyn\^ome 
(cf \ref{sec:convertpoly}).
\item {\tt parfrac} ou {\tt partfrac} ou {\tt fullparfrac} convertit une fraction 
rationnelle en \'el\'ements simples (\ref{sec:convertparf}).
\end{itemize}
{\tt convert} permet aussi :
\begin{itemize}
\item des changements d'unit\'e, par exemple \index{base@{\sl base}}
\index{confrac@{\sl confrac}}
{\tt convert(1000\_g,\_kg)=1.0\_kg} (cf \ref{sec:convertunit}).
\item d'\'ecrire un r\'eel selon une fraction continue : 
{\tt convert(a,confrac,'fc')} \'ecrit {\tt a} selon une fraction continue 
stock\'ee dans {\tt fc}. Ne pas oublier de quoter le dernier argument!!!
Par exemple, {\tt convert(1.2,confrac,'fc')=[1,5]} et {\tt fc} contient
la fraction continue \'egale \`a 1.2 (cf \ref{sec:convertdfc}). 
\item  de transformer un entier en la liste de ses chiffres dans son 
\'ecriture dans une base, en commencant par le chiffre des unit\'es (et 
r\'eciproquement) :
{\tt convert(n,base,b)} transforme l'entier {\tt n} en la liste de ses chiffres
dans son \'ecriture dans la base {\tt b} en commencant par le chiffre des 
unit\'es. Par exemple, {\tt convert(123,base,10)=[3,2,1]} et r\'eciproquement
{\tt convert(l,base,b)} transforme la liste {\tt l} en l'entier {\tt n} qui a
{\tt l} pour liste de chiffres dans son \'ecriture dans la base {\tt b} en 
commencant par le chiffre des unit\'es. Par exemple, 
{\tt convert([3,2,1],base,10)=123} (cf \ref{sec:convertbase}). 
\end{itemize}

\section{Transform\'ee de Fourier}

\subsection{Les coefficients de Fourier : {\tt fourier\_an} et {\tt fourier\_bn} ou {\tt fourier\_cn}} \index{integer}
Si la fonction $f$ est continue par morceaux sur $\mathbb{R}$, et est 
p\'eriodique de p\'eriode $T$, alors aux points de continuit\'e de $f$ on a :\\
 $$f(x)=\frac{a_0}{2}+\sum _{n=1}^{+\infty} a_n \cos(\frac{2\pi nx}{T})+b_n \sin(\frac{2\pi nx}{T})$$
ou 
 $$ f(x)=\sum _{n=-\infty}^{+\infty} c_n e^{\frac{2i\pi nx}{T}}$$
o\`u les coefficients $a_n,\ b_n$, $n\in N$, (ou $c_n$, $n \in Z$) sont les 
coefficients de Fourier de $f$ et se calculent avec les fonctions :\\
{\tt fourier\_an} et {\tt fourier\_bn} ou {\tt fourier\_cn}.  
\subsubsection{\tt fourier\_an}\index{fourier\_an}\label{sec:fourier_an}
\noindent{\tt fourier\_an} a quatre ou cinq param\`etres : une expression 
$express$ dependant d'une variable, le nom de la variable (par exemple $x$), 
la p\'eriode $T$, un entier $n$ et $a$ ($a$  vaut $0$ par d\'efaut).\\
{\tt fourier\_an(express,x,T,n,a)} renvoie le coefficient de Fourier $a_n$ 
d'une fonction de variable $x$ d\'efinie sur $[a,a+T[$ par $f(x)=express$ et 
p\'eriodique de p\'eriode $T$.\\
Si $f$ est continue par morceaux 
{\tt fourier\_an(ex,x,T,n,a)} renvoie $\displaystyle a_n=\frac{2}{T}\int_a^{a+T}f(x)\cos(\frac{2\pi nx }{T})dx$\\
Si l'on veut que les calculs soient simplifi\'es il faut dire que $n$ est un 
entier en tapant {\tt assume(n,integer)}.\\
{\bf Example} 
 Soit la fonction $f$, de p\'eriode $T=2$, d\'efinie sur $[-1;1[$ par 
$f(x)=x^2$.\\
 On tape, pour avoir son coefficient $a_0$ :
\begin{center}{\tt fourier\_an(x\verb|^|2,x,2,0,-1)}\end{center}
On obtient :
\begin{center}{\tt 1/3}\end{center}
On tape, pour avoir son coefficient $a_n$ ($n\neq 0$) :
 \begin{center}{\tt assume(n,integer);fourier\_an(x\verb|^|2,x,2,n,-1)}\end{center}
On obtient :
\begin{center}{\tt 4*(-1)\verb|^|n/(pi\verb|^|2*n\verb|^|2)}\end{center}
\subsubsection{\tt fourier\_bn}\index{fourier\_bn}\label{sec:fourier_bn}
\noindent{\tt fourier\_bn} a quatre ou cinq param\`etres : une expression 
$ex$ dependant d'une variable, le nom de la variable (par exemple $x$), la 
p\'eriode $T$, un entier $n$ et $a$ ($a$  vaut $0$ par d\'efaut).\\
{\tt fourier\_bn(ex,x,T,n,a)} renvoie le coefficient de Fourier $b_n$ d'une 
fonction de variable $x$ d\'efinie sur $[a,a+T[$ par $f(x)=ex$ et p\'eriodique 
de p\'eriode $T$.\\
Si $f$ est continue par morceaux {\tt fourier\_bn(ex,x,T,n,a)} renvoie :\\
$\displaystyle b_n=\frac{2}{T}\int_a^{a+T}f(x)\sin(\frac{2\pi nx}{T})dx$\\
Si l'on veut que les calculs soient simplifi\'es il faut dire que $n$ est un entier en tapant {\tt assume(n,integer)}.\\
{\bf Examples} 
\begin{itemize}
\item Soit la fonction $f$, de p\'eriode $T=2$, d\'efinie sur $[-1;1[$ par 
$f(x)=x^2$.\\
On tape, pour avoir son coefficient $b_n$ ($n\neq 0$) :
 \begin{center}{\tt  assume(n,integer);fourier\_bn(x\verb|^|2,x,2,n,-1)}\end{center}
On obtient :
\begin{center}{\tt  0}\end{center}
\item Soit la fonction $f$, de p\'eriode $T=2$, d\'efinie sur $[-1;1[$ par 
$f(x)=x^3$.\\
On tape, pour avoir son coefficient $b_1$ :
 \begin{center}{\tt fourier\_bn(x\verb|^|3,x,2,1,-1)}\end{center}
On obtient :
\begin{center}{\tt (2*pi\verb|^|2-12)/pi\verb|^|3}\end{center}
\end{itemize}

\subsubsection{\tt fourier\_cn}\index{fourier\_cn}\label{sec:fourier_cn}
\noindent{\tt fourier\_cn} a quatre ou cinq param\`etres : une expression 
$ex$, le nom de la variable (par exemple $x$), la p\'eriode $T$, un entier 
$n$ et $a$ ($a$  vaut $0$ par d\'efaut).\\
{\tt fourier\_cn(ex,x,T,n,a)} renvoie le coefficient de Fourier $c_n$ d'une 
fonction de variable $x$ d\'efinie sur $[a,a+T[$ par $f(x)=ex$ et p\'eriodique 
de p\'eriode $T$.\\
Si $f(x)=ex$ est continue par morceaux sur $\mathbb R$,
 {\tt fourier\_cn(ex,x,T,n,a)} renvoie 
$\displaystyle c_n=\frac{1}{T}\int_a^{a+T}f(x)e^{\frac{-2i\pi nx}{T}}dx$\\
{\bf Exemples}
\begin{itemize}
\item D\'eterminer les coefficients $c_n$ de Fourier de la fonction $f$ p\'eriodique de p\'eriode
 $2$ et d\'efinie sur $[-1;1[$ par $ f(x)=x^2$.\\ 
On tape, pour avoir $c_0$ :
\begin{center}{\tt fourier\_cn(x\verb|^|2,x,2,0,-1)}\end{center}
On obtient:
\begin{center}{\tt 1/3}\end{center}
On tape, pour avoir $c_n$ :
\begin{center}{\tt assume(n,integer)}\end{center}
\begin{center}{\tt fourier\_cn(x\verb|^|2,x,2,n,-1)}\end{center}
On obtient:
\begin{center}{\tt 2*(-1)\verb|^|n/(pi\verb|^|2*n\verb|^|2)}\end{center}

\item D\'eterminer les coefficients  $c_n$ de Fourier de la fonction $f$ p\'eriodique de p\'eriode $2$ et d\'efinie sur $[0;2[$ par $ f(x)=x^2$.\\ 
On tape, pour avoir $c_0$ :
\begin{center}{\tt fourier\_cn(x\verb|^|2,x,2,0)}\end{center}
On obtient:
\begin{center}{\tt 4/3}\end{center}
On tape, pour avoir $c_n$ :
\begin{center}{\tt assume(n,integer)}\end{center}
\begin{center}{\tt fourier\_cn(x\verb|^|2,x,2,n)}\end{center}
On obtient:
\begin{center}{\tt ((2*i)*pi*n+2)/(pi\verb|^|2*n\verb|^|2)}\end{center}

\item D\'eterminer les coefficients $c_n$ de Fourier de la fonction $f$ p\'eriodique de 
p\'eriode $2.\pi$ et d\'efinie sur $[0;2.\pi[$ par $ f(x)=x^2$.\\ 
On tape \index{assume} :
\begin{center}{\tt assume(n,integer)}\end{center}
\begin{center}{\tt fourier\_cn(x\verb|^|2,x,2*pi,n)}\end{center}
On obtient :
\begin{center}{\tt ((2*i)*pi*n+2)/n\verb|^|2}\end{center}
Si on ne met pas {\tt assume(n,integer)} on obtient une expression non simplifi\'ee :
\begin{center}{\tt ((2*i)*pi\verb|^|2*n\verb|^|2*exp((-i)*n*2*pi)+2*pi*n*exp((-i)*n*2*pi)+}\end{center}
\begin{center}{\tt (-i)*exp((-i)*n*2*pi)+i)/(pi*n\verb|^|3)}\end{center}
que l'on peut simplifier en remplacant {\tt exp((-i)*n*2*pi)} par {\tt 1} :
\begin{center}{\tt subst(ans(),exp((-i)*n*2*pi)=1)}\end{center}
On obtient :
\begin{center}{\tt ((2*i)*pi\verb|^|2*n\verb|^|2+2*pi*n+-i+i)/pi/n\verb|^|3}\end{center}
expression que l'on peut simplifier avec {\tt normal} et on trouve finalement :
\begin{center}{\tt ((2*i)*pi*n+2)/n\verb|^|2}\end{center}
Il est donc pr\'ef\'erable d'\'ecrire {\tt assume(n,integer)}.\\
Donc si $n \neq 0$ on a :$$c_n=\frac{2*i*n*\pi+2}{n^2}$$ 
Puis on tape :
\begin{center}{\tt fourier\_cn(x\verb|^|2,x,2*pi,0)}\end{center}
On obtient :
\begin{center}{\tt  4*pi\verb|^|2/3}\end{center}
Donc si $n= 0$ on a :
$$c_0=\frac{4.{\pi}^2}{3}$$ 
\end{itemize}
Remarque :\\
Lorsque l'on ne veut plus consid\'erer $n$ comme un entier on doit taper :\\
{\tt purge(n)}\index{purge}.\\
 Pour conna\^{i}tre les hypoth\'eses faites sur une variable, par exemple $n$,
 on tape :\\
{\tt about(n)}\index{about} ou,\\
{\tt assume(n)}\index{assume}.

\subsection{Transform\'ee de Fourier discr\`ete}
Soit $N$ un entier.\\
On consid\`ere une suite $x$ p\'eriodique de p\'eriode $N$ : elle est
enti\`erement d\'etermin\'ee par la liste $x=[x_0,x_1,...x_{N-1}]$.\\
La transform\'ee de Fourier discr\'ete est une transformation $F_N$ qui a une 
suite $x$ p\'eriodique de p\'eriode $N$ fait correspondre une suite $y$,
 p\'eriodique de p\'eriode $N$, d\'efinie pour $k=0..N-1$ par :\\
$\displaystyle {(F_N(x))}_k=y_k=\sum_{j=0}^{N-1}x_j\omega_N^{-k\cdot j}$
avec $\omega_N$ racine $N$-i\`eme de l'unit\'e.\\
Le but est de calculer pour $k=0..N-1$:
$$\sum_{j=0}^{N-1}x_j\omega_N^{-k\cdot j}$$
avec $\omega_N=\exp(\frac{2i\pi}{N})$\\
La m\'ethode de la transform\'ee de Fourier rapide permet de calculer 
rapidement ces sommes si $N$ est une puissance de 2.

\subsubsection{Les propri\'etes}
La transform\'ee de Fourier discr\'ete  $F_N$ est une transformation bijective.\\
On a :\\
$F_N^{-1}=\frac{1}{N} \overline{F_N}$\\
c'est \`a dire :\\
$\displaystyle {(F_N^{-1}(x))}_k=\frac{1}{N}\sum_{j=0}^{N-1}x_j\omega_N^{k\cdot j}$\\
{\bf Notation}\\
Avec {\tt Xcas} on a les fonctions {\tt fft} et {\tt ifft} qui sont :\\
{\tt fft(x)}=$F_N(x)$ et\\
{\tt ifft(x)}=$F_N^{-1}(x)$\\
{\bf D\'efiniton}\\
Soient deux suites $x$ et $y$ p\'eriodiques de p\'eriode $N$.\\
On d\'efinit :\\
- le produit de Hadamard, not\'e $\cdot$, par :\\
${(x \cdot y)}_k=x_ky_k$\\
- le produit de convolution, not\'e $*$, par :\\
${(x * y)}_k=\sum_{j=0}^{N-1}x_jy_{k-j}$\\
On a alors :\\
$N*F_N(x \cdot y)=F_N(x) * F_N(y)$\\
$F_N(x * y)=F_N(x) \cdot F_N(y)$

\subsubsection{O\`u interviennent ces sommes ?}
\begin{enumerate}
\item Valeur d'un polyn\^ome\\ 
Soit un polyn\^ome $P(x)=\sum_{j=0}^{N-1}c_jx^j$  donn\'e par la liste de 
ces coefficients $[c_0,c_1,..c_{N-1}]$ compl\'et\'e par des z\'eros pour que 
$N$ soit une puissance de 2.
\begin{itemize}
\item On veut calculer les valeurs prises par $P(x)$ aux points 
$a_k=\omega_N^{-k}=\exp(\frac{-2ik\pi}{N})$ pour $k=0..N-1$, c'est \`a dire 
les valeurs $\sum_{j=0}^{N-1}c_j(\omega_N^{-k})^j$ pour $k=0..N-1$.\\
On a :\\
$[P(a_0), P(a_1),..P(a_{N-1})]=F_N([c_0,c_1,..c_{N-1}])$\\
Par exemple on tape :\\
{\tt P(x):=x+x\verb|^|2} et 
{\tt w:=i}\\
Les coefficients de $P$ sont [0,1,1,0],  
$\omega=w=i$, $N=4$ et $\exp(2i\pi/4)=i$.\\
On a :\\
{\tt fft([0,1,1,0])=[2,-1-i,0,-1+i]}
et donc \\
{\tt P(0)=2},\\
{\tt P(-i)=P(w\verb|^|-1)=-1-i},\\
{\tt P(-1)=P(w\verb|^|-2)=0},\\
{\tt P(i)=P(w\verb|^|-3)=-1+i}.
\item  On veut calculer les valeurs prises par $P(x)$ aux points 
$b_k=\omega_N^{k}=\exp(\frac{2ik\pi}{N})$ pour $k=0..(N-1)$, c'est \`a dire les 
valeurs $\sum_{j=0}^{N-1}c_j(\omega_N^{k})^j$ pour $k=0..(N-1)$.\\
On a :\\
$[P(a_0), P(a_1),..P(a_{(N-1)})]=N*F_N^{-1}([c_0,c_1,..c_{(N-1)}])$\\
Par exemple on tape :\\
{\tt P(x):=x+x\verb|^|2} et
{\tt w:=i}\\
Les coefficients de $P$ sont [0,1,1,0], 
$\omega=w=i$, $N=4$ et $\exp(2i\pi/4)=i$.\\
On a :\\
{\tt 4*ifft([0,1,1,0])=[2,-1+i,0,-1-i]}
et donc \\
{\tt P(0)=2},\\
{\tt  P(i)=P(w\verb|^|1)=-1+i},\\
{\tt  P(-1)=P(w\verb|^|2)=0},\\
{\tt  P(-i)=P(w\verb|^|3)=-1-i}.
\end{itemize}
\item Interpolation trigonom\'etrique\\
Soit $f$ une fonction $2\pi$-p\'eriodique dont on connait les valeurs en
$x_k=2k\pi/N$, $f(x_k)=f(2k\pi/N)=f_k$ pour $k=0..(N-1)$ avec $N=2*m$.\\
On veut d\'eterminer le polyn\^ome $p$ trigonom\'etrique interpolateur de $f$ 
aux points $2k\pi/N$ pour $k=0..(N-1)$, sous la forme :\\
$p(x)=a_0/2+\sum_{n=0}^{\frac{N}{2}-1}a_n\cos(nx)+b_n\sin(nx)+1/2 a_{\frac{N}{2}}cos(\frac{Nx}{2})$\\
on suppose donc $b_0=b_{\frac{N}{2}}=0$ et on choisit cette notation pour
simplifier les calculs ult\'erieurs.\\
 On a aussi :\\
$p(x)=1/2 p_{\frac{-N}{2}}\exp(-iNx/2)+\sum_{n=\frac{-N}{2}+1}^{\frac{N}{2}-1}p_n\exp(inx)+1/2 p_{\frac{N}{2}}\exp(iNx/2)$.\\
avec pour $k=0..\frac{N}{2}$\\
$p_k=1/2(a_k-ib_k)$\\
$p_{-k}=1/2(a_k+ib_k)$\\
comme $b_{\frac{N}{2}}=0$ on a $p_{\frac{-N}{2}}=p_{\frac{N}{2}}$\\
On veut d\'eterminer les $p_k$ pour avoir :\\
$p(x_k)=f_k=$\\
$1/2 p_{\frac{-N}{2}}\exp(-ik\pi)+\sum_{n=\frac{-N}{2}+1}^{\frac{N}{2}-1}p_n\exp(in2k\pi/N)+1/2 p_{\frac{N}{2}}\exp(ik\pi)$\\
puisque $\exp(-ik\pi)=\exp(ik\pi)=-1$ et $p_{\frac{-N}{2}}=p_{\frac{N}{2}}$ on a \\
$p(x_k)=f_k=-p_{\frac{-N}{2}}+\sum_{n=\frac{-N}{2}+1}^{\frac{N}{2}-1}p_n\exp(in2k\pi/N)$\\
On transforme $\sum_{n=\frac{-N}{2}+1}^{-1}$ en posant $j=n+N$ on obtient :\\
$\sum_{n=\frac{-N}{2}}^{-1} p_n \exp(inx)=\sum_{j=\frac{N}{2}}^{N-1}p_{j-N}\exp(i(j-N)x)$\\
puisque pour $k=0..(N-1)$, $\exp(i(j-N)x_k)=\exp(ijx_k)$,\\
on a :\\
$p(x_k)=\sum_{j=\frac{N}{2}}^{N-1}p_{j-N}\exp(ijx_k)+\sum_{n=0}^{\frac{N}{2}-1}p_n\exp(inx_k)$.\\
ou encore : \\
$p(x_k)=\sum_{n=0}^{\frac{N}{2}-1}p_n\exp(inx_k)+\sum_{n=\frac{N}{2}}^{N-1}p_{n-N}\exp(inx_k)$.\\
On pose :\\
pour $n=0..(\frac{N}{2}-1)$,  $q_n=p_n$ et \\
pour $n=\frac{N}{2}..(N-1)$,  $q_n=p_{n-N}$.\\
Donc pour $k=0..(N-1)$, $p(x_k)=\sum_{n=0}^{N-1}q_n\exp(inx_k)=f_k$.\\
Il suffit donc de r\'esoudre ce syst\`eme d'inconnues $q_n$.\\
On a :\\
$f_k=f(2k\pi/N)=p(x_k)=N*F_N^{-1}(q)={\tt N*ifft(q)}$\\
soit :\\
$q=[p_0,..p_{\frac{N}{2}-1},p_{\frac{-N}{2}},..,p_{-1}]=\frac{1}{N}F_N([f_0,..f_{(N-1)}])=$\\
${\tt \frac{1}{N}fft([f_0,...f_{(N-1)}])}$\\
{\tt Remarque }\\
Si la fonction $f$ est r\'eelle on a :\\
$p_{-k}=\overline p_k$ pour $k=1..(\frac{N}{2}-1)$ et $p_0$ et $p_{\frac{-N}{2}}$ sont r\'eels.\\
Donc si la fonction $f$ est r\'eelle on a :\\
$p(x)=p_0+2*re(\sum_{k=0}^{\frac{N}{2}-1}p_k\exp(ikx)+1/2p_{\frac{-N}{2}}*\exp(-i\frac{Nx}{2}))$\\
En r\'esum\'e :\\
pour $0 \leq n<\frac{N}{2}$, $p_n$ est le $n$-i\`eme \'el\'ement de 
$\frac{1}{N}F_N([f_0,..f_{(N-1)}])$ et,\\
pour $-\frac{N}{2} \leq n<0$, $p_n$ est le $(n+N)$-i\`eme \'el\'ement de 
$\frac{1}{N}F_N([f_0,..f_{(N-1)}])$.

\item S\'erie de Fourier\\
Soit $f$ une fonction $2\pi$-p\'eriodique dont on connait les valeurs en
$x_k=2k\pi/N$, $f(x_k)=f(2k\pi/N)=y_k$ pour $k=0..(N-1)$.\\
On suppose que sa s\'erie de Fourier converge simplement vers $f$, et on veut 
conna\^itre les coefficients $c_n$ pour $-\frac{N}{2} \leq n<\frac{N}{2}$.\\
Il fait donc calculer de fa\c{c}on approch\'ee :\\
$c_n=\frac{1}{2\pi} \int_0^{2\pi}f(t)\exp(-int)dt$\\
{\bf Remarque}\\
Lorsque la fonction p\'eriodique $f$ est \'egale \`a sa s\'erie de Fourier,
on a :\\
$f(x)=a_0/2+\sum_{k=1}^\infty a_k\cos(kx)+b_k\sin(kx)$ avec
 $\displaystyle c_k=\frac{a_k-ib_k}{2}$.

On calcule l'int\'egrale donnant $c_n$ de mani\`ere approch\'ee par la m\'ethode des 
trap\`ezes. Ici Romberg 
ne sert a rien, car le d\'eveloppement d'Euler Mac Laurin a ses coefficients 
d\'ej\`a nuls puisque la fonction que l'on int\`egre est p\'eriodique et 
donc toutes ses d\'eriv\'ees sont \'egales en 0 et en $2\pi$.\\
 Si $c_n^{\simeq}$ est la valeur approch\'ee de $c_n$ obtenue par la 
m\'ethode des trap\`ezes, on a pour
$-\frac{N}{2} \leq n<\frac{N}{2}$:\\
$c_n^{\simeq}=\frac{1}{2\pi}\frac{2\pi}{N}\sum_{k=0}^{N-1}y_k\exp(-2ink\pi/N)$\\
puisque  $x_k=2k\pi/N$ et $f(x_k)=y_k$ on a\\
$f(x_k)\exp(-inx_k)=y_k\exp(-2ink\pi/N)$ et \\
$f(0)\exp(0)=f(2\pi)\exp(-2inN\pi/N)=y_0=y_N$\\
On a donc :\\
$[c_0^{\simeq},..c_{\frac{N}{2}-1}^{\simeq},c_{\frac{-N}{2}}^{\simeq},..c_{-1}^{\simeq}]=\frac{1}{N}F_N([y_0,y_1...y_{(N-1)}])$
car \\
si $n\geq0$, on a $c_n^{\simeq}=y_n$ et \\
si $n<0$, on a $c_n^{\simeq}=y_{n+N}$
si $\omega_N=\exp(\frac{2i\pi}{N})$, $\omega_N^n=\omega_N^{n+N}$ puisque 
$\omega_N^N=1$

{\bf Propri\'et\'es}\\
On retrouve les coefficients du polyn\^ome interpolateur de $f$ :\\
$p_n=c_n^{\simeq}$ pour $-\frac{N}{2} \leq n<\frac{N}{2}$.\\
Ce qui veut dire que le polyn\^ome trigonom\'etrique 
$\sum_{n=-\frac{N}{2}}^{\frac{N}{2}-1}c_n^{\simeq}\exp(inx)$
interpole $f(x)$ aux points $x=2k\pi/N$.\\
Donc si $f$ est un polyn\^ome trigonom\'etrique $P$ de degr\'e $m\leq \frac{N}{2}$ :\\
$f(t)=P(t)=\sum_{k=-m}^{m-1}c_k\exp(2ik\pi t)$, 
le polyn\^ome trigonom\'etrique qui interpole $f=P$ est $P$ lui-m\^eme, les 
coefficients approch\'es  sont  exacts ($c_n^{\simeq}=c_n$).\\
On peut, plus g\'en\'eralement calculer l'erreur $c_n^{\simeq}-c_n$.\\
On suppose que $f$ est \'egale \`a sa s\'erie de Fourier, c'est \`a dire que 
l'on a :\\
$f(t)=\int_{m=-\infty}^{+\infty}c_m\exp(2i\pi mt)$ avec 
$\sum_{m=-\infty}^{+\infty}|c_m|<\infty$\\
On a donc :\\
$f(x_k)=f(2k\pi/N)=y_k=\sum_{m=-\infty}^{+\infty}c_m\omega_N^{km}$  et\\
$c_n^{\simeq}=\frac{1}{N}\sum_{k=0}^{N-1}y_k\omega_N^{-kn}$\\
En rempla\c{c}ant $y_k$ on obtient :\\
$c_n^{\simeq}=\frac{1}{N}\sum_{k=0}^{N-1}\sum_{m=-\infty}^{+\infty}c_m\omega_N^{km}\omega_N^{-kn}$\\
Or :\\
$\omega_N^{km}\omega_N^{-kn}=\omega_N^{k(m-n)}$ et\\
puisque $\omega_N^{m-n}$ est une racine $N$-i\`eme de l'unit\'e, on a :\\
$\omega_N^{(m-n)N}=1$ et $\sum_{k=0}^{N-1}\omega_N^{(m-n)k}=0$.\\
Donc :\\
si $m-n$ est un multiple de $N$ ($m=n+l\cdot N$) on a $\sum_{k=0}^{N-1}\omega_N^{k(m-n)}=N$ et\\
sinon $\sum_{k=0}^{N-1}\omega_N^{k(m-n)}=0$\\
En intervertisant les deux sommes on a :\\
$c_n^{\simeq}=\frac{1}{N}\sum_{m=-\infty}^{+\infty}c_m\sum_{k=0}^{N-1}\omega_N^{k(m-n)}$\\
$c_n^{\simeq}=\sum_{l=-\infty}^{+\infty}c_{(n+l\cdot N)}$\\
c'est \`a dire :\\
$c_n^{\simeq}=...c_{n-2\cdot N}+c_{n-N}+c_{n}c_{n+N}c_{n+2\cdot N}+.....$

Exemple :\\
{\tt f(t):=cos(t)+cos(2*t)}\\
{\tt x:=f(2*k*pi/8)\$(k=0..7)}\\
On obtient :\\
${\tt x=\{2,(\sqrt 2)/2,-1,-((\sqrt2)/2),0,-((\sqrt2)/2),-1,(\sqrt2)/2\}}$\\
{\tt fft(x)=[0.0,4.0,4.0,0.0,0.0,0.0,4.0,4.0]}\\
donc en divisant par $N=8$ :\\
$c_0=0,c_1=4.0/8,c_2=4.0/2,c_3=0.0,$\\
$c_{-4}=0,c_{-3}=0,c_{-2}=4.0/8,=c_{-1}=4.0/8$\\
donc retrouve bien :\\
$b_k=0$ et $a_k=c_{-k}+c_k$ vaut 1 si $k=1,2$ et 0 sinon. 

\item Produit de convolution\\
Soient deux polyn\^omes $P(x)=\sum_{j=0}^{n-1}a_jx^j$  
et $Q(x)=\sum_{j=0}^{m-1}b_jx^j$ donn\'e par la liste de 
leurs coefficients $a=[a_0,a_1,..a_{n-1}]$ et $b=[b_0,b_1,..b_{m-1}]$.\\
On veut calculer le produit de ces deux polyn\^omes c'est \`a dire le produit 
de convolution de leurs coefficients si on se place dans l'ensemble des suites 
p\'eriodiques de p\'eriode sup\'erieure ou \'egale \`a $(n+m)$ 
en compl\'etant $a$ (resp $b$) par $m+?$ (resp $n+?$) z\'eros (en pratique
on choisit $?$ pour que $n+m+?$ soit une puissance de 2. \\
On alors pour $a=[a_0,a_1,..a_{n-1},0..0]$ et $b=[b_0,b_1,..b_{m-1},0..0]$:\\
$P(x)Q(x)=\sum_{j=0}^{n+m-1}(a*b)_jx^j$\\
On calcule donc :\\
$F_n(a)$, $F_n(b)$, $F_n^{-1}(F_n(a)\cdot F_n(b))$ et puisque \\
$nF_n(x \cdot y)=F_n(x) * F_n(y)$\\
$F_n(x * y)=F_n(x) \cdot F_n(y)$\\
on a :\\
$a*b=F_n^{-1}(F_n(a)\cdot F_n(b))$
\end{enumerate}

\subsection{La transform\'ee de Fourier rapide : {\tt fft}}\index{fft}
\noindent{\tt fft} a comme argument une liste (ou une s\'equence)
${\tt [a_0,..a_{N-1}]}$ o\`u {\tt N} est une puissance de deux.\\
{\tt fft} renvoie la liste ${\tt [b_0,..b_{N-1}]}$ tel que pour {\tt k=0..N-1}
on ait :\\
${\tt \displaystyle
{fft([a_0,..a_{N-1}])}[k]=b_k=\sum_{j=0}^{N-1}x_j\omega_N^{-k\cdot
j}}$ 
avec $\omega_N$ racine $N$-i\`eme de l'unit\'e.\\
On tape :
\begin{center}{\tt fft(0,1,1,0)}\end{center}
On obtient :
\begin{center}{\tt [2.0, -1-i, 0.0, -1+i]}\end{center}

On peut aussi travailler sur un corps fini $\Z/p\Z$, en indiquant une
racine $N$-i\`eme primitive de l'unit\'e en 2i\`eme argument
et $p$ en 3i\`eme argument de {\tt fft}. Par exemple
on verifie que 22798 est une racine primitive d'ordre 128 de 1
modulo 35969. 
Par exemple, calculons par FFT le carr\'e d'un polyn\^ome \`a
coefficients
entiers al\'eatoire inf\'erieur \`a 10, de degr\'e 60, 
repr\'esent\'e par la liste de ses coefficients par ordre croissant
compl\'et\'e par des 0 pour avoir une liste de taille $N=128$~:
\begin{center}
{\tt P:=poly1[op(ranm(1,60,10)[0]),0\$68];\\
p:=fft(P,22798,35969)}
\end{center}
il suffit maintenant de calculer le produit terme \`a terme de {\tt p}
avec
lui-m\^eme et d'en calculer la FFT inverse
\begin{center}
{\tt Q:=ifft(p .* p,22798,35969)}
\end{center}

\subsection{L'inverse de la transform\'ee de Fourier rapide : {\tt
ifft}}\index{ifft}
\noindent{\tt ifft} a comme argument une liste ${\tt [b_0,..b_{N-1}]}$
o\`u 
{\tt N} est une puissance de deux.\\
{\tt ifft} renvoie la liste ${\tt [a_0,..a_{N-1}]}$ tel que :\\
${\tt fft([a_0,..a_{N-1}])=[b_0,..b_{N-1}]}$.\\ 
On tape :
\begin{center}{\tt ifft([2,-1-i,0,-1+i])}\end{center}
On obtient :
\begin{center}{\tt [0.0, 1.0, 1.0, 0.0]}\end{center}
Comme pour la {\tt fft}, on peut travailler sur un corps fini en
indiquant une
racine $N$-i\`eme primitive de l'unit\'e en 2i\`eme argument
et $p$ en 3i\`eme argument de {\tt fft}.

\subsection{Un {\bf exercice} utilisant {\tt fft}}
Voici un relev\'e des temp\'eratures $T$, en degr\'e Celsius, au temps $t$ :\\
\begin{tabular}{|r|rrrrrrrr|}
\hline
t & 0 & 3 & 6 & 9 &12 & 15 & 19 & 21\\
\hline
T & 11 & 10 & 17 & 24 & 32 & 26 & 23 & 19\\
\hline
\end{tabular}\\
Quelle est la temp\'erature \`a 13h45 ?\\
On a $N=8=2*m$.\\
Le polyn\^ome d'interpolation est :\\
$p(t)=1/2p_{-m}(\exp(-2i\pi mt/24)+\exp(2i\pi mt/24))+\sum_{k=-m+1}^{m-1}p_k \exp(2i\pi kt/24)$ \\
et on a 
$p_k=1/N*\sum_{k=j}^{N-1}T_k \exp(2i\pi k/N)$\\
On tape :\\
{\tt q:=1/8*fft([11,10,17,24,32,26,23,19])}\\
On obtient :\\
{\tt [20,-4.5+1.7*i,0.37+0.88*i,-0.77+0.22*i,0.5,\\
-0.77-0.22*i,0.38-0.88*i,-4.5-1.7*i]}\\
ou avec plus de d\'ecimales :\\
$p_0=20.25$,\\
 $p_1=-4.48115530061+1.72227182413*i=\overline{p_{-1}}$,\\
$p_2=0.375+0.875*i=\overline{p_{-2}}$,\\
$p_3=-0.768844699385+0.222271824132*i=\overline{p_{-3}}$,\\
 $p_{-4}=0.5$
car on a :\\
$q=[q_0,...q_{N-1}]=[p_0,..p_{\frac{N}{2}-1},p_{-\frac{N}{2}},..,p_{-1}]=\frac{1}{N}F_N([y_0,..y_{N-1}])={\tt \frac{1}{N}fft(y)}$\\
On calcule la valeur $T0$ du polyn\^ome d'interpolation au point 
$t0=13,75=13+3/4=55/4$.\\
On a :\\
{\tt q:=[20.25,-4.48115530061+1.72227182413*i,-0.375+0.875*i,\\
-0.768844699385+0.222271824132*i,0.5,\\
-0.768844699385-0.222271824132*i,\\
-0.375-0.875*i,-4.48115530061-1.72227182413*i]}\\
%{\tt q:=[20,-4.5+1.7*i,0.37+0.88*i,-0.77+0.22*i,0.5,-0.77-0.22*i,0.38-0.88*i,-4.5-1.7*i]}\\
On pose :\\
{\tt pp:=[q[4],q[5],q[6],q[7],q[0],q[1],q[2],q[3]]}\\
On a $p_k=pp[k+4]$ pour $k=-4...3$\\
On tape :\\
{\tt t0(j):=exp(2*i*pi*(13+3/4)/24*j)}\\
{\tt T0:=1/2*pp[0]*(t0(4)+t0(-4))+sum(pp[j+4]*t0(j),j,-3,3)}\\
{\tt evalf(sincos(T0))}\\
On obtient :\\
{\tt 29.4863181684}\\
On pr\'evoit donc une temp\'erature de 29.49 degr\'es Celsius.\\
On tape :\\
{\tt q1:=[q[4]/2,q[3],q[2],q[1],q[0]/2]}\\
{\tt a:=t0(1)} (ou {\tt a:=-exp(i*pi*7/48)})\\
{\tt g(x):=r2e(q1,x)}\\
{\tt evalf(2*re(g(a)))}\\
ou encore\\
{\tt 2.0*re(q[0]/2+q[1]*t0(1)+q[2]*t0(2)+q[3]*t0(3)+q[4]/2*t0(4))}\\
On obtient :\\
{\tt 29.4863181684}\\
{\bf Remarque}\\
Si on utilise le polyn\^ome d'interpolation de Lagrange (on interpole par un 
polyn\^ome non p\'eriodique).\\
On tape :\\
{\tt l1:=[0,3,6,9,12,15,18,21]}\\
{\tt l2:=[11,10,17,24,32,26,23,19]}\\
{\tt subst(lagrange(l1,l2,13+3/4),x=13+3/4)}\\
On obtient :\\
${\tt \displaystyle \frac{8632428959}{286654464}\simeq 30.1144061688}$

\section{Les Exponentielles et les Logarithmes}
\subsection{Transformer les fonctions hyperboliques en exponentielles : {\tt hyp2exp}}\index{hyp2exp}

\noindent{\tt hyp2exp} a comme argument an hyperbolic expression.\\
{\tt hyp2exp} transforme les  hyperbolic fonctions hyperboliques en exponentielles 
{\sc sans} lin\'eariser.\\ 
On tape :
\begin{center}{\tt hyp2exp(sinh(x))}\end{center}
On obtient :
\begin{center}{\tt (exp(x)-1/(exp(x)))/2}\end{center}

\subsection{D\'evelopper les exponentielles : {\tt expexpand}}\index{expexpand}
\noindent{\tt expexpand} a comme argument une expression contenant des 
exponentielles.\\
{\tt expexpand} d\'eveloppe cette expression.\\
On tape :
\begin{center}{\tt expexpand(exp(3*x)+exp(2*x+2))}\end{center}
On obtient :
\begin{center}{\tt exp(x)\verb|^|3+exp(x)\verb|^|2*exp(2)}\end{center}

\subsection{D\'evelopper les logarithmes : {\tt lnexpand}}\index{lnexpand}
\noindent{\tt lnexpand} a comme argument une expression contenant des 
logarithmes.\\
{\tt lnexpand} d\'eveloppe cette expression.\\
On tape :
\begin{center}{\tt lnexpand(ln(3*x\verb|^|2)+ln(2*x+2))}\end{center}
On obtient :
\begin{center}{\tt  ln(3)+2*ln(x)+ln(2)+ln(x+1)}\end{center}

\subsection{Lin\'eariser les exponentielles : {\tt lin lineariser}}\index{lin}\index{lineariser}
\noindent{\tt lin} ou {\tt lineariser} a comme argument une expression 
contenant des exponentielles.\\
{\tt lin}  ou {\tt lineariser} lin\'earise cette expression (l'exprime en fonction de $\exp(n.x)$).\\
{\bf Exemples}
\begin{itemize}
\item On tape :
\begin{center}{\tt lin(sinh(x)\verb|^|2)}\end{center}
On obtient :
\begin{center}{\tt 1/4*exp(2*x)+1/-2+1/4*exp(-(2*x))}\end{center}

\item On tape :
\begin{center}{\tt lin((exp(x)+1)\verb|^|3)}\end{center}
On obtient :
\begin{center}{\tt exp(3*x)+3*exp(2*x)+3*exp(x)+1}\end{center}
\end{itemize}

\subsection{Regrouper les log : {\tt lncollect}}\index{lncollect}
\noindent{\tt lncollect} a comme argument une expression contenant des logarithmes.\\
{\tt lncollect} regroupe les termes en logarithmes. Il est donc pr\'ef\'erable
de l'utiliser sur une expression factoris\'ee (en utilisant {\tt factor}).\\
On tape :
\begin{center}{\tt lncollect(ln(x+1)+ln(x-1))}\end{center}
On obtient :
\begin{center}{\tt log((x+1)*(x-1))}\end{center}
On tape :
\begin{center}{\tt lncollect(exp(ln(x+1)+ln(x-1)))}\end{center}
On obtient :
\begin{center}{\tt (x+1)*(x-1)}\end{center}
{\bf Attention!!!} Pour {\tt Xcas}, {\tt log=ln}

\subsection{Transformer une puissance en produit de puissances : {\tt powexpand}}\index{powexpand}
\noindent{\tt powexpand} permet de transformer une puissance en un produit de 
puissances.\\
On tape :
\begin{center}{\tt powexpand(a\verb|^|(x+y))}\end{center}
On obtient :
\begin{center}{\tt a\verb|^|x*a\verb|^|y}\end{center}


\subsection{Transformer une puissance en une exponentielle : {\tt pow2exp}}\index{pow2exp}
\noindent{\tt pow2exp} permet de transformer une puissance en exponentielle.\\
On tape :
\begin{center}{\tt  pow2exp(a\verb|^|(x+y))}\end{center}
On obtient :
\begin{center}{\tt exp((x+y)*ln(a))}\end{center}

\subsection{Transformer exp(n*ln(x)) en puissance : {\tt exp2pow}}\index{exp2pow}
\noindent{\tt exp2pow} permet de transformer une expression de la forme $\exp(n*\ln(x))$
 en une puissance de $x$.\\
On tape :
\begin{center}{\tt  exp2pow(exp(n*ln(x)))}\end{center}
On obtient :
\begin{center}{\tt x\verb|^|n}\end{center}
Bien voir la diff\'erence avec {\tt lncollect} :\\
{\tt lncollect(exp(n*ln(x))) = exp(n*log(x))}\\
{\tt lncollect(exp(2*ln(x)))\ = exp(2*log(x))}\\
{\tt  exp2pow(exp(2*ln(x)))= x\verb|^|2 }\\
Mais :\\
{\tt lncollect(exp(ln(x)+ln(x))) = x\verb|^|2}\\
{\tt exp2pow(exp(ln(x)+ln(x))) = x\verb|^|(1+1)}\\

\subsection{\'Ecrire avec des exponentielles complexes : {\tt tsimplify}}\index{tsimplify|textbf}
\noindent{\tt tsimplify} simplifie toutes les expressions en les transformant
 en exponentielles complexes.\\
On n'utilise {\tt tsimplify} qu'en dernier ressort.\\ 
On tape :
\begin{center}{\tt tsimplify((sin(7*x)+sin(3*x))/sin(5*x))}\end{center}
On obtient :
\begin{center}{\tt ((exp((i)*x))\verb|^|4+1)/(exp((i)*x))\verb|^|2 }\end{center}
\section{Les polyn\^omes}
\subsection{Les polyn\^omes \`a une variable {\tt poly1[...]}} \index{poly1}
Un polyn\^ome d'une variable peut \^etre repr\'esent\'e, soit par la liste de 
ses coefficients selon les puissances d\'ecroissantes (on utilise comme
d\'elimiteurs {\tt poly1[...]} en particulier lorsqu'il peut y avoir
confusion avec un vecteur), soit par son expression 
symbolique. Dans les r\'eponses affich\'ees par un \'editeur
d'\'equations, le r\'esultat est parenth\'es\'e avec {\tt []} et {\tt []}
pour indiquer qu'il s'agit de la liste 
de coefficients d'un polyn\^ome, lorsqu'on effectue une copie, c'est
{\tt poly1[...]} qui s'affiche.

{\bf Attention} L'\'ecriture est toujours selon les puissances 
d\'ecroissantes m\^eme si on a coch\'e {\tt puissance croissante} dans la 
configuration du {\tt cas} ({\tt puissance croissante} 
ne s'applique qu'aux expressions symboliques).

\subsection{Les polyn\^omes \`a plusieurs variables} \index{\%\%\%\{\%\%\%\}}
Un mon\^ome de plusieurs variables peut \^etre repr\'esent\'e :
\begin{itemize}
\item soit par son expression symbolique (par exemple $3x^2y$), 
\item soit par son coefficent et la liste des puissances de ses variables 
(selon  la liste de ses variables) que l'on parenth\'ese avec {\tt \%\%\%\{} et
{\tt \%\%\%\}} : c'est le format interne creux distribu\'e : par exemple
{\tt symb2poly(3x\verb|^|2*y,[x,y])} renvoie {\tt \%\%\%\{3,[2,1]\%\%\%\}} qui
repr\'esente  $3x^2y$ si la liste des variables est {\tt [x,y]},
\item soit par la liste des coefficients de la premi\`ere variable,
coefficients qui sont eux-m\^emes des polyn\^omes qui seront donn\'es sous la 
forme la liste des coefficients de la deuxi\`eme variable etc... et
que l'on parenth\'ese avec {\tt []}{\tt []} : c'est le format 
interne dense  r\'ecursif : par exemple {\tt symb2poly(3x\verb|^|2*y,x,y)} 
renvoie {\tt []}{\tt []}3,0{\tt []},0,0{\tt []} qui repr\'esente  $3x^2y$ si 
les variables sont {\tt x,y}.
\end{itemize}
Un polyn\^ome de plusieurs variables est repr\'esent\'e par la somme de 
ses mon\^omes.
\subsection{Transformer le format interne dense  r\'ecursif en une \'ecriture polyn\^omiale : {\tt poly2symb r2e}}\index{r2e}\index{poly2symb}
\noindent{\tt r2e} ou  {\tt poly2symb} a comme argument la liste
des coefficients par puissances d\'ecroissantes d'un polyn\^ome et un nom de 
variable formelle (par d\'efaut {\tt x}) (resp la liste r\'ecursive (c'est le 
format interne dense r\'ecursif) des coefficients par puissances 
d\'ecroissantes d'un polyn\^ome et la s\'equence 
des variables formelles tel que {\tt x,y,z} (par exemple 
{\tt []}[[1,0],[2,3]],{\tt []}{\tt []}4,0{\tt []},5{\tt []}{\tt []} repr\'esente le polyn\^ome $x(yz+2z+3)+4yz+5$)\\
On tape :
\begin{center}{\tt r2e([1,0,-1],x)}\end{center}
Ou on tape :
\begin{center}{\tt r2e([1,0,-1])}\end{center}
Ou on tape :
\begin{center}{\tt poly2symb([1,0,-1],x)}\end{center}
On obtient :
\begin{center}{\tt  x*x-1}\end{center}
Ou on peut aussi taper :
\begin{center}{\tt r2e(\%\%\%\{1,[2]\%\%\%\}+\%\%\%\{-1,[0]\%\%\%\},[x])}\end{center}
On obtient :
\begin{center}{\tt  x\verb|^|2-1}\end{center}
On tape :
\begin{center}{\tt r2e([1,0,-1],x)}\end{center}
Ou on tape :
\begin{center}{\tt r2e([1,0,-1])}\end{center}
Ou on tape :
\begin{center}{\tt poly2symb([1,0,-1],x)}\end{center}
On obtient :
\begin{center}{\tt  x*x-1}\end{center}
On tape :
\begin{center}{\tt normal(poly2symb([[[1,0],[2,3]],[[4,0],5]],x,y,z))}\end{center}
Ou on tape :
\begin{center}{\tt normal(r2e([[[1,0],[2,3]],[[4,0],5]],x,y,z))}\end{center}
On obtient :
\begin{center}{\tt  x*y*z+2*x*z+3*x+4*y*z+5}\end{center}
{\bf Remarque}\\
Si en deuxi\`eme argument on met une valeur $a$ (resp $a,b,c$), on obtient la 
valeur du polyn\^ome en $x=a$ (resp en $x=a$, $y=b$ et $z=c$).\\
On tape :
\begin{center}{\tt poly2symb([[[1,0],[2,3]],[[4,0],5]],1,1,1)}\end{center}
On obtient car $1+2+3+4+5=15$ :
\begin{center}{\tt  15}\end{center}
\subsection{Transformer le format interne creux distribu\'e du polyn\^ome en une \'ecriture polyn\^omiale : {\tt poly2symb r2e}}\index{r2e|textbf}\index{poly2symb|textbf}
\noindent{\tt r2e} ou  {\tt poly2symb} a comme argument la liste des 
coefficients par puissances d\'ecroissantes d'un polyn\^ome et un nom de 
variable formelle (par d\'efaut {\tt x}) (resp le format interne creux 
distribu\'e du polyn\^ome c'est \`a dire la somme de mon\^omes tels que :\\
{\tt \%\%\%\{c,[px,py,pz] \%\%\%\}} et une liste de variables formelles tel que {\tt [x,y,z]} ce qui repr\'esente le mon\^ome 
$cx^{px}y^{py}z^{pz}$).\\
{\tt r2e} ou  {\tt poly2symb} transforme la liste des coefficients par 
puissances d\'ecroissantes d'un polyn\^ome (resp la somme de 
{\tt \%\%\%\{c,[px,py,pz] \%\%\%\}}), en son \'ecriture polyn\^omiale 
(selon Horner), en utilisant le nom de la variable donn\'e en deuxi\`eme 
argument (resp en utilisant la liste de variables donn\'e en deuxi\`eme 
argument {\tt [x,y,z]}).\\
On tape :
\begin{center}{\tt r2e([1,0,-1],x)}\end{center}
Ou on tape :
\begin{center}{\tt r2e([1,0,-1])}\end{center}
Ou on tape :
\begin{center}{\tt poly2symb([1,0,-1],x)}\end{center}
On obtient :
\begin{center}{\tt  x*x-1}\end{center}
Ou on peut aussi taper :
\begin{center}{\tt r2e(\%\%\%\{1,[2]\%\%\%\}+\%\%\%\{-1,[0]\%\%\%\},[x])}\end{center}
On obtient :
\begin{center}{\tt  x\verb|^|2-1}\end{center}
On tape :
\begin{center}{\tt r2e(\%\%\%\{1,[2,0]\%\%\%\}+\%\%\%\{-1,[1,1]\%\%\%\}+\%\%\%\{2,[0,1]\%\%\%\},[x,y])}\end{center}
Ou on tape :
\begin{center}{\tt poly2symb(\%\%\%\{1,[2,0]\%\%\%\}+\%\%\%\{-1,[1,1]\%\%\%\}+ \%\%\%\{2,[0,1]\%\%\%\},[x,y])}\end{center}
On obtient :
\begin{center}{\tt  x\verb|^|2-x*y+2*y}\end{center}
{\bf Remarque}\\
Si en deuxi\`eme argument on met une valeur $a$ (resp $[a,b]$), on obtient la 
valeur du polyn\^ome en $x=a$ (resp en $x=a$ et $y=b$).\\
On tape :
\begin{center}{\tt poly2symb([1,0,-1],3)}\end{center}
On obtient car $3^2-1=8$ :
\begin{center}{\tt  8}\end{center}
On tape :
\begin{center}{\tt poly2symb(\%\%\%\{1,[2,0]\%\%\%\}+\%\%\%\{-1,[1,1]\%\%\%\}+ \%\%\%\{2,[0,1]\%\%\%\},[1,2])}\end{center}
On obtient :
\begin{center}{\tt  1-1*2+2*2}\end{center}

\subsection{Transformer un polyn\^ome en une liste (format interne r\'ecursif dense) : {\tt e2r symb2poly}}\index{e2r|textbf}\index{symb2poly|textbf}
\noindent{\tt e2r} ou {\tt symb2poly} a comme argument polyn\^ome, donn\'e avec
une \'ecriture polyn\^omiale, d'une variable (resp plusieurs variables), et le 
nom de cette variable formelle (par d\'efaut {\tt x}) (resp la s\'equence des 
noms de ces variables).\\
{\tt e2r} ou {\tt symb2poly} transforme cette \'ecriture polyn\^omiale, 
en la liste des coefficients selon les puissances d\'ecroissantes selon le 
nom de la variable donn\'e en deuxi\`eme argument (resp l'\'ecriture 
r\'ecursive de la liste des coefficients selon les puissances d\'ecroissantes 
selon les noms des variables donn\'es en deuxi\`eme argument : le r\'esultat est
la liste des coefficients de la premi\`ere variable, coefficients qui sont 
eux-m\^emes des polyn\^omes qui seront donn\'es sous la forme 
la liste des coefficients de la deuxi\`eme variable etc...).\\
{\bf Attention} Si le deuxi\`eme argument est une liste, le r\'esultat est
l'\'ecriture du polyn\^ome au format interne. \\
On tape :
\begin{center}{\tt e2r(x\verb|^|2-1)}\end{center}
Ou on tape :
\begin{center}{\tt symb2poly(x\verb|^|2-1)}\end{center}
Ou on tape :
\begin{center}{\tt symb2poly(x\verb|^|2-1,x)}\end{center}
Ou on tape :
\begin{center}{\tt e2r(x\verb|^|2-1,x)}\end{center}
Ou on tape :
\begin{center}{\tt symb2poly(y\verb|^|2-1,y)}\end{center}
Ou on tape :
\begin{center}{\tt e2r(y\verb|^|2-1,y)}\end{center}
On obtient :
\begin{center}{\tt {\tt []}1,0,-1{\tt []}}\end{center}
On tape :
\begin{center}{\tt symb2poly(x*y\verb|^|2+2y-1,x)}\end{center}
Ou on tape :
\begin{center}{\tt e2r(x*y\verb|^|2+2y-1,x)}\end{center}
On obtient :
\begin{center}{\tt {\tt []}y\verb|^|2,2y-1{\tt []}}\end{center}
On tape :
\begin{center}{\tt symb2poly(x*y\verb|^|2+2y-1,y)}\end{center}
Ou on tape :
\begin{center}{\tt e2r(x*y\verb|^|2+2y-1,y)}\end{center}
On obtient :
\begin{center}{\tt {\tt []}x,2,-1{\tt []}}\end{center}
On tape :
\begin{center}{\tt symb2poly(x*y\verb|^|2+2y-1,x,y)}\end{center}
Ou on tape :
\begin{center}{\tt e2r(x*y\verb|^|2+2y-1,x,y)}\end{center}
On obtient :
\begin{center}{\tt {\tt []}{\tt []}1,0,0{\tt []},{\tt []}2,-1{\tt []}{\tt []}}\end{center}
ce qui signifie que le polyn\^ome est de degr\'e 1 en $x$ que le coeff de $x$ 
est le polyn\^ome  en $y$ de coefficients [1,0,0] c'est 
\`a dire $y^2$ et que le terme constant est le polyn\^ome en $y$ de coefficients
[2,-1] c'est \`a dire $2y-1$.\\
On tape :
\begin{center}{\tt symb2poly(x\verb|^|2*y\verb|^|2-x\verb|^|2+2x*y+4y\verb|^|2-y+3,x,y)}\end{center}
Ou on tape :
\begin{center}{\tt e2r(x\verb|^|2*y\verb|^|2-x\verb|^|2+2x*y+4y\verb|^|2-y+3,x,y)}\end{center}
On obtient :
\begin{center}{\tt {\tt []}1,0,-1{\tt []},{\tt []}2,0{\tt []},{\tt []}4,-1,3{\tt []}{\tt []}}\end{center}
ce qui signifie que le polyn\^ome est de degr\'e 2 en $x$ que le coeff de $x^2$ 
est le polyn\^ome  en $y$ de coefficients {\tt []}1,0,-1{\tt []}
c'est \`a dire $y^2-1$,  le coeff de $x$ 
est le polyn\^ome  en $y$ de coefficients {\tt []}2,0{\tt []}
c'est \`a dire $2y$ et que le terme constant est le polyn\^ome en $y$ de 
coefficients {\tt []}4,-1,3{\tt []} c'est \`a dire $4y^2-y+3$.

\subsection{Transformer un polyn\^ome au format interne : {\tt e2r symb2poly}}\index{e2r}\index{symb2poly}\label{sec:interne}
\noindent{\tt e2r} ou {\tt symb2poly} a comme argument polyn\^ome d'une ou 
plusieurs variables, donn\'e avec une \'ecriture polyn\^omiale et la liste de 
ces variables formelles.\\
{\tt e2r} ou {\tt symb2poly} transforme cette \'ecriture polyn\^omiale, 
en l'\'ecriture au format interne selon la liste de variables donn\'ee
en deuxi\`eme argument.\\
{\bf Attention} Si le deuxi\`eme argument n'est pas une liste, le r\'esultat est
la liste des coefficients de la premi\`ere variable, coefficients qui sont 
eux-m\^emes des polyn\^omes qui seront donn\'es sous la forme 
la liste des coefficients de la deuxi\`eme variable etc...\\ 
On tape :
\begin{center}{\tt e2r(x\verb|^|2-1,[x])}\end{center}
Ou on tape :
\begin{center}{\tt symb2poly(x\verb|^|2-1,[x])}\end{center}
On obtient :
\begin{center}{\tt \%\%\%\{1,[2]\%\%\%\}+\%\%\%\{-1,[0]\%\%\%\}}\end{center}
On tape :
\begin{center}{\tt e2r(x\verb|^|2-x*y+y, [x,y])}\end{center}
Ou on tape :
\begin{center}{\tt symb2poly(x\verb|^|2-x*y+2*y, [x,y])}\end{center}
On obtient :
\begin{center}{\tt \%\%\%\{1,[2,0]\%\%\%\}+\%\%\%\{-1,[1,1]\%\%\%\}+\%\%\%\{2,[0,1]\%\%\%\}}\end{center}
ce qui signifie que le coefficient du terme $x^2y^0$ est 1, celui du terme
$x^1y^1$ est -1 et celui du terme $x^0y^1$ est 2.\\
On tape :
\begin{center}{\tt symb2poly(x\verb|^|2*y\verb|^|2-x\verb|^|2+2x*y+4y\verb|^|2-y+3,[x,y])}\end{center}
Ou on tape :
\begin{center}{\tt e2r(x\verb|^|2*y\verb|^|2-x\verb|^|2+2x*y+4y\verb|^|2-y+3,x,y)}\end{center}
On obtient :
\begin{center}{\tt \%\%\%\{1,[2,2]\%\%\%\}+\%\%\%\{-1,[2,0]\%\%\%\}+\%\%\%\{2,[1,1]\%\%\%\}+ \%\%\%\{4,[0,2]\%\%\%\}+\%\%\%\{-1,[0,1]\%\%\%\}+\%\%\%\{3,[0,0]\%\%\%\}}\end{center}

\subsection{Transformer un polyn\^ome au format interne en une liste et r\'eciproquement : {\tt convert}}\index{convert}\index{polynom@{\sl polynom}}\index{list@{\sl list}|textbf}
\noindent Si {\tt convert} a comme premier argument un polyn\^ome donn\'e a u 
format interne et comme deuxi\`eme argument l'option {\tt list} alors 
{\tt convert} transforme le polyn\^ome en une liste (l'option {\tt list} peut 
\^etre omis).\\
 Si {\tt convert} a comme premier argument une liste et comme deuxi\`eme 
argument l'option {\tt polynom} alors 
{\tt convert} transforme la liste en un polyn\^ome au format interne.\\
On tape :
\begin{center}{\tt p:=symb2poly((x\verb|^|2-x*y+2y, [x,y])}\end{center}
On obtient :
\begin{center}{\tt \%\%\%\{1,[2,0]\%\%\%\}+\%\%\%\{-1,[1,1]\%\%\%\}+\%\%\%\{2,[0,1]\%\%\%\}}\end{center}
On tape :
\begin{center}{\tt l:=convert(p,list)}\end{center}
Ou on tape :
\begin{center}{\tt convert(p)}\end{center}
On obtient :
\begin{center}{\tt [[1,[2,0]],[-1,[1,1]],[2,[0,1]]]}\end{center}
ce qui est la liste des coefficients suivi de la liste des exposants.\\
On tape :
\begin{center}{\tt convert(l,polynom)}\end{center}
On obtient :
\begin{center}{\tt \%\%\%\{1,[2,0]\%\%\%\}+\%\%\%\{-1,[1,1]\%\%\%\}+\%\%\%\{2,[0,1]\%\%\%\}}\end{center}

\subsection{Coefficients d'un polyn\^ome : {\tt coeff coeffs}}\index{coeff}\index{coeffs}
\noindent{\tt coeff} ou {\tt coeffs} a trois arguments : le polyn\^ome, le nom 
de la variable (ou la liste des noms des variables) le degr\'e (ou la liste 
des degr\'es des variables).\\
 {\tt coeff} ou {\tt coeffs} renvoie le coefficient du polyn\^ome de degr\'e 
sp\'ecifi\'e.\\
 On tape :
\begin{center}{\tt coeff(-x\verb|^|4+3*x*y\verb|^|2+x,x,1)}\end{center}
On obtient :
\begin{center}{\tt 3*y\verb|^|2+1}\end{center}  
On tape :
\begin{center}{\tt coeff(-x\verb|^|4+3x*y\verb|^|2+x,y,2)}\end{center}
On obtient :
\begin{center}{\tt 3*x}\end{center} 
On tape :
\begin{center}{\tt coeff(-x\verb|^|4+3x*y\verb|^|2+x,[x,y],[1,2])}\end{center}
On obtient :
\begin{center}{\tt 3}\end{center} 

\subsection{Degr\'e d'un polyn\^ome : {\tt degree}}\index{degree}
\noindent{\tt degree} a comme argument un polyn\^ome donn\'e sous 
forme symbolique ou par la liste de ses coefficients.\\
{\tt degree} renvoie le degr\'e de ce polyn\^ome (degr\'e du mon\^ome de 
plus grand degr\'e).\\
On tape :
\begin{center}{\tt degree(x\verb|^|3+x)}\end{center}
On obtient :
\begin{center}{\tt 3}\end{center} 
On tape :
\begin{center}{\tt degree([1,0,1,0])}\end{center}
On obtient :
\begin{center}{\tt 3}\end{center}
\subsection{Valuation d'un polyn\^ome : {\tt valuation ldegree}}\index{valuation}\index{ldegree}
\noindent{\tt valuation} ou {\tt ldegre} a comme argument un polyn\^ome donn\'e
 sous forme symbolique ou par la liste de ses coefficients.\\
{\tt valuation} ou {\tt ldegre} renvoie la valuation de ce polyn\^ome, c'est 
le degr\'e du mon\^ome de plus petit degr\'e ({\tt ldegree}=low degree).\\
 On tape :
\begin{center}{\tt valuation(x\verb|^|3+x)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center} 
On tape :
\begin{center}{\tt valuation([1,0,1,0])}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}

\subsection{Coefficient du terme de plus haut degr\'e d'un polyn\^ome : {\tt lcoeff}}\index{lcoeff}
\noindent{\tt lcoeff}  a comme argument un polyn\^ome donn\'e sous 
forme symbolique ou par la liste de ses coefficients.\\
{\tt lcoeff} renvoie le coefficient de plus haut degr\'e de ce polyn\^ome 
({\tt lcoeff}=leading coefficient).\\
On tape :
\begin{center}{\tt lcoeff([2,1,-1,0])}\end{center}
On obtient :
\begin{center}{\tt  2}\end{center}
 On tape :
\begin{center}{\tt lcoeff(3*x\verb|^|2+5*x,x)}\end{center}
On obtient :
\begin{center}{\tt  3}\end{center}
On tape :
\begin{center}{\tt lcoeff(3*x\verb|^|2+5*x*y\verb|^|2,y)}\end{center}
On obtient :
\begin{center}{\tt  5*x}\end{center}

\subsection{Coefficient du terme de plus bas degr\'e d'un polyn\^ome :
{\tt tcoeff}}\index{tcoeff}
\noindent{\tt tcoeff}  a comme argument un polyn\^ome donn\'e sous 
forme symbolique ou par la liste de ses coefficients.\\
{\tt tcoeff}  renvoie le coefficient de plus bas degr\'e de ce polyn\^ome 
({\tt tcoeff}=trailing coefficient).\\
On tape :
\begin{center}{\tt tcoeff([2,1,-1,0])}\end{center}
On obtient :
\begin{center}{\tt  -1}\end{center}
 On tape :
\begin{center}{\tt tcoeff(3*x\verb|^|2+5*x,x)}\end{center}
On obtient :
\begin{center}{\tt  5}\end{center}
 On tape :
\begin{center}{\tt tcoeff(3*x\verb|^|2+5*x*y\verb|^|2,y)}\end{center}
On obtient :
\begin{center}{\tt  3*x\verb|^|2}\end{center}

\subsection{\'Evaluation d'un polyn\^ome : {\tt peval polyEval}}\index{peval}
\index{polyEval}
\noindent{\tt peval} ou {\tt polyEval}  a comme argument un polyn\^ome 
{\tt p} donn\'e par la liste de ses coefficients et un r\'eel {\tt a}.\\
{\tt peval} ou {\tt polyEval} renvoie la valeur num\'erique ou exacte de 
{\tt p(a)}.\\ 
 On tape :
\begin{center}{\tt peval([1,0,-1],sqrt(2))}\end{center}
On obtient :
\begin{center}{\tt sqrt(2)*sqrt(2)-1}\end{center} 
Puis :
\begin{center}{\tt normal(sqrt(2)*sqrt(2)-1)}\end{center} 
On obtient :
\begin{center}{\tt 1}\end{center}
On tape :
\begin{center}{\tt peval([1,0,-1],1.4)}\end{center}
On obtient :
\begin{center}{\tt  0.96}\end{center} 

\subsection{Mise en facteur de $x^n$ dans un polyn\^ome : {\tt factor\_xn}}\index{factor\_xn}
\noindent{\tt factor\_xn} a comme argument un polyn\^ome {\tt P}.\\
{\tt factor\_xn} renvoie le polyn\^ome {\tt P} dans lequel on a mis en facteur 
$x^n$ o\`u $n$ est le degr\'e de {\tt P} ({\tt n=degree(P)}).\\ 
 On tape :
\begin{center}{\tt factor\_xn(-x\verb|^|4+3)}\end{center}
On obtient :
\begin{center}{\tt x\verb|^|4*(-1+3*x\verb|^|-4)}\end{center} 

\subsection{PGCD des coefficients d'un polyn\^ome : {\tt content}}\index{content|textbf}
\noindent{\tt content} a comme arguments un polyn\^ome {\tt P} donn\'e sous 
forme symbolique ou par la liste de ses coefficients et le nom de la variable 
(par d\'efaut c'est $x$).\\
{\tt content} d\'esigne le PGCD (plus grand commun diviseur) des coefficients 
du polyn\^ome {\tt P}.\\
On tape :
\begin{center}{\tt content(6*x\verb|^|2-3*x+9)}\end{center}
ou on tape :
\begin{center}{\tt content(6*t\verb|^|2-3*t+9,t)}\end{center}
ou:
\begin{center}{\tt content([6,-3,9]))}\end{center}
On obtient :
\begin{center}{\tt  3}\end{center} 

\subsection{Partie primitive d'un polyn\^ome : {\tt primpart}}\index{primpart}
\noindent{\tt primpart} a comme argument un polyn\^ome {\tt P} donn\'e sous 
forme symbolique ou par la liste de ses coefficients.\\
{\tt primpart} renvoie le polyn\^ome {\tt P} divis\'e par le PGCD 
(plus grand commun diviseur) de ses coefficients.\\
On tape :
\begin{center}{\tt primpart(6x\verb|^|2-3x+9)}\end{center}
ou:
\begin{center}{\tt  primpart([6,-3,9],x))}\end{center}
On obtient :
\begin{center}{\tt 2*x\verb|^|2-x+3}\end{center} 

\subsection{Factorisation sur les entiers : {\tt collect}}\index{collect}
\noindent{\tt collect} a comme param\`etre un polyn\^ome ou une liste de 
polyn\^omes et \'eventuellement {\tt sqrt(n)}.\\
{\tt collect} factorise  le polyn\^ome (ou les polyn\^omes de la liste) sur les
entiers lorsque les coefficients du polyn\^ome sont entiers ou sur 
$\mathbb Q(\sqrt(n))$, si les  coefficients du polyn\^ome sont dans
 $\mathbb Q(\sqrt(n))$ ou si {\tt sqrt(n)} est le  second argument.\\.
Exemples :\\
\begin{itemize}
\item Factoriser sur les entiers : 
$$x^2-4$$
On tape :
\begin{center}{\tt collect(x\verb|^|2-4)}\end{center}
On trouve en mode r\'eel :
\begin{center}{\tt (x-2)*(x+2)}\end{center}

\item Factoriser sur les entiers : 
$$x^2+4$$
On tape :
\begin{center}{\tt collect(x\verb|^|2+4)}\end{center}
On obtient en mode r\'eel :
\begin{center}{\tt x\verb|^|2+4}\end{center}
On obtient en mode complexe :
\begin{center}{\tt (x+2*i)*(x-2*i)}\end{center}

\item Factoriser sur les entiers : 
$$x^2-2$$
On tape :
\begin{center}{\tt collect(x\verb|^|2-2)}\end{center}
On obtient :
\begin{center}{\tt x\verb|^|2-2}\end{center}
Mais si on tape :
\begin{center}{\tt collect(sqrt(2)*(x\verb|^|2-2))}\end{center}
On obtient :
\begin{center}{\tt sqrt(2)*(x-sqrt(2))*(x+sqrt(2))}\end{center}
\item Factorier sur les entiers : 
$$x^3-2x^2+1 \mbox{et} x^2-x$$
On tape :
 \begin{center}{\tt collect([x\verb|^|3-2*x\verb|^|2+1,x\verb|^|2-x])}\end{center}
On obtient :
\begin{center}{\tt  [(x-1)*(x\verb|^|2-x-1),x*(x-1)]}\end{center}
Mais si on tape :
 \begin{center}{\tt collect((x\verb|^|3-2*x\verb|^|2+1)*sqrt(5))}\end{center}
On obtient :
\begin{center}{\tt ((19*sqrt(5)-10)*((sqrt(5)+15)*x+7*sqrt(5)-5)* ((sqrt(5)+25)*x-13*sqrt(5)-15)*(x-1))/6820}\end{center}
Ou si on tape :
 \begin{center}{\tt collect(x\verb|^|3-2*x\verb|^|2+1,sqrt(5))}\end{center}
On obtient :
\begin{center}{\tt ((2*sqrt(5)-19)*((sqrt(5)+25)*x-13*sqrt(5)-15)*(-x+1)*((sqrt(5)+15)*x+7*sqrt(5)-5))/6820}\end{center}
\end{itemize}

\subsection{Factorisation : {\tt factor factoriser}}\index{factor}\index{factoriser}\label{sec:factor}
\noindent {\tt factor} a pour argument un polyn\^ome ou une liste de 
polyn\^omes et \'eventuellement {\tt sqrt(n)}.\\
{\tt factor} factorise le polyn\^ome ou la liste de polyn\^omes 
sur les r\'eels en mode r\'eel et sur les complexes en mode 
complexe Les  coefficients des facteurs sont dans $\mathbb Q(\sqrt(n))$ si 
{\tt Sqrt} est coch\'e dans la  configuration du {\tt cas} ou si {\tt sqrt(n)} 
est le second argument (voir aussi \ref{sec:factore}).

{\bf Note} pour \^etre en mode r\'eel (ou complexe) d\'ecochez (ou cochez)
 {\tt Complexe} dans la configuration du 
{\tt cas} que l'on ouvre avec le bouton donnant la ligne d'\'etat.\\
On tape :
 \begin{center}{\tt factor(x\verb|^|2+2*x+1)}\end{center}
On obtient :
\begin{center}{\tt (x+1)\verb|^|2}\end{center}
On tape :
 \begin{center}{\tt factor(x\verb|^|4-2*x\verb|^|2+1)}\end{center}
On obtient :
\begin{center}{\tt (-x+1)\verb|^|2*(x+1)\verb|^|2}\end{center}
On tape :
 \begin{center}{\tt factor(x\verb|^| 3-2*x\verb|^|2+1)}\end{center}
On obtient si {\tt Sqrt} n'est pas coch\'e dans la configuration du {\tt cas} :\begin{center}{\tt  (x-1)*(x\verb|^|2-x-1)}\end{center}
On tape :
 \begin{center}{\tt factor(x\verb|^| 3-2*x\verb|^|2+1)}\end{center}
On obtient si {\tt Sqrt} est coch\'e dans la configuration du {\tt cas} :
\begin{center}{\tt (x-1)*(x+(sqrt(5)+1)/2)*(x+(-sqrt(5)+1)/2)}\end{center}
On tape :
 \begin{center}{\tt factor(x\verb|^| 3-2*x\verb|^|2+1,sqrt(5))}\end{center}
On obtient si {\tt Sqrt} est coch\'e ou non dans la configuration du 
{\tt cas} :
\begin{center}{\tt ((2*sqrt(5)-19)*((sqrt(5)+15)*x+7*sqrt(5)-5)*(-x+1)*((sqrt(5)+25)*x-13*sqrt(5)-15))/6820}\end{center}
On tape :
 \begin{center}{\tt factor(x\verb|^|2+1)}\end{center}
On obtient en mode r\'eel :
\begin{center}{\tt  x\verb|^|2+1}\end{center}
On obtient en mode complexe :
\begin{center}{\tt  ((-i)*x+1)*((i)*x+1)}\end{center}

\subsection{Factorisation sans facteur carr\'e : {\tt sqrfree}}\index{sqrfree}
\noindent{\tt sqrfree} a comme param\`etre un polyn\^ome.\\
{\tt sqrfree} factorise ce polyn\^ome en regroupant les termes ayant
 m\^eme exposant.\\
On tape : 
\begin{center}{\tt sqrfree((x\verb|^|2-1)*(x-1)*(x+2))}\end{center} 
On obtient :
 \begin{center}{\tt (x\verb|^|2+3*x+2)*(x-1)\verb|^|2}\end{center} 
On tape : 
\begin{center}{\tt sqrfree((x\verb|^|2-1)\verb|^|2*(x-1)*(x+2)\verb|^|2)}\end{center} 
On obtient :
 \begin{center}{\tt (x\verb|^|2+3*x+2)*(x-1)\verb|^|3}\end{center} 

\subsection{Liste des facteurs : {\tt factors}}\index{factors|textbf}
\noindent{\tt factors} a pour argument un polyn\^ome ou une liste de 
polyn\^omes.\\
{\tt factors } donne la liste des facteurs du polyn\^ome avec  leur multiplicit\'e.\\
On tape :
 \begin{center}{\tt factors(x\verb|^|2+2*x+1)}\end{center}
On obtient :
\begin{center}{\tt  [x+1,2]}\end{center}
On tape :
 \begin{center}{\tt factors(x\verb|^|4-2*x\verb|^|2+1)}\end{center}
On obtient :
\begin{center}{\tt [x+1,2,x-1,2]}\end{center}
On tape :
 \begin{center}{\tt factors([x\verb|^|3-2*x\verb|^|2+1,x\verb|^|2-x])}\end{center}
On obtient :
\begin{center}{\tt [[x-1,1,x\verb|^|2-x-1,1],[x,1,x-1,1]]}\end{center}
On tape :
 \begin{center}{\tt factors([x\verb|^|2,x\verb|^|2-1])}\end{center}
On obtient :
\begin{center}{\tt  [[x,2],[x+1,1,x-1,1]]}\end{center}

\subsection{\'Evaluer un polyn\^ome : {\tt horner}}\index{horner}
\noindent{\tt  horner} a deux param\`etres : un polyn\^ome {\tt P} donn\'e sous
forme symbolique ou par la liste de ses coefficients et un nombre {\tt a}.\\ 
{\tt  horner} renvoie {\tt P(a)} calcul\'e par la m\'ethode de H\"{o}rner.\\
%une liste compos\'ee du polyn\^ome $Q(x)$ (quotient de  $P(x)$ par $x-a$), de $a$ et de 
On tape :
\begin{center}{\tt  horner(x\verb|^|2-2*x+1,2)}\end{center}
ou :
\begin{center}{\tt  horner([1,-2,1],2)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
On peut mettre un troisi\`eme argument optionnel pour indiquer la
variable \`a remplacer, par exemple
\begin{center}{\tt  horner(y\verb|^|2-2*x*y+1,2,y)}\end{center}

\subsection{\'Ecriture selon les puissances de (x-a) : {\tt ptayl}}\index{ptayl}
Il s'agit d'\'ecrire un polyn\^ome {\tt P(x)}  selon les puissances de 
{\tt x-a)}$x-a$.\\
{\tt ptayl} a deux param\`etres : un  polyn\^ome {\tt P} donn\'e sous 
forme symbolique ou par la liste de ses coefficients et un nombre {\tt a}.\\
{\tt ptayl} renvoie le polyn\^ome {\tt Q} tel que {\tt Q(x-a)=P(x)}.\\
On tape :
\begin{center}{\tt ptayl(x\verb|^|2+2*x+1,2)}\end{center}
On obtient le polyn\^ome Q(x):
\begin{center}{\tt  x\verb|^|2+6*x+9}\end{center}
On tape :
\begin{center}{\tt  ptayl([1,2,1],2)}\end{center}
On obtient :
\begin{center}{\tt [1,6,9]}\end{center}
{\bf Attention}\\
 On a:
\begin{center}{\tt P(x)=Q(x-a)}\end{center}
c'est \`a dire pour l'exemple que :\\
$x^2+2x+1=(x-2)^2+6(x-2)+9$

\subsection{Calcul avec les racines exactes d'un polyn\^ome : {\tt rootof}}\index{rootof}
Soient $P$ et $Q$ deux polyn\^omes donn\'es par la liste de leurs coefficients
alors, {\tt rootof(P,Q)} d\'esigne la valeur $P(\alpha)$ o\`u $\alpha$ est la 
plus grande racine (en norme) de $Q$.\\
On peut alors faire des calculs avec cette valeur.\\ 
{\bf Exemple}\\ 
Soit $\alpha$ la plus grande racine de $Q(x)=x^4+10x^2+1$.
\begin{itemize}
\item Calculer 
$\displaystyle \frac{1}{\alpha}$ o\`u on tape :
\begin{center}{\tt normal(1/rootof([1,0],[1,0,10,0,1])) }\end{center}
car $P(x)=x$ est repr\'esent\'e par [1,0].\\
On obtient :
\begin{center}{\tt rootof([[-1,0,-10,0],[1,0,10,0,1]])}\end{center}
ce qui veut dire que :\\
$\displaystyle \frac{1}{\alpha}=-(\alpha)^3-10.\alpha$\\
\item Calculer  $(\alpha)^2$.\\ 
On tape :
\begin{center}{\tt normal(rootof([1,0],[1,0,10,0,1])\verb|^|2)}\end{center}
car $P(x)=x$ est repr\'esent\'e par [1,0], et pour avoir $\alpha^2$, on
\'el\`eve $\alpha$={\tt rootof([1,0],[1,0,10,0,1])} au carr\'e.\\
On obtient :
\begin{center}{\tt -5-2*sqrt(6)}\end{center}
or :
\begin{center}{\tt normal(rootof([1,0,0],[1,0,10,0,1])\verb|^|2)}\end{center}
car $P(x)=x^2$ est repr\'esent\'e par [1,0,0], pour avoir $\alpha^2$ 
directement.\\
On obtient :
\begin{center}{\tt -5-2*sqrt(6)}\end{center}
\end{itemize}
%ce r\'esultat \'etait \'evident puisque l'on avait une \'equation bicarr\'ee de discriminant r\'eduit $25-1=24=4*6$.

\subsection{Racines exactes d'un polyn\^ome : {\tt roots}}\index{roots}
\noindent{\tt roots} a comme arguments une fonction polyn\^ome et le nom de sa variable.\\
{\tt roots} renvoie une matrice ayant 2 colonnes : chaque ligne est compos\'ee 
d'une racine du polyn\^ome et de son ordre de multiplicit\'e.\\
{\bf Exemples}
\begin{itemize}
\item  Chercher les racines de $P(x)=x^5-2x^4+x^3$.\\
On tape :
\begin{center}{\tt roots(x\verb|^|5-2*x\verb|^|4+x\verb|^|3) }\end{center}
On obtient :
\begin{center}{\tt [[8+3*sqrt(7),1],[8-3*sqrt(7),1],[0,3]]}\end{center}
\item  Chercher les racines de 
$x^{10}-15x^8+90x^6-270x^4+405x^2-243=(x^2-3)^5$.\\
On tape :
\begin{center}{\tt roots(x\verb|^|10-15*x\verb|^|8+90*x\verb|^|6-270*x\verb|^|4+405*x\verb|^|2-243)}\end{center}
On obtient :
\begin{center}{\tt[[sqrt(3),5],[-(sqrt(3)),5]]}\end{center}
\item  Chercher les racines de $(t^3-3)$.\\
On tape  :
\begin{center}{\tt roots(t\verb|^|3-1,t)}\end{center}
On obtient :
\begin{center}{\tt[[(-1+(i)*sqrt(3))/2,1],[(-1-(i)*sqrt(3))/2,1],[1,1]]}\end{center}
\end{itemize}

\subsection{Coefficients d'un polyn\^ome d\'efini par ses racines : {\tt pcoeff pcoef}}\index{pcoeff}\index{pcoef}
\noindent{\tt pcoeff} (ou {\tt pcoef}) a comme argument, une liste de 
composantes les  racines d'un  polyn\^ome $P$.\\
{\tt pcoeff} (ou {\tt pcoef}) renvoie une liste de composantes, les 
coefficients du polyn\^ome unitaire $P$ (par ordre d\'ecroissant).\\
On tape :
\begin{center}{\tt pcoef([1,2,0,0,3])}\end{center}
On obtient :
\begin{center}{\tt [1,-6,11,-6,0,0]}\end{center}
c'est \`a dire $(x-1)(x-2)(x^2)(x-3)=x^5-6x^4+11x^3-6x^2$.

\subsection{Troncature d'ordre $n$ : {\tt truncate}}\index{truncate}
\noindent{\tt truncate} permet de tronquer un polyn\^ome à un ordre donn\'e 
{\tt truncate} est utile quand on fait des d\'eveloppements limit\'es \`a 
la main, ou pour transformer un d\'eveloppement limit\'e en polyn\^ome.\\
{\tt truncate} a deux arguments : un polyn\^ome et un entier {\tt n}.\\ 
{\tt truncate} renvoie le polyn\^ome tronqu\'e à l'ordre {\tt n}  (pas de 
termes d'ordre sup\'erieur ou \'egal \`a {\tt n+1}).\\
On tape :
\begin{center}{\tt truncate((1+x+x\verb|^|2/2)\verb|^|3,4)}\end{center}
On obtient :
\begin{center}{\tt (9*x\verb|^|4+16*x\verb|^|3+18*x\verb|^|2+12*x+4)/4}\end{center}
On tape :
\begin{center}{\tt truncate(series(sin(x)),4)}\end{center}
On obtient :
\begin{center}{\tt (-x\verb|^|3-(-6)*x)/6}\end{center}
On remarquera que le polyn\^ome renvoy\'e est r\'eduit au m\^eme 
d\'enominateur.

\subsection{Convertir un d\'eveloppement limit\'e en polyn\^ome : {\tt convert convertir}}\index{convert}\index{convertir}\index{polynom@{\sl polynom}|textbf}\label{sec:convertpoly}
\noindent{\tt convert}, avec l'option {\tt polynom}, permet de convertir un 
d\'eveloppement de Taylor en  un polyn\^ome.\\
{\tt convert} est utile pour transformer un d\'eveloppement limit\'e en 
polyn\^ome : par exemple pour faire le trac\'e d'une fonction et de ses 
polyn\^omes de Taylor. \\
{\tt convert} a deux arguments : un d\'eveloppement de Taylor d'ordre $n$ 
et l'option {\tt polynom}.\\ 
{\tt convert} renvoie le polyn\^ome de Taylor d'ordre $n$ tronqu\'e à 
l'ordre $n$  (on supprime le reste).\\
On tape :
\begin{center}{\tt convert(taylor(sin(x)),polynom)}\end{center}
On obtient :
\begin{center}{\tt x+1/-6*x\verb|^|3+1/120*\verb|x^|5+x\verb|^|6*0}\end{center}
On tape :
\begin{center}{\tt convert(series(sin(x),x=0,6),polynom)}\end{center}
On obtient :
\begin{center}{\tt x+1/-6*x\verb|^|3+1/120*\verb|x^|5+x\verb|^|7*0}\end{center}

\subsection{Polyn\^omes al\'eatoires : {\tt randpoly randPoly}}\index{randpoly}\index{randPoly}
\noindent{\tt randpoly} (ou {\tt randPoly}) a deux param\`etres le nom d'une 
variable (par d\'efaut {\tt x}) et un entier {\tt n} (en fait l'ordre des param\`etres n'est pas important).\\
{\tt randpoly} renvoie un polyn\^ome de variable le premier param\`etre (ou
{\tt x}), de degré le deuxi\`eme param\`etre et  dont les coefficients sont 
des entiers aléatoires équirépartis sur -99..+99.\\ 
On tape :
\begin{center}{\tt randpoly(t,4)}\end{center}
On obtient par exemple:
\begin{center}{\tt -8*t\verb|^|4-87*t\verb|^|3-52*t\verb|^|2+94*t+80}\end{center}
On tape :
\begin{center}{\tt randpoly(4)}\end{center}
On obtient par exemple:
\begin{center}{\tt 70*x\verb|^|4-46*x\verb|^|3-7*x\verb|^|2-24*x+52}\end{center}
On tape :
\begin{center}{\tt randpoly(4,u)}\end{center}
On obtient par exemple:
\begin{center}{\tt 2*u\verb|^|4+33*u\verb|^|3-6*u\verb|^|2-92*u-12}\end{center}

\subsection{Changer l'ordre des variables : {\tt reorder}}\index{reorder}
\noindent{\tt reorder}  a deux param\`etres : une expression et une liste 
contenant les noms des variables dans un certain ordre.\\
{\tt reorder} d\'eveloppe l'expression selon l'ordre des variables donn\'e dans
le second param\`etre.\\
On tape :
\begin{center}{\tt reorder(x\verb|^|2+2*x*a+a\verb|^|2+z\verb|^|2-x*z,[a,x,z])}\end{center}
On obtient :
\begin{center}{\tt a\verb|^|2+2*a*x+x\verb|^|2-x*z+z\verb|^|2}\end{center}
{\bf Attention} :\\
Il ne faut pas que les variables soient affect\'ees !

\subsection{Listee al\'eatoire : {\tt ranm}}\index{ranm}\label{sec:ranm1}
\noindent{\tt ranm} a comme argument un entier {\tt n}.\\
{\tt ranm} renvoie une liste de n entiers al\'eatoires (entre -99 et +99) 
pouvant \^etre consid\'er\'es comme les coefficients d'un polyn\^ome de 
degr\'e {\tt n-1} (voir aussi \ref{sec:ranm2} et \ref{sec:ranm3}).\\
On tape :
\begin{center}{\tt ranm(3)}\end{center}
On obtient :
\begin{center}{\tt [68,-21,56]}\end{center}

\subsection{Interpolation de Lagrange : {\tt lagrange interp}}\index{lagrange}\index{interp}
\noindent{\tt lagrange} a comme argument deux listes de longueur {\tt n} ou une
 matrice de deux lignes et {\tt n} colonnes et eventuellement le 
nom de la variable {\tt var} (par d\'efaut {\tt x}):\\
la premi\`ere liste (ou ligne) correspond à des valeurs d'abscisses $x_k$, et 
la deuxi\`eme liste (ou ligne) correspond 
à des valeurs d'ordonn\'ees $y_k$ pour $k$ allant de 1 \`a {\tt n}.\\
{\tt lagrange} renvoie une expression polyn\^omiale {\tt P(var)} de degr\'e 
{\tt n-1} tel que $P(x_k)=y_k$.\\
On tape :
\begin{center}{\tt lagrange([[1,3],[0,1]])}\end{center}
Ou on tape :
\begin{center}{\tt lagrange([1,3],[0,1])}\end{center}
On obtient :
\begin{center}{\tt (x-1)/2}\end{center}
en effet pour $x=1$ on a $\frac{x-1}{2}=0 $ et pour $x=3$ on a 
$\frac{x-1}{2}=1$.\\ 
On tape :
\begin{center}{\tt lagrange([1,3],[0,1],y)}\end{center}
On obtient :
\begin{center}{\tt (y-1)/2}\end{center}
{\bf Attention}
{\tt lagrange([1,2],[3,4],y)} ne renvoie pas une fonction mais une expression.
mais on peut d\'efinir une fonction en mettant :\\
{\tt f(x):=lagrange([1,2],[3,4],x)} ou\\
{\tt f(y):=lagrange([1,2],[3,4],y)} et alors \\
{\tt f(4)} renvoie {\tt 6} car {\tt f(x)=x+2})\\
Bien voir la diff\'erence entre :\\
{\tt g(x):=lagrange([1,2],[3,4])} et\\ {\tt f(x):=lagrange([1,2],[3,4],x)}.\\
{\tt g(x):=lagrange([1,2],[3,4])} ne definit pas une fonction,
par exemple, {\tt g(2)=x-1+3} alors que {\tt f(2)=4}.\\
Ceci dit, la d\'efinition of {\tt f} n'est pas efficace car le polyn\^ome sera 
recalcul\'e depuis le
d\'ebut \`a chaque appel de {\tt f} (quand on d\'efinit une fonction le membre 
de droite n'est pas \'evalu\'e, l'\'evaluation est faite seulement quand on 
appelle {\tt f}).\\
Pour \^etre efficace il faut utiliser {\tt unapply}:\\
{\tt f:=unapply(lagrange([1,2],[3,4]),x)} ou\\
{\tt f:=unapply(lagrange([1,2],[3,4],y),y)}

\subsection{Les splines naturelles: {\tt spline}}\index{spline|textbf}
{\bf D\'efinition}\\
Soit une subdivision $\sigma_n$ de l'intervalle $[a,b]$~:
\[ a=x_0,\quad x_1,\quad...,\quad x_n=b \]
On dit que $s$ est une fonction spline de degr\'e $l$ si $s$ est une 
 application de $[a,b]$ dans $\mathbb R$ v\'erifiant~:
\begin{itemize}
\item $s$ admet des d\'eriv\'ees continues jusqu'\`a l'ordre $l-1$,
\item $s$ restreint \`a chaque  intervalle de la subdivision est un polyn\^ome 
de degr\'e inf\'erieur ou \'egal \`a $l$.
\end{itemize}

{\bf Th\'eor\`eme}\\
L'ensemble des fonctions splines de degr\'e $l$ sur $\sigma_n$ est un
 $\mathbb R$-espace vectoriel de dimension $n+l$.\\
En effet :\\
Sur $[a,x_1]$, $s$ est un polyn\^ome $A$ de degr\'e inf\'erieur ou \'egal \`a 
$l$, donc sur $[a,x_1]$, $s=A(x)=a_0+a_1x+...a_lx^l$ et $A$ est une combinaison 
lin\'eaire de $1,x,...x^l$.\\
Sur $[x_1,x_2]$, $s$ est un polyn\^ome $B$ de degr\'e inf\'erieur ou \'egal \`a
$l$, donc sur $[x_1,x_2]$, $s=B(x)=b_0+b_1x+...b_lx^l$.\\
Puisque $s$ admet des d\'eriv\'ees continues jusqu'\`a l'ordre $l-1$ on doit 
avoir :
\[ \forall 0 \leq j \leq l-1, \quad  B^{(j)}(x_1)-A^{(j)}(x_1)=0\]
donc $B(x)-A(x)=\alpha_1(x-x_1)^l$ ou encore $B(x)=A(x)+\alpha_1(x-x_1)^l$.\\
Soit la fonction :\\
\[\mbox{q}_1(x)  \mbox{ = }
\left\{
\begin{array}{rcl}
0 & \mbox{sur} & [a,x_1] \\
(x-x_1)^l  & \mbox{sur} & [x_1,b]\\
\end{array} 
\right.
\]
Donc :\\
$s|_{[a,x_2]}=a_0+a_1x+...a_lx^l+\alpha_1q_1(x)$.

Sur $[x_2,x_3]$, $s$ est un polyn\^ome $C$ de degr\'e inf\'erieur ou \'egal \`a
$l$, donc sur $[x_2,x_3]$, $s=C(x)=c_0+c_1x+...c_lx^l$.\\
Puisque $s$ admet des d\'eriv\'ees continues jusqu'\`a l'ordre $l-1$ on doit 
avoir :
\[ \forall 0 \leq j \leq l-1, \quad  C^{(j)}(x_2)-B^{(j)}(x_2)=0\]
donc $C(x)-B(x)=\alpha_2(x-x_2)^l$ ou encore $C(x)=B(x)+\alpha_2(x-x_2)^l$.\\
Soit la fonction :\\
\[\mbox{q}_2(x)  \mbox{ = }
\left\{
\begin{array}{rcl}
0 & \mbox{sur} & [a,x_2] \\
(x-x_2)^l  & \mbox{sur} & [x_2,b]\\
\end{array} 
\right.
\]
Donc :
$s|_{[a,x_3]}=a_0+a_1x+...a_lx^l+\alpha_1q_1(x)+\alpha_2q_2(x)$\\
Et ainsi de suite, on d\'efinit les fonctions :\\
\[\forall 1 \leq j \leq n-1, \mbox{q}_j(x)  \mbox{ = }
\left\{
\begin{array}{rcl}
0 & \mbox{sur} & [a,x_j] \\
(x-x_j)^l  & \mbox{sur} & [x_j,b]\\
\end{array} 
\right.
\]
ainsi,\\  
$s|_{[a,b]}=a_0+a_1x+...a_lx^l+\alpha_1q_1(x)+....+\alpha_{n-1}q_{n-1}(x)$ 
et\\
$s$ est une combinaison lin\'eaire des $n+l$ fonctions ind\'ependantes
$1,x,..x^l,q_1,..q_{n-1}$.

{\bf Interpolation avec des fonctions splines}\\
On peut demander d'interpoler une fonction $f$ sur $\sigma_n$ par une fonction
spline $s$ de degr\'e $l$,
ce qui va imposer \`a $s$ de v\'erifier $s(x_k)=y_k=f(x_k)$ pour tout 
$0\geq k\geq n$. On a donc $n+1$ conditions, il reste donc $l-1$ degr\'es de 
libert\'e. On peut donc encore imposer $l-1$ conditions suppl\'ementaires qui
seront des conditions sur les deriv\'ees de $s$ en $a$ et $b$.
Il existe alors 
trois types d'interpolation (interpolation d'Hermite, interpolation naturelle,
interpolation p\'eriodique) qui sont obtenues en rajoutant trois types de 
contraintes. On peut montrer que pour chacun de ces types d'interpolation la 
solution au probl\`eme d'interpolation est unique.

Supposons $l$ impair, $l=2m-1$, il y a donc $2m-2$ degr\'es de
libert\'e. On rajoute les contraintes suivantes :
\begin{itemize}
\item Interpolation d'Hermite
\[ \forall 1\leq j\leq m-1, \quad s^{(j)}(a)=f^{(j)}(a),
s^{(j)}(b)=f^{(j)}(b) \]
\item Interpolation naturelle
\[ \forall m \leq j \leq 2m-2, \quad s^{(j)}(a)=s^{(j)}(b)=0 \]
\item Interpolation p\'eriodique
\[\forall 1\leq j\leq 2m-2, \quad s^{(j)}(a)=s^{(j)}(b) \]
\end{itemize}

Supposons $l$ pair, $l=2m$, il y a donc $2m-1$ degr\'es de
libert\'e. On rajoute les contraintes suivantes :
\begin{itemize}
\item Interpolation d'Hermite
\[ \forall 1\leq j\leq m-1, \quad s^{(j)}(a)=f^{(j)}(a),
s^{(j)}(b)=f^{(j)}(b) \] 
et
\[s^{(m)}(a)=f^{(m)}(a)\] 
\item Interpolation naturelle
\[ \forall m \leq j \leq 2m-2, \quad s^{(j)}(a)=s^{(j)}(b)=0 \]
et
\[s^{(2m-1)}(a)=0\] 
\item Interpolation p\'eriodique
\[\forall 1\leq j\leq 2m-1, \quad s^{(j)}(a)=s^{(j)}(b) \]
\end{itemize}
Une spline naturelle de degr\'e donn\'e passant par des points
donn\'es est une fonction spline v\'erifiant l'interpolation naturelle.

L'instruction {\tt spline} calcule une spline naturelle de degr\'e donn\'e 
passant par des points dont les listes des abscisses par ordre croissant et 
des ordonn\'ees sont pass\'ees en argument. Elle renvoie la fonction
spline sous forme d'une liste de polyn\^omes, chaque polyn\^ome
\'etant valide dans un intervalle. On donne dans l'ordre croissant
la liste des abscisses, la liste des ordonn\'ees,
le nom de variables souhait\'e pour les polyn\^omes et le degr\'e.

Par exemple, on veut une spline naturelle de degr\'e 3, passant par
les points $x_0=0,y_0=1$, $x_1=1,y_1=3$ et $x_2=2, y_2=0$, on tape~:
\begin{center}
{\tt spline([0,1,2],[1,3,0],x,3)}
\end{center}
On obtient une liste de deux polyn\^omes fonction de $x$~:
\[[ -5*x^3/4+13*x/4+1, \quad 5*(x-1)^3/4-15*(x-1)^2/4+(x-1)/-2+3 ]\]
valables respectivement sur les intervalles $[0,1]$ et $[1,2]$.

Par exemple, on veut une spline naturelle de degr\'e 4, passant par
les points $x_0=0,y_0=1$, $x_1=1,y_1=3$, $x_2=2, y_2=0$ et $x_3=3, y_3=-1$, 
on tape~:
\begin{center}
{\tt spline([0,1,2,3],[1,3,0,-1],x,4)}
\end{center}
On obtient une liste de trois polyn\^omes fonction de $x$~:
\[ [(-62*x^4+304*x)/121+1,\] 
\[(201*(x-1)^4-248*(x-1)^3-372*(x-1)^2+56*(x-1))/121+3,\] 
\[(-139*(x-2)^4+556*(x-2)^3+90*(x-2)^2+-628*(x-2))/121]\]
valables respectivement sur les intervalles $[0,1]$, $[1,2]$ et $[2,3]$.

Par exemple, pour avoir l'interpolation naturelle de $\cos$ sur 
$[0,\pi/2,3\pi/2]$, on tape~:
\begin{center}
{\tt spline([0,pi/2,3*pi/2],cos([0,pi/2,3*pi/2]),x,3)}
\end{center}
On obtient~:
\[
[((3\pi^3+(-7\pi^2)x+4x^3)1/3)/(\pi^3),\]
\[((15\pi^3+(-46\pi^2)*+36\pi x^2-8x^3)1/12)/(\pi^3)]
\]

\section{Arithm\'etique des polyn\^omes}
Les  polyn\^omes sont repr\'esent\'es par des expressions ou par la liste de 
leurs coefficients par ordre de puissances d\'ecroissantes. Dans le premier cas
la variable utilis\'ee par d\'efaut est $x$. Pour les polyn\^omes \`a 
coefficients dans $\Z/n\Z$, appliquez {\tt \% n } \`a l'expression ou \`a
chaque coefficient de la liste.

\subsection{Liste des diviseurs : {\tt divis}}\index{divis}
\noindent{\tt divis} a pour argument  un polyn\^ome symbolique (ou une liste de
polyn\^omes) et renvoie la liste des diviseurs.\\ 
On tape : 
\begin{center}{\tt divis(x\verb|^|2-1)}\end{center}
On obtient :
\begin{center}{\tt [1,x-1,x+1,(x-1)*(x+1)]}\end{center}
On tape : 
\begin{center}{\tt divis(t\verb|^|2-1)}\end{center}
On obtient :
\begin{center}{\tt [1,t-1,t+1,(t-1)*(t+1)]}\end{center}
On tape : 
\begin{center}{\tt divis(x\verb|^|4-1)}\end{center}
Ou on tape : 
\begin{center}{\tt divis(poly2symb([1,0,0,0,-1],x))}\end{center}
On obtient :
\begin{center}{\tt [1,x\verb|^|2+1,x+1,(x\verb|^|2+1)*(x+1),x-1,(x\verb|^|2+1)*(x-1),}\end{center}
\begin{center}{\tt (x+1)*(x-1),(x\verb|^|2+1)*(x+1)*(x-1)]}\end{center}
On tape : 
\begin{center}{\tt divis([t\verb|^|2,x\verb|^|2-1])}\end{center}
On obtient :
\begin{center}{\tt [[1,t,t\verb|^|2],[1,x+1,x-1,(x+1)*(x-1)]]}\end{center}

\subsection{Quotient euclidien : {\tt quo}}\index{quo|textbf}
\noindent{\tt quo} donne le quotient de la division euclidienne de deux 
polyn\^omes (division selon les puissances d\'ecroissantes).\\
On peut donner les polyn\^omes soit par la liste de leurs coefficients selon 
les puissances d\'ecroissantes, soit sous leurs formes symboliques et dans ce 
cas la variable doit \^etre rajout\'ee comme troisi\`eme argument (par d\'efaut
la variable est {\tt x}).\\ 
On tape :
\begin{center}{\tt quo(x\verb|^|2+2x+1,x+3)}\end{center}
On obtient :
\begin{center}{\tt x-1}\end{center}
On tape :
\begin{center}{\tt quo(t\verb|^|2+2t+1,t+3,t)}\end{center}
On obtient :
\begin{center}{\tt t-1}\end{center}
ou on tape :
\begin{center}{\tt quo([1,2,1],[1,3])}\end{center}
On obtient :
\begin{center}{\tt [] 1,-1 []}\end{center}
c'est \`a dire le polyn\^ome {\tt poly1[1,-1]}.\\
Pour avoir le quotient de $x^3+2x+4$ par $x^2+x+2$, on tape :
\begin{center}{\tt quo(x\verb|^|3+2x+4,x\verb|^|2+x+2)}\end{center}
On obtient :
\begin{center}{\tt x-1}\end{center}
Ou on tape :
\begin{center}{\tt quo([1,0,2,4],[1,1,2])}\end{center}
On obtient :
\begin{center}{\tt [] 1,-1 []}\end{center}
c'est \`a dire le polyn\^ome {\tt poly1[1,-1]} ou encore le polyn\^ome 
{\tt x-1}.\\
On tape :
\begin{center}{\tt quo(t\verb|^|3+2t+4,t\verb|^|2+t+2,t)}\end{center}
On obtient :
\begin{center}{\tt t-1}\end{center}
On tape si on ne met pas la variable $t$ comme dernier argument :
\begin{center}{\tt quo(t\verb|^|3+2t+4,t\verb|^|2+t+2)}\end{center}
On obtient :
\begin{center}{\tt (t\verb|^|3+2*t+4)/(t\verb|^|2+t+2)}\end{center}

\subsection{Quotient euclidien : {\tt Quo}}\index{Quo|textbf}
\noindent {\tt Quo} est la forme inerte de {\tt quo}.\\
{\tt Quo} renvoie le quotient de la division euclidienne de deux polyn\^omes 
(division selon les puissances d\'ecroissantes) sans l'\'evaluer et
cela permet de calculer le quotient euclidien de deux polyn\^omes \`a
coefficients dans $\Z/p\Z$ en utilisant la syntaxe Maple.\\
{\bf Attention} il faut \^etre en mode Maple pour que cela soit efficace.\\
On tape, en mode {\tt Xcas} :
\begin{center}{\tt Quo(x\verb|^|2+2*x+1,x)}\end{center}
On obtient :
\begin{center}{\tt quo(x\verb|^|2+2*x+1,x)}\end{center}
On peut aussi taper pour avoir le quotient de $x^2+2x+4$ par $x^2+x+2$ :
\begin{center}{\tt Quo([1,2,4],[1,1,2])}\end{center}
On obtient :
\begin{center}{\tt quo([1,2,4],[1,1,2])}\end{center}
En mode {\tt Maple} on tape :
\begin{center}{\tt Quo(x\verb|^|3+3*x,2*x\verb|^|2+6*x+5) mod 5}\end{center}
On obtient :
\begin{center}{\tt -(2)*x+1)}\end{center}
La division est faite dans $\Z/5\Z[X]$ alors que pour :
\begin{center}{\tt quo(x\verb|^|3+3*x,2*x\verb|^|2+6*x+5) mod 5}\end{center}
la division est faite dans $\Z[X]$ puis est r\'eduite apr\`es :
\begin{center}{\tt 3*x-9}\end{center}
Si {\tt Xcas} n'est pas en mode Maple, la division des polyn\^omes dans 
$\Z/p\Z[X]$ se fait en tapant~:
\begin{center}
\verb|quo((x^3+3*x)% 5,(2x^2+6x+5)%5)|
\end{center}

\subsection{Reste euclidien : {\tt rem}}\index{rem|textbf}
\noindent{\tt rem} donne le reste de la division euclidienne de deux 
polyn\^omes (division selon les puissances d\'ecroissantes).\\
On peut donner les polyn\^omes soit par la liste de leurs coefficients selon 
les puissances d\'ecroissantes, soit sous leurs formes symboliques et dans ce 
cas la variable doit \^etre rajout\'ee comme troisi\`eme argument (par d\'efaut
la variable est {\tt x}).\\ 
On tape :
\begin{center}{\tt rem(x\verb|^|3-1,x\verb|^|2-1)}\end{center}
On obtient :
\begin{center}{\tt x-1}\end{center}
On tape :
\begin{center}{\tt rem(t\verb|^|3-1,t\verb|^|2-1,t)}\end{center}
On obtient :
\begin{center}{\tt t-1}\end{center}
On tape :
\begin{center}{\tt rem(x\verb|^|2+2x+1,x+3)}\end{center}
Ou on tape :
\begin{center}{\tt rem(t\verb|^|2+2t+1,t+3,t)}\end{center}
On obtient :
\begin{center}{\tt 4}\end{center}
ou on tape :
\begin{center}{\tt rem([1,2,1],[1,3])}\end{center}
On obtient :
\begin{center}{\tt [] 4}\end{center}
c'est \`a dire le polyn\^ome {\tt poly1[4]} ou encore le polyn\^ome {\tt 4}.\\
On tape pour avoir le reste de $x^3+2x+4$ par $x^2+x+2$ :
\begin{center}{\tt rem(x\verb|^|3+2x+4,x\verb|^|2+x+2)}\end{center}
On obtient :
\begin{center}{\tt x+6}\end{center}
Ou on tape :
\begin{center}{\tt  rem([1,0,2,4],[1,1,2])}\end{center}
On obtient :
\begin{center}{\tt [] 1,6[]}\end{center}
c'est \`a dire le polyn\^ome {\tt poly1[1,6]} ou encore le polyn\^ome 
{\tt x+6}.\\
On tape :
\begin{center}{\tt rem(t\verb|^|3+2t+4,t\verb|^|2+t+2,t)}\end{center}
On obtient :
\begin{center}{\tt t+6}\end{center}
On tape si on ne met pas la variable $t$ comme dernier argument :
\begin{center}{\tt rem(t\verb|^|3+2t+4,t\verb|^|2+t+2)}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
\subsection{Reste euclidien : {\tt Rem}}\index{Rem|textbf}
\noindent{\tt Rem} est la forme inerte de {\tt rem}.\\
{\tt Rem} renvoie le reste de la division euclidienne de deux 
polyn\^omes (division selon les puissances d\'ecroissantes) sans l'\'evaluer et
cela permet de calculer le reste euclidien de deux polyn\^omes \`a
coefficients dans $\Z/p\Z$ en utilisant la syntaxe Maple.\\
 {\bf Attention} il faut \^etre en mode Maple pour que cela soit efficace.\\
On tape, en mode {\tt Xcas} :
\begin{center}{\tt Rem(x\verb|^|3-1,x\verb|^|2-1)}\end{center}
On obtient :
\begin{center}{\tt rem(x\verb|^|3-1,x\verb|^|2-1)}\end{center}
On  peut aussi taper pour avoir le reste de $x^2+2x+4$ par $x^2+x+2$ :
\begin{center}{\tt  Rem([1,2,4],[1,1,2])}\end{center}
On obtient :
\begin{center}{\tt rem([1,2,4],[1,1,2])}\end{center}
En mode {\tt Maple} on tape :
\begin{center}{\tt Rem(x\verb|^|3+3*x,2*x\verb|^|2+6*x+5) mod 5}\end{center}
On obtient :
\begin{center}{\tt 2*x}\end{center}
La division est faite dans $\Z/5\Z[X]$ alors que pour :
\begin{center}{\tt rem(x\verb|^|3+3*x,2*x\verb|^|2+6*x+5) mod 5}\end{center}
la division est faite dans $\Z[X]$ puis est r\'eduite apr\`es :
\begin{center}{\tt 12*x}\end{center}
Si {\tt Xcas} n'est pas en mode Maple, la division des polyn\^omes dans 
$\Z/p\Z[X]$ se fait en tapant~:
\begin{center}\verb|rem((x^3+3*x)% 5,(2x^2+6x+5)%5)|
\end{center}

\subsection{Quotient et reste euclidien : {\tt quorem divide}}\index{quorem|textbf}\index{divide|textbf}\label{sec:quorem} 
\noindent{\tt quorem} (ou {\tt divide}) donne la liste, du quotient et du reste
 de la division euclidienne (selon les puissances d\'ecroissantes)  de deux 
polyn\^omes.\\
On peut donner les polyn\^omes soit par la liste de leurs coefficients selon 
les puissances d\'ecroissantes, soit sous leurs formes symboliques et dans ce 
cas la variable doit \^etre rajout\'ee comme troisi\`eme argument (par d\'efaut
la variable est {\tt x}).\\ 
On tape pour avoir le quotient et le reste de la division de $x^3+2x+4$ par 
$x^2+x+2$ :
\begin{center}{\tt quorem(x\verb|^|3+2x+4,x\verb|^|2+x+2)}\end{center}
On obtient :
\begin{center}{\tt [x-1,x+6]}\end{center}
Ou on tape :
\begin{center}{\tt quorem([1,0,2,4],[1,1,2]) }\end{center}
On obtient :
\begin{center}{\tt [[],-1[],[] 1,6[]]}\end{center}
c'est \`a dire la liste des polyn\^omes {\tt [poly1[1,-1],poly1[1,6]]} donc le 
quotient est le polyn\^ome {\tt x-1} et le reste est le polyn\^ome {\tt x+6}.\\
On tape :
\begin{center}{\tt quorem(t\verb|^|3+2t+4,t\verb|^|2+t+2,t)}\end{center}
On obtient :
\begin{center}{\tt [t-1,t+6]}\end{center}
On tape :
\begin{center}{\tt quorem(t\verb|^|3+2t+4,t\verb|^|2+t+2)}\end{center}
On obtient :
\begin{center}{\tt [(t\verb|^|3+2*t+4)/(t\verb|^|2+t+2),0]}\end{center}
On tape :
\begin{center}{\tt quorem(x\verb|^|3-1,x\verb|^|2-1)}\end{center}
On obtient :
\begin{center}{\tt [x,x-1]}\end{center}
On tape :
\begin{center}{\tt quorem(t\verb|^|3-1,t\verb|^|2-1,t)}\end{center}
On obtient :
\begin{center}{\tt [t,t-1]}\end{center}

\subsection{PGCD de polyn\^omes par l'algorithme d'Euclide : {\tt gcd,igcd}}\index{gcd}\index{igcd}\label{sec:gcd}
\noindent{\tt gcd} d\'esigne le PGCD (plus grand commun diviseur) de deux 
polyn\^omes pouvant avoir plusieurs variables et aussi le PGCD d'une liste de 
polyn\^omes ou d'une s\'equence de polyn\^omes pouvant avoir plusieurs 
variables (voir \ref{sec:igcd} pour le PGCD d'entiers).
n peut aussi mettre comme param\`etres deux listes de m\^eme longueur (ou une 
matrice ayant 2 lignes), dans ce 
cas {\tt  gcd} renvoie le PGCD des \'el\'ements de m\^eme indice (ou d'une 
m\^eme colonne).
On tape :
\begin{center}{\tt  gcd([x\verb|^|2-4,x*y-y],[x\verb|^|3-8,y\verb|^|2-x\verb|^|2*y])}\end{center}
Ou on tape :
\begin{center}{\tt  gcd([[x\verb|^|2-4,x*y-y],[x\verb|^|3-8,y\verb|^|2-x\verb|^|2*y]])}\end{center}
On obtient :
\begin{center}{\tt [x-2,y]}\end{center} 

{\bf Exemples}\\ 
On tape :
\begin{center}{\tt gcd(x\verb|^|2+2*x+1,x\verb|^|2-1)}\end{center}
On obtient :
\begin{center}{\tt x+1 }\end{center} 
On tape :
\begin{center}{\tt gcd(x\verb|^|2-2*x+1,x\verb|^|3-1,x\verb|^|2-1,x\verb|^|2+x-2)}\end{center}
ou
\begin{center}{\tt gcd([x\verb|^|2-2*x+1,x\verb|^|3-1,x\verb|^|2-1,x\verb|^|2+x-2])}\end{center}
On obtient :
\begin{center}{\tt x-1}\end{center}
On tape :
\begin{center}{\tt A:=z\verb|^|2+x\verb|^|2*y\verb|^|2*z\verb|^|2+(-(y\verb|^|2))*z\verb|^|2+(-(x\verb|^|2))*z\verb|^|2}\end{center}
\begin{center}{\tt B:=x\verb|^|3*y\verb|^|3*z+(-(y\verb|^|3))*z+x\verb|^|3*z-z}\end{center}
\begin{center}{\tt C:=gcd(A,B)}\end{center}
On obtient :
\begin{center}{\tt z*x*y+z*x-z*y-z}\end{center}
On tape :
\begin{center}{\tt factor(A)}\end{center}
On obtient :
\begin{center}{\tt (y-1)*(y+1)*(x-1)*(x+1)*z\verb|^|2}\end{center}
On tape :
\begin{center}{\tt factor(B)}\end{center}
On obtient :
\begin{center}{\tt (x\verb|^|2+x+1)*(x-1)*(y+1)*(y\verb|^|2-y+1)*z}\end{center}
On tape :
\begin{center}{\tt factor(C)}\end{center}
On obtient :
\begin{center}{\tt (y+1)*(x-1)*z}\end{center}

Pour les polyn\^omes \`a coefficients modulaire, on tape par exemple :
On tape :
\begin{center}{\tt gcd((x\verb|^|2+2*x+1) mod 5,(x\verb|^|2-1) mod 5)}\end{center} 
On obtient :
\begin{center}{\tt  x \% 5}\end{center}
Mais si on tape :
\begin{center}{\tt gcd(x\verb|^|2+2*x+1,x\verb|^|2-1) mod 5)}\end{center} 
On obtient :
\begin{center}{\tt 1}\end{center}
car l'op\'eration modilaire se fait apr\`es le calcul du PGCD qui a \`et\'e 
calcul\'e dans $\Z[X]$.

\subsection{PGCD de deux polyn\^omes par l'algorithme d'Euclide : {\tt Gcd}}\index{Gcd} \label{sec:Gcd}
\noindent{\tt Gcd} est la forme inerte de {\tt gcd}.\\
{\tt Gcd} renvoie le PGCD (plus grand commun diviseur) de deux 
polyn\^omes (ou d'une liste de polyn\^omes ou d'une s\'equence de polyn\^omes) 
(voir \ref{sec:igcd} pour le PGCD d'entiers), sans l'\'evaluer et
cela permet de calculer le PGCD de deux polyn\^omes \`a
coefficients dans $\Z/p\Z$ en utilisant la syntaxe Maple.\\
{\bf Attention} il faut \^etre en mode Maple pour que cela soit efficace.\\
On tape en mode {\tt Xcas} :
\begin{center}{\tt Gcd((x\verb|^|2+2*x)mod 5,(x\verb|^|2+6*x+5x) mod 5)}\end{center}
On obtient :
\begin{center}{\tt gcd((1\%5)*x\verb|^|2+(2\%5)*x,(1\%5)*x\verb|^|2+(1\%5)*x)}\end{center} 
puis on obtient :
\begin{center}{\tt (1\%5)*x}\end{center}
Mais si on  tape en mode {\tt Xcas} :
\begin{center}{\tt Gcd((x\verb|^|2+2*x),(x\verb|^|2+6*x+5x)) mod 5}\end{center}
On obtient :
\begin{center}{\tt (1\%5)*gcd(x\verb|^|2+2*x,x\verb|^|2++6*x+5x)}\end{center} 
puis :
\begin{center}{\tt (1\%5)}\end{center}

On tape en mode {\tt Maple} :
\begin{center}{\tt Gcd(x\verb|^|2+2*x,x\verb|^|2+6*x+5) mod 5}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
On tape :
\begin{center}{\tt gcd(x\verb|^|2+2*x,x\verb|^|2+x) mod 5}\end{center} 
On obtient :
\begin{center}{\tt x}\end{center}

\subsection{Choisir l'algorithme du PGCD de deux polyn\^omes : {\tt ezgcd heugcd modgcd psrgcd}}\index{ezgcd}\index{psrgcd}\index{modgcd}\index{heugcd}
\noindent{\tt ezgcd heugcd modgcd psrgcd} d\'esigne le PGCD (plus grand commun 
diviseur) de deux polyn\^omes (ou d'une liste de polyn\^omes ou d'une 
s\'equence de polyn\^omes) de plusieurs variables.\\
{\tt ezgcd} est calcul\'e avec l'algorithme ezgcd,\\
{\tt heugcd} est calcul\'e avec l'algorithme dit du pgcd heuristique,\\
{\tt modgcd} est calcul\'e avec l'algorithme modulaire,\\
{\tt psrgcd} est calcul\'e avec l'algorithme du sous r\'esultant.\\
On tape :
\begin{center}{\tt gcd(x\verb|^|2-2*x*y+y\verb|^|2-1,x-y)}\end{center}
ou
\begin{center}{\tt ezgcd(x\verb|^|2-2*x*y+y\verb|^|2-1,x-y)}\end{center}
ou
\begin{center}{\tt heugcd(x\verb|^|2-2*x*y+y\verb|^|2-1,x-y)}\end{center}
ou
\begin{center}{\tt modgcd(x\verb|^|2-2*x*y+y\verb|^|2-1,x-y)}\end{center}
ou
\begin{center}{\tt psrgcd(x\verb|^|2-2*x*y+y\verb|^|2-1,x-y)}\end{center}
On obtient :
\begin{center}{\tt 1 }\end{center} 
On tape :
\begin{center}{\tt gcd((x+y-1)*(x+y+1),(x+y+1)\verb|^|2)}\end{center}
ou
On tape :
\begin{center}{\tt ezgcd((x+y-1)*(x+y+1),(x+y+1)\verb|^|2)}\end{center}
ou
\begin{center}{\tt heugcd((x+y-1)*(x+y+1),(x+y+1)\verb|^|2)}\end{center}
ou
\begin{center}{\tt modgcd((x+y-1)*(x+y+1),(x+y+1)\verb|^|2)}\end{center}
On obtient :
\begin{center}{\tt x+y+1}\end{center}
On tape :
\begin{center}{\tt psrgcd((x+y-1)*(x+y+1),(x+y+1)\verb|^|2)}\end{center}
On obtient :
\begin{center}{\tt -x-y-1}\end{center}
On tape :
\begin{center}{\tt ezgcd((x+1)\verb|^|4-y\verb|^|4,(x+1-y)\verb|^|2)}\end{center}
On obtient :
\begin{center}{\tt "GCD not successfull Error: Bad Argument Value"}\end{center} 
Mais si on tape :
\begin{center}{\tt gcd((x+1)\verb|^|4-y\verb|^|4,(x+1-y)\verb|^|2)}\end{center}
ou 
\begin{center}{\tt heugcd((x+1)\verb|^|4-y\verb|^|4,(x+1-y)\verb|^|2)}\end{center}
ou 
\begin{center}{\tt modgcd((x+1)\verb|^|4-y\verb|^|4,(x+1-y)\verb|^|2)}\end{center}
ou 
\begin{center}{\tt psrgcd((x+1)\verb|^|4-y\verb|^|4,(x+1-y)\verb|^|2)}\end{center}
On obtient :
\begin{center}{\tt x-y+1 }\end{center} 

\subsection{PPCM de deux polyn\^omes : {\tt lcm}}\index{lcm}\label{sec:lcm}
\noindent{\tt lcm} d\'esigne le PPCM (plus petit commun multiple) de deux 
polyn\^omes pouvant avoir plusieurs variables et aussi le PPCM d'une liste de 
polyn\^omes ou d'une s\'equence de polyn\^omes pouvant avoir plusieurs 
variables (voir \ref{sec:ilcm} pour le PPCM d'entiers).\\
On tape :
\begin{center}{\tt lcm(x\verb|^|2+2*x+1,x\verb|^|2-1)}\end{center}
On obtient :
\begin{center}{\tt  (x+1)*(x\verb|^|2-1)}\end{center}
On tape :
\begin{center}{\tt lcm(x,x\verb|^|2+2*x+1,x\verb|^|2-1)}\end{center}
ou
\begin{center}{\tt lcm([x,x\verb|^|2+2*x+1,x\verb|^|2-1])}\end{center}
On obtient :
\begin{center}{\tt (x\verb|^|2+x)*(x\verb|^|2-1)}\end{center}
On tape :
\begin{center}{\tt A:=z\verb|^|2+x\verb|^|2*y\verb|^|2*z\verb|^|2+(-(y\verb|^|2))*z\verb|^|2+(-(x\verb|^|2))*z\verb|^|2}\end{center}
\begin{center}{\tt B:=x\verb|^|3*y\verb|^|3*z+(-(y\verb|^|3))*z+x\verb|^|3*z-z}\end{center}
\begin{center}{\tt D:=lcm(A,B)}\end{center}
On obtient :
\begin{center}{\tt (x*y*z-x*z+y*z-z)*(x\verb|^|3*y\verb|^|3*z+(-(y\verb|^|3))*z+x\verb|^|3*z-z)}\end{center}
On tape :
\begin{center}{\tt factor(A)}\end{center}
On obtient :
\begin{center}{\tt (y-1)*(y+1)*(x-1)*(x+1)*z\verb|^|2}\end{center}
On tape :
\begin{center}{\tt factor(B)}\end{center}
On obtient :
\begin{center}{\tt (x\verb|^|2+x+1)*(x-1)*(y+1)*(y\verb|^|2-y+1)*z}\end{center}
On tape :
\begin{center}{\tt factor(D)}\end{center}
On obtient :
\begin{center}{\tt (x-1)*(x+1)*(x\verb|^|2+x+1)*(y-1)*(y+1)*(y\verb|^|2-y+1)*z\verb|^|2}\end{center}

\subsection{Idendit\'e de B\'ezout : {\tt egcd gcdex}}\index{egcd}\index{gcdex}
Il s'agit de l'identit\'e de B\'ezout pour les polyn\^omes (Extended Greatest 
Common Divisor).\\
{\tt egcd} a 2 ou 3 arguments: les polyn\^omes $A$ and $B$ qui sont, 
soit sous la forme d'expressions d'une variable, (si la variable n'est pas
sp\'ecifi\'ee c'est $x$), soit donn\'e par la liste de leurs coefficients par 
ordre de puissances d\'ecroissantes.\\
Etant donn\'es 2 polyn\^omes $A(x),B(x)$, {\tt egcd} ou {\tt gcdex} renvoie  
3 polyn\^omes {\tt [U(x),V(x),D(x)]} v\'erifiant :
\begin{center}{\tt U(x)*A(x)+V(x)*B(x)=D(x)=PGCD(A(x),B(x))}\end{center} 
On tape :
\begin{center}{\tt egcd(x\verb|^|2+2*x+1,x\verb|^|2-1)}\end{center}
On obtient :
\begin{center}{\tt  [1,-1,2*x+2]}\end{center}
On tape :
\begin{center}{\tt egcd([1,2,1],[1,0,-1])}\end{center}
On obtient :
\begin{center}{\tt  [[1],[-1],[2,2]]}\end{center}
On tape :
\begin{center}{\tt egcd(t\verb|^|2+2*t+1,t\verb|^|2-1,t)}\end{center}
On obtient :
\begin{center}{\tt  [1,-1,2*t+2]}\end{center}
On tape :
\begin{center}{\tt egcd(x\verb|^|2-2*x+1,x\verb|^|2-x+2)}\end{center}
On obtient :
\begin{center}{\tt  [x-2,-x+3,4]}\end{center}
On tape :
\begin{center}{\tt egcd([1,-2,1],[1,-1,2])}\end{center}
On obtient :
\begin{center}{\tt [[1,-2],[-1,3],[4]]}\end{center}
On tape :
\begin{center}{\tt egcd(t\verb|^|2-2*t+1,t\verb|^|2-t+2,t)}\end{center}
On obtient :
\begin{center}{\tt  [t-2,-t+3,4]}\end{center}

\subsection{R\'esolution polyn\^omiale de au+bv=c : {\tt abcuv}}\index{abcuv}
Il s'agit encore de l'identit\'e de B\'ezout.\\ 
{\tt abcuv} r\'esout l'\'equation  polyn\^omiale
\[ C(x)=U(x)*A(x)+V(x)*B(x) \]
dans laquelle les inconnues sont les polyn\^omes $U$ et $V$ et les param\`etres
sont les trois polyn\^omes, $A, B, C$ o\`u $C$ doit \^etre un multiple du PGCD 
de $A$ et $B$. \\
{\tt abcuv} a comme argument 3 expressions polyn\^omiales $A, B, C$ et le nom 
de leur variable (par d\'efaut $x$) (resp 3 listes repr\'esentant les 
coefficients par puissances d\'ecroisantes de 3 polyn\^omes $A, B, C$).
{\tt abcuv} renvoie la liste de 2 expressions polyn\^omiales $U$ et $V$ (resp 
de 2 listes quisont les coefficients par puissances d\'ecroisantes de $U$ et 
$V$).\\
On tape :
\begin{center}{\tt abcuv(x\verb|^|2+2*x+1 ,x\verb|^|2-1,x+1)}\end{center}
On obtient :
\begin{center}{\tt [1/2,1/-2]}\end{center}
On tape :
\begin{center}{\tt abcuv(x\verb|^|2+2*x+1 ,x\verb|^|2-1,x\verb|^|3+1)}\end{center}
On obtient :
\begin{center}{\tt [1/2*x\verb|^|2+1/-2*x+1/2,-1/2*x\verb|^|2-1/-2*x-1/2]}\end{center}
On tape :
\begin{center}{\tt abcuv([1,2,1],[1,0,-1],[1,0,0,1])}\end{center}
On obtient :
\begin{center}{\tt [poly1[1/2,1/-2,1/2],poly1[1/-2,1/2,1/-2]]}\end{center}

\subsection{Les restes chinois : {\tt chinrem}}\index{chinrem}
\noindent{\tt chinrem} a comme argument deux listes ayant chacun comme 
composantes deux  polyn\^omes \'eventuellement donn\'es par la liste de leurs 
coefficients par ordre d\'ecroissant.\\
{\tt chinrem} renvoie une liste de composantes deux  polyn\^omes.\\
{\tt chinrem([A,R],[B,Q])} renvoie la liste des polyn\^omes  
{\tt P} et {\tt S} v\'erifiant :\\
\[  S=R.Q, \quad  P=A \pmod R, P=B \pmod Q \]
Il existe toujours une solution 
{\tt P} si {\tt R} et {\tt Q} sont premiers entre eux, et toutes les
 solutions sont congrues modulo {\tt S=R*Q}   \\
Trouver les solutions $P(x)$ de :
$${\tt \left \{ \begin{array}{rlr} P(x)=&x\ &\bmod\ (x^2+1)\\ P(x)=&x-1\ &\bmod\ (x^2-1) \end{array}\right.}$$
On tape :
\begin{center}{\tt chinrem([[1,0],[1,0,1]],[[1,-1],[1,0,-1]])}\end{center}
On obtient :
\begin{center}{\tt [[1/-2,1,1/-2],[1,0,0,0,-1]]}\end{center}
ou on  tape :
\begin{center}{\tt chinrem([x,x\verb|^|2+1],[x-1,x\verb|^|2-1])}\end{center}
On obtient :
\begin{center}{\tt [1/-2*x\verb|^|2+x+1/-2,x\verb|^|4-1]}\end{center}
donc $\displaystyle P(x)=-\frac{x^2-2.x+1}{2} \ (\bmod\  x^4-1)$\\
Autre exemple :\\
On tape :
\begin{center}{\tt chinrem([[1,2],[1,0,1]],[[1,1],[1,1,1]])}\end{center}
On obtient :
\begin{center}{\tt [[-1,-1,0,1],[1,1,2,1,1]]}\end{center}
ou on  tape :
\begin{center}{\tt chinrem([x+2,x\verb|^|2+1],[x+1,x\verb|^|2+x+1])}\end{center}
On obtient :
\begin{center}{\tt [-x\verb|^|3-x\verb|^|2+1,x\verb|^|4+x\verb|^|3+2*x\verb|^|2+x+1]}\end{center}

\subsection{Polyn\^ome cyclotomique : {\tt cyclotomic}}\index{cyclotomic}
\noindent{\tt cyclotomic} a comme param\`etre un entier $n$.\\
{\tt cyclotomic} renvoie la liste des coefficients du polyn\^ome cyclotomique 
d'ordre $n$.
C'est le polyn\^ome dont les  z\'eros sont toutes les racines $n$-{i\`eme} et
primitives de l'unit\'e (une racine $n$-{i\`eme} de l'unit\'e  est primitive 
si ses puissances engendrent toutes 
les autres racines  $n$-{i\`eme} de l'unit\'e).\\
Par exemple pour $n=4$, les racines quatri\`eme de l'unit\'e sont :
$\{ 1,i,-1,-i\}$,\\ 
et les racines primitives sont : $\{i,-i\}$.\\
Donc le polyn\^ome cyclotomique d'ordre $4$ est $(x-i).(x+i)=x^2+1$.\\
On tape :
\begin{center}{\tt cyclotomic(4)}\end{center}
On obtient :
\begin{center}{\tt [1,0,1]}\end{center}
On tape :
\begin{center}{\tt cyclotomic(5)}\end{center}
On obtient :
\begin{center}{\tt [1,1,1,1,1]}\end{center}
Donc le polyn\^ome cyclotomique d'ordre $5$ est $x^4+x^3+x^2+x+1$ et on a 
$(x-1)*(x^4+x^3+x^2+x+1)=x^5-1$.\\
On tape :
\begin{center}{\tt cyclotomic(10)}\end{center}
On obtient :
\begin{center}{\tt [1,-1,1,-1,1]}\end{center}
Donc le polyn\^ome cyclotomique d'ordre $10$ est $x^4-x^3+x^2-x+1$ et on a 
\[ (x^5-1)*(x+1)*(x^4-x^3+x^2-x+1)=x^{10}-1 \]
On tape :
\begin{center}{\tt cyclotomic(20)}\end{center}
On obtient :
\begin{center}{\tt [1,0,-1,0,1,0,-1,0,1]}\end{center}
Donc le polyn\^ome cyclotomique d'ordre $20$ est $x^8-x^6+x^4-x^2+1$ et on a 
\[ (x^{10}-1)*(x^2+1)*(x^8-x^6+x^4-x^2+1)=x^{20}-1 \]

\subsection{Suites de Sturm et nombre de de changements de signe de $P$ sur $]a;\ b]$ : {\tt sturm}}\index{sturm}
\noindent{\tt sturm} a deux ou quatre param\`etres : une expression 
polyn\^omiale $P$ ou une fraction rationnelle $P/Q$ et le nom de la variable ou
une  expression polyn\^omiale $P$, le nom de la variable et deux nombres $a$ et
$b$.

Lorsqu'il y a 2 param\`etres {\tt sturm} renvoie la liste des suites de Sturm 
et de leur multiplicit\'e pour $P$ ou pour $P$ et pour $Q$ ({\tt sturm} est 
alors identique \`a {\tt sturmseq}).

Lorsqu'il y a 4 param\`etres {\tt sturm}, se comporte comme {\tt sturmab}~: 
\begin{itemize}
\item si $a$ et $b$ sont r\'eels, {\tt sturm} renvoie le nombre de changements 
de signe de $P$ sur $]a;\ b]$ 
\item  si $a$ ou $b$ est complexe, {\tt sturm} renvoie le nombre de racines 
complexes \`a l'int\'erieur du rectangle de sommets oppos\'es $a$ et $b$. 
\end{itemize} 
On tape :
\begin{center}{\tt sturm(2*x\verb|^|3+2,x)}\end{center}
On obtient :
\begin{center}{\tt [2,[[1,0,0,1],[3,0,0],-9],1]}\end{center}
On tape :
\begin{center}{\tt sturm((2*x\verb|^|3+2)/(x+2),x)}\end{center}
On obtient :
\begin{center}{\tt [2,[[1,0,0,1],[3,0,0],-9],1,[[1,2],1]]}\end{center}
On tape :
\begin{center}{\tt sturm(x\verb|^|2*(x\verb|^|3+2),x,-2,0)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}

\subsection{Nombre de racines sur $]a;\ b]$ : {\tt sturmab}}\index{sturmab}
\noindent{\tt sturmab} a quatre param\`etres : une expression polyn\^omiale 
$P$, le nom de la variable et deux nombres $a$ et $b$.
\begin{itemize}
\item si $a$ et $b$ sont r\'eels,
{\tt sturmab} renvoie soit un nombre strictement positif qui
est le nombre de changements de signe de $P$ sur $]a;\ b]$,
soit 0 si $P$ reste de signe constant positif sur $]a;\ b]$,
soit -1 si $P$ reste de signe constant n\'egatif sur $]a;\ b]$.
Ainsi, {\tt sturmab} permet d'avoir le nombre de racines sur $[a,b[$
du polyn\^ome $P/G$ avec $G=\mbox{gcd}(P,\mbox{diff}(P))$.

\item  si $a$ ou $b$ est complexe,
le nombre de racines complexes \`a 
l'int\'erieur du rectangle de sommets oppos\'es $a$ et $b$.
\end{itemize} 
On tape :
\begin{center}{\tt sturmab(x\verb|^|2*(x\verb|^|3+2),x,-2,0)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
On tape :
\begin{center}{\tt sturmab(x\verb|^|3-1,x,-2-i,5+3i}\end{center}
On obtient :
\begin{center}{\tt 3}\end{center}
On tape :
\begin{center}{\tt sturmab(x\verb|^|3-1,x,-i,5+3i}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
{\bf Attention!!!!}\\
 $P$ doit \^etre donn\'e par son expression symbolique et, si on tape :\\
{\tt sturmab([1,0,0,2,0,0],x,-2,0)},\\ 
on obtient :\\
{\tt Bad argument type}.

\subsection{Suites de Sturm : {\tt sturmseq}}\index{sturmseq}
\noindent{\tt sturmseq} a comme param\`etre une expression polyn\^omiale $P$ 
ou une fraction rationnelle $P/Q$.\\
{\tt sturmseq} renvoie la liste des suites de Sturm et de leur multiplicit\'e 
pour $P$ ou pour $P$ et pour $Q$.\\
La suite de sturm $R_1,R_2,...$ est obtenue à partir du facteur $F$
sans carr\'e de $P$. Pour obtenir $F$ \`a partir de la d\'ecomposition de $P$
 en facteurs premiers, on \'elimine les termes carr\'es et on 
transforme les puissances impaires en puissances 1.\\
$R_1$ est l'oppos\'e du  reste de la division euclidienne de $F$ par $F'$ puis, $R_2$ est l'oppos\'e du  reste de la division euclidienne de $F'$ par $R_1$\\
....\\
et ainsi de suite jusqu'à ce que $R_k=0$.\\
On tape :
\begin{center}{\tt sturmseq(2*x\verb|^|3+2)}\end{center}
ou 
\begin{center}{\tt sturmseq(2*y\verb|^|3+2,y)}\end{center}
On obtient :
\begin{center}{\tt [2,[[1,0,0,1],[3,0,0],-9],1]}\end{center}
Le premier terme donne le PGCD des coefficients du num\'erateur (ici 2), 
le dernier terme donne le d\'enominateur (ici 1). Entre les deux on a la 
suite des polyn\^omes $[x^3+1,3x^2,-9]$.\\
On tape :
\begin{center}{\tt sturmseq((12*x\verb|^|3+4)/(6*x\verb|^|2+3),x)}\end{center}
On obtient :
\begin{center}{\tt [4,[[3,0,0,1],[9,0,0],-81],3,[[2,0,1],[4,0],-16]]}\end{center}
Le premier terme donne le PGCD des coefficients du num\'erateur (ici 4),
puis la suite de Sturm du num\'erateur ([[3,0,0,1],[9,0,0],-81]), puis le 
le PGCD des coefficient du d\'enominateur (ici 3), et la suite de Sturm du 
d\'enominateur ([[2,0,1],[4,0],-16]).  
On a la suite des polyn\^omes $[3x^3+1,9x^2, -81]$ pour le num\'erateur et,
$[2x^2+1,4x,-16]$ pour le d\'enominateur.\\
On tape :
\begin{center}{\tt sturmseq((x\verb|^|3+1)\verb|^|2,x)}\end{center}
On obtient :
\begin{center}{\tt [1,1]}\end{center}
En effet les termes carr\'es sont \'elimin\'es et $F=1$.\\
On tape :
\begin{center}{\tt sturmseq(3*(3*x\verb|^|3+1)/(2*x+2),x)}\end{center}
On obtient :
\begin{center}{\tt[3,[[3,0,0,1],[9,0,0],-81],2,[[1,1],1]]}\end{center}
Le premier terme donne le PGCD des coefficients du num\'erateur 
(ici {\tt 3}),\\
le deuxi\`eme terme donne la suite de polyn\^omes (ici 
{\tt 3x\verb|^|3+1, 9x\verb|^|2, -81}),\\
le troisi\`eme terme donne le PGCD des coefficients du d\'enominateur (ici 
{\tt 2}),\\
le quatri\`eme  terme indique la suite de polyn\^omes du d\'enominateur 
({\tt x+1,1}).\\
{\bf Attention!!!!}\\
  $P$ doit \^etre donn\'e par son expression symbolique et,si on tape :\\
{\tt sturmseq([1,0,0,1],x)},\\ 
on obtient :\\
{\tt Bad argument type}.

\subsection{Matrice de Sylvester de deux polyn\^omes : {\tt sylvester}}\index{sylvester}
\noindent{\tt sylvester} a comme arguments deux polyn\^omes.\\
{\tt sylvester} renvoie la matrice $S$ de Sylvester des deux polyn\^omes.\\
Pour deux polyn\^omes $A(x)=\sum_{i=0}^{i=n} a_ix^i$ et 
$B(x)=\sum_{i=0}^{i=m}b_ix^i$, la  matrice {\tt S} de Sylvester est une matrice
carr\'ee de dimensiom {\tt m+n} dont les {\tt m=degree(B(x))} premi\`eres 
lignes sont  compos\'ees à partir des coefficients de $A(x)$ :
$$\left(\begin{array}{ccccccc}
s_{11}=a_n & s_{12}=a_{n-1}& \cdots & s_{1(n+1)}=a_0 & 0 & \cdots & 0\\
s_{21}=0 & s_{22}=a_{n}& \cdots & s_{2(n+1)}=a_1 & s_{2(n+2)}=a_0 & \cdots & 0\\
\vdots &\vdots &\vdots &\ddots &\vdots &\ddots &\vdots\\
s_{m1}=0 & s_{m2}=0& \cdots & s_{m(n+1)}=a_{m-1} & s_{m(n+2)}=a_{m-2} & \cdots&a_0 
\end{array}\right)$$
et les {\tt n=degree(A(x))} lignes  suivantes sont compos\'ees de la m\^eme 
façon à partir des coefficients de {\tt B(x)} :
$$\left(\begin{array}{ccccccc}
s_{(m+1)1}=b_m & s_{(m+1)2}=b_{m-1}& \cdots & s_{(m+1)(m+1)}=b_0 & 0 & \cdots & 0\\
\vdots &\vdots &\vdots &\ddots &\vdots &\ddots &\vdots\\
s_{(m+n)1}=0 & s_{(m+n)2}=0& \cdots & s_{(m+n)(m+1)}=b_{n-1}  & b_{n-2}  &\cdots&b_0 
\end{array}\right)$$
On tape :
\begin{center}{\tt sylvester(x\verb|^|3-p*x+q,3*x\verb|^|2-p,x)}\end{center}
On obtient :
\begin{center}{\tt [[1,0,-p,q,0],[0,1,0,-p,q],[3,0,-p,0,0], [0,3,0,-p,0],[0,0,3,0,-p]]}\end{center}
On tape :
\begin{center}{\tt det([[1,0,-p,q,0],[0,1,0,-p,q],[3,0,-p,0,0], [0,3,0,-p,0],[0,0,3,0,-p]])}\end{center}
On obtient :
\begin{center}{\tt -4*p\verb|^|3--27*q\verb|^|2}\end{center}

\subsection{R\'esultant de deux polyn\^omes : {\tt resultant}}\index{resultant}
\noindent{\tt resultant} a comme arguments deux polyn\^omes.\\
{\tt resultant} renvoie le r\'esultant des deux polyn\^omes.\\
Le r\'esultant est le dernier reste non nul de l'algorithme d'Euclide et c'est
aussi le d\'eterminant de la matrice $S$ de Sylvester.\\
Pour les deux polyn\^omes $A(x)=\sum_{i=0}^{i=n} a_ix^i$ et 
$B(x)=\sum_{i=0}^{i=m}b_ix^i$, la  matrice $S$ de Sylvester est une matrice 
carr\'ee de dimensiom $m+n$ dont les $m$ premi\`eres lignes sont  compos\'ees à
partir des coefficients de $A(x)$ :
$$\left(\begin{array}{ccccccc}
s_{11}=a_n & s_{12}=a_{n-1}& \cdots & s_{1(n+1)}=a_0 & 0 & \cdots & 0\\
s_{21}=0 & s_{22}=a_{n}& \cdots & s_{2(n+1)}=a_1 & s_{2(n+2)}=a_0 & \cdots & 0\\
\vdots &\vdots &\vdots &\ddots &\vdots &\ddots &\vdots\\
s_{m1}=0 & s_{m2}=0& \cdots & s_{m(n+1)}=a_{m-1} & s_{m(n+2)}=a_{m-2} & \cdots&a_0 
\end{array}\right)$$
et les $n$ lignes  suivantes sont compos\'ees de la m\^eme façon à partir des coefficients de $B(x)$ :
$$\left(\begin{array}{ccccccc}
s_{(m+1)1}=b_m & s_{(m+1)2}=b_{m-1}& \cdots & s_{(m+1)(m+1)}=b_0 & 0 & \cdots & 0\\
\vdots &\vdots &\vdots &\ddots &\vdots &\ddots &\vdots\\
s_{(m+n)1}=0 & s_{(m+n)2}=0& \cdots & s_{(m+n)(m+1)}=b_{n-1}  & b_{n-2}  &\cdots&b_0 
\end{array}\right)$$
On tape :
\begin{center}{\tt resultant(x\verb|^|3-p*x+q,3*x\verb|^|2-p,x)}\end{center}
On obtient :
\begin{center}{\tt -4*p\verb|^|3--27*q\verb|^|2}\end{center}
{\bf Remarque}\\
On a : discriminant(P)=resultant(P,P').

{\bf Un exemple d'utilisation du r\'esultant}\\
Soient 2 points fixes $F1$ et $F2$ et un point variable $A$ sur le cercle de 
centre $F1$ et de rayon $2a$.
On veut trouver l'\'equation cart\'esienne du lieu des points $M$ intersection de
$F1A$ et de la m\'ediatrice de $F2A$ : on a $MF1+MF2=MF1+MA=F1A=2a$ donc $M$ 
d\'ecrit une ellipse de foyers $F1$ et $F2$ et de grand axe $2a$.\\
Choisisons comme rep\`ere orthonorm\'e celui de centre $F1$ et d'axe $Ox$ 
port\'e par le vecteur $\overrightarrow{F1F2}$. On a :\\
$A= (2a\cos(\theta);2a\sin(\theta))$ o\`u $\theta$ est l'angle $(Ox,OA)$.
On choisit comme param\`etre $t=\tan(\theta/2)$ pour que les coordonn\'ees de 
$A$ soient une fonction rationnelle du param\`etre $t$. On a donc :\\
$\displaystyle A=(ax;ay)=(2a\frac{1-t^2}{1+t^2};2a\frac{2t}{1+t^2})$\\
On pose $F1F2=2c$ et on note $I$ le milieu de $AF2$. On a :\\
$F2=(2c,0)$ et \\
$\displaystyle I=(c+ax/2;ay/2)=(c+a\frac{1-t^2}{1+t^2};a\frac{2t1-t^2}{1+t^2})$\\
$IM$ est perpendiculaire \`a $AF2$ donc $M=(x;y)$ v\'erifie l'\'equation 
$eq1=0$ avec :\\
$eq1:=(x-ix)*(ax-2*c)+(y-iy)*ay$\\
$M=(x;y)$ est sur $F1A$ donc $M$ v\'erifie l'\'equation $eq2=0$ avec :\\
$eq2:=y/x-ay/ax$\\
On a :\\
{\tt resultant(eq1,eq2,t)} est un polyn\^ome $eq3$ en $x$ et $y$, $eq3$ est 
ind\'ependant de $t$ et il existe des polyn\^omes en $t$, $U$ et $V$ tels que :
$U(t)*eq1+V(t)*eq2=eq3$.\\
On tape :\\
{\tt ax:=2*a*(1-t\verb|^|2)/(1+t\verb|^|2);ay:=2*a*2*t/(1+t\verb|^|2);}\\
{\tt ix:=(ax+2*c)/2; iy:=(ay/2)}\\
{\tt eq1:=(x-ix)*(ax-2*c)+(y-iy)*ay}\\
{\tt eq2:=y/x-ay/ax}\\
{\tt factor(resultant(eq1,eq2,t))}\\
On obtient comme r\'esultant :\\
{\tt -(64$\cdot$(x\verb|^|2+y\verb|^|2)$\cdot$(x\verb|^|2$\cdot$a\verb|^|2-x\verb|^|2$\cdot$c\verb|^|2+-2$\cdot$x$\cdot$a\verb|^|2$\cdot$c+2$\cdot$x$\cdot$c\verb|^|3-a\verb|^|4+\\2$\cdot$a\verb|^|2$\cdot$c\verb|^|2+a\verb|^|2$\cdot$ y\verb|^|2-c\verb|^|4))}\\
Le facteur {\tt -64$\cdot$(x\verb|^|2+y\verb|^|2)} ne s'annule jamais donc 
l'\'equation du lieu est :
$$x^2a^2-x^2c^2+-2xa^2c+2xc^3-a^4+2a^2c^2+a^2y^2-c^4=0$$
En prenant l'origine du rep\`ere en $O$ milieu de $F1F2$, on retrouve 
l'\'equation cart\'esienne de l'ellipse. Pour faire ce changement d'origine, 
on a $\overrightarrow{F1M}=\overrightarrow{F1O}+\overrightarrow{OM}$, donc on 
tape :\\  
{\tt normal(subst(x\verb|^|2$\cdot$a\verb|^|2-x\verb|^|2$\cdot$c\verb|^|2+-2$\cdot$ x$\cdot$a\verb|^|2$\cdot$c+2$\cdot$x$\cdot$c\verb|^|3-a\verb|^|4+\\2$\cdot$a\verb|^|2$\cdot$c\verb|^|2+a\verb|^|2$\cdot$y\verb|^|2-c\verb|^|4,[x,y]=[c+X,Y]))}\\
On obtient :\\
{\tt -c\verb|^|2*X\verb|^|2+c\verb|^|2*a\verb|^|2+X\verb|^|2*a\verb|^|2-a\verb|^|4+a\verb|^|2*Y\verb|^|2}\\
ou encore si on pose $b^2=a^2-c^2$ \\
{\tt normal(subst(-c\verb|^|2*X\verb|^|2+c\verb|^|2*a\verb|^|2+X\verb|^|2*a\verb|^|2-a\verb|^|4+a\verb|^|2*Y\verb|^|2,c\verb|^|2=a\verb|^|2-b\verb|^|2))}\\
On obtient :\\
{\tt -a\verb|^|2*b\verb|^|2+a\verb|^|2*Y\verb|^|2+b\verb|^|2*X\verb|^|2}\\
c'est \`a dire apr\`es division par $a^2b^2$, $M$ v\'erifie l'\'equation :
$$\frac{X^2}{a^2}+\frac{Y^2}{b^2}=1$$

{\bf Un autre exemple d'utilisation du r\'esultant}\\
Soient 2 points fixes $F1$ et $F2$ et un point variable $A$ sur le cercle de 
centre $F1$ et de rayon $2a$.
On veut trouver l'\'equation cart\'esienne de l'enveloppe de la m\'ediatrice $D$
de $F2A$ (on sait que la m\'ediatrice de $F2A$ est tangente \`a l'ellipse de 
foyers $F1$ et $F2$ et de grand axe $2a$).\\
Choisisons comme rep\`ere orthonorm\'e celui de centre $F1$ et d'axe $Ox$ 
port\'e par le vecteur $\overrightarrow{F1F2}$. On a :\\
$A= (2a\cos(\theta);2a\sin(\theta))$ o\`u $\theta$ est l'angle $(Ox,OA)$.
On choisit comme param\`etre $t=\tan(\theta/2)$ pour que les coordonn\'ees de 
$A$ soient une fonction rationnelle du param\`etre $t$. On a donc :\\
$\displaystyle A=(ax;ay)=(2a\frac{1-t^2}{1+t^2};2a\frac{2t}{1+t^2})$\\
On pose $F1F2=2c$ et on note $I$ le milieu de $AF2$. On a :\\
$F2=(2c,0)$ et \\
$\displaystyle I=(c+ax/2;ay/2)=(c+a\frac{1-t^2}{1+t^2};a\frac{2t1-t^2}{1+t^2})$\\
$D$ est perpendiculaire \`a $AF2$ donc $D$ a pour \'equation :
$eq1=0$ avec :\\
$eq1:=(x-ix)*(ax-2*c)+(y-iy)*ay$\\
L'enveloppe de $D$ est donc le lieu de $M$ intersection de $D$ et de $D'$ 
d'\'equation $eq2=0$ avec $eq2:=diff(eq1,t)$.\\
On tape :\\
{\tt ax:=2*a*(1-t\verb|^|2)/(1+t\verb|^|2);ay:=2*a*2*t/(1+t\verb|^|2);}\\
{\tt ix:=(ax+2*c)/2; iy:=(ay/2)}\\
{\tt eq1:=normal((x-ix)*(ax-2*c)+(y-iy)*ay)}\\
{\tt eq2:=normal(diff(eq1,t))}\\
{\tt factor(resultant(eq1,eq2,t))}\\
On obtient comme r\'esultant :\\
{\tt (-(64$\cdot$ a\verb|^|2))$\cdot$(x\verb|^|2+y\verb|^|2)$\cdot$(x\verb|^|2$\cdot$a\verb|^|2-x\verb|^|2$\cdot$c\verb|^|2+-2$\cdot$x$\cdot$a\verb|^|2$\cdot$c+2$\cdot$x$\cdot$c\verb|^|3- \\a\verb|^|4+2$\cdot$a\verb|^|2$\cdot$c\verb|^|2+a\verb|^|2$\cdot$y\verb|^|2-c\verb|^|4)}\\
Le facteur {\tt -64$\cdot$(x\verb|^|2+y\verb|^|2)} ne s'annule jamais donc l'\'equation du 
lieu est :\\
$x^2a^2-x^2c^2+-2xa^2c+2xc^3-a^4+2a^2c^2+a^2y^2-c^4=0$\\
En prenant l'origine du rep\`ere en $O$ milieu de $F1F2$, on retrouve comme
pr\'ec\'edemment l'\'equation cart\'esienne de l'ellipse :
$$\frac{X^2}{a^2}+\frac{Y^2}{b^2}=1$$ 

\section{Polyn\^omes orthogonaux}
\subsection{Polyn\^ome de Legendre : {\tt legendre}}\index{legendre}
\noindent{\tt legendre} a comme argument un entier $n$ et eventuellement le 
nom de la variable ($x$ par d\'efaut).\\
{\tt legendre} renvoie le polyn\^ome de Legendre de degr\'e $n$ : c'est le 
polyn\^ome non nul, solution de l'\'equation diff\'er
