<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
<!ENTITY app "<application>Genius Mathematics Tool</application>">
<!ENTITY appname "Genius">
<!ENTITY appversion "1.0.15">
<!ENTITY date "March 2012">
<!ENTITY legal SYSTEM "legal.xml">
<!ENTITY manrevision "0.2">
<!ENTITY lt "&#60;">
<!ENTITY gt "&#62;">
<!ENTITY le "&#8804;">
<!ENTITY ge "&#8805;">
<!ENTITY lsquo "&#8216;">
<!ENTITY rsquo "&#8217;">
<!ENTITY gel-function-list SYSTEM "gel-function-list.xml">
]>
<!-- 
      (Do not remove this comment block.)
  Maintained by the GNOME Documentation Project
  http://developer.gnome.org/projects/gdp
  Template version: 2.0 beta
  Template last modified Apr 11, 2002
-->
<!-- =============Document Header ============================= -->
<book id="index" lang="fr">
<!-- please do not change the id; for translations, change lang to -->
<!-- appropriate code -->
  <bookinfo>
	  <abstract role="description"><para>Manuel de l'Outil de maths Genius.</para></abstract>
    <title>Manuel de Genius</title>       

    <copyright>
      <year>1997-2012</year>
      <holder>Jiří (George) Lebl</holder>
    </copyright>
    <copyright>
      <year>2004</year>
      <holder>Kai Willadsen</holder>
    </copyright><copyright><year>2010-11</year><holder>Bruno Brouard (annoa.b@gmail.com)</holder></copyright><copyright><year>2011</year><holder>Luc Pionchon (pionchon.luc@gmail.com)</holder></copyright>
<!-- translators: uncomment this:
  <copyright>
   <year>2002</year>
   <holder>ME-THE-TRANSLATOR (Latin translation)</holder>
  </copyright>
-->

    <publisher> 
      <publishername/> 
    </publisher> 

     <legalnotice id="legalnotice">
	<para>Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, Version 1.1 ou ultérieure publiée par la Free Software Foundation sans section inaltérable, sans texte de première page de couverture ni texte de dernière page de couverture. Vous trouverez un exemplaire de cette licence en suivant ce <ulink type="help" url="ghelp:fdl">lien</ulink> ou dans le fichier COPYING-DOCS fourni avec le présent manuel.</para>
         <para>Ce manuel fait partie de la collection de manuels GNOME distribués selon les termes de la licence de documentation libre GNU. Si vous souhaitez distribuer ce manuel indépendamment de la collection, vous devez joindre un exemplaire de la licence au document, comme indiqué dans la section 6 de celle-ci.</para>

	<para>La plupart des noms utilisés par les entreprises pour distinguer leurs produits et services sont des marques déposées. Lorsque ces noms apparaissent dans la documentation GNOME et que les membres du projet de Documentation GNOME sont informés de l'existence de ces marques déposées, soit ces noms entiers, soit leur première lettre est en majuscule.</para>

	<para>LE PRÉSENT DOCUMENT ET SES VERSIONS MODIFIÉES SONT FOURNIS SELON LES TERMES DE LA LICENCE DE DOCUMENTATION LIBRE GNU SACHANT QUE : <orderedlist>
		<listitem>
		  <para>LE PRÉSENT DOCUMENT EST FOURNI « TEL QUEL », SANS AUCUNE GARANTIE, EXPRESSE OU IMPLICITE, Y COMPRIS, ET SANS LIMITATION, LES GARANTIES DE MARCHANDABILITÉ, D'ADÉQUATION À UN OBJECTIF PARTICULIER OU DE NON INFRACTION DU DOCUMENT OU DE SA VERSION MODIFIÉE. L'UTILISATEUR ASSUME TOUT RISQUE RELATIF À LA QUALITÉ, À LA PERTINENCE ET À LA PERFORMANCE DU DOCUMENT OU DE SA VERSION DE MISE À JOUR. SI LE DOCUMENT OU SA VERSION MODIFIÉE S'AVÉRAIT DÉFECTUEUSE, L'UTILISATEUR (ET NON LE RÉDACTEUR INITIAL, L'AUTEUR, NI TOUT AUTRE PARTICIPANT) ENDOSSERA LES COÛTS DE TOUTE INTERVENTION, RÉPARATION OU CORRECTION NÉCESSAIRE. CETTE DÉNÉGATION DE RESPONSABILITÉ CONSTITUE UNE PARTIE ESSENTIELLE DE CETTE LICENCE. AUCUNE UTILISATION DE CE DOCUMENT OU DE SA VERSION MODIFIÉE N'EST AUTORISÉE AUX TERMES DU PRÉSENT ACCORD, EXCEPTÉ SOUS CETTE DÉNÉGATION DE RESPONSABILITÉ ; </para>
		</listitem>
		<listitem>
		  <para>EN AUCUNE CIRCONSTANCE ET SOUS AUCUNE INTERPRÉTATION DE LA LOI, QU'IL S'AGISSE D'UN DÉLIT CIVIL (Y COMPRIS LA NÉGLIGENCE), CONTRACTUEL OU AUTRE, L'AUTEUR, LE RÉDACTEUR INITIAL, TOUT PARTICIPANT OU TOUT DISTRIBUTEUR DE CE DOCUMENT OU DE SA VERSION MODIFIÉE, OU TOUT FOURNISSEUR DE L'UNE DE CES PARTIES NE POURRA ÊTRE TENU RESPONSABLE À L'ÉGARD DE QUICONQUE POUR TOUT DOMMAGE DIRECT, INDIRECT, PARTICULIER, OU ACCIDENTEL DE TOUT TYPE Y COMPRIS, SANS LIMITATION, LES DOMMAGES LIÉS À LA PERTE DE CLIENTÈLE, À UN ARRÊT DE TRAVAIL, À UNE DÉFAILLANCE OU UN MAUVAIS FONCTIONNEMENT INFORMATIQUE, OU À TOUT AUTRE DOMMAGE OU PERTE LIÉE À L'UTILISATION DU DOCUMENT ET DE SES VERSIONS MODIFIÉES, MÊME SI LADITE PARTIE A ÉTÉ INFORMÉE DE L'ÉVENTUALITÉ DE TELS DOMMAGES.</para>
		</listitem>
	  </orderedlist></para>
  </legalnotice>


   <!-- This file  contains link to license for the documentation (GNU FDL), and 
        other legal stuff such as "NO WARRANTY" statement. Please do not change 
	any of this. -->

    <authorgroup> 
      <author role="maintainer"> 
		<firstname>Jiří</firstname> 
		<surname>Lebl</surname> 
		<affiliation> 
	  		<orgname>University of Wisconsin-Madison</orgname> 
	  		<address> <email>jirka@5z.com</email> </address> 
		</affiliation> 
      </author> 
      <author> 
		<firstname>Kai</firstname> 
		<surname>Willadsen</surname> 
		<affiliation> 
	  		<orgname>Université de Queensland, Australie</orgname> 
	  		<address> <email>kaiw@itee.uq.edu.au</email> </address> 
		</affiliation> 
      </author> 
      
<!-- This is appropriate place for other contributors: translators,
     maintainers,  etc. Commented out by default.
     
      <othercredit role="translator">
		<firstname>Latin</firstname> 
		<surname>Translator 1</surname> 
		<affiliation> 
	  		<orgname>Latin Translation Team</orgname> 
	  		<address> <email>translator@gnome.org</email> </address> 
		</affiliation>
		<contrib>Latin translation</contrib>
      </othercredit>
-->
    </authorgroup>


<!-- According to GNU FDL, revision history is mandatory if you are -->
<!-- modifying/reusing someone else's document.  If not, you can omit it. -->
<!-- Remember to remove the &manrevision; entity from the revision entries other
-->
<!-- than the current revision. -->
<!-- The revision numbering system for GNOME manuals is as follows: -->
<!-- * the revision number consists of two components -->
<!-- * the first component of the revision number reflects the release version of the GNOME desktop. -->
<!-- * the second component of the revision number is a decimal unit that is incremented with each revision of the manual. -->
<!-- For example, if the GNOME desktop release is V2.x, the first version of the manual that -->
<!-- is written in that desktop timeframe is V2.0, the second version of the manual is V2.1, etc. -->
<!-- When the desktop release version changes to V3.x, the revision number of the manual changes -->
<!-- to V3.0, and so on. -->  
<!--  This is unmaintained quite a bit so screw this it just makes things
      ugly and we don't update the manrevision stuff anyway
    <revhistory>
      <revision> 
		<revnumber>&manrevision;</revnumber> 
		<date>&date;</date> 
		<revdescription> 
	  		<para role="author">Jiri (George) Lebl
	    	<email>jirka@5z.com</email>
	  		</para>
		</revdescription> 
      </revision> 
      <revision> 
		<revnumber>0.1</revnumber> 
		<date>September 2004</date> 
		<revdescription> 
	  		<para role="author">Kai Willadsen
	    	<email>kaiw@itee.uq.edu.au</email>
	  		</para>
		</revdescription> 
      </revision> 
      <revision> 
		<revnumber>Genius Calculator Manual</revnumber> 
		<date>August 2004</date> 
		<revdescription> 
	  		<para role="author">Jiri (George) Lebl
	    	<email>jirka@5z.com</email>
	  		</para>
		</revdescription> 
      </revision> 
    </revhistory> 
-->

    <revhistory>
      <revision> 
		<revnumber>0.2</revnumber> 
		<date>March 2012</date> 
		<revdescription> 
	  		<para role="author">Jiri (George) Lebl <email>jirka@5z.com</email></para>
		</revdescription> 
      </revision> 
    </revhistory>
    <releaseinfo>This manual describes version 1.0.15 of Genius.
    </releaseinfo> 
    <legalnotice> 
      <title>Votre avis</title> 
      <para>Pour signaler un problème ou faire une suggestion concernant l'application <application>Outil de maths Genius</application> ou le présent manuel, procédez comme indiqué à la <ulink url="ghelp:gnome-feedback" type="help">page de réactions sur GNOME</ulink>.</para>
<!-- Translators may also add here feedback address for translations -->
    </legalnotice> 
  </bookinfo> 

<!-- ============= Introduction =============================== -->
  <chapter id="genius-introduction"> 
    <title>Introduction</title> 
    <para>L'application <application>Outil de maths Genius</application> est un calculateur générique qui peut être utilisé comme calculatrice de bureau, outil éducatif en mathématiques et peut même être utile pour la recherche. Le langage utilisé dans l'<application>Outil de maths Genius</application> a été conçu pour être « mathématique » dans le sens où il devrait être « what you mean is what you get » (« ce que vous pensez est ce que vous obtenez »). C'est bien sûr un objectif pas complètement atteignable. L'<application>Outil de maths Genius</application> peut utiliser des rationnels, des entiers de précision arbitraire et des nombres à virgule flottante avec différentes précisions en utilisant la bibliothèque GMP. Il prend en charge les nombres complexes en utilisant la notation cartésienne. Il sait comment manipuler correctement les vecteurs et les matrices et prend en charge l'algèbre linéaire élémentaire. Le langage de programmation autorise la définition de fonctions et de variables utilisateurs et la modification de certains paramètres.</para> 

    <para>Il existe deux versions de l'<application>Outil de maths Genius</application>. L'une est la version graphique de GNOME qui inclut une interface de style IDE et la possibilité de tracer des fonctions à une ou deux variables. L'autre, la version en ligne de commande, n'a pas besoin de GNOME mais bien sûr, elle n'implémente aucune fonctionnalité qui requiert l'interface graphique.</para> 

    <para>Ce manuel décrit principalement la version graphique du calculateur mais bien sûr le langage de programmation est le même. Il ne manque à la version en ligne de commande que les possibilités graphiques et toutes les autres fonctionnalités qui requièrent l'interface graphique.</para>

  </chapter>

<!-- =========== Getting Started ============================== -->
  <chapter id="genius-getting-started"> 
    <title>Premiers pas</title> 

    <sect1 id="genius-to-start">
      <title>Lancement de l'<application>Outil de maths Genius</application></title>
      <para>Vous pouvez démarrer l'<application>Outil de maths Genius</application> d'une des manières suivantes :</para> 
      <variablelist>
        <varlistentry>
          <term>Menu <guimenu>Applications</guimenu></term>
          <listitem>
	    <para>En fonction de votre système d'exploitation et de sa version, l'élément de menu pour l'<application>Outil de maths Genius</application> peut apparaître à différents endroits. Cela peut être dans les sous-menus <guisubmenu>Éducation</guisubmenu>, <guisubmenu>Accessoires</guisubmenu>, <guisubmenu>Bureautique</guisubmenu>, <guisubmenu>Science</guisubmenu> ou d'autres similaires en fonction de vos réglages personnels. Le nom de l'entrée de menu que vous recherchez est <application>Outil de maths Genius</application>. Une fois localisé, cliquez dessus pour démarrer l'<application>Outil de maths Genius</application>.</para>
	      </listitem>
        </varlistentry>
        <varlistentry>
          <term>Boîte de dialogue <guilabel>Lancer une application</guilabel></term>
          <listitem>
	    <para>Il se peut que l'entrée de menu ne soit pas accessible pour votre système d'exploitation. Dans ce cas, vous pouvez ouvrir la boîte de dialogue <guilabel>Lancer une application</guilabel> et saisir <command>gnome-genius</command>.</para>
	      </listitem>
        </varlistentry>
        <varlistentry>
    	  <term>Ligne de commande</term>
    	  <listitem>
    	    <para>Pour démarrer la version GNOME de l'<application>Outil de maths Genius</application>, saisissez <command>gnome-genius</command>.</para>
	    <para>Pour démarrer seulement la version en ligne de commande, exécutez la commande <command>genius</command>. Cette version ne comprend pas d'environnement graphique et certaines fonctionnalités comme le tracé de graphiques ne sont pas disponibles.</para> 
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>

    <sect1 id="genius-when-start">
    <title>Démarrage de Genius</title>
      <para>Lorsque vous démarrez la version GNOME de l'<application>Outil de maths Genius</application>, la fenêtre <xref linkend="mainwindow-fig"/> apparaît.</para>

      <figure id="mainwindow-fig"> 
        <title>Fenêtre de l'<application>Outil de maths Genius</application></title> 
        <screenshot> 
          <mediaobject> 
            <imageobject>
              <imagedata fileref="figures/genius_window.png" format="PNG" scale="50" scalefit="1"/> 
            </imageobject>
            <imageobject>
              <imagedata fileref="figures/genius_window.eps" format="EPS" scale="50" scalefit="1"/> 
            </imageobject>
            <textobject> 
	      <phrase>Affiche <application>Outil de maths Genius</application> la fenêtre principale. Contient la barre de titre, la barre de menus, la barre d'outils et la zone de travail. La barre de menu contient <guilabel>Fichier</guilabel>, <guilabel>Édition</guilabel>, <guilabel>Calculatrice</guilabel>, <guilabel>Paramètres</guilabel> et <guilabel>Aide</guilabel>.</phrase> 
            </textobject> 
          </mediaobject>
        </screenshot> 
      </figure>

      <para>La fenêtre de l'<application>Outil de maths Genius</application> contient les éléments suivants :</para>
      <variablelist>
        <varlistentry>
          <term>Barre de menus</term>
          <listitem>
            <para>Les menus de la barre de menus contiennent toutes les commandes dont vous aurez besoin pour travailler avec les fichiers dans l'<application>Outil de maths Genius</application>. Le menu <guilabel>Fichier</guilabel> contient les éléments pour charger et enregistrer des éléments et créer de nouveaux programmes. La commande <guilabel>Charger et exécuter...</guilabel> n'ouvre pas de nouvelle fenêtre pour le programme mais exécute seulement le programme directement. Elle est équivalente à la commande <command>load</command>.</para>
	    <para>Le menu <guilabel>Calculateur</guilabel> contrôle le moteur de calcul. Il vous permet de lancer le programme actuellement sélectionné ou d'interrompre le calcul en cours. Vous pouvez également afficher l'expression complète de la dernière réponse (c'est utile si la dernière expression est trop grande pour tenir sur la console) ou afficher une liste des valeurs de toutes les variables définies par l'utilisateur. Enfin, il permet de tracer des fonctions en utilisant une boîte de dialogue conviviale.</para>
	   <para>Les autres menus contiennent les mêmes fonctions classiques qui apparaissent dans d'autres applications.</para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Barre d'outils</term>
          <listitem>
            <para>La barre d'outils contient un sous-ensemble des commandes accessibles à partir de la barre de menus.</para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Zone de travail</term>
          <listitem>
            <para>La zone de travail est la principale méthode d'interaction avec l'application.</para>
	    <para>La zone de travail ne contient initialement que l'onglet <guilabel>Console</guilabel> qui est la principale façon d'interagir avec le calculateur. Vous pouvez saisir ici des expressions et les résultats sont immédiatement affichés après avoir appuyé sur la touche Entrée.</para>
	    <para>Vous pouvez également écrire des programmes plus longs qui peuvent apparaître dans des onglets séparés et peuvent être enregistrés dans des fichiers pour pouvoir les reprendre plus tard.</para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>

  </chapter>

<!-- ================ Usage =================================== -->
  <chapter id="genius-usage"> 
    <title>Utilisation de base</title> 

    <sect1 id="genius-usage-workarea"> 
      <title>Utilisation de la zone de travail</title> 

      <para>Normalement, vous interagissez avec le calculateur dans l'onglet <guilabel>Console</guilabel> de la zone de travail. Si vous n'utilisez que la version texte de l'application alors la console est la seule chose disponible. Si vous voulez utiliser l'<application>Outil de maths Genius</application> en tant que calculatrice seulement, saisissez vos expressions ici et elles seront évaluées.</para>

      <para>Saisissez vos expressions dans la zone de travail <guilabel>Console</guilabel>, appuyez sur la touche Entrée et l'expression est évaluée. Les expressions sont écrites dans un langage appelé GEL. L'expression GEL la plus simple ressemble à des mathématiques. Par exemple <screen><prompt>genius&gt; </prompt><userinput>30*70 + 67^3.0 + ln(7) * (88.8/100)</userinput>
</screen> ou <screen><prompt>genius&gt; </prompt><userinput>62734 + 812634 + 77^4 mod 5</userinput>
</screen> ou <screen><prompt>genius&gt; </prompt><userinput>| sin(37) - e^7 |</userinput>
</screen> ou <screen><prompt>genius&gt; </prompt><userinput>sum n=1 to 70 do 1/n</userinput>
</screen> (cette dernière est une série harmonique de 1 à 70).</para>
<para>Pour obtenir une liste des fonctions et commandes, saisissez : <screen><prompt>genius&gt; </prompt><userinput>help</userinput>
</screen> Si vous souhaitez obtenir plus d'aide sur une fonction précise, saisissez : <screen><prompt>genius&gt; </prompt><userinput>help NomDeLaFonction</userinput>
</screen> Pour afficher ce manuel, saisissez : <screen><prompt>genius&gt; </prompt><userinput>manual</userinput>
</screen></para>
<para>Supposons que vous ayez auparavant enregistré un programme contenant des commandes GEL dans un fichier et que vous vouliez maintenant les exécuter. Pour charger ce programme à partir du fichier <filename>chemin/vers/programme.gel</filename>, saisissez <screen><prompt>genius&gt; </prompt><userinput>load chemin/vers/programme.gel</userinput></screen>
L'<application>Outil de maths Genius</application> garde la trace du répertoire actuel. Pour afficher la liste des fichiers dans le répertoire actuel, saisissez <command>ls</command>, pour changer de répertoire, saisissez <userinput>cd répertoire</userinput> comme dans un shell de commande unix.</para>
    </sect1>

    <sect1 id="genius-usage-create-program"> 
      <title>Création d'un programme</title> 
      <para>Pour commencer à écrire un nouveau programme, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Nouveau programme</guimenuitem></menuchoice>. Un nouvel onglet apparaît dans la zone de travail. Vous pouvez écrire un programme <link linkend="genius-gel">GEL</link> dans cet espace de travail. Après avoir écrit votre programme, vous pouvez l'exécuter à l'aide de la commande <menuchoice><guimenu>Calculateur</guimenu><guimenuitem>Exécuter</guimenuitem></menuchoice>. Cela lance votre programme et affiche toutes les sorties dans l'onglet <guilabel>Console</guilabel>. Exécuter un programme est équivalent à prendre le texte du programme et à le saisir dans la console. La seule différence est que cette entrée est faite indépendamment de la console et que seule la sortie apparaît dans la console. <menuchoice><guimenu>Calculateur</guimenu><guimenuitem>Exécuter</guimenuitem></menuchoice> exécute toujours le programme actuellement sélectionné, même si vous êtes dans l'onglet <guilabel>Console</guilabel>. Le programme actuellement sélectionné est celui dont l'onglet est en gras. Pour sélectionner un autre programme, il suffit de cliquer sur son onglet.</para>
      <para>Pour enregistrer le programme que vous venez d'écrire, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Enregistrer sous...</guimenuitem></menuchoice></para>
    </sect1>

    <sect1 id="genius-usage-open-program"> 
      <title>Ouverture et lancement d'un programme</title> 
      <para>Pour ouvrir un fichier, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Ouvrir</guimenuitem></menuchoice>. Un nouvel onglet contenant le fichier apparaît dans la zone de travail. Vous pouvez l'utiliser pour modifier le fichier.</para>
      <para>Pour lancer un programme à partir d'un fichier, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Charger et exécuter...</guimenuitem></menuchoice>. Le programme est lancé sans être ouvert dans un onglet séparé. C'est équivalent à la commande <command>load</command>.</para>
    </sect1>

  </chapter>

  <!-- ============= Plotting ============================== -->
  <chapter id="genius-gel-plotting">
    <title>Tracé de graphiques</title>

    <para>Le tracé de graphiques n'est disponible que dans la version graphique GNOME. Tous les tracés accessibles à partir de l'interface graphique sont disponibles à partir de la fenêtre <guilabel>Création de graphiques</guilabel>. Vous pouvez accéder à cette fenêtre, soit en cliquant sur le bouton <guilabel>Tracer</guilabel> de la barre d'outils ou en sélectionnant <guilabel>Tracer</guilabel> dans le menu <guilabel>Calculateur</guilabel>. Vous pouvez également accéder aux fonctionnalités de tracer en utilisant les <link linkend="genius-gel-function-list-plotting">fonctions de tracé</link> du langage GEL. Consultez <xref linkend="genius-gel"/> pour apprendre comment saisir des expressions compréhensibles par Genius.</para>

    <sect1 id="genius-line-plots">
      <title>Tracé de lignes</title>
      <para>Pour tracer des fonctions réelles d'une variable, ouvrez la fenêtre <guilabel>Création de graphiques</guilabel>. Vous pouvez aussi utiliser la fonction <link linkend="gel-function-LinePlot"><function>LinePlot</function></link> en ligne de commande (consultez sa documentation).</para>
      <para>Une fois que vous avez cliqué sur le bouton <guilabel>Tracer</guilabel>, une fenêtre contenant des onglets apparaît. Vous devez être dans l'onglet <guilabel>Tracé de lignes</guilabel> et dans celui-ci, vous devez être dans l'onglet <guilabel>Fonctions / Expressions</guilabel> (consultez <xref linkend="lineplot-fig"/>).</para>

      <figure id="lineplot-fig"> 
        <title>Fenêtre Création de graphiques</title> 
        <screenshot> 
          <mediaobject> 
            <imageobject>
              <imagedata fileref="figures/line_plot.png" format="PNG" scale="50" scalefit="1"/> 
            </imageobject>
            <imageobject>
              <imagedata fileref="figures/line_plot.eps" format="EPS" scale="50" scalefit="1"/> 
            </imageobject>
            <textobject> 
              <phrase>Affiche la fenêtre pour tracer des graphiques.</phrase> 
            </textobject> 
          </mediaobject> 
        </screenshot> 
      </figure>

      <para>Dans les cases de texte, il suffit de saisir les expressions dans lesquelles <userinput>x</userinput> est la variable indépendante. Vous pouvez également donner uniquement le nom des fonctions comme <userinput>cos</userinput> plutôt que de saisir <userinput>cos(x)</userinput>. Vous pouvez tracer jusqu'à dix fonctions. Si vous faites une erreur et que Genius ne peut pas analyser l'entrée, une icône d'avertissement est affichée à droite de la case de texte qui contient l'erreur et une boîte de dialogue contenant l'erreur s'ouvre. Vous pouvez modifier les plages des variables dépendantes et indépendantes en bas de la boîte de dialogue. Un appui sur le bouton <guilabel>Tracer</guilabel> produit le graphe <xref linkend="lineplot2-fig"/>.</para>

      <figure id="lineplot2-fig"> 
        <title>Fenêtre contenant une courbe</title> 
        <screenshot> 
          <mediaobject> 
            <imageobject>
              <imagedata fileref="figures/line_plot_graph.png" format="PNG" scale="50" scalefit="1"/> 
            </imageobject>
            <imageobject>
              <imagedata fileref="figures/line_plot_graph.eps" format="EPS" scale="50" scalefit="1"/> 
            </imageobject>
            <textobject> 
              <phrase>Le graphe produit.</phrase> 
            </textobject> 
          </mediaobject> 
        </screenshot> 
      </figure>

      <para>À partir de là, vous pouvez imprimer le graphe, créer une version postscript encapsulé ou PNG du graphe ou modifier le zoom. Si l'axe dépendant n'a pas été configuré correctement, Genius peut l'avoir ajusté en cherchant les extrema des fonctions tracées.</para>

      <para>Pour tracer à partir de la ligne de commande, consultez la documentation de la fonction <link linkend="gel-function-LinePlot"><function>LinePlot</function></link>.</para>
    </sect1>

    <sect1 id="genius-parametric-plots">
      <title>Courbes paramétriques</title>
      <para>Dans la fenêtre Création de courbe, vous pouvez également sélectionner l'onglet <guilabel>Courbe paramétrique</guilabel> pour créer des courbes paramétriques à deux dimensions. Vous ne pouvez tracer qu'une seule fonction paramétrique. Vous pouvez indiquer les points soit sous la forme x et y ou bien sous celle d'un seul nombre complexe. Consultez <xref linkend="paramplot-fig"/>.</para>

      <figure id="paramplot-fig"> 
        <title>Onglet pour les courbes paramétriques</title> 
        <screenshot> 
          <mediaobject> 
            <imageobject>
              <imagedata fileref="figures/parametric.png" format="PNG" scale="50" scalefit="1"/> 
            </imageobject>
            <imageobject>
              <imagedata fileref="figures/parametric.eps" format="EPS" scale="50" scalefit="1"/> 
            </imageobject>
            <textobject> 
              <phrase>Onglet pour tracer paramétrique dans la fenêtre <guilabel>Création de graphiques</guilabel>.</phrase> 
            </textobject> 
          </mediaobject> 
        </screenshot> 
      </figure>

      <para>Un exemple de tracé paramétrique est montré en <xref linkend="paramplot-fig"/>. Des opérations, similaires à celles qui peuvent être réalisées sur les tracés de lignes, peuvent être réalisées sur des graphiques de ce type. Pour réaliser des graphiques en ligne de commande, consultez la documentation des fonctions <link linkend="gel-function-LinePlotParametric"><function>LinePlotParametric</function></link> ou <link linkend="gel-function-LinePlotCParametric"><function>LinePlotCParametric</function></link>.</para>

      <figure id="paramplot2-fig"> 
        <title>Courbe paramétrique</title> 
        <screenshot> 
          <mediaobject> 
            <imageobject>
              <imagedata fileref="figures/parametric_graph.png" format="PNG" scale="50" scalefit="1"/> 
            </imageobject>
            <imageobject>
              <imagedata fileref="figures/parametric_graph.eps" format="EPS" scale="50" scalefit="1"/> 
            </imageobject>
            <textobject> 
              <phrase>Courbe paramétrique produite</phrase> 
            </textobject> 
          </mediaobject> 
        </screenshot> 
      </figure>

    </sect1>

    <sect1 id="genius-slopefield-plots">
      <title>Champ de directions</title>
      <para>Dans la fenêtre de création de graphiques, vous pouvez également sélectionner l'onglet <guilabel>Champ de directions</guilabel> pour créer un graphique de champ de directions à deux dimensions. Des opérations, similaires à celles qui peuvent être réalisées sur les tracés de lignes, peuvent être réalisées sur des graphiques de ce type. Pour réaliser des graphiques en ligne de commande, consultez la documentation de la fonction <link linkend="gel-function-SlopefieldPlot"><function>SlopefieldPlot</function></link>.</para>

      <para>Quand un champ de directions est actif, un menu supplémentaire <guilabel>Solveur</guilabel> est disponible, il vous permet d'afficher la boîte de dialogue du solveur. Dans celle-ci, vous pouvez faire tracer à Genius des solutions spécifiques pour les conditions initiales fournies. Vous pouvez soit indiquer des conditions initiales spécifiques dans la boîte de dialogue ou cliquer sur le graphique directement pour indiquer le point de départ. Tant que la boîte de dialogue du solveur est active, la fonction de zoom par clic et déplacement ne fonctionne pas. Vous devez d'abord fermer la boîte de dialogue si vous voulez zoomer avec votre souris.</para>

      <para>Le solveur utilise la méthode standard de Runge-Kutta. Les graphiques restent sur l'écran jusqu'à ce qu'ils soient effacés. Le solveur s'arrête à chaque fois qu'il atteint les limites de la fenêtre du graphique. Le fait de zoomer ne modifie pas les limites ou paramètres des solutions, vous devez les effacer et les redessiner avec les paramètres appropriés. Vous pouvez utiliser la fonction <link linkend="gel-function-SlopefieldDrawSolution"><function>SlopefieldDrawSolution</function></link> pour tracer les solutions à partir de la ligne de commande ou dans des programmes.</para>

    </sect1>

    <sect1 id="genius-vectorfield-plots">
      <title>Champ de vecteurs</title>
      <para>Dans la fenêtre de création de graphiques, vous pouvez également sélectionner l'onglet <guilabel>Champ de vecteurs</guilabel> pour créer un graphique de champ de vecteurs à deux dimensions. Des opérations, similaires à celles qui peuvent être réalisées sur les tracés de lignes, peuvent être réalisées sur des graphiques de ce type. Pour réaliser des graphiques en ligne de commande, consultez la documentation de la fonction <link linkend="gel-function-VectorfieldPlot"><function>VectorfieldPlot</function></link>.</para>

      <para>Par défaut, la direction et l'amplitude du champ de vecteurs sont affichées. Pour n'afficher que la direction, cochez la case appropriée pour normaliser la longueur des flèches.</para>

      <para>Quand un champ de vecteurs est actif, un menu supplémentaire <guilabel>Solveur</guilabel> est disponible, vous permettant d'afficher la boîte de dialogue du solveur. Dans celle-ci, vous pouvez faire tracer à Genius des solutions spécifiques pour les conditions initiales fournies. Vous pouvez soit indiquer des conditions initiales spécifiques dans la boîte de dialogue ou cliquer sur le graphique directement pour indiquer le point de départ. Tant que la boîte de dialogue du solveur est active, la fonction de zoom par clic et déplacement ne fonctionne pas. Vous devez d'abord fermer la boîte de dialogue si vous voulez zoomer avec votre souris.</para>

      <para>Le solveur utilise la méthode standard de Runge-Kutta. Les graphiques restent sur l'écran jusqu'à ce qu'ils soient effacés. Le fait de zoomer ne modifie pas les limites ou paramètres des solutions, vous devez effacer et les redessiner avec les paramètres appropriés. Vous pouvez utiliser la fonction <link linkend="gel-function-VectorfieldDrawSolution"><function>VectorfieldDrawSolution</function></link> pour tracer les solutions à partir de la ligne de commande ou dans des programmes.</para>

    </sect1>

    <sect1 id="genius-surface-plots">
      <title>Tracé de surfaces</title>
      <para>Genius peut aussi tracer des surfaces. Sélectionnez l'onglet <guilabel>Tracé de surface</guilabel> dans l'onglet principal de la fenêtre de <guilabel>Création de graphiques</guilabel>. Dans celui-ci, vous pouvez indiquer une expression simple qui doit utiliser soit les variables indépendantes <varname>x</varname> et <varname>y</varname> ou la variable complexe <varname>z</varname> (où <varname>x</varname> est la partie réelle de <varname>z</varname> et <varname>y</varname> sa partie imaginaire). Par exemple, pour tracer le module de la fonction cosinus pour des arguments complexes, vous pouvez saisir <userinput>|cos(z)|</userinput> ce qui est équivalent à <userinput>|cos(x+1i*y)|</userinput> (consultez <xref linkend="surfaceplot-fig"/>). Pour réaliser des graphiques en ligne de commande, consultez la documentation de la fonction <link linkend="gel-function-SurfacePlot"><function>SurfacePlot</function></link>.</para>

      <figure id="surfaceplot-fig"> 
        <title>Graphique de surface</title> 
        <screenshot> 
          <mediaobject> 
            <imageobject>
              <imagedata fileref="figures/surface_graph.png" format="PNG" scale="50" scalefit="1"/> 
            </imageobject>
            <imageobject>
              <imagedata fileref="figures/surface_graph.eps" format="EPS" scale="50" scalefit="1"/> 
            </imageobject>
            <textobject> 
              <phrase>Module de la fonction cosinus complex.</phrase> 
            </textobject> 
          </mediaobject> 
        </screenshot> 
      </figure>

    </sect1>

  </chapter>

  <!-- ============= GEL ====================================== -->
  <chapter id="genius-gel"> 
    <title>Fondamentaux GEL</title> 

	<para>GEL signifie Genius Extension Language (langage d'extension de Genius). C'est le langage que vous devez utiliser pour écrire des programmes dans Genius. Un programme en GEL est simplement une expression qui renvoie un nombre. L'<application>Outil de maths Genius</application> peut par conséquent être utilisé comme une simple calculatrice ou comme un puissant outil de recherche théorique. La syntaxe a été pensée pour permettre un apprentissage rapide, en particulier pour utiliser Genius comme une calculatrice.</para>

    <sect1 id="genius-gel-values">
      <title>Types de données</title>

      <para>Les données GEL peuvent être des <link linkend="genius-gel-values-numbers">nombres</link>, des <link linkend="genius-gel-values-booleans">booléens</link> ou des <link linkend="genius-gel-values-strings">chaînes de caractères</link>. Les données peuvent, entre autre, être utilisées dans des calculs, attribuées à des variables et renvoyées par des fonctions.</para>

      <sect2 id="genius-gel-values-numbers">
        <title>Nombres</title>
        <para>Les entiers sont les premiers types de nombres GEL. Les entiers s'écrivent de façon habituelle. <programlisting>1234
</programlisting> Les nombres hexadécimaux et octaux peuvent être écrit à la manière du langage C. Par exemple : <programlisting>0x123ABC
01234
</programlisting> Vous pouvez aussi saisir des nombres dans n'importe quelle base en utilisant la notation <literal>&lt;base&gt;\&lt;nombre&gt;</literal>. Les chiffres plus grands que 10 utilisent des lettres tout comme pour l'hexadécimal. Par exemple, un nombre en base 23 pourrait s'écrire : <programlisting>23\1234ABCD
</programlisting></para>

        <para>Le deuxième type de nombres en GEL est celui des rationnels. Les rationnels sont simplement obtenus en divisant deux entiers. Il serait donc possible d'écrire : <programlisting>3/4
</programlisting> pour obtenir trois quarts. Les rationnels acceptent également la notation fractionnelle mixte, donc afin d'obtenir un et trois dixièmes, vous pouvez écrire : <programlisting>1 3/10
</programlisting></para>

        <para>Le type suivant est celui des nombres à virgule flottante. Ils sont saisis de la même manière qu'en C. Vous pouvez utiliser <literal>E</literal>, <literal>e</literal> ou <literal>@</literal> pour délimiter l'exposant. Notez que l'utilisation d'un délimiteur d'exposant implique un flottant même s'il n'y a pas de point séparateur des décimales dans le nombre. Exemples : <programlisting>1.315
7.887e77
7.887e-77
.3
0.3
77e5
</programlisting> Lorsque Genius affiche un flottant, il ajoute toujours <computeroutput>.0</computeroutput> même si le nombre est entier. C'est pour rappeler que les nombres à virgule flottante sont considérés comme des quantités imprécises. Lorsqu'un nombre est écrit en utilisant la notation scientifique, c'est toujours un flottant et, par conséquent, Genius n'affiche pas le <computeroutput>.0</computeroutput>.</para>

        <para>Le dernier type de nombres GEL est celui des nombres complexes. Vous pouvez saisir un nombre complexe sous sa forme cartésienne, ou sous sa forme exponentielle. La partie imaginaire se termine par un <literal>i</literal>. Voici des exemples de saisies de nombres complexes : <programlisting>1+2i
8.01i
77*e^(1.3i)
</programlisting></para>

        <important>
          <para>Lorsque vous saisissez des nombres imaginaires, il doit y avoir un nombre devant le <literal>i</literal>. Si vous utilisez <literal>i</literal> tout seul, Genius l'interprète comme une référence à la variable <varname>i</varname>. Si vous avez besoin de faire référence à <literal>i</literal> tout seul, utilisez <literal>1i</literal> à la place.</para>

          <para>Afin de pouvoir utiliser la notation en fraction mixte avec des nombres imaginaires, vous devez mettre la fraction mixte entre parenthèses (par exemple, <userinput>(1 2/5)i</userinput>).</para>
        </important>

      </sect2>


      <sect2 id="genius-gel-values-booleans">
        <title>Booléens</title>
        <para>Genius prend également en charge nativement les données booléennes. Les deux constantes booléennes sont <constant>true</constant> (vrai) et <constant>false</constant> (faux) ; ces identifiants peuvent être utilisés comme n'importe quelle autre variable. Vous pouvez aussi utiliser les identifiants <constant>True</constant>, <constant>TRUE</constant>, <constant>False</constant> et <constant>FALSE</constant> comme alias de ces précédents.</para>
        <para>Là où une expression booléenne est attendue, vous pouvez utiliser une grandeur booléenne ou toute expression qui produit soit un nombre soit un booléen. Si Genius a besoin d'évaluer un nombre en tant que booléen, il interprète 0 comme <constant>false</constant> et tout autre nombre comme <constant>true</constant>.</para>
        <para>Vous pouvez également faire des calculs avec des données booléennes. Par exemple : <programlisting>( (1 + true) - false ) * true
</programlisting> est identique à : <programlisting>( (true or true) or not false ) and true
</programlisting> Seules l'addition, la soustraction et la multiplication sont prises en charge. Si vous mélangez des nombres avec des booléens dans une expression alors les nombres sont convertis en booléens comme indiqué ci-dessus. Cela signifie que, par exemple : <programlisting>1 == true
</programlisting> vaut toujours <constant>true</constant> puisque 1 est converti en <constant>true</constant> avant d'être comparé à <constant>true</constant>.</para>
      </sect2>


      <sect2 id="genius-gel-values-strings">
        <title>Chaînes de caractères</title>
        <para>Tout comme les nombres et les booléens, les chaînes en GEL peuvent être enregistrées dans des variables et transmises à des fonctions. Vous pouvez également concaténer une chaîne avec une autre en utilisant l'opérateur plus. Par exemple, <programlisting>a=2+3;"Le résultat est : "+a
</programlisting> crée la chaîne : <programlisting>Le résultat est : 5
</programlisting> Vous pouvez également utiliser des séquences d'échappement comme <literal>\n</literal>,<literal>\t</literal>,<literal>\b</literal>,<literal>\a</literal> et <literal>\r</literal>. Pour obtenir un <literal>\</literal> ou un <literal>"</literal> dans une chaîne, vous devez les faire précéder d'un <literal>\</literal>. Par exemple : <programlisting>"Barre oblique : \\ Guillemets : \" Tabulations : \t1\t2\t3"
</programlisting> produit la chaîne : <programlisting>Barre oblique : \ Guillemets : " Tabulations : 	1	2	3
</programlisting></para>
        <para>Vous pouvez en plus utiliser la fonction <function>string</function> de la bibliothèque pour convertir n'importe quoi en chaîne. Par exemple : <programlisting>string(22)
</programlisting> renvoie <programlisting>"22"
</programlisting> Les chaînes peuvent être également comparées avec les opérateurs <literal>==</literal> (égal à), <literal>!=</literal> (différent de) et <literal>&lt;=&gt;</literal> (comparaison).</para>
      </sect2>


      <sect2 id="genius-gel-values-null">
        <title>Null</title>
        <para>Il existe une grandeur spéciale appelée <constant>null</constant>. Il n'est pas possible de faire des calculs avec elle et rien n'est affichée lorsqu'elle est renvoyée. Par conséquent, <constant>null</constant> est utile lorsque vous voulez qu'une expression n'affiche rien. La valeur <constant>null</constant> peut être obtenue lorsque vous saisissez un point « <literal>.</literal> », la constante <constant>null</constant> ou rien. Par rien, nous voulons dire que si vous terminez une expression par un séparateur <literal>;</literal>, c'est équivalent de la terminer par un séparateur suivi d'un <constant>null</constant>.</para>
        <para>Exemple : <programlisting>x=5;.
x=5;
</programlisting></para>
<para>Certaines fonctions renvoient <constant>null</constant> quand aucune valeur ne peut être renvoyée ou quand une erreur survient. La grandeur <constant>null</constant> est aussi utilisée comme vecteur ou matrice vide ou comme une référence vide.</para>
      </sect2>

    </sect1>

    <sect1 id="genius-gel-variables">
      <title>Utilisation des variables</title>

      <para>Syntaxe : <programlisting>NomDeVariable
</programlisting> Exemple : <screen><prompt>genius&gt; </prompt><userinput>e</userinput>
= 2.71828182846
</screen></para>

      <para>Pour évaluer une variable elle-même, il suffit de saisir le nom de la variable. Cela renvoie la valeur de la variable. Vous pouvez utiliser une variable n'importe où, où vous utiliseriez normalement un nombre ou une chaîne. De plus, les variables sont indispensables pour définir des fonctions qui possèdent des arguments (consultez <xref linkend="genius-gel-functions-defining"/>).</para>

      <tip>
        <title>Utilisation de la complétion à l'aide de la touche Tab</title>
        <para>Vous pouvez utiliser la complétion à l'aide de la touche Tab pour que Genius complète les noms de variable pour vous. Essayez de saisir les premières lettres du nom et appuyez sur la touche <userinput>Tab</userinput>.</para>
      </tip>

      <important>
        <title>Noms de variable sensibles à la casse</title>
        <para>Les noms de variable sont sensibles à la casse. Cela signifie que les variables appelées <varname>bonjour</varname>, <varname>BONJOUR</varname> et <varname>Bonjour</varname> sont toutes différentes.</para>
      </important>


      <sect2 id="genius-gel-variables-setting">
        <title>Attribution de variables</title>
        <para>Syntaxe : <programlisting><![CDATA[<identifier> = <value>
<identifier> := <value>]]>
</programlisting> Exemple: <programlisting>x = 3
x := 3
</programlisting></para>

        <para>Pour attribuer une variable, utilisez les opérateurs <literal>=</literal> ou <literal>:=</literal>. Ces opérateurs fixent la valeur de la variable et renvoient le nombre que vous y avez placé donc vous pouvez écrire des choses comme cela : <programlisting>a = b = 5
</programlisting></para>

        <para>Les opérateurs <literal>=</literal> et <literal>:=</literal> peuvent tous les deux être utilisés pour définir des variables. La différence entre les deux est que l'opérateur <literal>:=</literal> agit toujours comme un opérateur d'attribution alors que l'opérateur <literal>=</literal> peut être interprété comme une opération de test d'égalité lorsqu'il est utilisé dans un contexte où une expression booléenne est attendue.</para>

	<para>Pour les problèmes concernant le champ d'application des variables, consultez <xref linkend="genius-gel-variables-global"/>.</para>
      </sect2>

      <sect2 id="genius-gel-variables-built-in">
        <title>Variables internes</title>
        <para>GEL possède un certain nombre de « variables », telles que <varname>e</varname>, <varname>pi</varname> ou <varname>GoldenRatio</varname>. Ce sont des constantes largement utilisées qui possèdent une valeur prédéfinie et il n'est pas possible de leur attribuer de nouvelles valeurs. Il y a un certain nombre d'autres variables intégrées. Consultez <xref linkend="genius-gel-function-list-constants"/> pour une liste complète.</para>
      </sect2>


      <sect2 id="genius-gel-previous-result">
        <title>Variable « Résultat précédent »</title>
        <para>Les variables <varname>Ans</varname> et <varname>ans</varname> (answer : réponse) peuvent être utilisées pour obtenir le résultat de la dernière expression. Par exemple, si vous avez fait un calcul, pour ajouter 389 au résultat précédent vous pouvez saisir : <programlisting>Ans+389
</programlisting></para>
      </sect2>
    </sect1>

    <sect1 id="genius-gel-functions">
      <title>Utilisation des fonctions</title>

      <para>Syntaxe : <programlisting>NomDeLaFonction(argument1, argument2, ...)
</programlisting> Exemple : <programlisting>Factorial(5)
cos(2*pi)
gcd(921,317)
</programlisting> Pour évaluer une fonction, saisissez le nom de la fonction, suivi par les arguments de la fonction (s'il y en a) entre parenthèses. Cela renvoie le résultat de l'application de la fonction avec ses arguments. Le nombre d'arguments de la fonction peut, bien sûr, être différent pour chaque fonction.</para>

      <para>Il y a beaucoup de fonctions intégrées, telles que <function>sin</function>, <function>cos</function> et <function>tan</function>. Vous pouvez utiliser la fonction intégrée <function>help</function> pour obtenir une liste des fonctions disponibles ou consultez <xref linkend="genius-gel-function-list"/> pour un listing complet.</para>

      <tip>
        <title>Utilisation de la complétion à l'aide de la touche Tab</title>
        <para>Vous pouvez utiliser la fonction de complétion à l'aide de la touche Tab pour que Genius complète les noms de fonction pour vous. Essayez de saisir les quelques premières lettres du nom et appuyez sur <userinput>Tab</userinput>.</para>
      </tip>

      <important>
        <title>Noms de fonction sensibles à la casse</title>
        <para>Les noms des fonctions sont sensibles à la casse. Cela signifie que les fonctions appelées <function>fairecela</function>, <function>FAIRECELA</function> et <function>Fairecela</function> sont toutes différentes.</para>
      </important>


      <sect2 id="genius-gel-functions-defining">
        <title>Définition de fonctions</title>
        <para>Syntaxe : <programlisting><![CDATA[function <identifier>(<comma separated arguments>) = <function body>
<identifier> = (`() = <function body>)
]]></programlisting> Le caractère accent grave <literal>`</literal> indique une fonction anonyme. En l'apposant à un nom de variable, en réalité vous définissez une fonction.</para>

        <para>Une fonction prend zéro argument ou plus, séparés par des virgules et renvoie le résultat du corps de la fonction. Le fait de définir ses propres fonctions est une question de commodité ; un usage possible est d'avoir un ensemble de fonctions définies dans des fichiers GEL que Genius peut charger afin de les rendre accessibles. Exemple : <programlisting>function addup(a,b,c) = a+b+c
</programlisting> alors <userinput>addup(1,4,9)</userinput> donne 14.</para>
      </sect2>

      <sect2 id="genius-gel-functions-variable-argument-lists">
        <title>Liste d'arguments variable</title>
        <para>Si vous ajoutez <literal>...</literal> après le dernier nom d'argument dans la déclaration de fonction alors Genius permet la transmission d'un nombre quelconque d'arguments à la place de cet argument. Si aucun argument n'est transmis alors cet argument est défini à <constant>null</constant>. Sinon, c'est un vecteur ligne contenant tous les arguments. Par exemple, <programlisting>function f(a,b...) = b
</programlisting> alors <userinput>f(1,2,3)</userinput> donne <computeroutput>[2,3]</computeroutput> tandis que <userinput>f(1)</userinput> donne <constant>null</constant>.</para>
      </sect2>


      <sect2 id="genius-gel-functions-passing-functions">
        <title>Une fonction comme argument d'une autre fonction</title>

        <para>Dans Genius, il est possible de transmettre une fonction comme argument d'une autre fonction. Cela peut être fait en utilisant soit des « nœuds de fonction », soit des fonctions anonymes.</para>

        <para>Si vous ne saisissez pas les parenthèses après un nom de fonction, la fonction est renvoyée sous la forme d'un « nœud de fonction », au lieu d'être évaluée. Le nœud de fonction peut ensuite être transmis à une autre fonction. Par exemple : <programlisting>function f(a,b) = a(b)+1;
function b(x) = x*x;
f(b,2)
</programlisting></para>
        <para>Pour transmettre des fonctions qui ne sont pas encore définies, vous pouvez utiliser une fonction anonyme (consultez <xref linkend="genius-gel-functions-defining"/>) donc si vous voulez transmettre une fonction sans lui donner de nom, la syntaxe est la suivante : <programlisting><![CDATA[function(<comma separated arguments>) = <function body>
`(<comma separated arguments>) = <function body>
]]></programlisting> Exemple : <programlisting>function f(a,b) = a(b)+1;
f(`(x) = x*x,2)
</programlisting> renvoie la valeur 5.</para>
      </sect2>


    <sect2 id="genius-gel-functions-operations">
      <title>Opérations sur les fonctions</title>
      <para>Certaines fonctions permettent à des opérations arithmétiques et à certaines fonctions à un seul argument telles que <function>exp</function> ou <function>ln</function> d'agir sur la fonction. Par exemple, <programlisting>exp(sin*cos+4)
</programlisting> renvoie une fonction qui prend <varname>x</varname> et renvoie <userinput>exp(sin(x)*cos(x)+4)</userinput>. C'est fonctionnellement équivalent de saisir <programlisting>`(x) = exp(sin(x)*cos(x)+4)
</programlisting> Cette opération peut être utile pour définir rapidement des fonctions. Par exemple, pour créer une fonction appelée <varname>f</varname> pour réaliser l'opération ci-dessus, vous pouvez simplement saisir : <programlisting>f = exp(sin*cos+4)
</programlisting> Cela peut également être utilisé pour tracer des graphiques. Par exemple, pour tracer sinus au carré, vous pouvez saisir : <programlisting>LinePlot(sin^2)
</programlisting></para>

      <warning>
        <para>Toutes les fonctions ne peuvent pas être utilisées de cette façon. Par exemple, lorsque vous utilisez une opération binaire, les fonctions doivent prendre le même nombre d'arguments.</para>
      </warning>
    </sect2>


    </sect1>

    <sect1 id="genius-gel-absolute-value-modulus">
      <title>Valeur absolue / module</title>
      <para>Vous pouvez prendre la valeur absolue de quelque chose en l'entourant de <literal>|</literal>. Par exemple : <programlisting>|a-b|</programlisting></para>
<para>Si l'expression est un nombre complexe, le résultat est le module (distance à partir de l'origine). Par exemple : <userinput>|3 * e^(1i*pi)|</userinput> renvoie 3.</para>
    </sect1>

    <sect1 id="genius-gel-separator">
      <title>Séparateur</title>
      <para>En GEL, si vous voulez saisir plus d'une commande, vous devez utiliser l'opérateur <literal>;</literal> qui est une façon de séparer des expressions. Une telle expression combinée renvoie le résultat de la dernière expression, donc si vous saisissez ceci : <programlisting>3 ; 5
</programlisting> la valeur 5 est renvoyée.</para>
      <para>La présence de parenthèses peut parfois être nécessaire pour rendre l'expression non ambiguë, plus particulièrement si le <literal>;</literal> n'est pas la primitive la plus haute. Cela diffère légèrement des autres languages de programmation pour lesquels le <literal>;</literal> indique la fin des instructions alors qu'en GEL, c'est en fait un opérateur binaire. Si vous êtes familier avec le pascal, cela doit être une seconde nature. Genius peut cependant vous faire croire que c'est en quelque sorte un terminateur si un <literal>;</literal> est trouvé à la fin d'une parenthèse ou d'un bloc, genius lui ajoute alors un nœud <constant>null</constant> comme si vous aviez saisi <userinput>;null</userinput>. C'est utile au cas où vous ne vouliez pas renvoyer une valeur dans une boucle par exemple, ou si vous voulez gérer le renvoi d'information de manière différente. Notez que cela ralentit légèrement le programme si c'est exécuté trop souvent car un opérateur supplémentaire est impliqué.</para>
    </sect1>

    <sect1 id="genius-gel-modular-evaluation">
      <title>Évaluation modulaire</title>
      <para>Genius implémente l'arithmétique modulaire. Pour l'utiliser, vous avez juste à ajouter « mod &lt;entier&gt; » après l'expression. Exemple : <programlisting>2^(5!) * 3^(6!) mod 5</programlisting> Il pourrait être possible de faire de l'arithmétique modulaire en faisant des calculs avec des entiers puis en prenant le modulo à la fin avec l'opérateur <literal>%</literal>, mais cela peut prendre beaucoup de temps ou être impossible si vous travaillez avec des grands nombres. Par exemple, <userinput>10^(10^10) % 6</userinput> ne fonctionne tout simplement pas (l'exposant est trop grand), alors que <userinput>10^(10^10) mod 6</userinput> est instantanée.</para>
      <para>Vous pouvez calculer l'inverse de nombres modulo des entiers juste en utilisant des nombres rationnels (bien sûr, l'inverse doit exister). Exemples : <programlisting>10^-1 mod 101
1/10 mod 101</programlisting> Vous pouvez aussi faire de l'évaluation modulaire avec des matrices y compris prendre l'inverse, mettre à la puissance ou multiplier. Exemple : <programlisting>A = [1,2;3,4]
B = A^-1 mod 5
A*B mod 5</programlisting> Cela doit donner la matrice identité car B est l'inverse de A modulo 5.</para>
      <para>Certaines fonctions telles que <link linkend="gel-function-sqrt"><function>sqrt</function></link> ou <link linkend="gel-function-log"><function>log</function></link> fonctionnent différemment en mode modulaire. Elles vont alors fonctionner comme leur version discrète travaillant avec l'ensemble des entiers que vous avez sélectionnés, par exemple, <programlisting>genius&gt; sqrt(4) mod 7
=
[2, 5]
genius&gt; 2*2 mod 7
= 4</programlisting>La fonction <function>sqrt</function> renvoie en fait toutes les racines carrées possibles.</para>
    </sect1>

    <sect1 id="genius-gel-operator-list">
      <title>Liste des opérateurs GEL</title>

      <para>Dans le langage GEL, chaque chose est vraiment une expression. Les expressions sont reliées ensemble par différents opérateurs. Comme nous l'avons vu, même le séparateur est juste un opérateur binaire GEL. Voici une liste des opérateurs GEL.</para>

      <variablelist>
        <varlistentry>
         <term><synopsis>a;b</synopsis></term>
         <listitem>
           <para>C'est le séparateur, il évalue simplement à la fois <varname>a</varname> et <varname>b</varname> mais ne renvoie que le résultat de <varname>b</varname>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a=b</synopsis></term>
         <listitem>
           <para>L'opérateur d'attribution. Il attribue <varname>b</varname> à <varname>a</varname> (<varname>a</varname> doit être une <link linkend="genius-gel-lvalues">valeur à gauche</link> valide). Remarquez que cet opérateur peut être transformé en <literal>==</literal> s'il est utilisé là où une expression booléenne est attendue.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a:=b</synopsis></term>
         <listitem>
           <para>L'opérateur d'attribution. Il attribue <varname>b</varname> à <varname>a</varname> (<varname>a</varname> doit être une <link linkend="genius-gel-lvalues">valeur à gauche</link> valide). Il est différent de <literal>=</literal> car il n'est jamais transformée en <literal>==</literal>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>|a|</synopsis></term>
         <listitem>
           <para>Valeur absolue ou module (si <varname>a</varname> est un nombre complexe).</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/AbsoluteValue.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a^b</synopsis></term>
         <listitem>
           <para>Exposant, met <varname>a</varname> à la puissance <varname>b</varname>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a.^b</synopsis></term>
         <listitem>
           <para>Exposant élément par élément. Met chaque élément d'une matrice <varname>a</varname> à la puissance <varname>b</varname>. Si <varname>b</varname> est une matrice de la même taille que <varname>a</varname> alors l'opération se réalise élément par élément. Si <varname>a</varname> est un nombre et <varname>b</varname> est une matrice alors cela crée une matrice de la même taille que <varname>b</varname> contenant <varname>a</varname> mis à la puissance de chaque élément de <varname>b</varname>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a+b</synopsis></term>
         <listitem>
           <para>Addition. Ajoute deux nombres, matrices, fonctions ou chaînes de caractères. Si vous ajoutez une chaîne à quelque chose, le résultat ne peut être qu'une chaîne.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a-b</synopsis></term>
         <listitem>
           <para>Soustraction. Soustrait deux nombres, matrices ou fonctions.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a*b</synopsis></term>
         <listitem>
           <para>Multiplication. C'est la multiplication matricielle normale.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a.*b</synopsis></term>
         <listitem>
           <para>Multiplication élément par élément si <varname>a</varname> et <varname>b</varname> sont des matrices.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a/b</synopsis></term>
         <listitem>
           <para>Division.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a./b</synopsis></term>
         <listitem>
           <para>Division élément par élément.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a\b</synopsis></term>
         <listitem>
           <para>Division arrière. C'est donc la même chose que <userinput>b/a</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a.\b</synopsis></term>
         <listitem>
           <para>Division arrière élément par élément.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a%b</synopsis></term>
         <listitem>
           <para>L'opérateur modulo. Cela n'active pas le mode d'<link linkend="genius-gel-modular-evaluation">évaluation modulaire</link>, mais renvoie juste le reste de <userinput>a/b</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a.%b</synopsis></term>
         <listitem>
           <para>L'opérateur modulo élément par élément. Renvoie le reste après la division entière élément par élément de <userinput>a./b</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a mod b</synopsis></term>
         <listitem>
           <para>Opérateur d'évaluation modulaire. L'expression <varname>a</varname> est évaluée modulo <varname>b</varname>. Consultez <xref linkend="genius-gel-modular-evaluation"/>. Certaines fonctions et opérateurs se comportent différemment modulo un entier.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a!</synopsis></term>
         <listitem>
           <para>Opérateur factoriel. Il s'agit de <userinput>1*...*(n-2)*(n-1)*n</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a!!</synopsis></term>
         <listitem>
           <para>Opérateur double factoriel. Il s'agit de <userinput>1*...*(n-4)*(n-2)*n</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a==b</synopsis></term>
         <listitem>
           <para>Opérateur égalité (renvoie <constant>true</constant> ou <constant>false</constant>).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a!=b</synopsis></term>
         <listitem>
           <para>Opérateur inégalité, renvoie <constant>true</constant> si <varname>a</varname> n'est pas égal à <varname>b</varname> sinon renvoie <constant>false</constant>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a&lt;&gt;b</synopsis></term>
         <listitem>
           <para>Autre opérateur inégalité, renvoie <constant>true</constant> si <varname>a</varname> n'est pas égal à <varname>b</varname> sinon renvoie <constant>false</constant>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a&lt;=b</synopsis></term>
         <listitem>
           <para>Opérateur inférieur ou égal, renvoie <constant>true</constant> si <varname>a</varname> est inférieur ou égal à <varname>b</varname> sinon renvoie <constant>false</constant>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a&gt;=b</synopsis></term>
         <listitem>
           <para>Opérateur supérieur ou égal, renvoie <constant>true</constant> si <varname>a</varname> est supérieur ou égal à <varname>b</varname> sinon renvoie <constant>false</constant>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a&lt;=&gt;b</synopsis></term>
         <listitem>
           <para>Opérateur comparaison. Si <varname>a</varname> est égal à <varname>b</varname>, cela renvoie 0, si <varname>a</varname> est inférieur à <varname>b</varname>, cela renvoie -1 et si <varname>a </varname> est supérieur à <varname>b</varname>, cela renvoie 1.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a and b</synopsis></term>
         <listitem>
           <para>Et logique (and).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a or b</synopsis></term>
         <listitem>
           <para>Ou logique (or).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a xor b</synopsis></term>
         <listitem>
           <para>Ou exclusif logique (xor).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>not a</synopsis></term>
         <listitem>
           <para>Non logique (not).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>-a</synopsis></term>
         <listitem>
           <para>Opérateur négation.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>&amp;a</synopsis></term>
         <listitem>
           <para>Référencement de variable (pour transmettre une référence à quelque chose). Consultez <xref linkend="genius-gel-references"/>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>*a</synopsis></term>
         <listitem>
           <para>Déréférencement de variable (pour accéder à une variable référencée). Consultez <xref linkend="genius-gel-references"/>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a'</synopsis></term>
         <listitem>
           <para>Matrice transposée conjuguée.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a.'</synopsis></term>
         <listitem>
           <para>Matrice transposée, ne conjugue pas les entrées.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a@(b,c)</synopsis></term>
         <listitem>
           <para>Renvoie l'élément ligne <varname>b</varname> et colonne <varname>c</varname> d'une matrice. Si <varname>b</varname> et <varname>c</varname> sont des vecteurs alors cela renvoie les lignes et les colonnes correspondantes, soit une sous-matrice.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a@(b,)</synopsis></term>
         <listitem>
           <para>Renvoie une ligne de matrice (ou des lignes si <varname>b</varname> est un vecteur).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a@(b,:)</synopsis></term>
         <listitem>
           <para>Comme ci-dessus.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a@(,c)</synopsis></term>
         <listitem>
           <para>Renvoie une colonne de matrice (ou des colonnes si <varname>c</varname> est un vecteur).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a@(:,c)</synopsis></term>
         <listitem>
           <para>Comme ci-dessus.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a@(b)</synopsis></term>
         <listitem>
           <para>Renvoie un élément d'une matrice en le traitant comme un vecteur. Cela parcourt la matrice dans le sens des lignes.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a:b</synopsis></term>
         <listitem>
           <para>Construit un vecteur allant de <varname>a</varname> à <varname>b</varname> (ou indique une région ligne, colonne pour l'opérateur <literal>@</literal>). Par exemple pour obtenir les lignes 2 à 4 de la matrice <varname>A</varname>, nous pourrions faire <programlisting>A@(2:4,)
	     </programlisting> puisque <userinput>2:4</userinput> renvoie un vecteur <userinput>[2,3,4]</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>a:b:c</synopsis></term>
         <listitem>
           <para>Construit un vecteur allant de <varname>a</varname> à <varname>c</varname> avec un pas de <varname>b</varname>. Ce qui donne par exemple <programlisting>genius&gt; 1:2:9
=
`[1, 3, 5, 7, 9]
</programlisting></para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>(a)i</synopsis></term>
         <listitem>
           <para>Crée un nombre imaginaire (multiplie <varname>a</varname> par le nombre imaginaire pur). Remarquez que normalement le nombre <varname>i</varname> s'écrit <userinput>1i</userinput>. Donc le nombre ci-dessus est égal à <programlisting>(a)*1i
	     </programlisting></para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><synopsis>`a</synopsis></term>
         <listitem>
           <para>Apostropher un identifiant afin qu'il ne soit pas évalué. Ou apostropher une matrice afin qu'elle ne soit pas étendue.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><synopsis>a swapwith b</synopsis></term>
         <listitem>
           <para>Échange la valeur de <varname>a</varname> par la valeur de <varname>b</varname>. Pour le moment, ne fonctionne pas sur des ensembles d'éléments de matrice. Renvoie <constant>null</constant>. Disponible à partir de la version 1.0.13.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><synopsis>increment a</synopsis></term>
         <listitem>
           <para>Incrémente la variable <varname>a</varname> de 1. Si <varname>a</varname> est une matrice alors incrémente chaque élément. C'est équivalent à <userinput>a=a+1</userinput> mais est plus rapide. Renvoie <constant>null</constant>. Disponible à partir de la version 1.0.13.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><synopsis>increment a by b</synopsis></term>
         <listitem>
           <para>Incrémente la variable <varname>a</varname> de <varname>b</varname>. Si <varname>a</varname> est une matrice alors incrémente chaque élément. C'est équivalent à <userinput>a=a+b</userinput> mais est plus rapide. Renvoie <constant>null</constant>. Disponible à partir de la version 1.0.13.</para>
         </listitem>
        </varlistentry>


      </variablelist>

<note>
<para>L'opérateur @() rend l'opérateur : très utile. Grâce à lui, vous pouvez indiquer des régions d'une matrice. Ainsi a@(2:4,6) sont les lignes 2,3,4 de la colonne 6 ou a@(,1:2) vous renvoie les deux premières colonnes d'une matrice. Vous pouvez également attribuer un opérateur @() tant que la valeur de droite est une matrice qui correspond en taille à la région ou si c'est n'importe quel autre type de valeur.</para>
</note>

<note>
<para>Les opérateurs de comparaison (excepté l'opérateur &lt;=&gt; qui se comporte normalement) ne sont pas des opérateurs strictement binaires, ils peuvent en fait être regroupés comme dans une expression mathématique normale, par ex. : (1&lt;x&lt;=y&lt;5) est une expression booléenne correcte qui signifie bien ce qu'elle doit, c'est-à-dire (1&lt;x et x≤y et y&lt;5)</para>
</note>

<note>
<para>L'opérateur unitaire « moins » agit de manière différente en fonction de l'endroit où il apparaît. S'il apparaît devant un nombre, il est très prioritaire, s'il apparaît devant une expression, il est moins prioritaire que les opérateurs puissance et factoriel. Par exemple, <userinput>-1^k</userinput> est bien <userinput>(-1)^k</userinput>, mais <userinput>-foo(1)^k</userinput> est bien <userinput>-(foo(1)^k)</userinput>. En conséquence, faites attention à son utilisation et, en cas de doute, ajoutez des parenthèses.</para>
</note>
    </sect1>

  </chapter>

  <!-- ============= GEL Programming ========================== -->
  <chapter id="genius-gel-programming">
    <title>Programmation avec GEL</title>

    <sect1 id="genius-gel-conditionals">
      <title>Tests</title>
      <para>Syntaxe : <programlisting><![CDATA[if <expression1> then <expression2> [else <expression3>]
]]></programlisting> Si <literal>else</literal> est omis alors si l'<literal>expression1</literal> donne <constant>false</constant> ou 0, <literal>NULL</literal> est renvoyé.</para>
      <para>Exemples : <programlisting><![CDATA[if(a==5)then(a=a-1)
if b<a then b=a
if c>0 then c=c-1 else c=0
a = ( if b>0 then b else 1 )
]]></programlisting> Notez que <literal>=</literal> est traduit en <literal>==</literal> s'il est utilisé à l'intérieur de l'expression du <literal>if</literal>, donc <programlisting>if a=5 then a=a-1
</programlisting> est interprété comme : <programlisting>if a==5 then a:=a-1
</programlisting></para>
    </sect1>

    <sect1 id="genius-gel-loops">
      <title>Boucles</title>

      <sect2 id="genius-gel-loops-while">
        <title>Boucles tant que (while) et jusqu'à (until)</title>
        <para>Syntaxe : <programlisting><![CDATA[while <expression1> do <expression2>
until <expression1> do <expression2>
do <expression2> while <expression1>
do <expression2> until <expression1>]]></programlisting> Elles sont similaires à celles rencontrées dans les autres langages. Cependant puisqu'en GEL, cela doit être une expression qui doit renvoyer des valeurs, ces constructions renvoient simplement le résultat de la dernière itération ou <literal>NULL</literal> si aucune itération n'a eu lieu. Dans l'expression booléenne, <literal>=</literal> est traduit en <literal>==</literal> de la même manière que cela se produit pour l'instruction <literal>if</literal>.</para>
      </sect2>

      <sect2 id="genius-gel-loops-for">
        <title>Boucles pour (for)</title>
        <para>Syntaxe : <programlisting><![CDATA[for <identifier> = <from> to <to> do <body>
for <identifier> = <from> to <to> by <increment> do <body>]]></programlisting> Boucle où l'identifiant (identifier) prend toutes les valeurs comprises entre <literal>&lt;from&gt;</literal> et <literal>&lt;to&gt;</literal>, avec en option un incrément autre que 1. Elles sont plus rapides, plus simples à utiliser et plus compactes que les boucles classiques ci-dessus mais moins flexibles. L'identifiant doit être un identifiant et ne peut pas être un déréférencement. La valeur de l'identifiant est la dernière valeur prise par l'identifiant ou <literal>&lt;from&gt;</literal> si le contenu (body) de la boucle n'a jamais été évalué. Vous êtes sûr que la variable est initialisée après une boucle donc vous pouvez l'utiliser sans risque. <literal>&lt;from&gt;</literal>, <literal>&lt;to&gt;</literal> et <literal>&lt;increment&gt;</literal> ne doivent pas être complexes. Il n'est pas sûr que la valeur <literal>&lt;to&gt;</literal> soit atteinte, mais elle n'est jamais dépassée. Par exemple, ce qui suit affiche les nombres impairs de 1 à 19 : <programlisting>for i = 1 to 20 by 2 do print(i)
</programlisting></para>
      </sect2>

      <sect2 id="genius-gel-loops-foreach">
        <title>Boucles pour chaque (foreach)</title>
        <para>Syntaxe : <programlisting><![CDATA[for <identifier> in <matrix> do <body>]]></programlisting> Pour chaque élément de la matrice, en allant de ligne en ligne et de gauche à droite, le contenu (body) est exécuté en utilisant la valeur actuelle de l'élément pour l'identifiant (identifier). Pour afficher les nombres 1, 2, 3 et 4 dans cet ordre, vous pouvez faire : <programlisting>for n in [1,2:3,4] do print(n)
</programlisting> Si vous souhaitez parcourir les lignes et les colonnes d'une matrice, vous pouvez utiliser les fonctions « RowsOf » et « ColumnsOf » qui renvoient un vecteur des lignes ou des colonnes de la matrice. Par conséquent, <programlisting>for n in RowsOf ([1,2:3,4]) do print(n)
</programlisting> affiche [1,2] puis [3,4].</para>
      </sect2>

      <sect2 id="genius-gel-loops-break-continue">
        <title>Instructions « break » et « continue »</title>
        <para>Vous pouvez aussi utiliser les instructions <literal>break</literal> et <literal>continue</literal> dans les boucles. L'instruction <literal>continue</literal> reprend la boucle à sa prochaine itération alors que l'instruction <literal>break</literal> sort de la boucle actuelle. <programlisting><![CDATA[while(<expression1>) do (
  if(<expression2>) break
  else if(<expression3>) continue;
  <expression4>
)
]]></programlisting></para>
      </sect2>
    </sect1>

    <sect1 id="genius-gel-sums-products">
      <title>Sommes et produits</title>
      <para>Syntaxe : <programlisting><![CDATA[sum <identifier> = <from> to <to> do <body>
sum <identifier> = <from> to <to> by <increment> do <body>
sum <identifier> in <matrix> do <body>
prod <identifier> = <from> to <to> do <body>
prod <identifier> = <from> to <to> by <increment> do <body>
prod <identifier> in <matrix> do <body>]]></programlisting> Si vous remplacez <literal>for</literal> par <literal>sum</literal> ou <literal>prod</literal> alors vous obtenez une somme ou un produit à la place d'une boucle <literal>for</literal>. Au lieu de renvoyer la dernière valeur, cela renvoie la somme ou le produit des valeurs respectivement.</para>
      <para>Si aucun contenu (body) est exécuté (par exemple, <userinput>sum i=1 to 0 do ...</userinput>) alors la convention standard est que <literal>sum</literal> renvoie 0 et <literal>prod</literal> renvoie 1.</para>
    </sect1>

    <sect1 id="genius-gel-comparison-operators">
      <title>Opérateurs de comparaison</title>
      <para>Les opérateurs de comparaison standard suivants sont pris en charge dans GEL et ont des significations évidentes : <literal>==</literal>, <literal>&gt;=</literal>, <literal>&lt;=</literal>, <literal>!=</literal>, <literal>&lt;&gt;</literal>, <literal>&lt;</literal>, <literal>&gt;</literal>. Ils renvoient <constant>true</constant> ou <constant>false</constant>. Les opérateurs <literal>!=</literal> et <literal>&lt;&gt;</literal> sont les mêmes et signifient « n'est pas égal à ». GEL comprend également l'opérateur <literal>&lt;=&gt;</literal> qui renvoie -1 si la partie de gauche est plus petite, 0 si les deux parties sont égales, 1 si la partie de gauche est plus grande.</para>

      <para>Normalement <literal>=</literal> est traduit en <literal>==</literal> partout où GEL s'attend à une condition comme celle de la condition si (if). Par exemple, <programlisting>if a=b then c
if a==b then c
</programlisting> sont identiques en GEL. Cependant vous devriez vraiment utiliser <literal>==</literal> ou <literal>:=</literal> lorsque vous voulez respectivement comparer ou attribuer si vous voulez éviter des erreurs et que votre code soit facile à lire.</para>

      <para>Tous les opérateurs de comparaison (sauf l'opérateur <literal>&lt;=&gt;</literal> qui se comporte différemment) ne sont pas strictement des opérateurs binaires, ils peuvent en réalité être regroupés comme cela se produit en mathématique, par ex. : (<literal>1&lt;x&lt;=y&lt;5</literal>) est une expression booléenne légale et signifie ce qu'elle doit, c'est-à-dire (1&lt;x et x≤y et y&lt;5)</para>
      <para>Pour construire des expressions logiques, utilisez les mots <literal>not</literal>, <literal>and</literal>, <literal>or</literal>, <literal>xor</literal>. Les opérateurs <literal>or</literal> et <literal>and</literal> sont des entités spéciales car ils évaluent leurs arguments les uns après les autres, donc les astuces classiques des évaluations conditionnelles fonctionnent. Par exemple : <literal>1 or a=1</literal> n'effectue pas l'attribution <literal>a=1</literal> puisque le premier argument est vrai (true).</para>
    </sect1>

      <sect1 id="genius-gel-variables-global">
        <title>Variables globales et portée des variables</title>
	<para>GEL est un <ulink url="http://fr.wikipedia.org/wiki/Port%C3%A9e_%28informatique%29">langage à portée dynamique</ulink>. Nous allons expliquer ce que cela signifie ci-dessous. Les variables et les fonctions normales sont à portée dynamique. Les exceptions sont les <link linkend="genius-gel-parameters">variables paramètres</link> qui sont toujours globales.</para>
	<para>Comme la plupart des langages de programmation, GEL possède différents types de variables. Normalement lorsqu'une variable est définie dans une fonction, elle est visible dans cette fonction et à partir de toutes les fonctions qui sont appelées (tous les contextes supérieurs). Par exemple, supposons qu'une fonction <function>f</function> définit une variable <varname>a</varname> puis appelle la fonction <function>g</function>. Alors la fonction <function>g</function> peut faire référence à <varname>a</varname>. Mais dès que la fonction <function>f</function> est quittée, la variable <varname>a</varname> disparaît de la portée. Par exemple, le code suivant affiche 5. La fonction <function>g</function> ne peut pas être appelée à partir du niveau supérieur (en dehors de <function>f</function> puisque <varname>a</varname> n'est pas défini). <programlisting>function f() = (a:=5; g());
function g() = print(a);
f();
</programlisting></para>
        <para>Si vous définissez une variable à l'intérieur d'une fonction, elle va supplanter toutes variables définies dans les fonctions appelantes. Par exemple, si nous modifions le code ci-dessus et écrivons : <programlisting>function f() = (a:=5; g());
function g() = print(a);
a:=10;
f();
</programlisting> Ce code affiche toujours 5. Mais si vous appelez <function>g</function> à l'extérieur de <function>f</function> alors la valeur 10 s'affiche. Remarquez que le fait d'initialiser <varname>a</varname> à 5 à l'intérieur de <function>f</function> ne modifie pas la valeur de <varname>a</varname> au niveau (global) supérieur donc si vous contrôlez maintenant la valeur de <varname>a</varname>, elle sera toujours de 10.</para>
	<para>Les arguments de fonction sont exactement comme les variables définies à l'intérieur de la fonction sauf qu'ils sont initialisés à la valeur qui a été transmise à la fonction. En dehors de ce point, ils sont traités exactement comme toutes les autres variables définies dans la fonction.</para>
	<para>Les fonctions sont traitées exactement comme les variables. Par conséquent, vous pouvez redéfinir localement les fonctions. Normalement (au niveau supérieur) vous ne pouvez pas redéfinir des variables et fonctions protégées mais, vous pouvez le faire localement. Considérons la session suivante : <screen><prompt>genius&gt; </prompt><userinput>function f(x) = sin(x)^2</userinput>
= (`(x)=(sin(x)^2))
<prompt>genius&gt; </prompt><userinput>function g(x) = ((function sin(x)=x^10);f(x))</userinput>
= (`(x)=((sin:=(`(x)=(x^10)));f(x)))
<prompt>genius&gt; </prompt><userinput>g(10)</userinput>
= 1e20
</screen></para>
	<para>Les fonctions et variables définies au niveau supérieur sont considérées globales. Elles sont visibles de n'importe où. Comme nous l'avons déjà dit, la fonction <function>f</function> suivante ne modifie pas la valeur de <varname>a</varname> à 5. <programlisting>a=6;
function f() = (a:=5);
f();
</programlisting> De temps en temps, cependant, il est nécessaire de définir une variable globale à l'intérieur d'une fonction. Lorsque cela est nécessaire, utilisez la fonction <function>set</function>. La transmission d'une chaîne de caractères ou d'un identifiant précédé d'une apostrophe à cette fonction définit la variable comme globale (au niveau supérieur). Par exemple, pour initialiser <varname>a</varname> à la valeur 3, vous pouvez utiliser : <programlisting>set(`a,3)
</programlisting> ou : <programlisting>set("a",3)
</programlisting></para>
        <para>La fonction <function>set</function> définit toujours au niveau global supérieur. Il n'est pas possible de définir une variable locale dans des fonctions à partir d'un sous-programme. Si c'est nécessaire, vous devez utiliser la transmission par référence.</para>
	<para>Donc pour récapituler dans un langage plus technique : genius opère avec différents contextes numérotés. Le niveau supérieur est le contexte 0 (zéro). À chaque fois qu'une fonction est entrée, le contexte est augmenté et lorsqu'une fonction est quittée, le contexte est diminué. Une fonction ou une variable est toujours visible à partir de tous les contextes de numéro plus élevé. Si une variable a été définie dans un contexte de numéro plus bas alors attribuer une valeur à cette variable a pour effet de créer une nouvelle variable locale dans le numéro de contexte actuel et cette variable est maintenant visible de tous les contextes de numéro plus élevé.</para>
	<para>Il existe également des variables vraiment locales, qui ne sont visibles de nulle part sauf du contexte actuel. Ainsi lorsque vous renvoyez des fonctions par valeur, il se peut que cela fasse référence à des variables non visibles à partir des contextes supérieurs et cela peut être un problème. Consultez <link linkend="genius-gel-true-local-variables">Variables vraiment locales</link> et <link linkend="genius-gel-returning-functions">Renvoi de fonctions</link>.</para>
      </sect1>

      <sect1 id="genius-gel-parameters">
        <title>Variables paramètres</title>
	<para>Comme dit précédemment, il existe des variables spéciales appelées paramètres qui existent dans toutes les portées. Pour déclarer un paramètre appelé <varname>foo</varname> et initialisé à 1, écrivez <programlisting><![CDATA[parameter foo = 1
]]></programlisting> À partir de cet instant, <varname>foo</varname> est une variable complètement globale. Attribuer une valeur à <varname>foo</varname> à l'intérieur d'une fonction, modifie la variable dans tous les contextes, ce qui signifie que les fonctions ne possèdent pas de copie privée des paramètres.</para>
        <para>Si vous annulez la définition comme paramètre en utilisant la fonction <link linkend="gel-function-undefine"><function>undefine</function></link>, la variable cesse d'être un paramètre.</para>
        <para>Certains paramètres sont internes à Genius et modifient son comportement.</para>
      </sect1>

    <sect1 id="genius-gel-returning">
      <title>Sortie de fonction</title>
	<para>Normalement une fonction est une ou plusieurs expressions séparées par un point virgule et la valeur de la dernière expression est renvoyée. C'est suffisant pour les fonctions simples mais parfois vous ne voulez pas qu'une fonction renvoie la dernière chose calculée. Il se peut que vous vouliez, par exemple, quitter la fonction à partir du milieu de la fonction. Dans ce cas, vous pouvez utiliser le mot-clé <literal>return</literal>. <literal>Return</literal> prend un seul argument qui est la valeur renvoyée.</para>
      <para>Exemple : <programlisting><![CDATA[function f(x) = (
  y=1;
  while true do (
    if x>50 then return y;
    y=y+1;
    x=x+1
  )
)
]]></programlisting></para>
    </sect1>


    <sect1 id="genius-gel-references">
      <title>Références</title>
      <para>Il peut être nécessaire pour certaines fonctions de renvoyer plus d'une seule valeur. C'est possible en renvoyant un vecteur de valeurs mais souvent il est pratique d'utiliser le passage d'une référence à une variable. Vous transmettez une référence vers une variable à une fonction et la fonction attribue des valeurs à la variable pour vous en utilisant un déréférencement. Ce n'est pas le seul usage que vous pouvez faire du passage par référence mais c'est son utilisation principale.</para>
      <para>Lorsque vous utilisez des fonctions qui renvoient des valeurs à travers des références dans sa liste d'argument, il suffit de transmettre le nom de la variable précédée d'une esperluette. Par exemple, le code suivant calcule une valeur propre d'une matrice <varname>A</varname> avec un vecteur propre initial pressenti <varname>x</varname> et enregistre le vecteur propre calculé dans la variable appelée <varname>v</varname> : <programlisting><![CDATA[RayleighQuotientIteration (A,x,0.001,100,&v)
]]></programlisting></para>
      <para>Les détails concernant le fonctionnement des références et leur syntaxe sont similaires à ceux du langage C. L'opérateur <literal>&amp;</literal> référence une variable et <literal>*</literal> la déréférence. Les deux ne peuvent s'appliquer que sur un identifiant, par conséquent <literal>**a</literal> n'est pas une expression légale en GEL.</para>
      <para>Les références s'expliquent mieux par un exemple : <programlisting><![CDATA[a=1;
b=&a;
*b=2;
]]></programlisting> Maintenant <varname>a</varname> contient 2. Vous pouvez également référencer des fonctions : <programlisting><![CDATA[function f(x) = x+1;
t=&f;
*t(3)
]]></programlisting> donne 4.</para>
    </sect1>

    <sect1 id="genius-gel-lvalues">
      <title>Valeurs à gauche (lvalues)</title>
      <para>Une valeur à gauche est la partie à gauche d'une attribution. En d'autres mots, une valeur à gauche est la chose dans laquelle vous attribuez quelque chose. Des valeurs à gauche valides sont : <variablelist>
  <varlistentry>
    <term><userinput>a</userinput></term>
    <listitem>
      <para>Identifiant. Ici nous attribuons une valeur à la variable de nom <varname>a</varname>.</para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><userinput>*a</userinput></term>
    <listitem>
      <para>Déréférence un identifiant. Cela attribue une valeur à ce que vers quoi la variable <varname>a</varname> pointe.</para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><userinput>a@(&lt;région&gt;)</userinput></term>
    <listitem>
      <para>Une région d'une matrice. Ici la région est indiquée normalement comme avec l'opérateur habituel @() et peut être une entrée unique ou une région entière de la matrice.</para>
    </listitem>
  </varlistentry>
</variablelist></para>
      <para>Exemples : <programlisting>a:=4
*tmp := 89
a@(1,1) := 5
a@(4:8,3) := [1,2,3,4,5]'
</programlisting> Notez que <literal>:=</literal> et <literal>=</literal> peuvent être utilisés indifféremment l'un à la place de l'autre. Sauf si l'attribution apparaît dans une condition. Il est donc plus sûr d'utiliser uniquement <literal>:=</literal> lorsque vous voulez faire une attribution et <literal>==</literal> lorsque vous voulez faire une comparaison.</para>
    </sect1>

  </chapter>

  <chapter id="genius-gel-programming-advanced">
    <title>Programmation avancée avec GEL</title>

    <sect1 id="genius-gel-error-handling">
      <title>Gestion des erreurs</title>
      <para>Si vous détectez une erreur dans votre fonction, vous pouvez la quitter rapidement (« to bail out of »). Pour les erreurs normales, telles que les mauvais types d'arguments, vous pouvez éviter de calculer la fonction en ajoutant l'instruction <literal>bailout</literal>. Si quelque chose se passe vraiment mal et que vous voulez interrompre complètement le calcul actuel, vous pouvez utiliser l'instruction <literal>exception</literal>.</para>
      <para>Par exemple, si vous voulez vérifier les arguments de votre fonction. Vous pouvez utiliser le code suivant. <programlisting>function f(M) = (
  if not IsMatrix (M) then (
    error ("M n'est pas une matrice !");
    bailout
  );
  ...
)
</programlisting></para>
    </sect1>

    <sect1 id="genius-gel-toplevel-syntax">
      <title>Syntaxe de haut-niveau</title>
      <para>La syntaxe est légèrement différente si vous saisissez des instructions au niveau supérieur plutôt que lorsque vous êtes entre parenthèses ou à l'intérieur de fonctions. Au niveau supérieur, un retour à la ligne a le même effet qu'un appui sur la touche Entrée en ligne de commande. Par conséquent, considérez vos programmes comme une suite de lignes saisie en ligne de commande. En particulier, vous n'avez pas besoin de saisir le séparateur à la fin d'une ligne (à moins que cela ne soit une partie de plusieurs instructions à l'intérieur de parenthèses).</para>
      <para>Le code suivant provoque une erreur lorsqu'il est saisi au niveau supérieur d'un programme alors qu'il fonctionne très bien dans une fonction. <programlisting>if QuelqueChose() then
  FaireQuelqueChose()
else
  FaireAutreChose()
</programlisting></para>
      <para>Le problème est que lorsque l'<application>Outil de maths Genius</application> rencontre la fin de la ligne après la seconde ligne, il décide que l'instruction est complète et il l'exécute. Après l'exécution l'<application>Outil de maths Genius</application> se rend à la ligne suivante, voit l'instruction <literal>else</literal> et affiche une erreur de syntaxe. Pour régler ce problème, utilisez des parenthèses. L'<application>Outil de maths Genius</application> ne sera pas satisfait tant qu'il n'aura pas trouvé que toutes les parenthèses sont fermées. <programlisting>if QuelqueChose() then(
  FaireQuelqueChose()
) else (
  FaireAutreChose()
)
</programlisting></para>
    </sect1>

     <sect1 id="genius-gel-returning-functions">
       <title>Renvoi de fonction</title>
	<para>Il est possible de renvoyer des fonctions en tant que donnée. De cette manière, vous pouvez écrire une fonction qui construit des fonctions dans un but précis en fonction de certains paramètres. Le point délicat est de savoir quelles variables sont visibles par la fonction construite. La façon dont cela fonctionne dans GEL est que, lorsqu'une fonction renvoie une autre fonction, tous les identifiants qui étaient référencés dans le corps de la fonction mère, et qui deviendraient hors de portée, sont en fait ajoutés dans un dictionnaire privé de la fonction renvoyée. Ainsi la fonction voit toutes les variables qui étaient à sa portée au moment où elle a été définie. Par exemple, nous pouvons définir ainsi une fonction qui renvoie une fonction qui ajoute 5 à son argument : <programlisting>function f() = (
  k = 5;
  `(x) = (x+k)
)
</programlisting> Notez que la fonction ajoute <varname>k</varname> à <varname>x</varname>. Vous pouvez l'utiliser ainsi. <programlisting>g = f();
g(5)
</programlisting> et <userinput>g(5)</userinput> doit renvoyer 10.</para>
	<para>Une chose à noter est que la valeur de <varname>k</varname> utilisée est celle qui est en cours lorsque la fonction <function>f</function> a terminé son exécution. Par exemple : <programlisting>function f() = (
  k := 5;
  function r(x) = (x+k);
  k := 10;
  r
)
</programlisting> renvoie une fonction qui ajoute 10 à son argument plutôt que 5. La raison est que le dictionnaire supplémentaire est créé uniquement lorsque le contexte dans lequel la fonction a été définie, se termine, c'est-à-dire lorsque la fonction <function>f</function> renvoie. C'est cohérent avec la manière dont on s'attend à ce que la fonction <function>r</function> fonctionne à l'intérieur de la fonction <function>f</function> d'après les règles sur la portée des variables dans GEL. Les seules variables ajoutées au dictionnaire supplémentaire sont celles qui sont présentes dans le contexte qui se termine et n'existe plus. Les variables utilisées dans la fonction, qui sont toujours dans des contextes valides, fonctionnent comme d'habitude, en utilisant la valeur actuelle de la variable. La seule différence, c'est pour les variables et les fonctions globales. Tous les identifiants qui référencent des variables globales au moment de la définition de la fonction ne sont pas ajoutés au dictionnaire privé. C'est pour éviter beaucoup de travail non nécessaire lors du renvoi de fonctions et cela ne pose que rarement problème. Par exemple, supposons que vous supprimiez le « k= 5 » de la fonction <function>f</function> et qu'au niveau supérieur vous définissiez <varname>k</varname> à 5 par exemple. Alors lorsque vous exécutez <function>f</function>, la fonction <function>r</function> ne met pas <varname>k</varname> dans le dictionnaire privé parce qu'il était global (au niveau supérieur) au moment de la définition de <function>r</function>.</para>
	<para>Parfois il est préférable d'avoir un meilleur contrôle sur la façon dont les variables sont copiées dans le dictionnaire privé. Depuis la version 1.0.7, vous pouvez spécifier quelles variables sont copiées dans le dictionnaire privée en mettant des crochets carrés supplémentaires après les arguments contenant la liste des variables qui seront copiées, séparées par des virgules. Si vous faites cela alors les variables sont copiées dans le dictionnaire privé au moment de la définition de la fonction et le dictionnaire privé n'est pas modifié ensuite. Par exemple, <programlisting>function f() = (
  k := 5;
  function r(x) [k] = (x+k);
  k := 10;
  r
)
</programlisting> renvoie une fonction qui, lorsqu'elle est appelée, ajoute 5 à ses arguments. La copie locale de <varname>k</varname> a été créée lorsque la fonction a été définie.</para>
	<para>Lorsque vous désirez que la fonction n'ait pas de dictionnaire privé alors mettez des crochets carrés vides après la liste d'arguments. Alors aucun dictionnaire privé n'est créé. Ce méchanisme est utile pour améliorer l'efficacité des fonctions qui n'ont pas besoin de dictionnaire privé, ou encore si vous voulez que la fonction utilise les variables dans leur état au moment où elle est appelée. Par exemple, supposons que vous vouliez que la fonction renvoyée par <function>f</function> recherche la valeur de <varname>k</varname> dans le niveau supérieur bien qu'il y ait une variable locale portant le même nom pendant la définition. Le code suivant <programlisting>function f() = (
  k := 5;
  function r(x) [] = (x+k);
  r
);
k := 10;
g = f();
g(10)
</programlisting> renvoie 20 et non pas 15, ce qui se produirait si une variable <varname>k</varname> contenant une valeur 5 était ajoutée dans le dictionnaire privé.</para>
    </sect1>

    <sect1 id="genius-gel-true-local-variables">
      <title>Variables locales vraies</title>
      <para>Lors de la transmission de fonctions dans d'autres fonctions, la portée normale des variables peut être indésirable. Par exemple : <programlisting>k := 10;
function r(x) = (x+k);
function f(g,x) = (
  k := 5;
  g(x)
);
f(r,1)
</programlisting> vous souhaitez probablement que la fonction <function>r</function> lorsqu'elle est transmise à <function>g</function> dans <function>f</function>, puisse voir <varname>k</varname> comme 10 plutôt que 5 afin que le code renvoie 11 et pas 6. Cependant, tel que c'est écrit, la fonction lorsqu'elle est exécutée voit la variable <varname>k</varname> qui est égale à 5. Il y a deux façons de résoudre cela. L'une est que la fonction <function>r</function> obtienne <varname>k</varname> dans un dictionnaire privé en utilisant la notation crochet carré de la section <link linkend="genius-gel-returning-functions">Renvoi de fonctions</link>.</para>
      <para>Mais il y a une autre solution. Depuis la version 1.0.7 de Genius, il existe des variables vraiment locales. Ce sont des variables qui ne sont visibles qu'à partir du contexte actuel, et pas par les fonctions appelées. Nous pouvons définir <varname>k</varname> comme une variable locale dans la fonction <function>f</function>. Pour faire cela, ajoutez une instruction <command>local</command> comme première instruction dans la fonction (cela doit toujours être la première instruction de la fonction). Vous pouvez également transformer tous les arguments en variables locales, c'est-à-dire <programlisting>function f(g,x) = (
  local g,x,k;
  k := 5;
  g(x)
);
</programlisting> Dans ce cas, le code fonctionne comme attendu et affiche 11. Notez que l'instruction <command>local</command> initialise toutes les variables référencées (sauf les arguments de la fonction) à <constant>null</constant>.</para>
      <para>Si toutes les variables doivent être créées localement, vous pouvez utiliser un astérisque à la place d'une liste de variables. Dans ce cas, les variables ne sont pas initialisées tant qu'elles ne sont pas définies bien sûr. La définition suivante de <function>f</function> fonctionne également : <programlisting>function f(g,x) = (
  local *;
  k := 5;
  g(x)
);
</programlisting></para>
      <para>C'est une bonne pratique que toutes les fonctions qui prennent d'autres fonctions comme argument, utilisent des variables locales. De cette manière, la fonction transmise ne voit pas les détails de l'implémentation et n'est pas perturbée.</para>
    </sect1>

    <sect1 id="genius-gel-startup-procedure">
      <title>Procédure de démarrage de GEL</title>
      <para>Dans un premier temps, le programme recherche dans le répertoire d'installation les fichiers de la bibliothèque installés (la version compilée <filename>lib.cgel</filename>), puis il recherche dans le répertoire actuel, puis il essaye de charger un fichier non compilé appelé <filename>~/.geniusinit</filename>.</para>
      <para>Si vous modifiez l'emplacement d'installation de la bibliothèque, vous devrez d'abord la compiler avec la commande <command>genius --compile loader.gel &gt; lib.cgel</command></para>
    </sect1>

    <sect1 id="genius-gel-loading-programs">
      <title>Chargement de programmes</title>
      <para>Imaginons que vous ayiez un programme d'une certaine taille que vous avez écrit dans un fichier et que vous vouliez lire ce fichier. Dans ce cas, il y a deux options. Vous pouvez conserver les fonctions que vous utilisez le plus souvent dans le fichier <filename>~/.geniusinit</filename> ou, si vous voulez charger un fichier au milieu d'une session, (ou à partir d'un autre fichier), vous pouvez saisir <command>load &lt;liste de noms de fichier&gt;</command> au prompt. Cela doit être réalisé au niveau supérieur et pas à l'intérieur d'une fonction ou d'autres choses et cela ne peut pas faire partie d'une expression. La syntaxe est également légèrement différente du reste de genius, plus proche de celle d'un shell. Vous pouvez saisir le nom du fichier entre guillemets. Si vous utilisez les guillemets simples '', vous obtenez exactement la chaîne saisie mais si vous utilisez les guillemets doubles "", les caractères spéciaux ne seront pas échappés comme ils le sont pour les chaînes de caractères. Exemple : <programlisting>load programme1.gel programme2.gel
load "Etrange nom de fichier avec des ESPACES.gel"
</programlisting> Il existe également des commandes intégrées <command>cd</command>, <command>pwd</command> et <command>ls</command>. <command>cd</command> qui ne prenne qu'un seul argument, la commande <command>ls</command> ne prend qu'un seul argument qui est comme le « glob » dans le shell unix (c'est-à-dire vous pouvez utiliser des caractères génériques). La commande <command>pwd</command> ne prend pas d'argument. Par exemple : <programlisting>cd repertoire_contenant_des_programmes_gel
ls *.gel
</programlisting></para>
    </sect1>

  </chapter>

  <!-- ============= Matrices ================================= -->
  <chapter id="genius-gel-matrices">
    <title>Matrices en GEL</title>

    <para>Genius prend en charge les vecteurs et les matrices et possède une importante bibliothèque de fonctions pour la manipulation des matrices et l'algèbre linéaire.</para>

    <sect1 id="genius-gel-matrix-support">
      <title>Saisie de matrices</title>
      <para>Pour saisir des matrices, vous pouvez utiliser l'une des deux syntaxes suivantes. Soit vous saisissez la matrice sur une seule ligne, en séparant les valeurs par des virgules et les lignes par des point-virgules soit vous saisissez chaque rangée sur une ligne en séparant les valeurs par des virgules. Vous pouvez également combiner les deux méthodes. Ainsi pour saisir une matrice 3x3 contenant les nombres 1 à 9, vous pouvez saisir <programlisting>[1,2,3;4,5,6;7,8,9]
</programlisting> ou <programlisting>[1, 2, 3
 4, 5, 6
 7, 8, 9]
</programlisting> Toutefois, n'utilisez pas à la fois « ; » et un retour chariot sur la même ligne.</para>

      <para>Vous pouvez aussi utiliser les fonctionnalités de complétion pour saisir des matrices. Par exemple, vous pouvez saisir : <programlisting>a = [ 1, 2, 3
      4, 5, 6
      7, 8, 9]
b = [ a,  10
      11, 12]
</programlisting> pour obtenir <programlisting>[1,   2,  3, 10
 4,   5,  6, 10
 7,   8,  9, 10
 11, 11, 11, 12]
</programlisting> De même, vous pouvez construire des matrices à partir de vecteurs ou d'autres choses du même type.</para>

      <para>Notez que les éléments non spécifiés sont initialisés à 0, donc <programlisting>[1, 2, 3
 4, 5
 6]
</programlisting> donne au final <programlisting>
[1, 2, 3
 4, 5, 0
 6, 0, 0]
</programlisting></para>

      <para>Lorsque les matrices sont évaluées, elles sont parcourues dans le sens des lignes, exactement de la même façon que l'opérateur <literal>M@(j)</literal>.</para>

      <note>
        <para>Faites attention lorsque vous utilisez des retours à la ligne à l'intérieur des crochets <literal>[ ]</literal> car ils ont une signification légèrement différente dans ce cas. Vous commencez une nouvelle ligne.</para>
      </note>

    </sect1>

    <sect1 id="genius-gel-matrix-transpose">
      <title>Opérateur de transposition conjuguée et de transposition</title>
      <para>Vous pouvez obtenir la matrice transposée conjuguée grâce à l'opérateur <literal>'</literal>. Cela signifie que la valeur dans la <varname>i</varname>ième colonne et la <varname>j</varname>ième ligne est le complexe conjugué de la valeur dans la <varname>j</varname>ième colonne et la <varname>i</varname>ième ligne de la matrice d'origine. Dans l'exemple : <programlisting>[1,2,3]*[4,5,6]'
</programlisting> il faut transposer la deuxième matrice pour permettre la multiplication des matrices. Si vous voulez juste transposer une matrice sans la conjuguer, vous devez utiliser l'opérateur <literal>.'</literal>. Par exemple : <programlisting>[1,2,3]*[4,5,6i].'
</programlisting></para>
	<para>Remarquez que la transposée normale, c'est-à-dire l'opérateur <literal>.'</literal>, est beaucoup plus rapide et ne crée pas une nouvelle copie de la matrice en mémoire. La transposition conjuguée crée hélas une nouvelle copie. Il est recommandé de toujours utiliser l'opérateur <literal>.'</literal> lorsque vous travaillez avec des matrices et des vecteurs non complexes.</para>
    </sect1>

    <sect1 id="genius-gel-matrix-linalg">
      <title>Algèbre linéaire</title>
      <para>Genius implémente beaucoup de routines utiles d'algèbre linéraire et de manipulation de matrice. Consultez les sections <link linkend="genius-gel-function-list-linear-algebra">Algèbre linéaire</link> et <link linkend="genius-gel-function-list-matrix">Manipulation de matrice</link> dans la liste des fonctions GEL.</para>
      <para>Les routines d'algèbre linéaire implémentées en GEL ne proviennent pas actuellement d'un paquet numérique bien testé et ne doivent donc pas être utilisées pour des calculs numériques critiques. D'un autre côté, Genius implémente très bien les nombreuses opérations d'algèbre linéaire avec des coefficients rationnels et entiers. Elles sont par nature exactes et en fait vous donnent de bien meilleurs résultats que les routines en double précision usuelles pour l'algèbre linéaire.</para>
      <para>Par exemple, il est vain de calculer le rang et le noyau d'une matrice réelle puisque dans tous les cas pratiques, il faut considérer que la matrice contienne de légères erreurs. Il est possible que vous obteniez un résultat différent de ce que vous attendiez. Le problème est qu'en faisant une légère perturbation toute matrice est de rang complet et inversible. Cependant si la matrice est composée de nombres rationnels alors le rang et le noyau sont toujours exactes.</para>
      <para>En général, lorsque Genius calcule la base d'un espace vectoriel (par exemple avec la fonction <function>NullSpace</function>) il renvoie la base sous la forme d'une matrice dans laquelle les colonnes sont les vecteurs de la base. Cela signifie que lorsque Genius parle d'un sous-espace linéaire, cela désigne une matrice dont l'espace des colonnes est le sous-espace linéaire concerné.</para>
      <para>Notez que Genius peut se souvenir d'un certaine nombre de propriétés d'une matrice. Par exemple, il se souvient qu'une matrice est sous une forme réduite. Si beaucoup d'appels à des fonctions qui utilisent en interne une forme réduite, sont effectués, vous pouvez réduire la matrice une fois pour toute auparavant. Les appels successifs à la fonction <function>rref</function> seront très rapides.</para>
    </sect1>

  </chapter>

  <!-- ============= Polynomials ============================== -->
  <chapter id="genius-gel-polynomials">
    <title>Polynômes en GEL</title>

    <para>Actuellement Genius peut prendre en charge des polynômes à une variable écrits sous la forme de vecteurs et réaliser des opérations élémentaires avec eux. Il est prévu d'étendre cette prise en charge.</para>

    <sect1 id="genius-gel-polynomials-using">
      <title>Utilisation des polynômes</title>
      <para>Actuellement les polynômes à une variable sont juste des vecteurs lignes dont les valeurs sont les coefficients. La puissance du terme est la position dans le vecteur, la première étant 0. Ainsi, <programlisting>[1,2,3]
</programlisting> représente le polynôme <programlisting>1 + 2*x + 3*x^2
</programlisting></para>
      <para>Vous pouvez ajouter, soustraire et multiplier des polynômes en utilisant respectivement les fonctions <link linkend="gel-function-AddPoly"><function>AddPoly</function></link>, <link linkend="gel-function-SubtractPoly"><function>SubtractPoly</function></link> et <link linkend="gel-function-MultiplyPoly"><function>MultiplyPoly</function></link>. Vous pouvez afficher un polynôme en utilisant la fonction <link linkend="gel-function-PolyToString"><function>PolyToString</function></link>. Par exemple, <programlisting>PolyToString([1,2,3],"y")
</programlisting> donne <programlisting>3*y^2 + 2*y + 1
</programlisting> Vous pouvez également obtenir une représentation fonctionnelle du polynôme afin de pouvoir l'évaluer. Pour cela, utilisez <link linkend="gel-function-PolyToFunction"><function>PolyToFunction</function></link> qui renvoie une fonction anonyme. <programlisting>f = PolyToFunction([0,1,1])
f(2)
</programlisting></para>
      <para>Il est aussi possible de trouver les racines des polynômes de degré 1 à 4 en utilisant la fonction <link linkend="gel-function-PolynomialRoots"><function>PolynomialRoots</function></link> qui appelle la formule appropriée. Les polynômes de degré supérieur doit être convertis en fonctions et résolus numériquement en utilisant une fonction telle que <link linkend="gel-function-FindRootBisection"><function>FindRootBisection</function></link>, <link linkend="gel-function-FindRootFalsePosition"><function>FindRootFalsePosition</function></link>, <link linkend="gel-function-FindRootMullersMethod"><function>FindRootMullersMethod</function></link> ou <link linkend="gel-function-FindRootSecant"><function>FindRootSecant</function></link>.</para>
      <para>Consultez <xref linkend="genius-gel-function-list-polynomials"/> dans la liste des fonctions pour le reste des fonctions agissant sur les polynômes.</para>
    </sect1>

  </chapter>

  <!-- ============= Set Theory ============================== -->
  <chapter id="genius-gel-settheory">
    <title>Théorie des ensembles en GEL</title>

    <para>Genius possède des fonctionnalités intégrées basiques concernant la théorie des ensembles. Actuellement un ensemble est juste un vecteur (ou une matrice). Chaque objet distinct est traité comme un élément différent.</para>

    <sect1 id="genius-gel-sets-using">
      <title>Utilisation des ensembles</title>
      <para>Tout comme les vecteurs, les objets dans les ensembles peuvent comprendre des nombres, des chaînes de caractères, <constant>null</constant>, des matrices et des vecteurs. Il est prévu dans le futur d'avoir un type dédié pour les ensembles plutôt que d'utiliser des vecteurs. Notez que les nombres flottants sont différents des entiers, même s'ils semblent être les mêmes. Cela signifie que Genius traite <constant>0</constant> et <constant>0.0</constant> comme deux éléments différents. La constante <constant>null</constant> est traitée comme un ensemble vide.</para>
      <para>Pour construire un ensemble à partir d'un vecteur, utilisez la fonction <link linkend="gel-function-MakeSet"><function>MakeSet</function></link>. Actuellement, cela renvoie juste un nouveau vecteur où chaque élément est unique. <screen><prompt>genius&gt; </prompt><userinput>MakeSet([1,2,2,3])</userinput>
= [1, 2, 3]
</screen></para>

	<para>De manière similaire, il existe des fonctions <link linkend="gel-function-Union"><function>Union</function></link>, <link linkend="gel-function-Intersection"><function>Intersection</function></link>, <link linkend="gel-function-SetMinus"><function>SetMinus</function></link> dont le but est assez intuitif. Par exemple : <screen><prompt>genius&gt; </prompt><userinput>Union([1,2,3], [1,2,4])</userinput>
= [1, 2, 4, 3]
</screen> Notez qu'aucun ordre n'est garanti pour les valeurs renvoyées. Si vous souhaitez trier le vecteur, vous devez utiliser la fonction <link linkend="gel-function-SortVector"><function>SortVector</function></link>.</para>

	<para>Pour tester l'appartenance, il existe les fonctions <link linkend="gel-function-IsIn"><function>IsIn</function></link> et <link linkend="gel-function-IsSubset"><function>IsSubset</function></link> qui renvoient une valeur booléenne. Par exemple, <screen><prompt>genius&gt; </prompt><userinput>IsIn (1, [0,1,2])</userinput>
= true
</screen> La syntaxe <userinput>IsIn(x,X)</userinput> est bien sûr équivalente à <userinput>IsSubset([x],X)</userinput>. Notez que puisque l'ensemble vide est un sous-ensemble de tous les ensembles, <userinput>IsSubset(null,X)</userinput> est toujours vrai.</para>

    </sect1>

  </chapter>

  <!-- ============= GEL function list ======================== -->
  <chapter id="genius-gel-function-list">
    <title>Liste des fonctions GEL</title>

    
    <para>Pour obtenir de l'aide sur une fonction spécifique à partir de la console, saisissez : <programlisting>help NomDeLaFonction
</programlisting></para>

    <sect1 id="genius-gel-function-list-commands">
      <title>Commandes</title>
      <variablelist>
        <varlistentry id="gel-command-help">
         <term>help</term>
         <listitem>
          <synopsis>help</synopsis>
          <synopsis>help NomDeLaFonction</synopsis>
          <para>Affiche l'aide (ou l'aide d'une fonction/commande).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-command-load">
         <term>load</term>
         <listitem>
          <synopsis>load "fichier.gel"</synopsis>
          <para>Charge un fichier dans l'interpréteur. Le contenu du fichier s'exécute comme s'il était saisi en ligne de commande.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-command-cd">
         <term>cd</term>
         <listitem>
          <synopsis>cd /nom/de/repertoire</synopsis>
          <para>Change le répertoire de travail en <filename>/nom/de/repertoire</filename>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-command-pwd">
         <term>pwd</term>
         <listitem>
          <synopsis>pwd</synopsis>
          <para>Affiche le répertoire de travail.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-command-ls">
         <term>ls</term>
         <listitem>
          <synopsis>ls</synopsis>
          <para>Affiche les fichiers dans le répertoire.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-command-plugin">
         <term>plugin</term>
         <listitem>
          <synopsis>plugin nom_du_greffon</synopsis>
          <para>Charge un greffon. Le greffon portant ce nom doit être installé sur votre système dans le répertoire correct.</para>
         </listitem>
        </varlistentry>
      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-basic">
      <title>Basique</title>
      <variablelist>
        <varlistentry id="gel-function-AskButtons">
         <term>AskButtons</term>
         <listitem>
          <synopsis>AskButtons (requête)</synopsis>
          <synopsis>AskButtons (requête, bouton1, ...)</synopsis>
	  <para>Pose une question et présente une liste de boutons à l'utilisateur (ou un menu d'options en mode texte). Renvoie l'indice du bouton enfoncé, commençant à 1, c'est-à-dire renvoie 1 si le premier bouton est enfoncé, 2 si le second bouton est enfoncé, etc. Si l'utilisateur ferme la fenêtre (ou appui sur Entrée en mode texte) alors <constant>null</constant> est renvoyé. L'exécution du programme est bloqué jusqu'à ce que l'utilisateur réponde.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-AskString">
         <term>AskString</term>
         <listitem>
          <synopsis>AskString (requête)</synopsis>
          <synopsis>AskString (requête, défaut)</synopsis>
          <para>Pose une question et permet à l'utilisateur de saisir une chaîne de caractères qui est ensuite renvoyée. Si l'utilisateur annule ou ferme la fenêtre alors <constant>null</constant> est renvoyé. L'exécution du programme est bloquée jusqu'à ce que l'utilisateur réponde. Si <varname>défaut</varname> est fourni alors il est pré-saisi pour que l'utilisateur n'ait qu'à appuyer sur Entrée.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Compose">
         <term>Compose</term>
         <listitem>
          <synopsis>Compose (f,g)</synopsis>
          <para>Compose deux fonctions et renvoie une fonction qui est la composition de <function>f</function> par <function>g</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ComposePower">
         <term>ComposePower</term>
         <listitem>
          <synopsis>ComposePower (f,n,x)</synopsis>
          <para>Compose et exécute une fonction avec elle-même <varname>n</varname> fois en transmettant l'argument <varname>x</varname>. Cela renvoie <varname>x</varname> si <varname>n</varname> vaut 0. Exemple : <screen><prompt>genius&gt;</prompt> <userinput>function f(x) = x^2 ;</userinput>
<prompt>genius&gt;</prompt> <userinput>ComposePower (f,3,7)</userinput>
= 5764801
<prompt>genius&gt;</prompt> <userinput>f(f(f(7)))</userinput>
= 5764801
</screen></para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Evaluate">
         <term>Evaluate</term>
         <listitem>
          <synopsis>Evaluate (chaîne)</synopsis>
          <para>Analyse et évalue une chaîne.</para>
         </listitem>
        </varlistentry>


        <varlistentry id="gel-function-GetCurrentModulo">
         <term>GetCurrentModulo</term>
         <listitem>
          <synopsis>GetCurrentModulo</synopsis>
          <para>Obtient le modulo actuel à partir du contexte extérieur à la fonction. C'est-à-dire, si l'extérieur de la fonction a été exécuté en mode modulo (en utilisant <literal>mod</literal>) alors cela renvoie cette valeur de modulo. Normalement le corps d'une fonction appelée n'est pas exécutée en arithmétique modulaire et cette fonction intégrée donne la possibilité aux fonctions GEL de prendre connaissance de l'arithmétique modulaire en cours.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Identity">
         <term>Identity</term>
         <listitem>
          <synopsis>Identity (x)</synopsis>
          <para>Fonction identité, renvoie son argument.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IntegerFromBoolean">
         <term>IntegerFromBoolean</term>
         <listitem>
          <synopsis>IntegerFromBoolean (val_bool)</synopsis>
	  <para>Crée un entier (0 pour <constant>false</constant> ou 1 pour <constant>true</constant>) à partir d'une valeur booléenne. <varname>val_bool</varname> peut également être un nombre et dans ce cas une valeur non nulle est interprétée comme <constant>true</constant> et zéro est interprété comme <constant>false</constant>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsBoolean">
         <term>IsBoolean</term>
         <listitem>
          <synopsis>IsBoolean (param)</synopsis>
          <para>Vérifie que l'argument est un booléen (et pas un nombre).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsDefined">
         <term>IsDefined</term>
         <listitem>
          <synopsis>IsDefined (id)</synopsis>
          <para>Vérifie qu'un identifiant est défini. Vous devez transmettre une chaîne de caractères ou un identifiant. Si vous transmettez une matrice, chaque entrée est évaluée séparément et la matrice doit contenir des chaînes ou des identifiants.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsFunction">
         <term>IsFunction</term>
         <listitem>
          <synopsis>IsFunction (param)</synopsis>
          <para>Vérifie que l'argument est une fonction.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsFunctionOrIdentifier">
         <term>IsFunctionOrIdentifier</term>
         <listitem>
          <synopsis>IsFunctionOrIdentifier (param)</synopsis>
          <para>Vérifie que l'argument est une fonction ou un identificateur.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsFunctionRef">
         <term>IsFunctionRef</term>
         <listitem>
          <synopsis>IsFunctionRef (param)</synopsis>
          <para>Vérifie que l'argument est une référence de fonction. Cela inclut les références de variable.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsMatrix">
         <term>IsMatrix</term>
         <listitem>
          <synopsis>IsMatrix (param)</synopsis>
          <para>Vérifie que l'argument est une matrice. Même si <constant>null</constant> est parfois considéré comme une matrice vide, la fonction <function>IsMatrix</function> ne considère pas <constant>null</constant> comme une matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsNull">
         <term>IsNull</term>
         <listitem>
          <synopsis>IsNull (param)</synopsis>
	  <para>Vérifie que l'argument est <constant>null</constant>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsString">
         <term>IsString</term>
         <listitem>
          <synopsis>IsString (param)</synopsis>
          <para>Vérifie que l'argument est une chaîne de caractères.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsValue">
         <term>IsValue</term>
         <listitem>
          <synopsis>IsValue (param)</synopsis>
          <para>Vérifie que l'argument est un nombre.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Parse">
         <term>Parse</term>
         <listitem>
          <synopsis>Parse (chaîne)</synopsis>
          <para>Analyse mais n'évalue pas une chaîne de caractères. Notez que certains pré-calculs sont effectués pendant l'étape d'évaluation.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SetFunctionFlags">
         <term>SetFunctionFlags</term>
         <listitem>
          <synopsis>SetFunctionFlags (id,drapeau...)</synopsis>
          <para>Définit des drapeaux pour une fonction, actuellement <literal>« PropagateMod »</literal> et <literal>« NoModuloArguments »</literal>. Si <literal>« PropagateMod »</literal> est défini alors le corps de la fonction est évalué en arithmétique modulaire lorsque la fonction est appelée à l'intérieur d'un bloc qui est évalué en utilisant l'arithmétique modulaire (en utilisant <literal>mod</literal>). Si <literal>« NoModuloArguments »</literal> est défini alors les arguments de la fonction ne sont jamais évalués en arithmétique modulaire.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SetHelp">
         <term>SetHelp</term>
         <listitem>
          <synopsis>SetHelp (id,categorie,desc)</synopsis>
          <para>Définit une catégorie et une ligne de description d'aide pour une fonction.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SetHelpAlias">
         <term>SetHelpAlias</term>
         <listitem>
          <synopsis>SetHelpAlias (id,alias)</synopsis>
          <para>Met en place un pseudonyme pour l'aide.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-chdir">
         <term>chdir</term>
         <listitem>
          <synopsis>chdir (rep)</synopsis>
          <para>Change le répertoire actuel, tout comme la commande <command>cd</command>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-CurrentTime">
         <term>CurrentTime</term>
         <listitem>
          <synopsis>CurrentTime</synopsis>
          <para>Renvoie l'heure UNIX courante avec une précision de l'ordre de la microseconde sous forme d'un nombre à virgule flottante, c'est-à-dire le nombre de secondes écoulées depuis le 1er janvier 1970.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-display">
         <term>display</term>
         <listitem>
          <synopsis>display (chaîne,expr)</synopsis>
          <para>Affiche une chaîne de caractères et une expression séparées par deux points.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-error">
         <term>error</term>
         <listitem>
          <synopsis>error (chaîne)</synopsis>
          <para>Affiche une chaîne vers la sortie erreur (dans la console).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-exit">
         <term>exit</term>
         <listitem>
          <synopsis>exit</synopsis>
          <para>Alias : <function>quit</function></para>
          <para>Quitte le programme.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-false">
         <term>false</term>
         <listitem>
          <synopsis>false</synopsis>
          <para>Alias : <function>False</function>, <function>FALSE</function></para>
	  <para>La valeur booléenne <constant>false</constant> (faux).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-manual">
         <term>manual</term>
         <listitem>
          <synopsis>manual</synopsis>
          <para>Affiche le manuel utilisateur.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-print">
         <term>print</term>
         <listitem>
          <synopsis>print (chaîne)</synopsis>
          <para>Affiche une expression suivie d'un retour à la ligne. L'argument <varname>chaine</varname> peut être n'importe quelle expression. Elle est transformée en chaîne avant d'être affichée.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-printn">
         <term>printn</term>
         <listitem>
          <synopsis>printn (chaîne)</synopsis>
          <para>Affiche une expression non suivie d'un retour à la ligne. L'argument <varname>chaine</varname> peut être n'importe quelle expression. Elle est transformée en chaîne avant d'être affichée.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-protect">
         <term>protect</term>
         <listitem>
          <synopsis>protect (id)</synopsis>
          <para>Protège une variable de la modification. C'est utilisé dans les fonctions internes de GEL pour leur éviter d'être accidentellement écrasées.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ProtectAll">
         <term>ProtectAll</term>
         <listitem>
          <synopsis>ProtectAll ()</synopsis>
          <para>Protège toutes les variables, paramètres et fonctions actuellement définis de la modification. C'est utilisé dans les fonctions internes de GEL pour leur éviter d'être accidentellement écrasées. Normalement l'<application>Outil de maths Genius</application> considère que les variables non protégées sont définies par l'utilisateur.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-set">
         <term>set</term>
         <listitem>
          <synopsis>set (id,val)</synopsis>
          <para>Définit une variable globale. L'<varname>identifiant</varname> (id) peut être soit une chaîne de caractères, soit un identifiant précédé d'une apostrophe comme ci-dessous. Par exemple : <programlisting>set(`x,1)
	    </programlisting> définit la variable globale <varname>x</varname> à 1.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-string">
         <term>string</term>
         <listitem>
          <synopsis>string (s)</synopsis>
          <para>Crée une chaîne de caractères à partir de n'importe quel argument.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-true">
         <term>true</term>
         <listitem>
          <synopsis>true</synopsis>
          <para>Alias : <function>True</function>, <function>TRUE</function></para>
	  <para>La valeur booléenne <constant>true</constant> (vrai).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-undefine">
         <term>undefine</term>
         <listitem>
          <synopsis>undefine (id)</synopsis>
          <para>Alias : <function>Undefine</function></para>
          <para>Annule la définition d'une variable, y compris les variables locales et globales, toutes les valeurs dans tous les contextes sont effacées. Vous ne devriez vraiment pas utiliser cette fonction pour des variables locales. Un vecteur d'identifiants peut également être transmis pour annuler la définition de plusieurs variables.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-UndefineAll">
         <term>UndefineAll</term>
         <listitem>
          <synopsis>UndefineAll ()</synopsis>
	  <para>Annule la définition de toutes les variables globales non protégées (y compris les fonctions et les paramètres). Normalement l'<application>Outil de maths Genius</application> considère que les variables protégées sont des variables et des fonctions définies par le système. Notez que <function>UndefineAll</function> efface seulement la définition globale des symboles et pas les définitions locales donc cela peut être utilisé à l'intérieur d'autres fonctions sans danger.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-unprotect">
         <term>unprotect</term>
         <listitem>
          <synopsis>unprotect (id)</synopsis>
          <para>Annule la protection d'une variable contre sa modification.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-UserVariables">
         <term>UserVariables</term>
         <listitem>
          <synopsis>UserVariables ()</synopsis>
          <para>Renvoie un vecteur d'identifiants des variables globales définies par l'utilisateur (non protégées).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-wait">
         <term>wait</term>
         <listitem>
          <synopsis>wait (secs)</synopsis>
          <para>Attend un nombre spécifié de secondes. <varname>secs</varname> ne doit pas être négatif. Zéro est accepté et rien ne se passe dans ce cas mis à part, peut-être, le traitement d'évènements de l'interface utilisateur.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-version">
         <term>version</term>
         <listitem>
          <synopsis>version</synopsis>
          <para>Renvoie la version de Genius sous la forme d'un vecteur horizontal à 3 valeurs : en premier la version majeure, puis la version mineure et enfin le niveau de correction.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-warranty">
         <term>warranty</term>
         <listitem>
          <synopsis>warranty</synopsis>
          <para>Renvoie les informations sur la garantie.</para>
         </listitem>
        </varlistentry>
      </variablelist>

    </sect1>

    <sect1 id="genius-gel-function-parameters">
      <title>Paramètres</title>
      <variablelist>
        <varlistentry id="gel-function-ChopTolerance">
         <term>ChopTolerance</term>
         <listitem>
          <synopsis>ChopTolerance = nombre</synopsis>
          <para>Tolérance pour la fonction <function>Chop</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ContinuousNumberOfTries">
         <term>ContinuousNumberOfTries</term>
         <listitem>
          <synopsis>ContinuousNumberOfTries = nombre</synopsis>
          <para>Nombre d'itérations à essayer pour rechercher la continuité et les limites d'une fonction.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ContinuousSFS">
         <term>ContinuousSFS</term>
         <listitem>
          <synopsis>ContinuousSFS = nombre</synopsis>
          <para>Nombre d'étapes successives pour atteindre la tolérance pour le calcul de la continuité.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ContinuousTolerance">
         <term>ContinuousTolerance</term>
         <listitem>
          <synopsis>ContinuousTolerance = nombre</synopsis>
          <para>Tolérance pour la continuité d'une fonction et pour le calcul de la limite.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DerivativeNumberOfTries">
         <term>DerivativeNumberOfTries</term>
         <listitem>
          <synopsis>DerivativeNumberOfTries = nombre</synopsis>
          <para>Nombre d'itérations à essayer pour trouver la limite pour la dérivée.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DerivativeSFS">
         <term>DerivativeSFS</term>
         <listitem>
          <synopsis>DerivativeSFS = nombre</synopsis>
          <para>Nombre d'étapes successives pour atteindre la tolérance pour le calcul de la dérivée.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DerivativeTolerance">
         <term>DerivativeTolerance</term>
         <listitem>
          <synopsis>DerivativeTolerance = nombre</synopsis>
          <para>Tolérance pour le calcul de la dérivée des fonctions.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ErrorFunctionTolerance">
         <term>ErrorFunctionTolerance</term>
         <listitem>
          <synopsis>ErrorFunctionTolerance = nombre</synopsis>
          <para>Tolérance pour la fonction <function>ErrorFunction</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FloatPrecision">
         <term>FloatPrecision</term>
         <listitem>
          <synopsis>FloatPrecision = nombre</synopsis>
          <para>Précision en virgule flottante.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FullExpressions">
         <term>FullExpressions</term>
         <listitem>
          <synopsis>FullExpressions = booléen</synopsis>
          <para>Affiche les expressions complètes, même celles de plus d'une ligne.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-GaussDistributionTolerance">
         <term>GaussDistributionTolerance</term>
         <listitem>
          <synopsis>GaussDistributionTolerance = nombre</synopsis>
          <para>Tolérance pour la fonction <function>GaussDistribution</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IntegerOutputBase">
         <term>IntegerOutputBase</term>
         <listitem>
          <synopsis>IntegerOutputBase = nombre</synopsis>
          <para>Base de sortie pour les entiers.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsPrimeMillerRabinReps">
         <term>IsPrimeMillerRabinReps</term>
         <listitem>
          <synopsis>IsPrimeMillerRabinReps = nombre</synopsis>
          <para>Nombre de tests supplémentaires de Miller-Rabin à lancer sur un nombre avant de le déclarer comme premier dans <function>IsPrime</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LinePlotDrawLegends">
         <term>LinePlotDrawLegends</term>
         <listitem>
          <synopsis>LinePlotDrawLegends = true</synopsis>
          <para>Indique à genius de tracer les légendes pour les <link linkend="genius-gel-function-list-plotting">fonctions de tracé de graphiques</link> telles que <link linkend="gel-function-LinePlot"><function>LinePlot</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LinePlotVariableNames">
         <term>LinePlotVariableNames</term>
         <listitem>
          <synopsis>LinePlotVariableNames = ["x","y","z","t"]</synopsis>
          <para>Indique à Genius les noms des variables utilisés pour les <link linkend="genius-gel-function-list-plotting">fonctions de tracé de graphiques</link> telles que <link linkend="gel-function-LinePlot"><function>LinePlot</function></link> et autres.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LinePlotWindow">
         <term>LinePlotWindow</term>
         <listitem>
          <synopsis>LinePlotWindow = [x1,x2,y1,y2]</synopsis>
          <para>Définit les limites pour les <link linkend="genius-gel-function-list-plotting">fonctions de tracé de graphiques</link> telles que <link linkend="gel-function-LinePlot"><function>LinePlot</function></link>.</para>
         </listitem>
        </varlistentry>


        <varlistentry id="gel-function-MaxDigits">
         <term>MaxDigits</term>
         <listitem>
          <synopsis>MaxDigits = nombre</synopsis>
          <para>Nombre maximum de chiffres à afficher.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MaxErrors">
         <term>MaxErrors</term>
         <listitem>
          <synopsis>MaxErrors = nombre</synopsis>
          <para>Nombre maximum d'erreurs à afficher.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MixedFractions">
         <term>MixedFractions</term>
         <listitem>
          <synopsis>MixedFractions = booléen</synopsis>
          <para>Si vrai, les fractions mixtes sont affichées.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalIntegralFunction">
         <term>NumericalIntegralFunction</term>
         <listitem>
          <synopsis>NumericalIntegralFunction = fonction</synopsis>
          <para>Fonction utilisée pour l'intégration numérique dans la fonction <function>NumericalIntegral</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalIntegralSteps">
         <term>NumericalIntegralSteps</term>
         <listitem>
          <synopsis>NumericalIntegralSteps = nombre</synopsis>
          <para>Nombre d'étapes à réaliser pour la fonction <function>NumericalIntegral</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-OutputChopExponent">
         <term>OutputChopExponent</term>
         <listitem>
          <synopsis>OutputChopExponent = nombre</synopsis>
	  <para>Lorsqu'un autre nombre dans l'objet qui est affiché (une matrice ou une valeur) est plus grand que 10<superscript>-OutputChopWhenExponent</superscript> et que le nombre actuellement affiché est inférieur à 10<superscript>-OutputChopExponent</superscript> alors afficher <computeroutput>0.0</computeroutput> au lieu du nombre.</para>
<para>La sortie n'est jamais tronquée si <function>OutputChopExponent</function> vaut zéro. Cela doit être un nombre entier positif.</para>
<para>Si vous voulez toujours que la sortie soit tronquée selon <function>OutputChopExponent</function> alors définissez <function>OutputChopWhenExponent</function> à quelque chose de supérieur ou égal à <function>OutputChopExponent</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-OutputChopWhenExponent">
         <term>OutputChopWhenExponent</term>
         <listitem>
          <synopsis>OutputChopWhenExponent = nombre</synopsis>
	  <para>Définit quand la sortie est tronquée. Consultez <link linkend="gel-function-OutputChopExponent"><function>OutputChopExponent</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-OutputStyle">
         <term>OutputStyle</term>
         <listitem>
          <synopsis>OutputStyle = chaîne</synopsis>
          <para>Style des affichages, cela peut être <literal>normal</literal>, <literal>latex</literal>, <literal>mathml</literal> ou <literal>troff</literal>.</para>
	  <para>Cela affecte principalement la façon dont les matrices et les fractions sont affichées et est utile pour le copier/coller vers des documents. Par exemple, vous pouvez définir ce paramètre à « latex » par : <programlisting>OutputStyle = "latex"
</programlisting></para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ResultsAsFloats">
         <term>ResultsAsFloats</term>
         <listitem>
          <synopsis>ResultsAsFloats = booléen</synopsis>
          <para>Convertit tous les résultats en nombres flottants avant de les afficher.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ScientificNotation">
         <term>ScientificNotation</term>
         <listitem>
          <synopsis>ScientificNotation = booléen</synopsis>
          <para>Utilise la notation scientifique.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SlopefieldTicks">
         <term>SlopefieldTicks</term>
         <listitem>
          <synopsis>SlopefieldTicks = [verticale,horizontale]</synopsis>
          <para>Définit le nombre de petits traits verticaux et horizontaux dans un graphique de champ de tangente (consultez <link linkend="gel-function-SlopefieldPlot"><function>SlopefieldPlot</function></link>).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SumProductNumberOfTries">
         <term>SumProductNumberOfTries</term>
         <listitem>
          <synopsis>SumProductNumberOfTries = nombre</synopsis>
          <para>Nombre d'itérations à essayer pour les fonctions <function>InfiniteSum</function> et <function>InfiniteProduct</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SumProductSFS">
         <term>SumProductSFS</term>
         <listitem>
          <synopsis>SumProductSFS = nombre</synopsis>
          <para>Nombre d'étapes successives pour atteindre la tolérance pour les fonctions <function>InfiniteSum</function> et <function>InfiniteProduct</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SumProductTolerance">
         <term>SumProductTolerance</term>
         <listitem>
          <synopsis>SumProductTolerance = nombre</synopsis>
          <para>Tolérance pour les fonctions <function>InfiniteSum</function> et <function>InfiniteProduct</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SurfacePlotVariableNames">
         <term>SurfacePlotVariableNames</term>
         <listitem>
          <synopsis>SurfacePlotVariableNames = ["x","y","z"]</synopsis>
          <para>Indique à Genius les noms de variables à utiliser comme noms par défaut pour les <link linkend="genius-gel-function-list-plotting">fonctions de tracé de surface</link> utilisant <link linkend="gel-function-SurfacePlot"><function>SurfacePlot</function></link>. Notez que le <varname>z</varname> ne fait pas référence à l'axe dépendant (vertical) mais à la variable complexe z indépendante <userinput>z=x+iy</userinput>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SurfacePlotWindow">
         <term>SurfacePlotWindow</term>
         <listitem>
          <synopsis>SurfacePlotWindow = [x1,x2,y1,y2,z1,z2]</synopsis>
          <para>Définit les limites pour les tracés de surface (consultez <link linkend="gel-function-SurfacePlot"><function>SurfacePlot</function></link>).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-VectorfieldNormalized">
         <term>VectorfieldNormalized</term>
         <listitem>
          <synopsis>VectorfieldNormalized = true</synopsis>
          <para>Indique si les longueurs de flèches du tracé de champ de vecteurs doivent être normalisées. Si true (vrai), les tracés de champ de vecteurs n'affichent que la direction et pas l'amplitude (consultez <link linkend="gel-function-VectorfieldPlot"><function>VectorfieldPlot</function></link>).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-VectorfieldTicks">
         <term>VectorfieldTicks</term>
         <listitem>
          <synopsis>VectorfieldTicks = [verticale,horizontale]</synopsis>
          <para>Définit le nombre de petits traits verticaux et horizontaux dans un graphique de champ de vecteurs (consultez <link linkend="gel-function-SlopefieldPlot"><function>VectorfieldPlot</function></link>).</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-constants">
      <title>Constantes</title>
      <variablelist>
        <varlistentry id="gel-function-CatalanConstant">
         <term>CatalanConstant</term>
         <listitem>
          <synopsis>CatalanConstant</synopsis>
          <para>Constante de Catalan, approximativement 0,915..., elle est définie comme la série des termes <userinput>(-1^k)/((2*k+1)^2)</userinput> où <varname>k</varname> va de 0 à l'infini.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/CatalansConstant.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-EulerConstant">
         <term>EulerConstant</term>
         <listitem>
          <synopsis>EulerConstant</synopsis>
          <para>Alias : <function>gamma</function></para>
          <para>Constante d'Euler gamma, parfois appelée la constante d'Euler-Mascheroni.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Constante_d%27Euler-Mascheroni">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/MascheroniConstant.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/Euler-MascheroniConstant.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-GoldenRatio">
         <term>GoldenRatio</term>
         <listitem>
          <synopsis>GoldenRatio</synopsis>
          <para>Le nombre d'or.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Nombre_d%27or">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/GoldenRatio.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/GoldenRatio.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Gravity">
         <term>Gravity</term>
         <listitem>
          <synopsis>Gravity</synopsis>
          <para>Accélération de la chute libre au niveau de la mer.</para>
          <para>Consultez <ulink url="http://en.wikipedia.org/wiki/Standard_gravity">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-e">
         <term>e</term>
         <listitem>
          <synopsis>e</synopsis>
          <para>La base du logarithme naturel. <userinput>e^x</userinput> est la fonction exponentielle <link linkend="gel-function-exp"><function>exp</function></link>. C'est approximativement le nombre 2.71828182846...</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/E_%28nombre%29">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/E.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/e.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-pi">
         <term>pi</term>
         <listitem>
          <synopsis>pi</synopsis>
          <para>Le nombre pi, c'est-à-dire le rapport de la circonférence d'un cercle sur son diamètre. Il vaut approximativement 3.14159265359...</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Pi">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/Pi.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/Pi.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-numeric">
      <title>Nombres</title>
      <variablelist>
        <varlistentry id="gel-function-AbsoluteValue">
         <term>AbsoluteValue</term>
         <listitem>
          <synopsis>AbsoluteValue (x)</synopsis>
          <para>Alias : <function>abs</function></para>
          <para>Valeur absolue d'un nombre et, si <varname>x</varname> est une grandeur complexe, le module de <varname>x</varname>, c'est-à-dire la distance de <varname>x</varname> à l'origine.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Valeur_absolue">Wikipedia</ulink>, <ulink url="http://planetmath.org/encyclopedia/AbsoluteValue.html">Planetmath (valeur absolue)</ulink>, <ulink url="http://planetmath.org/encyclopedia/ModulusOfComplexNumber.html">Planetmath (module)</ulink>, <ulink url="http://mathworld.wolfram.com/AbsoluteValue.html">Mathworld (valeur absolue)</ulink> ou <ulink url="http://mathworld.wolfram.com/ComplexModulus.html">Mathworld (module complexe)</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Chop">
         <term>Chop</term>
         <listitem>
          <synopsis>Chop (x)</synopsis>
          <para>Remplace les très petits nombres par zéro.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ComplexConjugate">
         <term>ComplexConjugate</term>
         <listitem>
          <synopsis>ComplexConjugate (z)</synopsis>
          <para>Alias : <function>conj</function> <function>Conj</function></para>
          <para>Calcule le conjugué du nombre complexe <varname>z</varname>. Si <varname>z</varname> est un vecteur ou une matrice, tous les éléments sont conjugués.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Conjugu%C3%A9">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Denominator">
         <term>Denominator</term>
         <listitem>
          <synopsis>Denominator (x)</synopsis>
          <para>Renvoie le dénominateur d'un nombre rationnel.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/D%C3%A9nominateurr">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FractionalPart">
         <term>FractionalPart</term>
         <listitem>
          <synopsis>FractionalPart (x)</synopsis>
          <para>Renvoie la partie fractionnelle d'un nombre.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Partie_fractionnaire">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Im">
         <term>Im</term>
         <listitem>
          <synopsis>Im (z)</synopsis>
          <para>Alias : <function>ImaginaryPart</function></para>
          <para>Renvoie la partie imaginaire d'un nombre complexe.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Partie_imaginaire">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IntegerQuotient">
         <term>IntegerQuotient</term>
         <listitem>
          <synopsis>IntegerQuotient (m,n)</synopsis>
          <para>Division sans reste.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsComplex">
         <term>IsComplex</term>
         <listitem>
          <synopsis>IsComplex (nbre)</synopsis>
          <para>Vérifie si l'argument est un nombre complexe (non réel).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsComplexRational">
         <term>IsComplexRational</term>
         <listitem>
          <synopsis>IsComplexRational (nbre)</synopsis>
	  <para>Vérifie si l'argument est potentiellement un nombre rationnel complexe. C'est-à-dire si la partie réelle et la partie imaginaire sont fournies sous la forme de nombres rationnels. Bien sûr, rationnel signifie simplement « non enregistré comme un nombre à virgule flottante ».</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsFloat">
         <term>IsFloat</term>
         <listitem>
          <synopsis>IsFloat (nbre)</synopsis>
          <para>Vérifie si l'argument est un nombre flottant (non complexe).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsGaussInteger">
         <term>IsGaussInteger</term>
         <listitem>
          <synopsis>IsGaussInteger (nbre)</synopsis>
          <para>Alias : <function>IsComplexInteger</function></para>
          <para>Vérifie si l'argument peut être un entier complexe.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsInteger">
         <term>IsInteger</term>
         <listitem>
          <synopsis>IsInteger (nbre)</synopsis>
          <para>Vérifie si l'argument est un entier (non complexe).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsNonNegativeInteger">
         <term>IsNonNegativeInteger</term>
         <listitem>
          <synopsis>IsNonNegativeInteger (nbre)</synopsis>
          <para>Vérifie si l'argument est un entier réel non négatif.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsPositiveInteger">
         <term>IsPositiveInteger</term>
         <listitem>
          <synopsis>IsPositiveInteger (nbre)</synopsis>
          <para>Alias : <function>IsNaturalNumber</function></para>
          <para>Vérifie si l'argument est un entier réel positif. Notez que par convention 0 n'est pas un nombre naturel.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsRational">
         <term>IsRational</term>
         <listitem>
          <synopsis>IsRational (nbre)</synopsis>
          <para>Vérifie si l'argument est un nombre rationnel (non complexe). Bien sûr, rationnel signifie simplement « non enregistré comme un nombre à virgule flottante ».</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsReal">
         <term>IsReal</term>
         <listitem>
          <synopsis>IsReal (nbre)</synopsis>
          <para>Vérifie si l'argument est un nombre réel.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Numerator">
         <term>Numerator</term>
         <listitem>
          <synopsis>Numerator (x)</synopsis>
          <para>Renvoie le numérateur d'un nombre rationnel.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Num%C3%A9rateur">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Re">
         <term>Re</term>
         <listitem>
          <synopsis>Re (z)</synopsis>
          <para>Alias : <function>RealPart</function></para>
          <para>Renvoie la partie réelle d'un nombre complexe.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Partie_r%C3%A9elle">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Sign">
         <term>Sign</term>
         <listitem>
          <synopsis>Sign (x)</synopsis>
          <para>Alias : <function>sign</function></para>
          <para>Renvoie le signe d'un nombre. C'est-à-dire renvoie <literal>-1</literal> si la valeur est négative, <literal>0</literal> si la valeur est nulle et <literal>1</literal> si la valeur est positive. Si <varname>x</varname> est une grandeur complexe alors <function>Sign</function> renvoie la direction ou 0.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ceil">
         <term>ceil</term>
         <listitem>
          <synopsis>ceil (x)</synopsis>
          <para>Alias : <function>Ceiling</function></para>
	  <para>Get the lowest integer more than or equal to <varname>n</varname>. Examples:
          <screen><prompt>genius&gt;</prompt> <userinput>ceil(1.1)</userinput>
= 2
<prompt>genius&gt;</prompt> <userinput>ceil(-1.1)</userinput>
= -1
</screen>
           </para>
	   <para>Note that you should be careful and notice that floating point
		   numbers are stored an binary and so may not be what you
		   expect.  For example <userinput>ceil(420/4.2)</userinput>
		   returns 101 instead of the expected 100.  This is because
		   4.2 is actually very slightly less than 4.2.  Use rational
		   representation <userinput>42/10</userinput> if you want
		   exact arithmetic.
           </para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-exp">
         <term>exp</term>
         <listitem>
          <synopsis>exp (x)</synopsis>
          <para>La fonction exponentielle. C'est la fonction <userinput>e^x</userinput> où <varname>e</varname> est la <link linkend="gel-function-e">base du logarithme naturel</link>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Fonction_exponentielle">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/LogarithmFunction.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/ExponentialFunction.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-float">
         <term>float</term>
         <listitem>
          <synopsis>float (x)</synopsis>
          <para>Transforme le nombre en nombre à virgule flottante. C'est-à-dire la représentation à virgule flottante du nombre <varname>x</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-floor">
         <term>floor</term>
         <listitem>
          <synopsis>floor (x)</synopsis>
          <para>Alias : <function>Floor</function></para>
          <para>Renvoie le plus grand entier inférieur ou égal à <varname>n</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ln">
         <term>ln</term>
         <listitem>
          <synopsis>ln (x)</synopsis>
          <para>Le logarithme naturel, le logarithme de base <varname>e</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-log">
         <term>log</term>
         <listitem>
          <synopsis>log (x)</synopsis>
          <synopsis>log (x,b)</synopsis>
          <para>Logarithme de <varname>x</varname> dans la base <varname>b</varname> (appelle la fonction <function>DiscreteLog dans le mode modulo). Si la base n'est pas donnée, <varname>e</varname> est utilisée.</function></para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-log10">
         <term>log10</term>
         <listitem>
          <synopsis>log10 (x)</synopsis>
          <para>Logarithme base 10 de <varname>x</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-log2">
         <term>log2</term>
         <listitem>
          <synopsis>log2 (x)</synopsis>
          <para>Alias : <function>lg</function></para>
          <para>Logarithme base 2 de <varname>x</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-max">
         <term>max</term>
         <listitem>
          <synopsis>max (a,params...)</synopsis>
          <para>Alias : <function>Max</function> <function>Maximum</function></para>
          <para>Renvoie le maximum des arguments ou de la matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-min">
         <term>min</term>
         <listitem>
          <synopsis>min (a,params...)</synopsis>
          <para>Alias : <function>Min</function> <function>Minimum</function></para>
          <para>Renvoie le minimum des arguments ou de la matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-rand">
         <term>rand</term>
         <listitem>
          <synopsis>rand (taille...)</synopsis>
          <para>Génère aléatoirement des nombres flottants dans l'intervalle <literal>[0,1)</literal>. Si taille est donnée alors une matrice (si deux nombres sont fournis) ou un vecteur (si un seul est fourni) de la taille indiquée est renvoyé.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-randint">
         <term>randint</term>
         <listitem>
          <synopsis>randint (max,taille...)</synopsis>
          <para>Génère aléatoirement des entiers dans l'intervalle <literal>[0,max)</literal>. Si taille est donné alors une matrice (si deux nombres sont fournis) ou un vecteur (si un seul est fourni) de la taille indiquée est renvoyé. Par exemple, <screen><prompt>genius&gt;</prompt> <userinput>randint(4)</userinput>
= 3
<prompt>genius&gt;</prompt> <userinput>randint(4,2)</userinput>
=
[0      1]
<prompt>genius&gt;</prompt> <userinput>randint(4,2,3)</userinput>
=
[2      2       1
 0      0       3]
</screen></para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-round">
         <term>round</term>
         <listitem>
          <synopsis>round (x)</synopsis>
          <para>Alias : <function>Round</function></para>
          <para>Arrondit un nombre.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-sqrt">
         <term>sqrt</term>
         <listitem>
          <synopsis>sqrt (x)</synopsis>
          <para>Alias : <function>SquareRoot</function></para>
          <para>La racine carrée. Au cours de calculs en mode modulaire, certains entiers renvoient soit <constant>null</constant> ou un vecteur contenant les racines carrées. Exemples : <screen><prompt>genius&gt;</prompt> <userinput>sqrt(2)</userinput>
= 1.41421356237
<prompt>genius&gt;</prompt> <userinput>sqrt(-1)</userinput>
= 1i
<prompt>genius&gt;</prompt> <userinput>sqrt(4) mod 7</userinput>
=
[2      5]
<prompt>genius&gt;</prompt> <userinput>2*2 mod 7</userinput>
= 4
</screen></para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/SquareRoot.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-trunc">
         <term>trunc</term>
         <listitem>
          <synopsis>trunc (x)</synopsis>
          <para>Alias : <function>Truncate</function><function>IntegerPart</function></para>
          <para>Tronque le nombre à un entier (renvoie la partie entière).</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-trigonometry">
      <title>Trigonométrie</title>
      <variablelist>
        <varlistentry id="gel-function-acos">
         <term>acos</term>
         <listitem>
          <synopsis>acos (x)</synopsis>
          <para>Alias : <function>arccos</function></para>
          <para>Fonction arccos (arc cosinus).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-acosh">
         <term>acosh</term>
         <listitem>
          <synopsis>acosh (x)</synopsis>
          <para>Alias : <function>arccosh</function></para>
          <para>Fonction arccosh (cosinus hyperbolique inverse).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-acot">
         <term>acot</term>
         <listitem>
          <synopsis>acot (x)</synopsis>
          <para>Alias : <function>arccot</function></para>
          <para>Fonction arccot (cotangente inverse).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-acoth">
         <term>acoth</term>
         <listitem>
          <synopsis>acoth (x)</synopsis>
          <para>Alias : <function>arccoth</function></para>
          <para>Fonction arccoth (cotangente hyperbolique inverse).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-acsc">
         <term>acsc</term>
         <listitem>
          <synopsis>acsc (x)</synopsis>
          <para>Alias : <function>arccsc</function></para>
          <para>Inverse de la fonction cosécante.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-acsch">
         <term>acsch</term>
         <listitem>
          <synopsis>acsch (x)</synopsis>
          <para>Alias : <function>arccsch</function></para>
          <para>Inverse de la fonction cosécante hyperbolique.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-asec">
         <term>asec</term>
         <listitem>
          <synopsis>asec (x)</synopsis>
          <para>Alias : <function>arcsec</function></para>
          <para>Inverse de la fonction sécante.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-asech">
         <term>asech</term>
         <listitem>
          <synopsis>asech (x)</synopsis>
          <para>Alias : <function>arcsech</function></para>
          <para>Inverse de la fontion sécante hyperbolique.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-asin">
         <term>asin</term>
         <listitem>
          <synopsis>asin (x)</synopsis>
          <para>Alias : <function>arcsin</function></para>
          <para>La fonction arcsin (sinus inverse).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-asinh">
         <term>asinh</term>
         <listitem>
          <synopsis>asinh (x)</synopsis>
          <para>Alias : <function>arcsinh</function></para>
          <para>Fonction arcsinh (sinus hyperbolique inverse).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-atan">
         <term>atan</term>
         <listitem>
          <synopsis>atan (x)</synopsis>
          <para>Alias : <function>arctan</function></para>
          <para>Calcule la fonction arctangente (tangente inverse).</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Arctangente">Wikipedia</ulink> or <ulink url="http://mathworld.wolfram.com/InverseTangent.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-atanh">
         <term>atanh</term>
         <listitem>
          <synopsis>atanh (x)</synopsis>
          <para>Alias : <function>arctanh</function></para>
          <para>Fonction arctanh (tangente hyperbolique inverse).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-atan2">
         <term>atan2</term>
         <listitem>
          <synopsis>atan2 (y, x)</synopsis>
          <para>Alias : <function>arctan2</function></para>
          <para>Calcule la fonction arctan2. Si <userinput>x&gt;0</userinput> alors renvoie <userinput>atan(y/x)</userinput>. Si <userinput>x&lt;0</userinput> alors cela renvoie <userinput>sign(y) * (pi - atan(|y/x|)</userinput>. Si <userinput>x=0</userinput> cela renvoie <userinput>sign(y) *
	  pi/2</userinput>. <userinput>atan2(0,0)</userinput> renvoie 0 plutôt que d'échouer.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Atan2">Wikipedia</ulink> ou <ulink url="http://mathworld.wolfram.com/InverseTangent.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-cos">
         <term>cos</term>
         <listitem>
          <synopsis>cos (x)</synopsis>
          <para>Calcule la fonction cosinus.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/DefinitionsInTrigonometry.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-cosh">
         <term>cosh</term>
         <listitem>
          <synopsis>cosh (x)</synopsis>
          <para>Calcule la fonction cosinus hyperbolique.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/HyperbolicFunctions.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-cot">
         <term>cot</term>
         <listitem>
          <synopsis>cot (x)</synopsis>
          <para>Fonction cotangente.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/DefinitionsInTrigonometry.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-coth">
         <term>coth</term>
         <listitem>
          <synopsis>coth (x)</synopsis>
          <para>Fonction cotangente hyperbolique.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/HyperbolicFunctions.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-csc">
         <term>csc</term>
         <listitem>
          <synopsis>csc (x)</synopsis>
          <para>Fonction cosécante.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/DefinitionsInTrigonometry.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-csch">
         <term>csch</term>
         <listitem>
          <synopsis>csch (x)</synopsis>
          <para>Fonction cosécante hyperbolique.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/HyperbolicFunctions.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-sec">
         <term>sec</term>
         <listitem>
          <synopsis>sec (x)</synopsis>
          <para>Fonction sécante.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/DefinitionsInTrigonometry.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-sech">
         <term>sech</term>
         <listitem>
          <synopsis>sech (x)</synopsis>
          <para>Fonction sécante hyperbolique.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/HyperbolicFunctions.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-sin">
         <term>sin</term>
         <listitem>
          <synopsis>sin (x)</synopsis>
          <para>Calcule la fonction sinus.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/DefinitionsInTrigonometry.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-sinh">
         <term>sinh</term>
         <listitem>
          <synopsis>sinh (x)</synopsis>
          <para>Calcule la fonction sinus hyperbolique.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/HyperbolicFunctions.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-tan">
         <term>tan</term>
         <listitem>
          <synopsis>tan (x)</synopsis>
          <para>Calcule la fonction tangente.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/DefinitionsInTrigonometry.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-tanh">
         <term>tanh</term>
         <listitem>
          <synopsis>tanh (x)</synopsis>
          <para>Fonction tangente hyperbolique.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/HyperbolicFunctions.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-number-theory">
      <title>Théorie des nombres</title>
      <variablelist>
        <varlistentry id="gel-function-AreRelativelyPrime">
         <term>AreRelativelyPrime</term>
         <listitem>
          <synopsis>AreRelativelyPrime (a,b)</synopsis>
          <para>Si les entiers <varname>a</varname> et <varname>b</varname> sont premiers entre eux ? Renvoie <constant>true</constant> (vrai) ou <constant>false</constant> (faux).</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/RelativelyPrime.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/RelativelyPrime.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-BernoulliNumber">
         <term>BernoulliNumber</term>
         <listitem>
          <synopsis>BernoulliNumber (n)</synopsis>
          <para>Renvoie le <varname>n</varname>-ième nombre de Bernoulli.</para>
          <para>Consultez <ulink url="http://en.wikipedia.org/wiki/Bernoulli_number">Wikipedia</ulink> ou <ulink url="http://mathworld.wolfram.com/BernoulliNumber.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ChineseRemainder">
         <term>ChineseRemainder</term>
         <listitem>
          <synopsis>ChineseRemainder (a,m)</synopsis>
          <para>Alias : <function>CRT</function></para>
	  <para>Recherche <varname>x</varname> qui résout le système défini par le vecteur <varname>a</varname> et modulo les éléments de <varname>m</varname>, en utilisant le théorème des restes chinois.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Th%C3%A9or%C3%A8me_des_restes_chinois">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/ChineseRemainderTheorem.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/ChineseRemainderTheorem.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-CombineFactorizations">
         <term>CombineFactorizations</term>
         <listitem>
          <synopsis>CombineFactorizations (a,b)</synopsis>
	  <para>Étant donné deux factorisations, donne la factorisation du produit.</para>
	  <para>Consultez <link linkend="gel-function-Factorize">Factorize</link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ConvertFromBase">
         <term>ConvertFromBase</term>
         <listitem>
          <synopsis>ConvertFromBase (v,b)</synopsis>
          <para>Convertit un vecteur de valeurs indiquant les puissances de b en un nombre.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ConvertToBase">
         <term>ConvertToBase</term>
         <listitem>
          <synopsis>ConvertToBase (n,b)</synopsis>
          <para>Convertit un nombre en un vecteur contenant les puissances des éléments dans la base <varname>b</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DiscreteLog">
         <term>DiscreteLog</term>
         <listitem>
          <synopsis>DiscreteLog (n,b,q)</synopsis>
          <para>Calcule le logarithme discret de <varname>n</varname> base <varname>b</varname> dans F<subscript>q</subscript>, le corps fini d'ordre <varname>q</varname> où <varname>q</varname> est un nombre premier, en utilisant l'algorithme de Silver-Pohlig-Hellman.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Logarithme_discret">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/DiscreteLogarithm.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/DiscreteLogarithm.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Divides">
         <term>Divides</term>
         <listitem>
          <synopsis>Divides (m,n)</synopsis>
          <para>Vérifie la divisibilité (si <varname>m</varname> divise <varname>n</varname>).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-EulerPhi">
         <term>EulerPhi</term>
         <listitem>
          <synopsis>EulerPhi (n)</synopsis>
          <para>Calcule la fonction d'Euler phi, c'est-à-dire le nombre d'entiers compris entre 1 et <varname>n</varname> qui sont premiers avec <varname>n</varname>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Indicatrice_d%27Euler">Wikipedia</ulink> or <ulink url="http://planetmath.org/encyclopedia/EulerPhifunction.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/TotientFunction.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ExactDivision">
         <term>ExactDivision</term>
         <listitem>
          <synopsis>ExactDivision (n,d)</synopsis>
          <para>Renvoie <userinput>n/d</userinput> mais seulement si <varname>d</varname> divise <varname>n</varname>. Si <varname>d</varname> ne divise pas <varname>n</varname> alors cette fonction ne renvoie rien d'utile. Cette fonction est beaucoup plus rapide pour les très grands nombres que l'opération <userinput>n/d</userinput>, mais bien sûr utile seulement si vous savez que la division est exacte.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Factorize">
         <term>Factorize</term>
         <listitem>
          <synopsis>Factorize (n)</synopsis>
          <para>Renvoie la factorisation d'un nombre sous la forme d'une matrice. La première ligne contient les nombres premiers dans la factorisation (y compris 1) et la seconde ligne sont les puissances. Par exemple : <screen><prompt>genius&gt;</prompt> <userinput>Factorize(11*11*13)</userinput>
=
[1      11      13
 1      2       1]</screen></para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Factorisation">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Factors">
         <term>Factors</term>
         <listitem>
          <synopsis>Factors (n)</synopsis>
          <para>Renvoie tous les facteurs de <varname>n</varname> dans un vecteur. Cela inclut tous les facteurs non premiers également mais aussi 1 et le nombre lui-même. Ainsi par exemple pour afficher tous les nombres parfaits (ceux qui sont la somme de leurs facteurs) jusqu'au nombre 1000, vous pouvez écrire (ce n'est bien sûr pas efficace) : <programlisting>for n=1 to 1000 do (
    if MatrixSum (Factors(n)) == 2*n then
        print(n)
)
</programlisting></para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FermatFactorization">
         <term>FermatFactorization</term>
         <listitem>
          <synopsis>FermatFactorization (n,tentatives)</synopsis>
          <para>Essaie la factorisation de Fermat de <varname>n</varname> sous la forme <userinput>(t-s)*(t+s)</userinput>, si c'est possible, renvoie <varname>t</varname> et <varname>s</varname> sous la forme d'un vecteur sinon renvoie <constant>null</constant>. L'argument <varname>tentatives</varname> indique le nombre d'essais avant d'abandonner.</para>
          <para>C'est une assez bonne factorisation si votre nombre est le produit de deux facteurs très proches l'un de l'autre.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/M%C3%A9thode_de_factorisation_de_Fermat">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FindPrimitiveElementMod">
         <term>FindPrimitiveElementMod</term>
         <listitem>
          <synopsis>FindPrimitiveElementMod (q)</synopsis>
          <para>Cherche le premier élément primitif dans F<subscript>q</subscript>, le groupe fini d'ordre <varname>q</varname>. Bien sûr, <varname>q</varname> doit être premier.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FindRandomPrimitiveElementMod">
         <term>FindRandomPrimitiveElementMod</term>
         <listitem>
          <synopsis>FindRandomPrimitiveElementMod (q)</synopsis>
          <para>Cherche un élément primitif au hasard dans F<subscript>q</subscript>, le groupe fini d'ordre <varname>q</varname> (q doit être premier).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IndexCalculus">
         <term>IndexCalculus</term>
         <listitem>
          <synopsis>IndexCalculus (n,b,q,S)</synopsis>
          <para>Calcule le logarithme discret de n base <varname>b</varname> dans F<subscript>q</subscript>, le corps fini d'ordre <varname>q</varname> (<varname>q </varname> est un nombre premier), en utilisant la base de facteur <varname>S</varname>. <varname>S</varname> doit être une colonne de nombres premiers avec éventuellement la deuxième colonne pré-calculée par <function>IndexCalculusPrecalculation</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IndexCalculusPrecalculation">
         <term>IndexCalculusPrecalculation</term>
         <listitem>
          <synopsis>IndexCalculusPrecalculation (b,q,S)</synopsis>
	  <para>Lance l'étape de calcul préliminaire de <function>IndexCalculus</function> pour le logarithme base <varname>b</varname> dans F<subscript>q</subscript>, le corps fini d'ordre <varname>q</varname> (<varname>q </varname> est un nombre premier), pour la base de facteur <varname>S</varname> (où <varname>S</varname> doit être une colonne de nombres premiers). Les logarithmes sont pré-calculés et renvoyés dans la deuxième colonne.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsEven">
         <term>IsEven</term>
         <listitem>
          <synopsis>IsEven (n)</synopsis>
          <para>Teste si un entier est pair.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsMersennePrimeExponent">
         <term>IsMersennePrimeExponent</term>
         <listitem>
          <synopsis>IsMersennePrimeExponent (p)</synopsis>
          <para>Teste si un nombre entier positif <varname>p</varname> est un nombre premier de Mersenne, c'est-à-dire si 2<superscript>p</superscript>-1 est premier. Il s'agit d'une recherche dans une table de valeurs connues qui est assez petite. Consultez également <link linkend="gel-function-MersennePrimeExponents">MersennePrimeExponents</link> et <link linkend="gel-function-LucasLehmer">LucasLehmer</link>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Nombre_premier_de_Mersenne">Wikipedia</ulink>, <ulink url="http://planetmath.org/encyclopedia/MersenneNumbers.html">Planetmath</ulink>, <ulink url="http://mathworld.wolfram.com/MersennePrime.html">Mathworld</ulink> ou <ulink url="http://www.mersenne.org/">GIMPS</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsNthPower">
         <term>IsNthPower</term>
         <listitem>
          <synopsis>IsNthPower (m,n)</synopsis>
          <para>Vérifie si un nombre rationnel <varname>m</varname> est une puissance <varname>n</varname>-ième parfaite. Consultez aussi <link linkend="gel-function-IsPerfectPower">IsPerfectPower</link> et <link linkend="gel-function-IsPerfectSquare">IsPerfectSquare</link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsOdd">
         <term>IsOdd</term>
         <listitem>
          <synopsis>IsOdd (n)</synopsis>
          <para>Teste si un entier est impair.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsPerfectPower">
         <term>IsPerfectPower</term>
         <listitem>
          <synopsis>IsPerfectPower (n)</synopsis>
          <para>Vérifie qu'un entier est une puissance parfaite, a<superscript>b</superscript>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsPerfectSquare">
         <term>IsPerfectSquare</term>
         <listitem>
          <synopsis>IsPerfectSquare (n)</synopsis>
          <para>Vérifie qu'un entier est un carré parfait d'un entier. Le nombre doit être un vrai entier. Les entiers négatifs ne peuvent bien sûr jamais être des carrés de vrais entiers.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsPrime">
         <term>IsPrime</term>
         <listitem>
          <synopsis>IsPrime (n)</synopsis>
          <para>Teste la primalité des entiers ; pour les nombres inférieurs à 2,5e10 la réponse est déterministe (si l'hypothèse de Riemann est vérifiée). Pour des nombres plus grands, la probabilité d'une erreur de détermination dépend du paramètre <link linkend="gel-function-IsPrimeMillerRabinReps"><function>IsPrimeMillerRabinReps</function></link>. C'est-à-dire la probabilité d'une erreur de détermination vaut 1/4 à la puissance <function>IsPrimeMillerRabinReps</function>. La valeur par défaut de 22 mène à une probabilité d'environ 5.7e-14.</para>
          <para>Si <constant>false</constant> (faux) est renvoyé, vous êtes sûr que le nombre est composé. Si vous voulez être absolument certain d'avoir un nombre premier vous pouvez utiliser la fonction <link linkend="gel-function-MillerRabinTestSure"><function>MillerRabinTestSure</function></link> mais cela peut prendre beaucoup plus de temps.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/PrimeNumber.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/PrimeNumber.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsPrimitiveMod">
         <term>IsPrimitiveMod</term>
         <listitem>
          <synopsis>IsPrimitiveMod (g,q)</synopsis>
          <para>Vérifie que <varname>g</varname> est primitif dans F<subscript>q</subscript>, le groupe fini d'ordre <varname>q</varname>, où <varname>q</varname> est premier. Si <varname>q</varname> n'est pas premier, les résultats sont erronés.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsPrimitiveModWithPrimeFactors">
         <term>IsPrimitiveModWithPrimeFactors</term>
         <listitem>
          <synopsis>IsPrimitiveModWithPrimeFactors (g,q,f)</synopsis>
          <para>Vérifie que <varname>g</varname> est primitif dans F<subscript>q</subscript>, le groupe fini d'ordre <varname>q</varname>, où <varname>q</varname> est premier et <varname>f</varname> est un vecteur de facteurs premiers de <varname>q</varname>-1. Si <varname>q</varname> n'est pas premier, les résultats sont erronés.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsPseudoprime">
         <term>IsPseudoprime</term>
         <listitem>
          <synopsis>IsPseudoprime (n,b)</synopsis>
          <para>Teste si <varname>n</varname> est un nombre pseudopremier en base <varname>b</varname> mais pas un nombre premier c'est-à-dire si <userinput>b^(n-1) == 1 mod n</userinput>. Cela appelle la fonction <function>PseudoprimeTest</function></para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsStrongPseudoprime">
         <term>IsStrongPseudoprime</term>
         <listitem>
          <synopsis>IsStrongPseudoprime (n,b)</synopsis>
          <para>Teste si <varname>n</varname> est un nombre pseudopremier fort en base <varname>b</varname> mais pas un nombre premier.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Jacobi">
         <term>Jacobi</term>
         <listitem>
          <synopsis>Jacobi (a,b)</synopsis>
          <para>Alias : <function>JacobiSymbol</function></para>
          <para>Calcule le symbole de Jacobi (a/b) (b doit être impair).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-JacobiKronecker">
         <term>JacobiKronecker</term>
         <listitem>
          <synopsis>JacobiKronecker (a,b)</synopsis>
          <para>Alias : <function>JacobiKroneckerSymbol</function></para>
          <para>Calcule le symbole de Jacobi (a/b) avec l'extension de Kronecker (a/2)=(2/a) si impair, ou (a/2)=0 si pair.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LeastAbsoluteResidue">
         <term>LeastAbsoluteResidue</term>
         <listitem>
          <synopsis>LeastAbsoluteResidue (a,n)</synopsis>
          <para>Renvoie le résidu de <varname>a</varname> modulo <varname>n</varname> avec la plus petite valeur absolue (entre -n/2 et n/2).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Legendre">
         <term>Legendre</term>
         <listitem>
          <synopsis>Legendre (a,p)</synopsis>
          <para>Alias : <function>LegendreSymbol</function></para>
          <para>Calcule le symbole de Legendre (a/p).</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/LegendreSymbol.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/LegendreSymbol.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LucasLehmer">
         <term>LucasLehmer</term>
         <listitem>
          <synopsis>LucasLehmer (p)</synopsis>
          <para>Teste si 2<superscript>p</superscript>-1 est un nombre premier de Mersenne en utilisant le test de Lucas-Lehmer. Consultez aussi <link linkend="gel-function-MersennePrimeExponents">MersennePrimeExponents</link> et <link linkend="gel-function-IsMersennePrimeExponent">IsMersennePrimeExponent</link>.</para>
          <para>Consultez <ulink url="http://http://fr.wikipedia.org/wiki/Test_de_primalit%C3%A9_de_Lucas-Lehmer_pour_les_nombres_de_Mersenne">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/LucasLhemer.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/Lucas-LehmerTest.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LucasNumber">
         <term>LucasNumber</term>
         <listitem>
          <synopsis>LucasNumber (n)</synopsis>
          <para>Renvoie le <varname>n</varname>-ième nombre de Lucas.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Nombre_de_Lucas">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/LucasNumbers.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/LucasNumber.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MaximalPrimePowerFactors">
         <term>MaximalPrimePowerFactors</term>
         <listitem>
          <synopsis>MaximalPrimePowerFactors (n)</synopsis>
          <para>Renvoie les puissances premières d'un nombre.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MersennePrimeExponents">
         <term>MersennePrimeExponents</term>
         <listitem>
          <synopsis>MersennePrimeExponents</synopsis>
          <para>Renvoie un vecteur de nombres premiers de Mersenne qui est une liste d'entiers positifs <varname>p</varname> tels que 2<superscript>p</superscript>-1 est entier. Consultez aussi <link linkend="gel-function-IsMersennePrimeExponent">IsMersennePrimeExponent</link> et <link linkend="gel-function-LucasLehmer">LucasLehmer</link>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Nombre_premier_de_Mersenne">Wikipedia</ulink>, <ulink url="http://planetmath.org/encyclopedia/MersenneNumbers.html">Planetmath</ulink>, <ulink url="http://mathworld.wolfram.com/MersennePrime.html">Mathworld</ulink> ou <ulink url="http://www.mersenne.org/">GIMPS</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MillerRabinTest">
         <term>MillerRabinTest</term>
         <listitem>
          <synopsis>MillerRabinTest (n,reps)</synopsis>
          <para>Utilise le test de primalité de Miller-Rabin sur <varname>n</varname>, en faisant <varname>reps</varname> essais. La probabilité d'une erreur de détermination est <userinput>(1/4)^reps</userinput>. Il est probablement préférable d'utiliser la fonction <link linkend="gel-function-IsPrime"><function>IsPrime</function></link> puisqu'elle est plus rapide et meilleure pour les entiers les plus petits.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Test_de_primalit%C3%A9_de_Miller-Rabin">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/MillerRabinPrimeTest.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/Rabin-MillerStrongPseudoprimeTest.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MillerRabinTestSure">
         <term>MillerRabinTestSure</term>
         <listitem>
          <synopsis>MillerRabinTestSure (n)</synopsis>
          <para>Utilise le test de primalité de Miller-Rabin sur <varname>n</varname> avec suffisamment d'essais pour qu'en supposant la véracité de l'hypothèse de Riemann généralisée, le résultat soit déterministe.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Test_de_primalit%C3%A9_de_Miller-Rabin">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/MillerRabinPrimeTest.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/Rabin-MillerStrongPseudoprimeTest.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ModInvert">
         <term>ModInvert</term>
         <listitem>
          <synopsis>ModInvert (n,m)</synopsis>
          <para>Renvoie l'inverse de n mod m.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/ModularInverse.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MoebiusMu">
         <term>MoebiusMu</term>
         <listitem>
          <synopsis>MoebiusMu (n)</synopsis>
          <para>Renvoie la fonction mu de Moebius évaluée dans <varname>n</varname>. C'est-à-dire renvoie 0 si <varname>n</varname> n'est pas un produit de nombres premiers différents et <userinput>(-1)^k</userinput> si c'est un produit de <varname>k</varname> nombres premiers différents.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/MoebiusFunction.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/MoebiusFunction.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NextPrime">
         <term>NextPrime</term>
         <listitem>
          <synopsis>NextPrime (n)</synopsis>
          <para>Renvoie le plus petit nombre premier supérieur à <varname>n</varname>. L'opposé d'un nombre premier est considéré comme un nombre premier donc pour obtenir le nombre premier précédent, vous pouvez utiliser <userinput>-NextPrime(-n)</userinput>.</para>
          <para>La fonction utilise la fonction <function>mpz_nextprime</function> de GMP qui utilise elle-même le test de probabilité de Miller-Rabin (consultez aussi <link linkend="gel-function-MillerRabinTest">MillerRabinTest</link>). La probabilité d'une erreur de détermination n'est pas ajustable mais suffisamment faible dans tous les cas pratiques.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/PrimeNumber.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/PrimeNumber.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PadicValuation">
         <term>PadicValuation</term>
         <listitem>
          <synopsis>PadicValuation (n,p)</synopsis>
          <para>Renvoie la valuation p-adic (nombre de zéros après la virgule en base <varname>p</varname>).</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/PAdicValuation.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PowerMod">
         <term>PowerMod</term>
         <listitem>
          <synopsis>PowerMod (a,b,m)</synopsis>
          <para>Calcule <userinput>a^b mod m</userinput>. La puissance <varname>b</varname> de <varname>a</varname> modulo <varname>m</varname>. Il n'est pas nécesssaire d'utiliser cette fonction car elle est utilisée automatiquement en mode modulaire. Par conséquent, <userinput>a^b mod m</userinput> est aussi rapide.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Prime">
         <term>Prime</term>
         <listitem>
          <synopsis>Prime (n)</synopsis>
          <para>Alias : <function>prime</function></para>
          <para>Renvoie le <varname>n</varname>-ième nombre premier (jusqu'à une limite) .</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/PrimeNumber.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/PrimeNumber.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PrimeFactors">
         <term>PrimeFactors</term>
         <listitem>
          <synopsis>PrimeFactors (n)</synopsis>
          <para>Renvoie tous les facteurs premiers d'un nombre sous la forme d'un vecteur.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/PrimeFactor.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PseudoprimeTest">
         <term>PseudoprimeTest</term>
         <listitem>
          <synopsis>PseudoprimeTest (n,b)</synopsis>
	  <para>Test de pseudoprimalité, renvoie <constant>true</constant> (vrai) si et seulement si <userinput>b^(n-1) == 1  mod n</userinput></para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/Pseudoprime.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/Pseudoprime.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RemoveFactor">
         <term>RemoveFactor</term>
         <listitem>
          <synopsis>RemoveFactor (n,m)</synopsis>
          <para>Supprime toutes les instances du facteur <varname>m</varname> dans le nombre <varname>n</varname>. C'est-à-dire divise par la plus grande puissance de <varname>m</varname> qui divise <varname>n</varname>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/Divisibility.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/Factor.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SilverPohligHellmanWithFactorization">
         <term>SilverPohligHellmanWithFactorization</term>
         <listitem>
          <synopsis>SilverPohligHellmanWithFactorization (n,b,q,f)</synopsis>
          <para>Calcule le logarithme discret de <varname>n</varname> base <varname>b</varname> dans F<subscript>q</subscript>, le corps fini d'ordre <varname>q</varname> où <varname>q</varname> est un nombre premier, en utilisant l'algorithme de Silver-Pohlig-Hellman, sachant que <varname>f</varname> est la factorisation de <varname>q</varname>-1.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SqrtModPrime">
         <term>SqrtModPrime</term>
         <listitem>
          <synopsis>SqrtModPrime (n,p)</synopsis>
          <para>Cherche la racine carrée de <varname>n</varname> modulo <varname>p</varname> (où <varname>p</varname> est premier). <constant>null</constant> est renvoyé si ce n'est pas un résidu quadratique.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/QuadraticResidue.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/QuadraticResidue.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-StrongPseudoprimeTest">
         <term>StrongPseudoprimeTest</term>
         <listitem>
          <synopsis>StrongPseudoprimeTest (n,b)</synopsis>
          <para>Lance le test de pseudo-primarité forte en base <varname>b</varname> sur <varname>n</varname>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/StrongPseudoprime.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/StrongPseudoprime.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-gcd">
         <term>gcd</term>
         <listitem>
          <synopsis>gcd (a,params...)</synopsis>
          <para>Alias : <function>GCD</function></para>
          <para>Plus grand commun diviseur d'entiers (PGCD, en anglais « Greatest Common Divisor »). Vous pouvez fournir autant d'entiers que vous voulez dans la liste d'arguments ou vous pouvez fournir un vecteur ou une matrice d'entiers. Si vous fournissez plus d'une matrice de la même taille alors le PGCD est recherché élément par élément.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/GreatestCommonDivisor.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/GreatestCommonDivisor.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-lcm">
         <term>lcm</term>
         <listitem>
          <synopsis>lcm (a,params...)</synopsis>
          <para>Alias : <function>LCM</function></para>
          <para>Plus petit commun multiple d'entiers (PPCM, en anglais « Least Common Multiplier »). Vous pouvez fournir autant d'entiers que vous voulez dans la liste d'arguments ou vous pouvez fournir un vecteur ou une matrice d'entiers. Si vous fournissez plus d'une matrice de la même taille alors le PPCM est recherché élément par élément.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/LeastCommonMultiple.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/LeastCommonMultiple.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-matrix">
      <title>Manipulation de matrices</title>
      <variablelist>
        <varlistentry id="gel-function-ApplyOverMatrix">
         <term>ApplyOverMatrix</term>
         <listitem>
          <synopsis>ApplyOverMatrix (a,fonc)</synopsis>
          <para>Applique une fonction sur tous les éléments d'une matrice et renvoie une matrice de résultats.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ApplyOverMatrix2">
         <term>ApplyOverMatrix2</term>
         <listitem>
          <synopsis>ApplyOverMatrix2 (a,b,fonc)</synopsis>
          <para>Applique une fonction sur tous les éléments de 2 matrices (ou 1 valeur et 1 matrice) et renvoie une matrice de résultats.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ColumnsOf">
         <term>ColumnsOf</term>
         <listitem>
          <synopsis>ColumnsOf (M)</synopsis>
          <para>Extrait les colonnes de la matrice comme un vecteur horizontal.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ComplementSubmatrix">
         <term>ComplementSubmatrix</term>
         <listitem>
          <synopsis>ComplementSubmatrix (m,r,c)</synopsis>
          <para>Supprime certaines lignes et colonnes d'une matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-CompoundMatrix">
         <term>CompoundMatrix</term>
         <listitem>
          <synopsis>CompoundMatrix (k,A)</synopsis>
          <para>Calcule la k-ième matrice composée de A.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-CountZeroColumns">
         <term>CountZeroColumns</term>
         <listitem>
          <synopsis>CountZeroColumns (M)</synopsis>
          <para>Compte le nombre de colonnes nulles d'une matrice. Par exemple, après avoir réduit une matrice suivant les colonnes, vous pouvez utiliser cette fonction pour obtenir la dimension du noyau. Consultez <link linkend="gel-function-cref"><function>cref</function></link> et <link linkend="gel-function-Nullity"><function>Nullity</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DeleteColumn">
         <term>DeleteColumn</term>
         <listitem>
          <synopsis>DeleteColumn (M,col)</synopsis>
          <para>Supprime une colonne d'une matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DeleteRow">
         <term>DeleteRow</term>
         <listitem>
          <synopsis>DeleteRow (M,row)</synopsis>
          <para>Supprime une ligne d'une matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DiagonalOf">
         <term>DiagonalOf</term>
         <listitem>
          <synopsis>DiagonalOf (M)</synopsis>
          <para>Extrait la diagonale de la matrice comme un vecteur colonne.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Diagonale">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DotProduct">
         <term>DotProduct</term>
         <listitem>
          <synopsis>DotProduct (u,v)</synopsis>
	  <para>Renvoie le produit scalaire de deux vecteurs. Les vecteurs doivent être de même taille. Aucune conjugaison n'est faite donc c'est une forme bilinéaire même dans le cas de nombres complexes.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/DotProduct.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ExpandMatrix">
         <term>ExpandMatrix</term>
         <listitem>
          <synopsis>ExpandMatrix (M)</synopsis>
          <para>Développe une matrice exactement comme cela est fait lors de la saisie d'une matrice non précédée d'une apostrophe. Cela signifie que toute matrice interne est développée sous la forme de blocs. C'est une façon de construire des matrices à partir de matrices plus petites et c'est ce qui est effectué normalement de manière automatique lors d'une saisie à moins que la matrice ne soit précédée d'une apostrophe.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-HermitianProduct">
         <term>HermitianProduct</term>
         <listitem>
          <synopsis>HermitianProduct (u,v)</synopsis>
          <para>Alias : <function>InnerProduct</function></para>
          <para>Renvoie le produit hermitienne de deux vecteurs. Les vecteurs doivent avoir la même taille. C'est une forme sesquilinéaire utilisant la matrice identité.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/HermitianInnerProduct.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-I">
         <term>I</term>
         <listitem>
          <synopsis>I (n)</synopsis>
          <para>Alias : <function>eye</function></para>
	  <para>Renvoie une matrice identité de la taille indiquée, soit une matrice de <varname>n</varname> par <varname>n</varname>. Si <varname>n</varname> vaut zéro, renvoie <constant>null</constant>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/IdentityMatrix.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IndexComplement">
         <term>IndexComplement</term>
         <listitem>
          <synopsis>IndexComplement (vec,mtaille)</synopsis>
          <para>Renvoie le complémentaire d'un vecteur d'indices. Le premier indice est toujours 1. Par exemple pour le vecteur <userinput>[2,3]</userinput> et la taille <userinput>5</userinput>, cela renvoie <userinput>[1,4,5]</userinput>. Si <varname>mtaille</varname> vaut 0, cela renvoie toujours <constant>null</constant>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsDiagonal">
         <term>IsDiagonal</term>
         <listitem>
          <synopsis>IsDiagonal (M)</synopsis>
          <para>Indique si la matrice est diagonale.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Matrice_diagonale">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/DiagonalMatrix.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsIdentity">
         <term>IsIdentity</term>
         <listitem>
          <synopsis>IsIdentity (x)</synopsis>
          <para>Vérifie qu'une matrice est la matrice identité. Renvoie automatiquement <constant>false</constant> (faux) si la matrice n'est pas carrée. Fonctionne également avec les nombres et dans ce cas, c'est équivalent à <userinput>x==1</userinput>. Lorsque <varname>x</varname> est <constant>null</constant>, il est considéré comme une matrice 0 par 0, aucune erreur n'est générée et <constant>false</constant> (faux) est renvoyé.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsLowerTriangular">
         <term>IsLowerTriangular</term>
         <listitem>
          <synopsis>IsLowerTriangular (M)</synopsis>
          <para>Indique si une matrice est triangulaire inférieure, c'est-à-dire que toutes les valeurs au dessus de la diagonale sont nulles.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsMatrixInteger">
         <term>IsMatrixInteger</term>
         <listitem>
          <synopsis>IsMatrixInteger (M)</synopsis>
          <para>Vérifie si une matrice est constituée de nombres entiers (non complexe).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsMatrixNonnegative">
         <term>IsMatrixNonnegative</term>
         <listitem>
          <synopsis>IsMatrixNonnegative (M)</synopsis>
          <para>Vérifie si une matrice est non négative, c'est-à-dire que chaque élément n'est pas négatif. Ne pas confondre les matrices positives avec les matrices définies positives.</para>
          <para>Consultez <ulink url="http://en.wikipedia.org/wiki/Positive_matrix">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsMatrixPositive">
         <term>IsMatrixPositive</term>
         <listitem>
          <synopsis>IsMatrixPositive (M)</synopsis>
	  <para>Vérifie si une matrice est positive, c'est-à-dire que chaque élément est positif (et par conséquent réel), et en particulier qu'aucun élément n'est nul. Ne pas confondre les matrices positives avec les matrices définies positives</para>
          <para>Consultez <ulink url="http://en.wikipedia.org/wiki/Positive_matrix">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsMatrixRational">
         <term>IsMatrixRational</term>
         <listitem>
          <synopsis>IsMatrixRational (M)</synopsis>
          <para>Vérifie si une matrice est constituée de nombres rationnels (non complexes).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsMatrixReal">
         <term>IsMatrixReal</term>
         <listitem>
          <synopsis>IsMatrixReal (M)</synopsis>
          <para>Vérifie si une matrice est constituée de nombres réels (non complexes).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsMatrixSquare">
         <term>IsMatrixSquare</term>
         <listitem>
          <synopsis>IsMatrixSquare (M)</synopsis>
          <para>Vérifie si une matrice est carrée, c'est-à-dire que sa largeur est égale à sa hauteur.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsUpperTriangular">
         <term>IsUpperTriangular</term>
         <listitem>
          <synopsis>IsUpperTriangular (M)</synopsis>
          <para>Indique si une matrice est triangulaire supérieure, c'est-à-dire que toutes les valeurs en dessous de la diagonale sont nulles.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsValueOnly">
         <term>IsValueOnly</term>
         <listitem>
          <synopsis>IsValueOnly (M)</synopsis>
          <para>Vérifie si une matrice est une matrice de nombres seulement. Beaucoup de fonctions internes contrôlent cela. Les valeurs peuvent être n'importe quels nombres y compris des complexes.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsVector">
         <term>IsVector</term>
         <listitem>
          <synopsis>IsVector (v)</synopsis>
          <para>Si l'argument est un vecteur horizontal ou vertical. Genius ne fait pas de distinction entre une matrice et un vecteur, un vecteur est juste une matrice 1 par <varname>n</varname> ou <varname>n</varname> par 1.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsZero">
         <term>IsZero</term>
         <listitem>
          <synopsis>IsZero (x)</synopsis>
          <para>Vérifie si une matrice est composée uniquement de zéros. Fonctionne également avec les nombres et dans ce cas, c'est équivalent à <userinput>x==0</userinput>. Lorsque <varname>x</varname> est <constant>null</constant>, il est considéré comme une matrice 0 par 0, aucune erreur n'est générée et <constant>true</constant> (vrai) est renvoyé car la condition est vide.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LowerTriangular">
         <term>LowerTriangular</term>
         <listitem>
          <synopsis>LowerTriangular (M)</synopsis>
          <para>Renvoie une copie de la matrice <varname>M</varname> avec tous les éléments au dessus de la diagonale mis à zéro.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MakeDiagonal">
         <term>MakeDiagonal</term>
         <listitem>
          <synopsis>MakeDiagonal (v,param...)</synopsis>
          <para>Alias : <function>diag</function></para>
          <para>Construit une matrice diagonale à partir d'un vecteur.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Matrice_diagonale">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/DiagonalMatrix.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MakeVector">
         <term>MakeVector</term>
         <listitem>
          <synopsis>MakeVector (A)</synopsis>
          <para>Construit un vecteur colonne à partir d'une matrice en mettant les colonnes les unes au dessus des autres. Renvoie <constant>null</constant> si <constant>null</constant> est fourni.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MatrixProduct">
         <term>MatrixProduct</term>
         <listitem>
          <synopsis>MatrixProduct (A)</synopsis>
          <para>Calcule et renvoie le produit de tous les éléments d'une matrice ou d'un vecteur.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MatrixSum">
         <term>MatrixSum</term>
         <listitem>
          <synopsis>MatrixSum (A)</synopsis>
          <para>Calcule et renvoie la somme de tous les éléments d'une matrice ou d'un vecteur.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MatrixSumSquares">
         <term>MatrixSumSquares</term>
         <listitem>
          <synopsis>MatrixSumSquares (A)</synopsis>
          <para>Calcule la somme du carré de tous les éléments d'une matrice ou d'un vecteur.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-OuterProduct">
         <term>OuterProduct</term>
         <listitem>
          <synopsis>OuterProduct (u,v)</synopsis>
          <para>Retourne le produit tensoriel de deux vecteurs, c'est-à-dire que si on suppose que <varname>u</varname> et <varname>v</varname> sont des vecteurs colonnes, alors le produit tensoriel est <userinput>v * u.'</userinput>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ReverseVector">
         <term>ReverseVector</term>
         <listitem>
          <synopsis>ReverseVector (v)</synopsis>
	  <para>Inverse l'ordre des éléments d'un vecteur. Renvoie <constant>null</constant> si <constant>null</constant> est fourni</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RowSum">
         <term>RowSum</term>
         <listitem>
          <synopsis>RowSum (m)</synopsis>
          <para>Calcule la somme pour chaque ligne d'une matrice et renvoie un vecteur colonne contenant le résultat.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RowSumSquares">
         <term>RowSumSquares</term>
         <listitem>
          <synopsis>RowSumSquares (m)</synopsis>
          <para>Calcule la somme des carrés pour chaque ligne d'une matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RowsOf">
         <term>RowsOf</term>
         <listitem>
          <synopsis>RowsOf (M)</synopsis>
	  <para>Renvoie les lignes d'une matrice dans un vecteur vertical. Chaque élément du vecteur est un vecteur horizontal qui correspond à chaque ligne de <varname>M</varname>. Cette fonction est utile si vous désirez faire une boucle sur les lignes d'une matrice comme par exemple, <userinput>for r in RowsOf(M) do
quelquechose(r)</userinput>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SetMatrixSize">
         <term>SetMatrixSize</term>
         <listitem>
          <synopsis>SetMatrixSize (M,lignes,colonnes)</synopsis>
          <para>Fabrique une nouvelle matrice de la taille spécifiée à partir de l'ancienne. C'est-à-dire crée une nouvelle matrice dans laquelle est recopiée l'ancienne. Les entrées qui ne rentrent pas sont retirées et l'espace supplémentaire est complété par des zéros. Si <varname>lignes</varname> ou <varname>colonnes</varname> valent zéro alors <constant>null</constant> est renvoyé.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ShuffleVector">
         <term>ShuffleVector</term>
         <listitem>
          <synopsis>ShuffleVector (v)</synopsis>
	  <para>Mélange les éléments d'un vecteur. Renvoie <constant>null</constant> si <constant>null</constant> est fourni</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SortVector">
         <term>SortVector</term>
         <listitem>
          <synopsis>SortVector (v)</synopsis>
          <para>Trie les éléments d'un vecteur en ordre croissant.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-StripZeroColumns">
         <term>StripZeroColumns</term>
         <listitem>
          <synopsis>StripZeroColumns (M)</synopsis>
          <para>Élimine toutes les colonnes entièrement nulles de <varname>M</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-StripZeroRows">
         <term>StripZeroRows</term>
         <listitem>
          <synopsis>StripZeroRows (M)</synopsis>
          <para>Élimine toutes les lignes entièrement nulles de <varname>M</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Submatrix">
         <term>Submatrix</term>
         <listitem>
          <synopsis>Submatrix (m,r,c)</synopsis>
          <para>Renvoie certaines colonnes et lignes d'une matrice. C'est équivalent à <userinput>m@(r,c)</userinput>. <varname>r</varname> et <varname>c</varname> doivent être des vecteurs de lignes et de colonnes (ou de simples nombres si vous avez besoin d'une seule ligne ou colonne).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SwapRows">
         <term>SwapRows</term>
         <listitem>
          <synopsis>SwapRows (m,ligne1,ligne2)</synopsis>
          <para>Échange deux lignes dans une matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-UpperTriangular">
         <term>UpperTriangular</term>
         <listitem>
          <synopsis>UpperTriangular (M)</synopsis>
          <para>Renvoie une copie de la matrice <varname>M</varname> avec tous les éléments sous la diagonale mis à zéro.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-columns">
         <term>columns</term>
         <listitem>
          <synopsis>columns (M)</synopsis>
          <para>Renvoie le nombre de colonnes d'une matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-elements">
         <term>elements</term>
         <listitem>
          <synopsis>elements (M)</synopsis>
          <para>Renvoie le nombre total d'éléments d'une matrice. C'est le nombre de colonnes multiplié par le nombre de lignes.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ones">
         <term>ones</term>
         <listitem>
          <synopsis>ones (lignes,colonnes...)</synopsis>
	  <para>Crée une matrice de 1 (ou un vecteur colonne si un seul argument est donné). Renvoie <constant>null</constant> si ligne ou colonne est nul.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-rows">
         <term>rows</term>
         <listitem>
          <synopsis>rows (M)</synopsis>
          <para>Renvoie le nombre de lignes d'une matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-zeros">
         <term>zeros</term>
         <listitem>
          <synopsis>zeros (lignes,colonnes...)</synopsis>
	  <para>Crée une matrice de 0 (ou un vecteur colonne si un seul argument est donné). Renvoie <constant>null</constant> si ligne ou colonne est nul.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-linear-algebra">
      <title>Algèbre linéaire</title>
      <variablelist>
        <varlistentry id="gel-function-AuxiliaryUnitMatrix">
         <term>AuxiliaryUnitMatrix</term>
         <listitem>
          <synopsis>AuxiliaryUnitMatrix (n)</synopsis>
          <para>Renvoie la matrice unitaire auxiliaire de taille <varname>n</varname>. C'est une matrice carrée dont les éléments sont tous nuls sauf ceux de la super-diagonale qui valent 1. C'est la matrice bloc de Jordan nilpotent à valeurs propres nulles.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/JordanCanonicalFormTheorem.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/JordanBlock.html">Mathworld</ulink> pour plus d'informations sur la forme canonique de Jordan.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-BilinearForm">
         <term>BilinearForm</term>
         <listitem>
          <synopsis>BilinearForm (v,A,w)</synopsis>
          <para>Évalue (v,w) par rapport à la forme bilinéaire donnée par la matrice A.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-BilinearFormFunction">
         <term>BilinearFormFunction</term>
         <listitem>
          <synopsis>BilinearFormFunction (A)</synopsis>
          <para>Renvoie une fonction qui évalue deux vecteurs par rapport à la forme bilinéaire donnée par A.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-CharacteristicPolynomial">
         <term>CharacteristicPolynomial</term>
         <listitem>
          <synopsis>CharacteristicPolynomial (M)</synopsis>
          <para>Alias : <function>CharPoly</function></para>
	  <para>Renvoie le polynôme caractéristique d'un vecteur. C'est-à-dire renvoie les coefficients du polynôme en commençant par le terme constant. Ce polynôme est défini par <userinput>det(M-xI)</userinput>. Les racines de ce polynôme sont les valeurs propres de <varname>M</varname>. Consultez également <link linkend="gel-function-CharacteristicPolynomialFunction">CharacteristicPolynomialFunction</link>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/CharacteristicEquation.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-CharacteristicPolynomialFunction">
         <term>CharacteristicPolynomialFunction</term>
         <listitem>
          <synopsis>CharacteristicPolynomialFunction (M)</synopsis>
	  <para>Renvoie le polynôme caractéristique d'un vecteur sous la forme d'une fonction. Ce polynôme est défini par <userinput>det(M-xI)</userinput>. Les racines de ce polynôme sont les valeurs propres de <varname>M</varname>. Consultez également <link linkend="gel-function-CharacteristicPolynomial">CharacteristicPolynomial</link>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/CharacteristicEquation.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ColumnSpace">
         <term>ColumnSpace</term>
         <listitem>
          <synopsis>ColumnSpace (M)</synopsis>
	  <para>Renvoie une matrice de base pour le sous-espace vectoriel d'une matrice. C'est-à-dire renvoie une matrice dont les colonnes forment une base pour le sous-espace vectoriel de <varname>M</varname>, donc l'espace engendré par les colonnes de <varname>M</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-CommutationMatrix">
         <term>CommutationMatrix</term>
         <listitem>
          <synopsis>CommutationMatrix (m, n)</synopsis>
	  <para>Renvoie la matrice de permutation K(m,n) qui est l'unique matrice m*n par m*n telle que K(m,n) * MakeVector(A) = MakeVector(A.') pour toutes matrices A de taille m par n.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-CompanionMatrix">
         <term>CompanionMatrix</term>
         <listitem>
          <synopsis>CompanionMatrix (p)</synopsis>
          <para>Matrice compagnon d'un polynôme (comme vecteur).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ConjugateTranspose">
         <term>ConjugateTranspose</term>
         <listitem>
          <synopsis>ConjugateTranspose (M)</synopsis>
          <para>Transposée conjuguée d'une matrice (matrice adjointe). Identique à l'opérateur <userinput>'</userinput>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/ConjugateTranspose.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Convolution">
         <term>Convolution</term>
         <listitem>
          <synopsis>Convolution (a,b)</synopsis>
          <para>Alias : <function>convol</function></para>
          <para>Calcule la convolution de deux vecteurs horizontaux.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ConvolutionVector">
         <term>ConvolutionVector</term>
         <listitem>
          <synopsis>ConvolutionVector (a,b)</synopsis>
          <para>Calcule la convolution de deux vecteurs horizontaux. Renvoie le résultat sous la forme d'un vecteur dont les composants ne sont pas additionnées ensemble.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-CrossProduct">
         <term>CrossProduct</term>
         <listitem>
          <synopsis>CrossProduct (v,w)</synopsis>
	  <para>Produit vectoriel de deux vecteurs dans R<superscript>3</superscript> sous la forme d'un vecteur colonne.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DeterminantalDivisorsInteger">
         <term>DeterminantalDivisorsInteger</term>
         <listitem>
          <synopsis>DeterminantalDivisorsInteger (M)</synopsis>
          <para>Renvoie les « determinantal divisors » d'une matrice d'entiers (et non pas son polynôme caractéristique).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DirectSum">
         <term>DirectSum</term>
         <listitem>
          <synopsis>DirectSum (M,N...)</synopsis>
          <para>Somme directe de matrices.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DirectSumMatrixVector">
         <term>DirectSumMatrixVector</term>
         <listitem>
          <synopsis>DirectSumMatrixVector (v)</synopsis>
          <para>Somme directe d'un vecteur de matrices.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Eigenvalues">
         <term>Eigenvalues</term>
         <listitem>
          <synopsis>Eigenvalues (M)</synopsis>
          <para>Alias : <function>eig</function></para>
          <para>Renvoie les valeurs propres d'une matrice carrée. Ne fonctionne actuellement que pour les matrices de taille inférieure ou égale à 4 par 4 ou pour les matrices triangulaires (pour lesquelles les valeurs propres sont sur la diagonale).</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Valeur_propre,_vecteur_propre_et_espace_propre">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/Eigenvalue.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/Eigenvalue.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Eigenvectors">
         <term>Eigenvectors</term>
         <listitem>
          <synopsis>Eigenvectors (M)</synopsis>
          <synopsis>Eigenvectors (M, &amp;valeurspropres)</synopsis>
          <synopsis>Eigenvectors (M, &amp;valeurpropres, &amp;multiplicités)</synopsis>
	  <para>Renvoie les vecteurs propres d'une matrice carrée. Il est possible en option d'obtenir les valeurs propres ainsi que leur multiplicité algébrique. Ne fonctionne actuellement que pour les matrices 2x2.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Valeur_propre,_vecteur_propre_et_espace_propre">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/Eigenvector.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/Eigenvector.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-GramSchmidt">
         <term>GramSchmidt</term>
         <listitem>
          <synopsis>GramSchmidt (v,B...)</synopsis>
	  <para>Applique le procédé de Gram-Schmidt (aux colonnes) par rapport au produit scalaire donné par <varname>B</varname>. Si <varname>B</varname> n'est pas fourni alors le produit hermitien standard est utilisé. <varname>B</varname> peut être soit une forme sesquilinéaire à deux arguments soit une matrice fournissant une forme sesquilinéaire. Les vecteurs seront orthogonaux par rapport à <varname>B</varname>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/GramSchmidtOrthogonalization.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-HankelMatrix">
         <term>HankelMatrix</term>
         <listitem>
          <synopsis>HankelMatrix (c,r)</synopsis>
          <para>Matrice de Hankel.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-HilbertMatrix">
         <term>HilbertMatrix</term>
         <listitem>
          <synopsis>HilbertMatrix (n)</synopsis>
          <para>Matrice de Hilbert d'ordre <varname>n</varname>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/HilbertMatrix.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Image">
         <term>Image</term>
         <listitem>
          <synopsis>Image (T)</synopsis>
          <para>Renvoie l'image (espace vectoriel engendré par les colonnes) d'une transformation linéaire.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-InfNorm">
         <term>InfNorm</term>
         <listitem>
          <synopsis>InfNorm (v)</synopsis>
          <para>Renvoie la norme « infini », appelée aussi norme sup, ou encore norme de la convergence uniforme.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-InvariantFactorsInteger">
         <term>InvariantFactorsInteger</term>
         <listitem>
          <synopsis>InvariantFactorsInteger (M)</synopsis>
          <para>Renvoie les facteurs invariants d'une matrice carrée (pas sa caractéristique).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-InverseHilbertMatrix">
         <term>InverseHilbertMatrix</term>
         <listitem>
          <synopsis>InverseHilbertMatrix (n)</synopsis>
          <para>Matrice inverse de Hilbert d'ordre <varname>n</varname>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/HilbertMatrix.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsHermitian">
         <term>IsHermitian</term>
         <listitem>
          <synopsis>IsHermitian (M)</synopsis>
          <para>Indique si une matrice est hermitienne. C'est-à-dire si elle est égale à sa transposée conjuguée.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/HermitianMatrix.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsInSubspace">
         <term>IsInSubspace</term>
         <listitem>
          <synopsis>IsInSubspace (v,W)</synopsis>
          <para>Teste si un vecteur appartient à un sous-espace.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsInvertible">
         <term>IsInvertible</term>
         <listitem>
          <synopsis>IsInvertible (n)</synopsis>
          <para>Indique si une matrice (ou un nombre) est inversible (une matrice entière est inversible si et seulement si elle est inversible sur les entiers).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsInvertibleField">
         <term>IsInvertibleField</term>
         <listitem>
          <synopsis>IsInvertibleField (n)</synopsis>
          <para>Indique si une matrice (ou un nombre) est inversible sur un corps.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsNormal">
         <term>IsNormal</term>
         <listitem>
          <synopsis>IsNormal (M)</synopsis>
          <para>Indique si <varname>M</varname> est une matrice normale, c'est-à-dire <userinput>M*M' == M'*M</userinput>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/NormalMatrix.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/NormalMatrix.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsPositiveDefinite">
         <term>IsPositiveDefinite</term>
         <listitem>
          <synopsis>IsPositiveDefinite (M)</synopsis>
          <para>Indique si <varname>M</varname> est une matrice hermitienne définie positive. C'est-à-dire si <userinput>HermitianProduct(M*v,v)</userinput> est toujours strictement positif pour tout vecteur <varname>v</varname>. <varname>M</varname> doit être carré et hermitienne pour être définie positive. Le contrôle effectué est que le déterminant de chaque sous-matrice principale n'est pas négatif (consultez <link linkend="gel-function-HermitianProduct">HermitianProduct</link>).</para>
	  <para>Notez que certains auteurs (par exemple Mathworld) n'exigent pas que <varname>M</varname> soit hermitienne, ainsi la condition porte sur la partie réelle du produit scalaire mais ce n'est pas le cas de Genius. Si vous souhaitez réaliser ce type de contrôle, vérifiez seulement la partie hermitienne de la matrice <varname>M</varname> comme ceci : <userinput>IsPositiveDefinite(M+M')</userinput>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/PositiveDefinite.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/PositiveDefiniteMatrix.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsPositiveSemidefinite">
         <term>IsPositiveSemidefinite</term>
         <listitem>
          <synopsis>IsPositiveSemidefinite (M)</synopsis>
          <para>Indique si <varname>M</varname> est une matrice hermitienne semi-définie positive. C'est-à-dire si <userinput>HermitianProduct(M*v,v)</userinput> est toujours non négatif pour tout vecteur <varname>v</varname>. <varname>M</varname> doit être carré et hermitienne pour être semi-définie positive. Le contrôle effectué est que le déterminant de chaque sous-matrice principale n'est pas négatif (consultez <link linkend="gel-function-HermitianProduct">HermitianProduct</link>).</para>
	  <para>Notez que certains auteurs n'exigent pas que <varname>M</varname> soit hermitienne, ainsi la condition porte sur la partie réelle du produit scalaire mais ce n'est pas le cas de Genius. Si vous souhaitez réaliser ce type de contrôle, vérifiez seulement la partie hermitienne de la matrice <varname>M</varname> comme ceci : <userinput>IsPositiveSemiDefinite(M+M')</userinput>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/PositiveSemidefinite.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/PositiveSemidefiniteMatrix.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsSkewHermitian">
         <term>IsSkewHermitian</term>
         <listitem>
          <synopsis>IsSkewHermitian (M)</synopsis>
          <para>Indique si une matrice est anti-hermitienne. C'est-à-dire si sa transposée conjuguée est égale à l'opposée de la matrice.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/SkewHermitianMatrix.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsUnitary">
         <term>IsUnitary</term>
         <listitem>
          <synopsis>IsUnitary (M)</synopsis>
          <para>Indique si une matrice est unitaire. C'est-à-dire si <userinput>M'*M</userinput> et <userinput>M*M'</userinput> sont égaux à l'identité.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/UnitaryTransformation.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/UnitaryMatrix.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-JordanBlock">
         <term>JordanBlock</term>
         <listitem>
          <synopsis>JordanBlock (n,lambda)</synopsis>
          <para>Alias : <function>J</function></para>
          <para>Renvoie le bloc de Jordan correspondant à la valeur propre <varname>lambda</varname> de multiplicité <varname>n</varname>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/JordanCanonicalFormTheorem.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/JordanBlock.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Kernel">
         <term>Kernel</term>
         <listitem>
          <synopsis>Kernel (T)</synopsis>
          <para>Renvoie le noyau d'une transformation linéaire.</para>
	  <para>(consultez <link linkend="gel-function-NullSpace">NullSpace</link>)</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LUDecomposition">
         <term>LUDecomposition</term>
         <listitem>
          <synopsis>LUDecomposition (A, L, U)</synopsis>
          <para>Calcule la décomposition LU de <varname>A</varname> et enregistre le résultat dans <varname>L</varname> et <varname>U</varname> qui doivent être des références. Renvoie <constant>true</constant> (vrai) en cas de réussite. Par exemple, supposons que A est une matrice carrée, alors après avoir exécuté : <screen><prompt>genius&gt;</prompt> <userinput>LUDecomposition(A,&amp;L,&amp;U)</userinput>
</screen> Vous obtenez la matrice inférieure dans une variable appelée <varname>L</varname> et la matrice supérieure dans une variable appelée <varname>U</varname>.</para>
	  <para>C'est la décomposition LU d'une matrice appelée aussi réduction de Crout ou de Cholesky (ISBN 0-201-11577-8 pp.99-103). La matrice triangulaire supérieure est composée d'une diagonale de 1. Ce n'est pas la méthode de Doolittle pour laquelle la diagonale de 1 est dans la matrice inférieure.</para>
	  <para>Toutes les matrices ne possèdent pas de décomposition LU, par exemple <userinput>[0,1;1,0]</userinput> n'en a pas. Dans ce cas, cette fonction renvoie <constant>false</constant> (faux) et initialise <varname>L</varname> et <varname>U</varname> à <constant>null</constant>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/LUDecomposition.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/LUDecomposition.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Minor">
         <term>Minor</term>
         <listitem>
          <synopsis>Minor (M,i,j)</synopsis>
          <para>Renvoie le mineur <varname>i</varname>-<varname>j</varname> d'une matrice.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/Minor.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NonPivotColumns">
         <term>NonPivotColumns</term>
         <listitem>
          <synopsis>NonPivotColumns (M)</synopsis>
          <para>Renvoie les colonnes qui ne sont pas les colonnes pivot d'une matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Norm">
         <term>Norm</term>
         <listitem>
          <synopsis>Norm (v,p...)</synopsis>
          <para>Alias : <function>norm</function></para>
          <para>Renvoie la norme-p d'un vecteur (ou norme-2 si p n'est pas fourni).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NullSpace">
         <term>NullSpace</term>
         <listitem>
          <synopsis>NullSpace (T)</synopsis>
          <para>Renvoie le noyau d'une matrice. C'est-à-dire le noyau de l'application linéaire que la matrice représente sous la forme d'une matrice dont l'espace des colonnes est le noyau de <varname>T</varname>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/Nullspace.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Nullity">
         <term>Nullity</term>
         <listitem>
          <synopsis>Nullity (M)</synopsis>
          <para>Alias : <function>nullity</function></para>
          <para>Renvoie la dimension du noyau de la matrice <varname>M</varname>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/Nullity.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-OrthogonalComplement">
         <term>OrthogonalComplement</term>
         <listitem>
          <synopsis>OrthogonalComplement (M)</synopsis>
          <para>Renvoie le complément orthogonal de l'espace des colonnes.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PivotColumns">
         <term>PivotColumns</term>
         <listitem>
          <synopsis>PivotColumns (M)</synopsis>
          <para>Renvoie les numéros des colonnes pivot d'une matrice, c'est-à-dire quelles sont les colonnes d'une matrice réduite qui contiennent 1 en première position. Renvoie également dans quelles lignes se trouvent ces pivots.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Projection">
         <term>Projection</term>
         <listitem>
          <synopsis>Projection (v,W,B...)</synopsis>
	  <para>Projection du vecteur <varname>v</varname> sur le sous-espace <varname>W</varname> par rapport au produit scalaire donné par <varname>B</varname>. Si <varname>B</varname> n'est pas fourni alors le produit hermitien standard est utilisé. <varname>B</varname> peut être soit une forme sesquilinéaire à deux arguments soit une matrice fournissant une forme sesquilinéaire.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-QRDecomposition">
         <term>QRDecomposition</term>
         <listitem>
          <synopsis>QRDecomposition (A, Q)</synopsis>
          <para>Calcule la décomposition QR d'une matrice carrée <varname>A</varname>, renvoie la matrice triangulaire supérieure <varname>R</varname> et définit <varname>Q</varname> comme la matrice orthogonale (unitaire). <varname>Q</varname> doit être une référence. Si vous ne voulez pas qu'elle soit renvoyée, utilisez <constant>null</constant>. Par exemple : <screen><prompt>genius&gt;</prompt> <userinput>R = QRDecomposition(A,&amp;Q)</userinput>
</screen> Vous obtenez la matrice supérieure dans une variable appelée <varname>R</varname> et la matrice orthogonale (unitaire) dans <varname>Q</varname>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/QRDecomposition.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/QRDecomposition.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RayleighQuotient">
         <term>RayleighQuotient</term>
         <listitem>
          <synopsis>RayleighQuotient (A,x)</synopsis>
          <para>Renvoie le quotient de Rayleigh (aussi appelé le quotient ou rapport de Rayleigh-Ritz) d'une matrice et d'un vecteur.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/RayleighQuotient.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RayleighQuotientIteration">
         <term>RayleighQuotientIteration</term>
         <listitem>
          <synopsis>RayleighQuotientIteration (A,x,epsilon,maxiter,vecref)</synopsis>
          <para>Cherche les valeurs propres de <varname>A</varname> en utilisant la méthode itérative du quotient de Rayleigh. <varname>x</varname> est une valeur initiale estimée pour un vecteur propre et peut être tirée au hasard. Si vous voulez avoir une chance de trouver des valeurs propres complexes, la partie imaginaire ne doit pas être nulle. Le programme effectue au maximum <varname>maxiter</varname> itérations et renvoie <constant>null</constant> s'il ne peut trouver une solution avec une précision inférieure à <varname>epsilon</varname>. <varname>vecref</varname> doit être soit <constant>null</constant> ou une référence à une variable dans laquelle le vecteur propre est enregistré.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/RayleighQuotient.html">Planetmath</ulink> pour plus d'informations sur le quotient de Rayleigh.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Rank">
         <term>Rank</term>
         <listitem>
          <synopsis>Rank (M)</synopsis>
          <para>Alias : <function>rank</function></para>
          <para>Renvoie le rang d'une matrice.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/SylvestersLaw.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RosserMatrix">
         <term>RosserMatrix</term>
         <listitem>
          <synopsis>RosserMatrix ()</synopsis>
          <para>Matrice de Rosser, un problème classique de test de valeurs propres symétriques.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Rotation2D">
         <term>Rotation2D</term>
         <listitem>
          <synopsis>Rotation2D (angle)</synopsis>
          <para>Alias : <function>RotationMatrix</function></para>
          <para>Renvoie la matrice correspondant à la rotation centrée sur l'origine dans R<superscript>2</superscript>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Rotation3DX">
         <term>Rotation3DX</term>
         <listitem>
          <synopsis>Rotation3DX (angle)</synopsis>
          <para>Renvoie la matrice correspondant à la rotation centrée sur l'origine dans R<superscript>3</superscript> autour de l'axe des x.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Rotation3DY">
         <term>Rotation3DY</term>
         <listitem>
          <synopsis>Rotation3DY (angle)</synopsis>
          <para>Renvoie la matrice correspondant à la rotation centrée sur l'origine dans R<superscript>3</superscript> autour de l'axe des y.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Rotation3DZ">
         <term>Rotation3DZ</term>
         <listitem>
          <synopsis>Rotation3DZ (angle)</synopsis>
          <para>Renvoie la matrice correspondant à la rotation centrée sur l'origine dans R<superscript>3</superscript> autour de l'axe des z.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RowSpace">
         <term>RowSpace</term>
         <listitem>
          <synopsis>RowSpace (M)</synopsis>
          <para>Renvoie une matrice de base pour l'espace vectoriel engendré par les lignes d'une matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SesquilinearForm">
         <term>SesquilinearForm</term>
         <listitem>
          <synopsis>SesquilinearForm (v,A,w)</synopsis>
          <para>Évalue (v, w) par rapport à la forme sesquilinéaire donnée par la matrice A.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SesquilinearFormFunction">
         <term>SesquilinearFormFunction</term>
         <listitem>
          <synopsis>SesquilinearFormFunction (A)</synopsis>
          <para>Renvoie une fonction qui évalue deux vecteurs par rapport à la forme sesquilinéaire donnée par A.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SmithNormalFormField">
         <term>SmithNormalFormField</term>
         <listitem>
          <synopsis>SmithNormalFormField (A)</synopsis>
          <para>Forme normale de Smith pour les corps (se terminera par des 1 sur la diagonale).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SmithNormalFormInteger">
         <term>SmithNormalFormInteger</term>
         <listitem>
          <synopsis>SmithNormalFormInteger (M)</synopsis>
          <para>Forme normale de Smith pour les matrices entières carrées (pas sa caractéristique).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SolveLinearSystem">
         <term>SolveLinearSystem</term>
         <listitem>
          <synopsis>SolveLinearSystem (M,V,params...)</synopsis>
	  <para>Résout le système linéaire Mx=V, renvoie V s'il y a une solution unique ou <constant>null</constant> sinon. Deux références d'arguments supplémentaires peuvent être utilisés pour recevoir les réductions de M et V.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ToeplitzMatrix">
         <term>ToeplitzMatrix</term>
         <listitem>
          <synopsis>ToeplitzMatrix (c, r...)</synopsis>
	  <para>Renvoie la matrice de Toeplitz construite à partir de la première colonne c et (éventuellement) de la première ligne r. Si seule la colonne c est fournie alors elle est conjuguée et la version non conjuguée est utilisée pour la première ligne pour fournir une matrice hermitienne (si le premier élément est réel bien sûr).</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/ToeplitzMatrix.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Trace">
         <term>Trace</term>
         <listitem>
          <synopsis>Trace (M)</synopsis>
          <para>Alias : <function>trace</function></para>
          <para>Calcule la trace d'une matrice, c'est-à-dire la somme des éléments diagonaux.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/Trace.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Transpose">
         <term>Transpose</term>
         <listitem>
          <synopsis>Transpose (M)</synopsis>
          <para>Matrice transposée. C'est identique à l'opérateur <userinput>.'</userinput></para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/Transpose.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-VandermondeMatrix">
         <term>VandermondeMatrix</term>
         <listitem>
          <synopsis>VandermondeMatrix (v)</synopsis>
          <para>Alias : <function>vander</function></para>
          <para>Renvoie la matrice de Vandermonde.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-VectorAngle">
         <term>VectorAngle</term>
         <listitem>
          <synopsis>VectorAngle (v,w,B...)</synopsis>
          <para>L'angle entre deux vecteurs par rapport au produit scalaire donné par <varname>B</varname>. Si <varname>B</varname> n'est pas fourni alors le produit hermitien standard est utilisé. <varname>B</varname> peut être soit une forme sesquilinéaire à deux arguments soit une matrice fournissant une forme sesquilinéaire.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-VectorSpaceDirectSum">
         <term>VectorSpaceDirectSum</term>
         <listitem>
          <synopsis>VectorSpaceDirectSum (M,N)</synopsis>
          <para>Somme directe des espaces vectoriels M et N.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-VectorSubspaceIntersection">
         <term>VectorSubspaceIntersection</term>
         <listitem>
          <synopsis>VectorSubspaceIntersection (M,N)</synopsis>
          <para>Intersection des sous-espaces donnés par M et N.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-VectorSubspaceSum">
         <term>VectorSubspaceSum</term>
         <listitem>
          <synopsis>VectorSubspaceSum (M,N)</synopsis>
          <para>Somme des espaces vectoriels M et N, c'est-à-dire {w | w=m+n, m dans M, n dans N}.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-adj">
         <term>adj</term>
         <listitem>
          <synopsis>adj (m)</synopsis>
          <para>Alias : <function>Adjugate</function></para>
          <para>Renvoie la matrice adjointe d'une matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-cref">
         <term>cref</term>
         <listitem>
          <synopsis>cref (M)</synopsis>
          <para>Alias : <function>CREF</function><function>ColumnReducedEchelonForm</function></para>
          <para>Calcule la forme échelonnée réduite en colonnes.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-det">
         <term>det</term>
         <listitem>
          <synopsis>det (M)</synopsis>
          <para>Alias : <function>Determinant</function></para>
          <para>Renvoie le déterminant d'une matrice.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/D%C3%A9terminant_%28math%C3%A9matiques%29">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/Determinant2.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ref">
         <term>ref</term>
         <listitem>
          <synopsis>ref (M)</synopsis>
          <para>Alias : <function>REF</function><function>RowEchelonForm</function></para>
	  <para>Renvoie la matrice échelonnée en lignes (row echelon) d'une matrice. C'est-à-dire effectue une élimination de Gauss de <varname>M</varname>. Les lignes de pivot sont divisées pour que tous les pivots soient égaux à 1.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Matrice_%C3%A9chelonn%C3%A9e">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/RowEchelonForm.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-rref">
         <term>rref</term>
         <listitem>
          <synopsis>rref (M)</synopsis>
          <para>Alias : <function>RREF</function><function>ReducedRowEchelonForm</function></para>
          <para>Renvoie la matrice échelonnée réduite en lignes (reduced row echelon) d'une matrice. C'est-à-dire effectue une élimination de Gauss-Jordan de <varname>M</varname>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Matrice_%C3%A9chelonn%C3%A9e">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/ReducedRowEchelonForm.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-combinatorics">
      <title>Combinatoire</title>
      <variablelist>
        <varlistentry id="gel-function-Catalan">
         <term>Catalan</term>
         <listitem>
          <synopsis>Catalan (n)</synopsis>
          <para>Renvoie le <varname>n</varname>-ième nombre catalan.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/CatalanNumbers.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Combinations">
         <term>Combinaisons</term>
         <listitem>
          <synopsis>Combinations (k,n)</synopsis>
          <para>Renvoie toutes les combinaisons de k nombres de 1 à n comme un vecteur de vecteurs (consultez aussi <link linkend="gel-function-NextCombination">NextCombination</link>).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DoubleFactorial">
         <term>DoubleFactorial</term>
         <listitem>
          <synopsis>DoubleFactorial (n)</synopsis>
          <para>Double factorielle : <userinput>n(n-2)(n-4)...</userinput></para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/DoubleFactorial.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Factorial">
         <term>Factorial</term>
         <listitem>
          <synopsis>Factorial (n)</synopsis>
          <para>Factorielle : <userinput>n(n-1)(n-2)...</userinput></para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/Factorial.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FallingFactorial">
         <term>FallingFactorial</term>
         <listitem>
          <synopsis>FallingFactorial (n,k)</synopsis>
          <para>Factorielle décroissante : <userinput>(n)_k·=·n(n-1)...(n-(k-1))</userinput></para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/FallingFactorial.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Fibonacci">
         <term>Fibonacci</term>
         <listitem>
          <synopsis>Fibonacci (x)</synopsis>
          <para>Alias : <function>fib</function></para>
          <para>Calcule le <varname>n</varname>-ième nombre de Fibonacci. C'est-à-dire le nombre défini de manière récursive par <userinput>Fibonacci(n) = Fibonacci(n-1) + Fibonacci(n-2)</userinput> et <userinput>Fibonacci(1) = Fibonacci(2) = 1</userinput>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Suite_de_Fibonacci">Wikipedia</ulink> ou <ulink url="http://planetmath.org/encyclopedia/FibonacciSequence.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/FibonacciNumber.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FrobeniusNumber">
         <term>FrobeniusNumber</term>
         <listitem>
          <synopsis>FrobeniusNumber (v,param...)</synopsis>
          <para>Calcule le nombre de Frobenius. C'est-à-dire calcule le plus petit nombre qui ne peut pas être obtenu comme une combinaison linéaire d'entiers non négatifs d'un vecteur donné d'entiers non négatifs. Le vecteur peut être fourni sous la forme de nombre séparés ou d'un seul vecteur. Tous les nombres fournis doivent avoir un PGCD de 1.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/FrobeniusNumber.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-GaloisMatrix">
         <term>GaloisMatrix</term>
         <listitem>
          <synopsis>GaloisMatrix (règle_de_combinaison)</synopsis>
          <para>Matrice de Galois étant donnée la règle de combinaison linéaire (a_1*x_+...+a_n*x_n=x_(n+1)).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-GreedyAlgorithm">
         <term>GreedyAlgorithm</term>
         <listitem>
          <synopsis>FrobeniusNumber (n,v)</synopsis>
          <para>Trouve le vecteur <varname>c</varname> d'entiers non négatifs tel que le produit scalaire par <varname>v</varname> est égal à n. Si ce n'est pas possible, renvoie <constant>null</constant>. <varname>v</varname> doit être fourni trié dans l'ordre croissant et doit être composé d'entier non négatif.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/GreedyAlgorithm.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-HarmonicNumber">
         <term>HarmonicNumber</term>
         <listitem>
          <synopsis>HarmonicNumber (n,r)</synopsis>
          <para>Alias : <function>HarmonicH</function></para>
          <para>Nombre harmonique, le <varname>n</varname>-ième nombre harmonique d'ordre <varname>r</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Hofstadter">
         <term>Hofstadter</term>
         <listitem>
          <synopsis>Hofstadter (n)</synopsis>
          <para>Fonction de Hofstadter q(n) définie par q(1)=1, q(2)=1, q(n)=q(n-q(n-1))+q(n-q(n-2)).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LinearRecursiveSequence">
         <term>LinearRecursiveSequence</term>
         <listitem>
          <synopsis>LinearRecursiveSequence (valeurs_ensemencement,règle_de_combinaison,n)</synopsis>
          <para>Calcule la relation de récurrence linéaire en utilisant l'algorithme de Galois.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Multinomial">
         <term>Multinomial</term>
         <listitem>
          <synopsis>Multinomial (v,param...)</synopsis>
          <para>Calcule les coefficients multinomiaux. Prend un vecteur de <varname>k</varname> entiers non négatifs et calcule les coefficients multinomiaux. Cela correspond aux coefficients dans le polynôme homogène à <varname>k</varname> variables avec les puissances correspondantes.</para>
	  <para>La formule pour <userinput>Multinomial(a,b,c)</userinput> peut s'écrire sous la forme :<programlisting>(a+b+c)! / (a!b!c!)
</programlisting> En d'autres termes, si vous n'avez que deux éléments alors <userinput>Multinomial(a,b)</userinput> est la même chose que <userinput>Binomial(a+b,a)</userinput> ou <userinput>Binomial(a+b,b)</userinput>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/MultinomialTheorem.html">Planetmath</ulink>, <ulink url="http://mathworld.wolfram.com/MultinomialCoefficient.html">Mathworld</ulink> ou <ulink url="http://fr.wikipedia.org/wiki/Formule_du_multin%C3%B4me">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NextCombination">
         <term>NextCombination</term>
         <listitem>
          <synopsis>NextCombination (v,n)</synopsis>
	  <para>Calcule la combinaison qui apparaîtrait après v dans un appel à la fonction combinations, la première combinaison devrait être <userinput>[1:k]</userinput>. Cette fonction est utile si vous devez parcourir beaucoup de combinaisons et que vous ne voulez pas gaspiller de la mémoire pour les enregistrer.</para>
	  <para>Par exemple, avec la fonction Combinations, vous devriez normalement écrire une boucle du style : <screen><userinput>for n in Combinations (4,6) do (
  SomeFunction (n)
);</userinput>
</screen> Mais avec NextCombination, vous écrivez quelque chose comme cela : <screen><userinput>n:=[1:4];
do (
  SomeFunction (n)
) while not IsNull(n:=NextCombination(n,6));</userinput>
</screen> Consultez également <link linkend="gel-function-Combinations">Combinations</link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Pascal">
         <term>Pascal</term>
         <listitem>
          <synopsis>Pascal (i)</synopsis>
          <para>Calcule le triangle de Pascal sous la forme d'une matrice. Cela renvoie une matrice <varname>i</varname>+1 par <varname>i</varname>+1 diagonale inférieure qui est le triangle de Pascal après <varname>i</varname> itérations.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/PascalsTriangle.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Permutations">
         <term>Permutations</term>
         <listitem>
          <synopsis>Permutations (k,n)</synopsis>
          <para>Renvoie toutes les permutations de <varname>k</varname> nombres de 1 à <varname>n</varname> comme un vecteur de vecteurs.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/Permutation.html">Mathworld</ulink> ou <ulink url="http://fr.wikipedia.org/wiki/Permutation">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RisingFactorial">
         <term>RisingFactorial</term>
         <listitem>
          <synopsis>RisingFactorial (n,k)</synopsis>
          <para>Alias : <function>Pochhammer</function></para>
          <para>Factorielle croissante (Pochhammer) : (n)_k = n(n+1)...(n+(k-1)).</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/RisingFactorial.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-StirlingNumberFirst">
         <term>StirlingNumberFirst</term>
         <listitem>
          <synopsis>StirlingNumberFirst (n,m)</synopsis>
          <para>Alias : <function>StirlingS1</function></para>
          <para>Nombre de Stirling du premier type.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/StirlingNumbersOfTheFirstKind.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/StirlingNumberoftheFirstKind.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-StirlingNumberSecond">
         <term>StirlingNumberSecond</term>
         <listitem>
          <synopsis>StirlingNumberSecond (n,m)</synopsis>
          <para>Alias : <function>StirlingS2</function></para>
          <para>Nombre de Stirling du second type.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/StirlingNumbersSecondKind.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/StirlingNumberoftheSecondKind.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Subfactorial">
         <term>Subfactorial</term>
         <listitem>
          <synopsis>Subfactorial (n)</synopsis>
          <para>Sous-factorielle : n! multiplié par sum_{k=1}^n (-1)^k/k!.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Triangular">
         <term>Triangular</term>
         <listitem>
          <synopsis>Triangular (nième)</synopsis>
          <para>Calcule le <varname>n</varname>-ième nombre triangulaire.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/TriangularNumbers.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-nCr">
         <term>nCr</term>
         <listitem>
          <synopsis>nCr (n,r)</synopsis>
          <para>Alias : <function>Binomial</function></para>
          <para>Calcule le nombre de combinaisons, c'est-à-dire le coefficient binomial. <varname>n</varname> peut être n'importe quel nombre réel.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/Choose.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-nPr">
         <term>nPr</term>
         <listitem>
          <synopsis>nPr (n,r)</synopsis>
          <para>Calcule le nombre de permutations de taille <varname>r</varname> de nombres compris entre 1 et <varname>n</varname>.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/Permutation.html">Mathworld</ulink> ou <ulink url="http://fr.wikipedia.org/wiki/Permutation">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-calculus">
      <title>Analyse</title>
      <variablelist>
        <varlistentry id="gel-function-CompositeSimpsonsRule">
         <term>CompositeSimpsonsRule</term>
         <listitem>
          <synopsis>CompositeSimpsonsRule (f,a,b,n)</synopsis>
          <para>Intégration de f par la méthode de Simpson composée sur l'intervalle [a,b] avec n sous-intervalles avec une erreur de l'ordre max(f'''')*h^4*(b-a)/180, notez que n doit être pair.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/SimpsonsRule.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-CompositeSimpsonsRuleTolerance">
         <term>CompositeSimpsonsRuleTolerance</term>
         <listitem>
          <synopsis>CompositeSimpsonsRuleTolerance (f,a,b,FourthDerivativeBound,Tolerance)</synopsis>
          <para>Intégration de f par la méthode de Simpson composée sur l'intervalle [a,b] avec un nombre d'étapes calculé à l'aide de la borne de la dérivée quatrième et la tolérance souhaitée.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/SimpsonsRule.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Derivative">
         <term>Derivative</term>
         <listitem>
          <synopsis>Derivative (f,x0)</synopsis>
          <para>Tente de calculer la dérivée en essayant d'abord une approche symbolique puis numérique.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-EvenPeriodicExtension">
         <term>EvenPeriodicExtension</term>
         <listitem>
          <synopsis>EvenPeriodicExtension (f,L)</synopsis>
	  <para>Renvoie une fonction qui est l'extension périodique paire de <function>f</function> de demi-période <varname>L</varname>. C'est-à-dire une fonction définie sur l'intervalle <userinput>[0,L]</userinput> étendue de manière à être paire sur <userinput>[-L,L]</userinput> puis rendue périodique de période <userinput>2*L</userinput>.</para>
	  <para>Consultez aussi <link linkend="gel-function-OddPeriodicExtension">OddPeriodicExtension</link> et <link linkend="gel-function-PeriodicExtension">PeriodicExtension</link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FourierSeriesFunction">
         <term>FourierSeriesFunction</term>
         <listitem>
          <synopsis>FourierSeriesFunction (a,b,L)</synopsis>
	  <para>Renvoie une fonction qui est la série de Fourier de coefficients donnés par les vecteurs <varname>a</varname> (cosinus) et <varname>b</varname> (sinus). Notez que <userinput>a@(1)</userinput> est le coefficient constant donc <userinput>a@(n)</userinput> se rapporte au terme en <userinput>cos(x*(n-1)*pi/L)</userinput> alors que <userinput>b@(n)</userinput> se rapporte au terme en <userinput>sin(x*n*pi/L)</userinput>. Il est possible que <varname>a</varname> ou <varname>b</varname> soit <constant>null</constant>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/S%C3%A9rie_de_Fourier">Wikipedia</ulink> ou <ulink url="http://mathworld.wolfram.com/FourierSeries.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-InfiniteProduct">
         <term>InfiniteProduct</term>
         <listitem>
          <synopsis>InfiniteProduct (fonc,début,inc)</synopsis>
          <para>Essaie de calculer un produit infini pour une fonction à un seul argument.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-InfiniteProduct2">
         <term>InfiniteProduct2</term>
         <listitem>
          <synopsis>InfiniteProduct2 (fonc,param,début,inc)</synopsis>
          <para>Essaie de calculer un produit infini pour une fonction à double arguments avec func(arg,n).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-InfiniteSum">
         <term>InfiniteSum</term>
         <listitem>
          <synopsis>InfiniteSum (fonc,début,inc)</synopsis>
          <para>Essaie de calculer une somme infinie pour une fonction à un seul argument.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-InfiniteSum2">
         <term>InfiniteSum2</term>
         <listitem>
          <synopsis>InfiniteSum2 (fonc,param,début,inc)</synopsis>
          <para>Essaie de calculer une somme infinie pour une fonction à double arguments avec func(arg,n).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsContinuous">
         <term>IsContinuous</term>
         <listitem>
          <synopsis>IsContinuous (f,x0)</synopsis>
          <para>Essaie de voir si une fonction à valeur réelle est continue en x0 en calculant la limite en ce point.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsDifferentiable">
         <term>IsDifferentiable</term>
         <listitem>
          <synopsis>IsDifferentiable (f,x0)</synopsis>
          <para>Teste de différentiabilité en approchant les limites gauche et droite et en les comparant.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LeftLimit">
         <term>LeftLimit</term>
         <listitem>
          <synopsis>LeftLimit (f,x0)</synopsis>
          <para>Calcule la limite gauche d'une fonction à valeurs réelles en x0.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Limit">
         <term>Limit</term>
         <listitem>
          <synopsis>Limit (f,x0)</synopsis>
          <para>Calcule la limite d'une fonction à valeur réelle en x0. Essaie de calculer les deux limites à gauche et à droite.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MidpointRule">
         <term>MidpointRule</term>
         <listitem>
          <synopsis>MidpointRule (f,a,b,n)</synopsis>
          <para>Intégration par la méthode des rectangles.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalDerivative">
         <term>NumericalDerivative</term>
         <listitem>
          <synopsis>NumericalDerivative (f,x0)</synopsis>
          <para>Alias : <function>NDerivative</function></para>
          <para>Essaie de calculer la dérivée par méthode numérique.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalFourierSeriesCoefficients">
         <term>NumericalFourierSeriesCoefficients</term>
         <listitem>
          <synopsis>NumericalFourierSeriesCoefficients (f,L,N)</synopsis>
	  <para>Renvoie un vecteur de vecteurs <userinput>[a,b]</userinput> où <varname>a</varname> sont les coefficients des cosinus et <varname>b</varname> ceux des sinus de la série de Fourier de la fonction <function>f</function> de demi-période <varname>L</varname> (définie sur l'intervalle <userinput>[-L,L]</userinput> et étendue de manière périodique), calculée numériquement jusqu'au <varname>N</varname>-ième harmonique. Les coefficients sont calculés par intégration numérique en utilisant la fonction <function>NumericalIntegral</function>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/S%C3%A9rie_de_Fourier">Wikipedia</ulink> ou <ulink url="http://mathworld.wolfram.com/FourierSeries.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalFourierSeriesFunction">
         <term>NumericalFourierSeriesFunction</term>
         <listitem>
          <synopsis>NumericalFourierSeriesFunction (f,L,N)</synopsis>
	  <para>Renvoie une fonction, qui est la série de Fourier de la fonction <function>f</function> de demi-période <varname>L</varname> (définie sur l'intervalle <userinput>[-L,L]</userinput> et étendue de manière périodique), calculée numériquement jusqu'au <varname>N</varname>-ième harmonique. C'est la série trigonométrique réelle composée de sinus et de cosinus. Les coefficients sont calculés par intégration numérique en utilisant la fonction <function>NumericalIntegral</function>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/S%C3%A9rie_de_Fourier">Wikipedia</ulink> ou <ulink url="http://mathworld.wolfram.com/FourierSeries.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalFourierCosineSeriesCoefficients">
         <term>NumericalFourierCosineSeriesCoefficients</term>
         <listitem>
          <synopsis>NumericalFourierCosineSeriesCoefficients (f,L,N)</synopsis>
	  <para>Renvoie un vecteur des coefficients de la série de Fourier en cosinus de <function>f</function> de demi-période <varname>L</varname>. C'est-à-dire la fonction <function>f</function> définie sur l'intervalle <userinput>[0,L]</userinput> est étendue en la rendant périodique paire, puis la série de Fourier qui ne contient que des termes en cosinus, est calculée. La série est calculée jusqu'au <varname>N</varname>-ième harmonique. Les coefficients sont calculés par intégration numérique en utilisant la fonction <function>NumericalIntegral</function>. Notez que <userinput>a@(1)</userinput> est le coefficient constant, donc <userinput>a@(n)</userinput> se rapporte au terme en <userinput>cos(x*(n-1)*pi/L)</userinput>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/S%C3%A9rie_de_Fourier">Wikipedia</ulink> ou <ulink url="http://mathworld.wolfram.com/FourierCosineSeries.html">Mathworld</ulink> pour plus d'informations.</para>
	  </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalFourierCosineSeriesFunction">
         <term>NumericalFourierCosineSeriesFunction</term>
         <listitem>
          <synopsis>NumericalFourierCosineSeriesFunction (f,L,N)</synopsis>
	  <para>Renvoie une fonction qui est la série de Fourier en cosinus de <function>f</function> de demi-période <varname>L</varname>. C'est-à-dire la fonction <function>f</function> définie sur l'intervalle <userinput>[0,L]</userinput> est étendue en la rendant périodique paire, puis la série de Fourier qui ne contient que des termes en cosinus, est calculée. La série est calculée jusqu'au <varname>N</varname>-ième harmonique. Les coefficients sont calculés par intégration numérique en utilisant la fonction <function>NumericalIntegral</function>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/S%C3%A9rie_de_Fourier">Wikipedia</ulink> ou <ulink url="http://mathworld.wolfram.com/FourierCosineSeries.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalFourierSineSeriesCoefficients">
         <term>NumericalFourierSineSeriesCoefficients</term>
         <listitem>
          <synopsis>NumericalFourierSineSeriesCoefficients (f,L,N)</synopsis>
	  <para>Renvoie un vecteur des coefficients de la série de Fourier en sinus de <function>f</function> de demi-période <varname>L</varname>. C'est-à-dire la fonction <function>f</function> définie sur l'intervalle <userinput>[0,L]</userinput> est étendue en la rendant périodique impaire, puis la série de Fourier qui ne contient que des termes en sinus, est calculée. La série est calculée jusqu'au <varname>N</varname>-ième harmonique. Les coefficients sont calculés par intégration numérique en utilisant la fonction <function>NumericalIntegral</function>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/S%C3%A9rie_de_Fourier">Wikipedia</ulink> ou <ulink url="http://mathworld.wolfram.com/FourierSineSeries.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalFourierSineSeriesFunction">
         <term>NumericalFourierSineSeriesFunction</term>
         <listitem>
          <synopsis>NumericalFourierSineSeriesFunction (f,L,N)</synopsis>
	  <para>Renvoie une fonction qui est la série de Fourier en sinus de <function>f</function> de demi-période <varname>L</varname>. C'est-à-dire la fonction <function>f</function> définie sur l'intervalle <userinput>[0,L]</userinput> est étendue en la rendant périodique impaire, puis la série de Fourier qui ne contient que des termes en sinus, est calculée. La série est calculée jusqu'au <varname>N</varname>-ième harmonique. Les coefficients sont calculés par intégration numérique en utilisant la fonction <function>NumericalIntegral</function>.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/S%C3%A9rie_de_Fourier">Wikipedia</ulink> ou <ulink url="http://mathworld.wolfram.com/FourierSineSeries.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalIntegral">
         <term>NumericalIntegral</term>
         <listitem>
          <synopsis>NumericalIntegral (f,a,b)</synopsis>
          <para>Intégration de f entre a et b, en suivant la règle définie par <varname>NumericalIntegralFunction</varname> et en utilisant les <varname>NumericalIntegralSteps</varname> pas.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalLeftDerivative">
         <term>NumericalLeftDerivative</term>
         <listitem>
          <synopsis>NumericalLeftDerivative (f,x0)</synopsis>
          <para>Essaie de calculer la dérivée à gauche par méthode numérique.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalLimitAtInfinity">
         <term>NumericalLimitAtInfinity</term>
         <listitem>
          <synopsis>NumericalLimitAtInfinity (_f,step_fun,tolerance,successive_for_success,N)</synopsis>
          <para>Essaie de calculer la limite de f (step_fun(i)) lorsque i va de 1 à N.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NumericalRightDerivative">
         <term>NumericalRightDerivative</term>
         <listitem>
          <synopsis>NumericalRightDerivative (f,x0)</synopsis>
          <para>Essaie de calculer la dérivée à droite par méthode numérique.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-OddPeriodicExtension">
         <term>OddPeriodicExtension</term>
         <listitem>
          <synopsis>OddPeriodicExtension (f,L)</synopsis>
	  <para>Renvoie une fonction qui est l'extension périodique impaire de <function>f</function> de demi-période <varname>L</varname>. C'est-à-dire une fonction définie sur l'intervalle <userinput>[0,L]</userinput> étendue de manière à être impaire sur <userinput>[-L,L]</userinput> puis rendue périodique de période <userinput>2*L</userinput>.</para>
	  <para>Consultez aussi <link linkend="gel-function-EvenPeriodicExtension">EvenPeriodicExtension</link> et <link linkend="gel-function-PeriodicExtension">PeriodicExtension</link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-OneSidedFivePointFormula">
         <term>OneSidedFivePointFormula</term>
         <listitem>
          <synopsis>OneSidedFivePointFormula (f,x0,h)</synopsis>
          <para>Calcule la dérivée d'un côté en utilisant une formule à cinq points.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-OneSidedThreePointFormula">
         <term>OneSidedThreePointFormula</term>
         <listitem>
          <synopsis>OneSidedThreePointFormula (f,x0,h)</synopsis>
          <para>Calcule la dérivée d'un côté en utilisant une formule à trois points.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PeriodicExtension">
         <term>PeriodicExtension</term>
         <listitem>
          <synopsis>PeriodicExtension (f,a,b)</synopsis>
	  <para>Renvoie une fonction qui est l'extension périodique de <function>f</function> définie sur l'intervalle <userinput>[a,b]</userinput> et de période <userinput>b-a</userinput>.</para>
	  <para>Consultez également <link linkend="gel-function-OddPeriodicExtension">OddPeriodicExtension</link> et <link linkend="gel-function-EvenPeriodicExtension">EvenPeriodicExtension</link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RightLimit">
         <term>RightLimit</term>
         <listitem>
          <synopsis>RightLimit (f,x0)</synopsis>
          <para>Calcule la limite à droite d'une fonction à valeurs réelles en x0.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-TwoSidedFivePointFormula">
         <term>TwoSidedFivePointFormula</term>
         <listitem>
          <synopsis>TwoSidedFivePointFormula (f,x0,h)</synopsis>
          <para>Calcule la dérivée des deux côtés en utilisant une formule à cinq points.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-TwoSidedThreePointFormula">
         <term>TwoSidedThreePointFormula</term>
         <listitem>
          <synopsis>TwoSidedThreePointFormula (f,x0,h)</synopsis>
          <para>Calcule la dérivée des deux côtés en utilisant une formule à trois points.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-functions">
      <title>Fonctions</title>
      <variablelist>
        <varlistentry id="gel-function-Argument">
         <term>Argument</term>
         <listitem>
          <synopsis>Argument (z)</synopsis>
          <para>Alias : <function>Arg</function> <function>arg</function></para>
          <para>Renvoie l'argument (angle) d'un nombre complexe.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DirichletKernel">
         <term>DirichletKernel</term>
         <listitem>
          <synopsis>DirichletKernel (n,t)</synopsis>
          <para>Calcul le noyau de Dirichlet d'ordre n.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DiscreteDelta">
         <term>DiscreteDelta</term>
         <listitem>
          <synopsis>DiscreteDelta (v)</synopsis>
          <para>Renvoie 1 si et seulement si tous les éléments sont nuls.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-ErrorFunction">
         <term>ErrorFunction</term>
         <listitem>
          <synopsis>ErrorFunction (x)</synopsis>
          <para>Alias : <function>erf</function></para>
          <para>Fonction erreur, 2/sqrt(pi) * int_0^x e^(-t^2) dt.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/ErrorFunction.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FejerKernel">
         <term>FejerKernel</term>
         <listitem>
          <synopsis>FejerKernel (n,t)</synopsis>
          <para>Noyau Fejer d'ordre <varname>n</varname> évalué en <varname>t</varname>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/FejerKernel.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-GammaFunction">
         <term>GammaFunction</term>
         <listitem>
          <synopsis>GammaFunction (x)</synopsis>
          <para>Alias : <function>Gamma</function></para>
          <para>La fonction Gamma. Seules les valeurs réelles sont actuellement implémentées.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/GammaFunction.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-KroneckerDelta">
         <term>KroneckerDelta</term>
         <listitem>
          <synopsis>KroneckerDelta (v)</synopsis>
          <para>Renvoie 1 si et seulement si tous les éléments sont égaux.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MinimizeFunction">
         <term>MinimizeFunction</term>
         <listitem>
          <synopsis>MinimizeFunction (fonc,x,incr)</synopsis>
          <para>Cherche la première valeur pour laquelle f(x)=0.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MoebiusDiskMapping">
         <term>MoebiusDiskMapping</term>
         <listitem>
          <synopsis>MoebiusDiskMapping (a,z)</synopsis>
          <para>Transformation de Möbius du disque vers lui-même en faisant correspondre a à 0.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/MobiusTransformation.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MoebiusMapping">
         <term>MoebiusMapping</term>
         <listitem>
          <synopsis>MoebiusMapping (z,z2,z3,z4)</synopsis>
          <para>Transformation de Möbius utilisant le rapport croisé en prenant z2, z3, z4 à 1, 0 et l'infini respectivement.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/MobiusTransformation.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MoebiusMappingInftyToInfty">
         <term>MoebiusMappingInftyToInfty</term>
         <listitem>
          <synopsis>MoebiusMappingInftyToInfty (z,z2,z3)</synopsis>
          <para>Transformation de Möbius utilisant le rapport croisé en prenant l'infini à l'infini et z2, z3 à 1 et 0 respectivement.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/MobiusTransformation.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MoebiusMappingInftyToOne">
         <term>MoebiusMappingInftyToOne</term>
         <listitem>
          <synopsis>MoebiusMappingInftyToOne (z,z3,z4)</synopsis>
          <para>Transformation de Möbius utilisant le rapport croisé en prenant l'infini à 1 et z3, z4 à 0 et l'infini respectivement.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/MobiusTransformation.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MoebiusMappingInftyToZero">
         <term>MoebiusMappingInftyToZero</term>
         <listitem>
          <synopsis>MoebiusMappingInftyToZero (z,z2,z4)</synopsis>
          <para>Transformation de Möbius utilisant le rapport croisé en prenant l'infini à 0 et z2, z4 à 1 et l'infini respectivement.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/MobiusTransformation.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PoissonKernel">
         <term>PoissonKernel</term>
         <listitem>
          <synopsis>PoissonKernel (r,sigma)</synopsis>
          <para>Le noyau de Poisson sur D(0,1) (non normalisé à 1, donc son intégrale vaut 2 pi).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PoissonKernelRadius">
         <term>PoissonKernelRadius</term>
         <listitem>
          <synopsis>PoissonKernelRadius (r,sigma)</synopsis>
          <para>Le noyau de Poisson sur D(0,R) (non normalisé à 1).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RiemannZeta">
         <term>RiemannZeta</term>
         <listitem>
          <synopsis>RiemannZeta (x)</synopsis>
          <para>Alias : <function>zeta</function></para>
          <para>Fonction zeta de Riemann (seules les valeurs réelles sont actuellement implémentées).</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/RiemannZetaFunction.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-UnitStep">
         <term>UnitStep</term>
         <listitem>
          <synopsis>UnitStep (x)</synopsis>
          <para>La fonction échelon vaut 0 pour x&lt;0, 1 sinon. C'est l'intégrale de la fonction delta de Dirac. Elle est aussi appelée fonction d'Heaviside.</para>
          <para>Consultez <ulink url="http://fr.wikipedia.org/wiki/Fonction_de_Heaviside">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-cis">
         <term>cis</term>
         <listitem>
          <synopsis>cis (x)</synopsis>
          <para>La fonction <function>cis</function> est la même que <userinput>cos(x)+1i*sin(x)</userinput>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-deg2rad">
         <term>deg2rad</term>
         <listitem>
          <synopsis>deg2rad (x)</synopsis>
          <para>Convertit les degrés en radians.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-rad2deg">
         <term>rad2deg</term>
         <listitem>
          <synopsis>rad2deg (x)</synopsis>
          <para>Convertit les radians en degrés.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-equation-solving">
      <title>Résolution d'équations</title>
      <variablelist>

        <varlistentry id="gel-function-CubicFormula">
         <term>CubicFormula</term>
         <listitem>
          <synopsis>CubicFormula (p)</synopsis>
          <para>Calcule les racines d'un polynôme cubique (de degré 3) en utilisant la formule cubique. Le polynôme doit être fourni sous la forme d'un vecteur de coefficients. Par exemple <userinput>4*x^3 + 2*x + 1</userinput> correspond au vecteur <userinput>[1,2,0,4]</userinput>. Renvoie un vecteur colonne contenant les trois solutions. La première solution est toujours celle qui est réelle puisqu'un polynôme cubique possède toujours une solution réelle.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/CubicFormula.html">Planetmath</ulink>, <ulink url="http://mathworld.wolfram.com/CubicFormula.html">Mathworld</ulink> ou <ulink url="http://fr.wikipedia.org/wiki/%C3%89quation_cubique">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-EulersMethod">
         <term>EulersMethod</term>
         <listitem>
          <synopsis>EulersMethod (f,x0,y0,x1,n)</synopsis>
          <para>Utilise la méthode classique d'Euler pour résoudre numériquement y'=f(x,y) avec les valeurs initiales <varname>x0</varname>, <varname>y0</varname> allant vers <varname>x1</varname> avec <varname>n</varname> incréments, renvoie <varname>y</varname> en <varname>x1</varname>.</para>
	  <para>Les systèmes peuvent être résolus en ayant uniquement <varname>y</varname> sous la forme d'un vecteur (colonne) partout. C'est-à-dire <varname>y0</varname> peut être un vecteur et dans ce cas <varname>f</varname> doit prendre un nombre <varname>x</varname> et un vecteur de la même taille comme deuxième argument et doit renvoyer un vecteur de la même taille.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/EulerForwardMethod.html">Mathworld</ulink> ou <ulink url="http://fr.wikipedia.org/wiki/M%C3%A9thode_d%27Euler">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-EulersMethodFull">
         <term>EulersMethodFull</term>
         <listitem>
          <synopsis>EulersMethodFull (f,x0,y0,x1,n)</synopsis>
          <para>Utilise la méthode classique d'Euler pour résoudre numériquement y'=f(x,y) avec les valeurs initiales <varname>x0</varname>, <varname>y0</varname> allant vers <varname>x1</varname> avec <varname>n</varname> incréments, renvoie une matrice 2 par <userinput>n+1</userinput> contenant les valeurs de <varname>x</varname> et <varname>y</varname> (approprié pour un usage avec <link linkend="gel-function-LinePlotDrawLine">LinePlotDrawLine</link>).</para>
	  <para>Les systèmes peuvent être résolus en ayant uniquement <varname>y</varname> sous la forme d'un vecteur (colonne) partout. C'est-à-dire <varname>y0</varname> peut être un vecteur et dans ce cas <varname>f</varname> doit prendre un nombre <varname>x</varname> et un vecteur de la même taille comme deuxième argument et doit renvoyer un vecteur de la même taille.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/EulerForwardMethod.html">Mathworld</ulink> ou <ulink url="http://fr.wikipedia.org/wiki/M%C3%A9thode_d%27Euler">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FindRootBisection">
         <term>FindRootBisection</term>
         <listitem>
          <synopsis>FindRootBisection (f,a,b,TOL,N)</synopsis>
          <para>Cherche la racine d'une fonction en utilisant la méthode de dichotomie. <varname>TOL</varname> est la tolérance permise et <varname>N</varname> est la limite du nombre d'itérations réalisées, 0 signifiant aucune limite. La fonction renvoie un vecteur <userinput>[succes,valeur,itération]</userinput> dans lequel <varname>succes</varname> est un booléen indiquant la réussite, <varname>valeur</varname> est la dernière valeur calculée et <varname>itération</varname> est le nombre d'itérations réalisées.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FindRootFalsePosition">
         <term>FindRootFalsePosition</term>
         <listitem>
          <synopsis>FindRootFalsePosition (f,a,b,TOL,N)</synopsis>
          <para>Cherche la racine d'une fonction en utilisant la méthode de la fausse position. <varname>TOL</varname> est la tolérance permise et <varname>N</varname> est la limite du nombre d'itérations réalisées, 0 signifiant pas de limite. La fonction renvoie un vecteur <userinput>[succes,valeur,itération]</userinput> dans lequel <varname>succes</varname> est un booléen indiquant la réussite, <varname>valeur</varname> est la dernière valeur calculée et <varname>itération</varname> est le nombre d'itérations réalisées.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FindRootMullersMethod">
         <term>FindRootMullersMethod</term>
         <listitem>
          <synopsis>FindRootMullersMethod (f,x1,x2,x3,TOL,N)</synopsis>
          <para>Cherche la racine d'une fonction en utilisant la méthode de Muller. <varname>TOL</varname> est la tolérance permise et <varname>N</varname> est la limite du nombre d'itérations réalisées, 0 signifiant pas de limite. La fonction renvoie un vecteur <userinput>[succes,valeur,itération]</userinput> dans lequel <varname>succes</varname> est un booléen indiquant la réussite, <varname>valeur</varname> est la dernière valeur calculée et <varname>itération</varname> est le nombre d'itérations réalisées.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-FindRootSecant">
         <term>FindRootSecant</term>
         <listitem>
          <synopsis>FindRootSecant (f,a,b,TOL,N)</synopsis>
          <para>Cherche la racine d'une fonction en utilisant la méthode de la sécante. <varname>TOL</varname> est la tolérance permise et <varname>N</varname> est la limite du nombre d'itérations réalisées, 0 signifiant pas de limite. La fonction renvoie un vecteur <userinput>[succes,valeur,itération]</userinput> dans lequel <varname>succes</varname> est un booléen indiquant la réussite, <varname>valeur</varname> est la dernière valeur calculée et <varname>itération</varname> est le nombre d'itérations réalisées.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PolynomialRoots">
         <term>PolynomialRoots</term>
         <listitem>
          <synopsis>PolynomialRoots (p)</synopsis>
          <para>Calcule les racines d'un polynôme (de degré 1 à 4) en utilisant une des formules adaptée à ce type de polynôme. Le polynôme doit être fourni sous la forme d'un vecteur de coefficients. Par exemple <userinput>4*x^3 + 2*x + 1</userinput> correspond au vecteur <userinput>[1,2,0,4]</userinput>. Renvoie un vecteur colonne contenant les solutions.</para>
	  <para>La fonction appelle <link linkend="gel-function-QuadraticFormula">QuadraticFormula</link>, <link linkend="gel-function-CubicFormula">CubicFormula</link> et <link linkend="gel-function-QuarticFormula">QuarticFormula</link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-QuadraticFormula">
         <term>QuadraticFormula</term>
         <listitem>
          <synopsis>QuadraticFormula (p)</synopsis>
          <para>Calcule les racines d'un polynôme quadratique (de degré 2) en utilisant la formule quadratique. Le polynôme doit être fourni sous la forme d'un vecteur de coefficients. <userinput>3*x^2 + 2*x + 1</userinput> correspond au vecteur <userinput>[1,2,3]</userinput>. Renvoie un vecteur colonne contenant les deux solutions.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/QuadraticFormula.html">Planetmath</ulink> ou <ulink url="http://mathworld.wolfram.com/QuadraticFormula.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-QuarticFormula">
         <term>QuarticFormula</term>
         <listitem>
          <synopsis>QuarticFormula (p)</synopsis>
          <para>Calcule les racines d'un polynôme quartique (de degré 4) en utilisant la formule quartique. Le polynôme doit être fourni sous la forme d'un vecteur de coefficients. <userinput>5*x^4 + 2*x + 1</userinput> correspond au vecteur <userinput>[1,2,0,0,5]</userinput>. Renvoie un vecteur colonne contenant les quatre solutions.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/QuarticFormula.html">Planetmath</ulink>, <ulink url="http://mathworld.wolfram.com/QuarticEquation.html">Mathworld</ulink> ou <ulink url="http://fr.wikipedia.org/wiki/%C3%89quation_quartique">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RungeKutta">
         <term>RungeKutta</term>
         <listitem>
          <synopsis>RungeKutta (f,x0,y0,x1,n)</synopsis>
          <para>Utilise la méthode classique non adaptative de Runge-Kutta du quatrième ordre pour résoudre numériquement y'=f(x,y) avec les valeurs initiales <varname>x0</varname>, <varname>y0</varname> allant vers <varname>x1</varname> avec <varname>n</varname> incréments, renvoie <varname>y</varname> en <varname>x1</varname>.</para>
	  <para>Les systèmes peuvent être résolus en ayant uniquement <varname>y</varname> sous la forme d'un vecteur (colonne) partout. C'est-à-dire <varname>y0</varname> peut être un vecteur et dans ce cas <varname>f</varname> doit prendre un nombre <varname>x</varname> et un vecteur de la même taille comme deuxième argument et doit renvoyer un vecteur de la même taille.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/Runge-KuttaMethod.html">Mathworld</ulink> ou <ulink url="http://fr.wikipedia.org/wiki/M%C3%A9thodes_de_Runge-Kutta">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RungeKuttaFull">
         <term>RungeKuttaFull</term>
         <listitem>
          <synopsis>RungeKuttaFull (f,x0,y0,x1,n)</synopsis>
          <para>Utilise la méthode classique non adaptative de Runge-Kutta du quatrième ordre pour résoudre numériquement y'=f(x,y) avec les valeurs initiales <varname>x0</varname>, <varname>y0</varname> allant vers <varname>x1</varname> avec <varname>n</varname> incréments, renvoie une matrice 2 par <userinput>n+1</userinput> contenant les valeurs de <varname>x</varname> et <varname>y</varname> (approprié pour un usage avec <link linkend="gel-function-LinePlotDrawLine">LinePlotDrawLine</link>).</para>
	  <para>Les systèmes peuvent être résolus en ayant uniquement <varname>y</varname> sous la forme d'un vecteur (colonne) partout. C'est-à-dire <varname>y0</varname> peut être un vecteur et dans ce cas <varname>f</varname> doit prendre un nombre <varname>x</varname> et un vecteur de la même taille comme deuxième argument et doit renvoyer un vecteur de la même taille.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/Runge-KuttaMethod.html">Mathworld</ulink> ou <ulink url="http://fr.wikipedia.org/wiki/M%C3%A9thodes_de_Runge-Kutta">Wikipedia</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>


      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-statistics">
      <title>Statistiques</title>
      <variablelist>
        <varlistentry id="gel-function-Average">
         <term>Average</term>
         <listitem>
          <synopsis>Average (m)</synopsis>
          <para>Alias : <function>average</function><function>Mean</function><function>mean</function></para>
          <para>Calcule la moyenne de toute une matrice.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/ArithmeticMean.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-GaussDistribution">
         <term>GaussDistribution</term>
         <listitem>
          <synopsis>GaussDistribution (x,sigma)</synopsis>
	  <para>Intégrale de la fonction de Gauss de 0 à <varname>x</varname> (aire sous la courbe normale).</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/NormalDistribution.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-GaussFunction">
         <term>GaussFunction</term>
         <listitem>
          <synopsis>GaussFunction (x,sigma)</synopsis>
          <para>Fonction distribution de Gauss normalisée (courbe normale).</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/NormalDistribution.html">Mathworld</ulink> pour plus d'informations.</para>

         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Median">
         <term>Median</term>
         <listitem>
          <synopsis>Median (m)</synopsis>
          <para>Alias : <function>median</function></para>
          <para>Calcule la médiane de toute une matrice.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/StatisticalMedian.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PopulationStandardDeviation">
         <term>PopulationStandardDeviation</term>
         <listitem>
          <synopsis>PopulationStandardDeviation (m)</synopsis>
          <para>Alias : <function>stdevp</function></para>
          <para>Calcule l'écart type de la population de toute une matrice.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RowAverage">
         <term>RowAverage</term>
         <listitem>
          <synopsis>RowAverage (m)</synopsis>
          <para>Alias : <function>RowMean</function></para>
          <para>Calcule la moyenne de chaque ligne d'une matrice.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/ArithmeticMean.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RowMedian">
         <term>RowMedian</term>
         <listitem>
          <synopsis>RowMedian (m)</synopsis>
          <para>Calcule la médiane de chaque ligne d'une matrice et renvoie un vecteur colonne.</para>
          <para>Consultez <ulink url="http://mathworld.wolfram.com/StatisticalMedian.html">Mathworld</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RowPopulationStandardDeviation">
         <term>RowPopulationStandardDeviation</term>
         <listitem>
          <synopsis>RowPopulationStandardDeviation (m)</synopsis>
          <para>Alias : <function>rowstdevp</function></para>
          <para>Calcule l'écart type de la population des lignes d'une matrice et renvoie un vecteur colonne.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-RowStandardDeviation">
         <term>RowStandardDeviation</term>
         <listitem>
          <synopsis>RowStandardDeviation (m)</synopsis>
          <para>Alias : <function>rowstdev</function></para>
          <para>Calcule l'écart type des lignes d'une matrice et renvoie un vecteur colonne.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-StandardDeviation">
         <term>StandardDeviation</term>
         <listitem>
          <synopsis>StandardDeviation (m)</synopsis>
          <para>Alias : <function>stdev</function></para>
          <para>Calcule l'écart type de toute une matrice.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-polynomials">
      <title>Polynômes</title>
      <variablelist>
        <varlistentry id="gel-function-AddPoly">
         <term>AddPoly</term>
         <listitem>
          <synopsis>AddPoly (p1,p2)</synopsis>
          <para>Ajoute deux polynômes (vecteurs).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-DividePoly">
         <term>DividePoly</term>
         <listitem>
          <synopsis>DividePoly (p,q,&amp;r)</synopsis>
          <para>Divise deux polynômes (en tant que vecteurs) en utilisant la division longue. Renvoie le quotient des deux polynômes. L'argument optionnel <varname>r</varname> est utilisé pour renvoyer le reste. Le reste a un degré plus bas que <varname>q</varname>.</para>
          <para>Consultez <ulink url="http://planetmath.org/encyclopedia/PolynomialLongDivision.html">Planetmath</ulink> pour plus d'informations.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsPoly">
         <term>IsPoly</term>
         <listitem>
          <synopsis>IsPoly (p)</synopsis>
          <para>Vérifie qu'un vecteur est utilisable en tant que polynôme.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MultiplyPoly">
         <term>MultiplyPoly</term>
         <listitem>
          <synopsis>MultiplyPoly (p1,p2)</synopsis>
          <para>Multiplie deux polynômes (comme vecteurs).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-NewtonsMethodPoly">
         <term>NewtonsMethodPoly</term>
         <listitem>
          <synopsis>NewtonsMethodPoly (poly,valeurinitiale,epsilon,maxn)</synopsis>
	  <para>Utilise la méthode de Newton sur un polynôme pour essayer de trouver une racine, s'arrête après deux valeurs successives égales, à epsilon près, ou après maxn essais (renvoie alors <constant>null</constant>).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Poly2ndDerivative">
         <term>Poly2ndDerivative</term>
         <listitem>
          <synopsis>Poly2ndDerivative (p)</synopsis>
          <para>Renvoie la dérivée seconde du polynôme (comme vecteur).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PolyDerivative">
         <term>PolyDerivative</term>
         <listitem>
          <synopsis>PolyDerivative (p)</synopsis>
          <para>Prend la dérivée du polynôme (comme vecteur).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PolyToFunction">
         <term>PolyToFunction</term>
         <listitem>
          <synopsis>PolyToFunction (p)</synopsis>
          <para>Fabrique une fonction à partir d'un polynôme (comme vecteur).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-PolyToString">
         <term>PolyToString</term>
         <listitem>
          <synopsis>PolyToString (p,var...)</synopsis>
          <para>Fabrique une chaîne à partir d'un polynôme (comme vecteur).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SubtractPoly">
         <term>SubtractPoly</term>
         <listitem>
          <synopsis>SubtractPoly (p1,p2)</synopsis>
          <para>Soustrait deux polynômes (comme vecteur).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-TrimPoly">
         <term>TrimPoly</term>
         <listitem>
          <synopsis>TrimPoly (p)</synopsis>
          <para>Tronque les zéros d'un polynôme (défini comme vecteur).</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-set-theory">
      <title>Théorie des ensembles</title>
      <variablelist>
        <varlistentry id="gel-function-Intersection">
         <term>Intersection</term>
         <listitem>
          <synopsis>Intersection (X,Y)</synopsis>
          <para>Renvoie l'intersection, selon la théorie des ensembles, de X et Y (X et Y sont des vecteurs supposés être des ensembles).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsIn">
         <term>IsIn</term>
         <listitem>
          <synopsis>IsIn (x,X)</synopsis>
	  <para>Renvoie <constant>true</constant> (vrai) si l'élément x fait partie de l'ensemble X (où X est un vecteur supposé être un ensemble).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-IsSubset">
         <term>IsSubset</term>
         <listitem>
          <synopsis>IsSubset (X, Y)</synopsis>
	  <para>Renvoie <constant>true</constant> (vrai) si X est un sous-ensemble de Y (X et Y sont des vecteurs supposés être des ensembles).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MakeSet">
         <term>MakeSet</term>
         <listitem>
          <synopsis>MakeSet (X)</synopsis>
          <para>Renvoie un vecteur où chaque élément de X n'apparaît qu'une seule fois.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SetMinus">
         <term>SetMinus</term>
         <listitem>
          <synopsis>SetMinus (X,Y)</synopsis>
          <para>Renvoie la différence X-Y selon la théorie des ensembles (X et Y sont des vecteurs supposés être des ensembles).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-Union">
         <term>Union</term>
         <listitem>
          <synopsis>Union (X,Y)</synopsis>
          <para>Renvoie l'union, selon la théorie des ensembles, de X et Y (X et Y sont des vecteurs supposés être des ensembles).</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-commutative-algebra">
      <title>Commutative Algebra</title>
      <variablelist>
        <varlistentry id="gel-function-MacaulayBound">
         <term>MacaulayBound</term>
         <listitem>
          <synopsis>MacaulayBound (c,d)</synopsis>
          <para>For a Hilbert function that is c for degree d, given the Macaulay bound for the Hilbert function of degree d+1 (The c^&lt;d&gt; operator from Green's proof).</para>
         </listitem>
        </varlistentry>
	
        <varlistentry id="gel-function-MacaulayLowerOperator">
         <term>MacaulayLowerOperator</term>
         <listitem>
          <synopsis>MacaulayLowerOperator (c,d)</synopsis>
          <para>The c_&lt;d&gt; operator from Green's proof of Macaulay's Theorem.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-MacaulayRep">
         <term>MacaulayRep</term>
         <listitem>
          <synopsis>MacaulayRep (c,d)</synopsis>
          <para>Return the dth Macaulay representation of a positive integer c.</para>
         </listitem>
        </varlistentry>
      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-miscellaneous">
      <title>Divers</title>
      <variablelist>
        <varlistentry id="gel-function-ASCIIToString">
         <term>ASCIIToString</term>
         <listitem>
          <synopsis>ASCIIToString (vec)</synopsis>
          <para>Convertit un vecteur de valeurs ASCII en chaîne.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-AlphabetToString">
         <term>AlphabetToString</term>
         <listitem>
          <synopsis>AlphabetToString (vec,alphabet)</synopsis>
          <para>Convertit un vecteur d'indices en chaîne de caractères. Les indices correspondent à la position dans la chaîne <literal>alphabet</literal>, en commençant à zéro.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-StringToASCII">
         <term>StringToASCII</term>
         <listitem>
          <synopsis>StringToASCII (chaîne)</synopsis>
          <para>Convertit une chaîne en vecteur de valeurs ASCII.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-StringToAlphabet">
         <term>StringToAlphabet</term>
         <listitem>
          <synopsis>StringToAlphabet (chaîne,alphabet)</synopsis>
          <para>Convertit une <literal>chaîne</literal> de caractères en un vecteur d'indices correspondant à la position dans la chaîne <literal>alphabet</literal> (en commençant à zéro). Lorsque le caractère n'est pas dans l'<literal>alphabet</literal>, l'indice est -1.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-symbolic">
      <title>Calcul symbolique</title>
      <variablelist>
        <varlistentry id="gel-function-SymbolicDerivative">
         <term>SymbolicDerivative</term>
         <listitem>
          <synopsis>SymbolicDerivative (f)</synopsis>
          <para>Essaie de dériver symboliquement la fonction f, où f est une fonction à une variable.</para>
          <para>Exemples : <screen><prompt>genius&gt;</prompt> <userinput>SymbolicDerivative(sin)</userinput>
= (`(x)=cos(x))
<prompt>genius&gt;</prompt> <userinput>SymbolicDerivative(`(x)=7*x^2)</userinput>
= (`(x)=(7*(2*x)))
</screen></para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SymbolicDerivativeTry">
         <term>SymbolicDerivativeTry</term>
         <listitem>
          <synopsis>SymbolicDerivativeTry (f)</synopsis>
	  <para>Essaie de dériver symboliquement la fonction f, où f est une fonction à une variable, renvoie <constant>null</constant> en cas d'échec mais reste silencieux (consultez <link linkend="gel-function-SymbolicDerivative"><function>SymbolicDerivative</function></link>).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SymbolicNthDerivative">
         <term>SymbolicNthDerivative</term>
         <listitem>
          <synopsis>SymbolicNthDerivative (f,n)</synopsis>
          <para>Essaie de dériver symboliquement une fonction n fois (consultez <link linkend="gel-function-SymbolicDerivative"><function>SymbolicDerivative</function></link>).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SymbolicNthDerivativeTry">
         <term>SymbolicNthDerivativeTry</term>
         <listitem>
          <synopsis>SymbolicNthDerivativeTry (f,n)</synopsis>
	  <para>Essaie de dériver symboliquement une fonction n fois silencieusement et renvoie <constant>null</constant> en cas d'échec (consultez <link linkend="gel-function-SymbolicNthDerivative"><function>SymbolicNthDerivative</function></link>).</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SymbolicTaylorApproximationFunction">
         <term>SymbolicTaylorApproximationFunction</term>
         <listitem>
          <synopsis>SymbolicTaylorApproximationFunction (f,x0,n)</synopsis>
	  <para>Essaie de construire la fonction approximation de Taylor autour de x0 au nième degré (consultez <link linkend="gel-function-SymbolicDerivative"><function>SymbolicDerivative</function></link>).</para>
         </listitem>
        </varlistentry>
      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-plotting">
      <title>Tracé de graphiques</title>
      <variablelist>
        <varlistentry id="gel-function-LinePlot">
         <term>LinePlot</term>
         <listitem>
          <synopsis>LinePlot (fonc1,fonc2,fonc3,...)</synopsis>
          <synopsis>LinePlot (fonc1,fonc2,fonc3,x1,x2,y1,y2)</synopsis>
          <para>Trace la courbe de une à dix fonctions cartésiennes. Les premiers arguments, jusqu'à dix au plus, sont les fonctions à tracer. Vous pouvez ensuite rajouter quatre paramètres <varname>x1</varname>, <varname>x2</varname>, <varname>y1</varname> et <varname>y2</varname> pour spécifier les limites de la fenêtre de tracé. Si les limites de la fenêtre de tracé ne sont pas indiquées alors les limites définies par <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link> sont appliquées. </para>
          <para>Le paramètre <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link> conditionne l'affichage de la légende.</para>
          <para>Exemples : <screen><prompt>genius&gt;</prompt> <userinput>LinePlot(sin,cos)</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlot(`(x)=x^2,-1,1,0,1)</userinput>
</screen></para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LinePlotClear">
         <term>LinePlotClear</term>
         <listitem>
          <synopsis>LinePlotClear ()</synopsis>
          <para>Affiche la fenêtre d'affichage du tracé et efface les courbes déjà tracées.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LinePlotDrawLine">
         <term>LinePlotDrawLine</term>
         <listitem>
          <synopsis>LinePlotDrawLine (x1,y1,x2,y2,...)</synopsis>
          <synopsis>LinePlotDrawLine (v,...)</synopsis>
          <para>Trace une ligne du point <varname>x1</varname>, <varname>y1</varname> au point <varname>x2</varname>, <varname>y2</varname>. Les points <varname>x1</varname>, <varname>y1</varname>, <varname>x2</varname>, <varname>y2</varname> peuvent être remplacés par une matrice <varname>n</varname> par 2 pour tracer une polyligne.</para>
          <para>Des paramètres supplémentaires peuvent être ajoutés pour spécifier la couleur de la ligne, des flèches et la zone de tracé. Vous pouvez faire cela en ajoutant une chaîne <userinput>"color"</userinput>, <userinput>"thickness"</userinput>, <userinput>"window"</userinput> ou <userinput>"arrow"</userinput> et ensuite, respectivement, la chaîne de couleur (en anglais), l'épaisseur sous la forme d'un entier, la fenêtre sous la forme d'un vecteur à 4 éléments et pour la flèche soit <userinput>"origin"</userinput>, <userinput>"end"</userinput>, <userinput>"both"</userinput> ou <userinput>"none"</userinput>. Pour <userinput>"window"</userinput>, vous pouvez indiquer <userinput>"fit"</userinput> plutôt qu'un vecteur et dans ce cas, l'intervalle x est défini de manière précise et l'intervalle y est défini avec une bordure de cinq pour cent autour de la ligne. Finalement, la légende peut être spécifiée en ajoutant <userinput>"legend"</userinput> et la chaîne contenant la légende.</para>
	  <para>Exemples : <screen><prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine(0,0,1,1,"color","blue","thickness",3)</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine([0,0;1,-1;-1,-1])</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine([0,0;1,1],"arrow","end")</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine(EulersMethodFull(`(x,y)=y,0,3,100),"color","blue","legend","La solution")</userinput>
</screen></para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LinePlotParametric">
         <term>LinePlotParametric</term>
         <listitem>
          <synopsis>LinePlotParametric (xfonc,yfonc,...)</synopsis>
          <synopsis>LinePlotParametric (xfonc,yfonc,t1,t2,tinc)</synopsis>
          <synopsis>LinePlotParametric (xfonc,yfonc,t1,t2,tinc,x1,x2,y1,y2)</synopsis>
          <para>Trace la courbe d'une fonction paramétrique. En premier viennent les fonctions de <varname>x</varname> et <varname>y</varname> puis, en option, les limites de <varname>t</varname> sous la forme <userinput>t1,t2,tinc</userinput> puis, en option, les limites de la fenêtre de tracé sous la forme <userinput>x1,x2,y1,y2</userinput>.</para>
	  <para>Si les limites de la fenêtre de tracé ne sont pas indiquées alors les limites définies par <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link> sont appliquées.</para>
          <para>Le paramètre <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link> conditionne l'affichage de la légende.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-LinePlotCParametric">
         <term>LinePlotCParametric</term>
         <listitem>
          <synopsis>LinePlotCParametric (fonc,...)</synopsis>
          <synopsis>LinePlotCParametric (fonc,t1,t2,tinc)</synopsis>
          <synopsis>LinePlotCParametric (fonc,t1,t2,tinc,x1,x2,y1,y2)</synopsis>
          <para>Trace la courbe d'une fonction paramétrique à valeurs complexes. En premier vient la fonction qui renvoie <computeroutput>x+iy</computeroutput> puis, en option, les limites de <varname>t</varname> sous la forme <userinput>t1,t2,tinc</userinput> puis, en option, les limites de la fenêtre de tracé sous la forme <userinput>x1,x2,y1,y2</userinput>.</para>
	  <para>Si les limites de la fenêtre de tracé ne sont pas indiquées alors les limites définies par <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link> sont appliquées.</para>
          <para>Le paramètre <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link> conditionne l'affichage de la légende.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SlopefieldClearSolutions">
         <term>SlopefieldClearSolutions</term>
         <listitem>
          <synopsis>SlopefieldClearSolutions ()</synopsis>
          <para>Efface les solutions tracées par la fonction <link linkend="gel-function-SlopefieldDrawSolution"><function>SlopefieldDrawSolution</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SlopefieldDrawSolution">
         <term>SlopefieldDrawSolution</term>
         <listitem>
          <synopsis>SlopefieldDrawSolution (x, y, dx)</synopsis>
          <para>Lorsqu'un tracé de champ de directions est actif, dessine une solution avec les conditions initiales spécifiées. La méthode standard de Runge-Kutta est utilisée avec l'incrément <varname>dx</varname>. Les solutions restent affichées sur le graphe jusqu'à ce qu'un tracé différent soit affiché ou jusqu'à ce que vous appeliez la fonction <link linkend="gel-function-SlopefieldClearSolutions"><function>SlopefieldClearSolutions</function></link>. Vous pouvez aussi utiliser l'interface graphique pour tracer des solutions et indiquer des conditions initiales spécifiques avec la souris.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SlopefieldPlot">
         <term>SlopefieldPlot</term>
         <listitem>
          <synopsis>SlopefieldPlot (fonc)</synopsis>
          <synopsis>SlopefieldPlot (fonc,x1,x2,y1,y2)</synopsis>
          <para>Trace un champ de directions. La fonction <varname>fonc</varname> doit accepter deux nombres réels <varname>x</varname> et <varname>y</varname> ou seulement un nombre complexe. En option, vous pouvez indiquer les limites de la fenêtre de tracé comme <varname>x1</varname>, <varname>x2</varname>, <varname>y1</varname>, <varname>y2</varname>. Si les limites ne sont pas indiquées alors les limites actuellement utilisées s'appliquent (consultez <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>).</para>
          <para>Le paramètre <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link> conditionne l'affichage de la légende.</para>
          <para>Exemples : <screen><prompt>genius&gt;</prompt> <userinput>Slopefield(`(x,y)=sin(x-y),-5,5,-5,5)</userinput>
</screen></para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-SurfacePlot">
         <term>SurfacePlot</term>
         <listitem>
          <synopsis>SurfacePlot (fonc)</synopsis>
          <synopsis>SurfacePlot (fonc,x1,x2,y1,y2,z1,z2)</synopsis>
          <para>Trace une surface, dont la fonction prend comme arguments deux nombres ou bien un nombre complexe. En premier vient la fonction puis en option les limites sous la forme <varname>x1</varname>, <varname>x2</varname>, <varname>y1</varname>, <varname>y2</varname>, <varname>z1</varname>, <varname>z2</varname>. Si les limites ne sont pas indiquées alors les limites actuellement utilisées s'appliquent (consultez <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>). Genius ne peut tracer qu'une seule surface à la fois.</para>
          <para>Exemples : <screen><prompt>genius&gt;</prompt> <userinput>SurfacePlot(|sin|,-1,1,-1,1,0,1.5)</userinput>
<prompt>genius&gt;</prompt> <userinput>SurfacePlot(`(x,y)=x^2+y,-1,1,-1,1,-2,2)</userinput>
<prompt>genius&gt;</prompt> <userinput>SurfacePlot(`(z)=|z|^2,-1,1,-1,1,0,2)</userinput>
</screen></para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-VectorfieldClearSolutions">
         <term>VectorfieldClearSolutions</term>
         <listitem>
          <synopsis>VectorfieldClearSolutions ()</synopsis>
          <para>Efface les solutions dessinées par la fonction <link linkend="gel-function-VectorfieldDrawSolution"><function>VectorfieldDrawSolution</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-VectorfieldDrawSolution">
         <term>VectorfieldDrawSolution</term>
         <listitem>
          <synopsis>VectorfieldDrawSolution (x, y, dt, tlong)</synopsis>
          <para>Lorsqu'un tracé de champ de vecteurs est actif, dessine une solution avec les conditions initiales spécifiées. La méthode standard de Runge-Kutta est utilisée avec l'incrément <varname>dt</varname> sur un intervalle de temps <varname>tlong</varname>. Les solutions restent affichées sur le graphe jusqu'à ce qu'un tracé différent soit affiché ou jusqu'à ce que vous appeliez la fonction <link linkend="gel-function-SlopefieldClearSolutions"><function>VectorfieldClearSolutions</function></link>. Vous pouvez aussi utiliser l'interface graphique pour tracer des solutions et indiquer des conditions initiales spécifiques avec la souris.</para>
         </listitem>
        </varlistentry>

        <varlistentry id="gel-function-VectorfieldPlot">
         <term>VectorfieldPlot</term>
         <listitem>
          <synopsis>VectorfieldPlot (foncx, foncy)</synopsis>
          <synopsis>VectorfieldPlot (foncx, foncy, x1, x2, y1, y2)</synopsis>
          <para>Trace un champ de vecteurs à deux dimensions. La fonction <varname>funcx</varname> doit être la dérivée dx/dt du champ de vecteurs et la fonction <varname>funcy</varname> la dérivée dy/dt du champ de vecteurs. Les fonctions doivent accepter deux nombres réels <varname>x</varname> et <varname>y</varname> ou seulement un nombre complexe. Lorsque le paramètre <link linkend="gel-function-VectorfieldNormalized"><function>VectorfieldNormalized</function></link> est <constant>true</constant> (vrai) alors l'amplitude des vecteurs est normalisée. Seule la direction et non pas l'amplitude est tracée.</para>
	  <para>Vous pouvez spécifier, en option, les limites de la fenêtre de tracé sous la forme <varname>x1</varname>, <varname>x2</varname>, <varname>y1</varname>, <varname>y2</varname>, <varname>z1</varname>, <varname>z2</varname>. Si les limites ne sont pas indiquées alors les limites actuellement utilisées s'appliquent (consultez <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>).</para>
          <para>Le paramètre <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link> conditionne l'affichage de la légende.</para>
          <para>Exemples : <screen><prompt>genius&gt;</prompt> <userinput>VectorfieldPlot(`(x,y)=x^2-y, `(x,y)=y^2-x, -1, 1, -1, 1)</userinput>
</screen></para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>


  </chapter>

  <!-- ============= GEL examples ============================= -->
  <chapter id="genius-gel-example-programs">
    <title>Exemple de programmes en GEL</title>

    <para>Voici une fonction qui calcule des factorielles : <programlisting><![CDATA[function f(x) = if x <= 1 then 1 else (f(x-1)*x)
]]></programlisting></para>
    <para>Avec des indentations, cela devient : <programlisting><![CDATA[function f(x) = (
  if x <= 1 then
    1
  else
    (f(x-1)*x)
)
]]></programlisting></para>
    <para>C'est un portage direct de la fonction factorielle de la page de manuel de <application>bc</application>. La syntaxe semble similaire à celle de <application>bc</application> mais différente par le fait que dans GEL, la dernière expression est celle qui est renvoyée. En utilisant la fonction <literal>return</literal> à la place, cela donnerait : <programlisting><![CDATA[function f(x) = (
  if (x <= 1) then return (1);
  return (f(x-1) * x)
)
]]></programlisting></para>

    <para>La façon, de loin la plus facile, de définir une fonction factorielle serait d'utiliser la boucle de produit de la manière suivante. Ce n'est pas seulement la plus courte et la plus rapide mais aussi probablement la version la plus lisible. <programlisting>function f(x) = prod k=1 to x do k
</programlisting></para>

    <para>Voici un exemple plus conséquent qui redéfinit essentiellement la fonction interne <function>ref</function> pour calculer la matrice échelonnée en lignes d'une matrice. La fonction <function>ref</function> est intégrée et beaucoup plus rapide mais cet exemple démontre certaines des fonctionnalités plus complexes de GEL. <programlisting><![CDATA[# Calculate the row-echelon form of a matrix
function MyOwnREF(m) = (
  if not IsMatrix(m) or not IsValueOnly(m) then
    (error("ref: argument not a value only matrix");bailout);
  s := min(rows(m), columns(m));
  i := 1;
  d := 1;
  while d <= s and i <= columns(m) do (

    # This just makes the anchor element non-zero if at
    # all possible
    if m@(d,i) == 0 then (
      j := d+1;
      while j <= rows(m) do (
        if m@(j,i) == 0 then
          (j=j+1;continue);
        a := m@(j,);
        m@(j,) := m@(d,);
        m@(d,) := a;
        j := j+1;
        break
      )
    );
    if m@(d,i) == 0 then
      (i:=i+1;continue);
    
    # Here comes the actual zeroing of all but the anchor
    # element rows
    j := d+1;
    while j <= rows(m)) do (
      if m@(j,i) != 0 then (
        m@(j,) := m@(j,)-(m@(j,i)/m@(d,i))*m@(d,)
      );
      j := j+1
    );
    m@(d,) := m@(d,) * (1/m@(d,i));
    d := d+1;
    i := i+1
  );
  m
)
]]></programlisting></para>

  </chapter>

  <!-- ============= Customization ============================ -->
  <chapter id="genius-prefs"> 
    <title>Paramètres</title> 

    <para>Pour configurer l'<application>Outil de maths Genius</application>, choisissez <menuchoice><guimenu>Paramètres</guimenu><guimenuitem>Préférences</guimenuitem></menuchoice>. Il y a plusieurs paramètres de base fournis par le calculateur en plus de ceux fournis par la bibliothèque standard. Ils contrôlent le comportement du calculateur.</para>

    <note>
      <title>Modifications des paramètres avec GEL</title>
      <para>Beaucoup de paramètres dans Genius ne sont simplement que des variables globales qui peuvent être évaluées et auxquelles on peut attribuer des valeurs de la même manière que pour des variables normales. Consultez <xref linkend="genius-gel-variables"/> à propos de l'évaluation et <xref linkend="genius-gel-function-parameters"/> pour une liste des réglages qui peuvent être modifiés de cette façon.</para>
      <para>Par exemple, vous pouvez paramétrer le nombre maximum de chiffres pour l'affichage d'un résultat à 12 en saisissant : <programlisting>MaxDigits = 12
</programlisting></para>
    </note>

    <sect1 id="genius-prefs-output"> 
      <title>Sortie</title> 
      <variablelist> 
	<varlistentry>
	  <term> 
	    <guilabel>Nombre maximum de chiffres à afficher</guilabel>
      </term> 
	  <listitem>
        <para>Le nombre maximum de chiffres dans un résultat (<function>MaxDigits</function>)</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term> 
	    <guilabel>Résultats en nombres flottants</guilabel>
      </term> 
	  <listitem>
        <para>Si les résultats doivent être toujours affichés sous la forme de nombres flottants (<function>ResultsAsFloats</function>)</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term> 
	    <guilabel>Nombres flottants en notation scientifique</guilabel>
      </term> 
	  <listitem>
        <para>Si les nombres flottants doivent être affichés en notation scientifique (<function>ScientificNotation</function>)</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term> 
	    <guilabel>Toujours afficher les expressions complètes</guilabel>
      </term> 
	  <listitem>
        <para>Si l'expression complète doit être affichée pour les valeurs renvoyées non numériques (plus longues qu'une ligne) (<function>FullExpressions</function>)</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term> 
	    <guilabel>Utiliser les fractions mixtes</guilabel>
      </term> 
	  <listitem>
        <para>Si les fractions doivent être affichées comme des fractions mixtes telles que « 1 1/3 » plutôt que « 4/3 ». (<function>MixedFractions</function>)</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term> 
	    <guilabel>Afficher 0.0 lorsqu'un nombre flottant est inférieur à 10^-x (0=ne jamais arrondir)</guilabel>
      </term> 
	  <listitem>
	  <para>Comment arrondir la sortie. Mais seulement lorsque d'autres nombres autour sont grands. Consultez la documentation du paramètre <link linkend="gel-function-OutputChopExponent"><function>OutputChopExponent</function></link>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term> 
            <guilabel>Arrondir les nombres uniquement si un autre nombre est plus grand que 10^-x</guilabel>
      </term> 
	  <listitem>
	  <para>Quand arrondir la sortie. C'est configuré par le paramètre <function>OutputchopWhenexponent</function>. Consultez la documentation du paramètre <link linkend="gel-function-OutputChopExponent"><function>OutputChopExponenthopwhenexponent</function></link>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term> 
	    <guilabel>Se souvenir des paramètres de sortie d'une session à l'autre</guilabel>
      </term> 
	  <listitem>
        <para>Si les réglages concernant la sortie dans le cadre <guilabel>Options pour la sortie des nombres/expressions</guilabel> doivent être conservés pour la session suivante. Ne s'applique pas au cadre <guilabel>Options pour la sortie erreurs/information</guilabel>.</para>
	      <para>Si ce n'est pas coché, les réglages précédemment enregistrés ou ceux par défaut sont utilisés à chaque lancement de Genius. Notez que les paramètres sont enregistrés à la fin de la session donc si vous souhaitez modifier la valeur par défaut, cochez cette case, redémarrez Genius puis décochez-la à nouveau.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term> 
	    <guilabel>Afficher les erreurs dans une boîte de dialogue</guilabel>
      </term> 
	  <listitem>
        <para>If set the errors will be displayed in a separate dialog, if
	unset the errors will be printed on the console.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term> 
	    <guilabel>Afficher les messages d'informations dans une boîte de dialogue</guilabel>
      </term> 
	  <listitem>
	<para>If set the information messages will be displayed in a separate
	dialog, if unset the information messages will be printed on the
	console.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term> 
	    <guilabel>Nombre maximum d'erreurs à afficher</guilabel>
      </term> 
	  <listitem>
        <para>Le nombre maximum d'erreurs à afficher pour une évaluation (<function>MaxErrors</function>). Si vous paramétrez à 0 alors toutes les erreurs sont toujours renvoyées. Habituellement si certaines boucles provoquent beaucoup d'erreurs alors il est probable que vous ne serez pas capable de donner un sens à plus de quelques unes d'entre elles. Ainsi voir une longue liste d'erreurs n'apporte pas généralement grand chose.</para>
	  </listitem>
	</varlistentry>
      </variablelist> 

      <para>En plus de ces préférences, il existe d'autres préférences qui ne peuvent être modifiées qu'en les paramétrant dans l'espace de la console. Pour celles qui peuvent affecter la sortie, consultez <xref linkend="genius-gel-function-parameters"/>.</para>

      <variablelist> 
	<varlistentry>
	  <term> 
	    <function>IntegerOutputBase</function>
      </term> 
	  <listitem>
        <para>La base utilisée pour afficher les entiers.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term> 
	    <function>OutputStyle</function>
      </term> 
	  <listitem>
	<para>Une chaîne, qui peut être <literal>"normal"</literal>, <literal>"latex"</literal>, <literal>"mathml"</literal> ou <literal>"troff"</literal> et qui modifie la manière dont les matrices (et peut-être d'autres trucs) sont affichées. Cela peut être utile pour copier/coller vers des documents. Le style normal est le style d'affichage par défaut de l'<application>Outil de maths Genius</application>. Les autres styles sont utiles pour saisir en LaTeX, MathML (XML) ou Troff.</para>
	  </listitem>
	</varlistentry>
      </variablelist> 
   </sect1> 

    <sect1 id="genius-prefs-precision"> 
      <title>Précision</title> 
      <variablelist> 
	<varlistentry>
	  <term> 
	    <guilabel>Précision des nombres en virgule flottante</guilabel>
      </term> 
	  <listitem>
        <para>La précision des nombres en virgule flottante en bits (<function>FloatPrecision</function>). Notez que lorsque vous modifiez ce paramètre, seules les nouvelles quantités calculées sont affectées. Les anciennes valeurs enregistrées dans des variables restent toujours avec la même précision et si vous voulez qu'elles soient plus précises, vous devez les recalculer. Les exceptions sont les constantes du système telles que <function>pi</function> ou <function>e</function>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term> 
	    <guilabel>Se souvenir de la précision choisie d'une session à l'autre</guilabel>
      </term> 
	  <listitem>
        <para>Si le réglage de la précision doit être conservé pour la prochaine session. Si ce n'est pas coché, le paramétrage précédemment enregistré ou celui par défaut est utilisé à chaque lancement de Genius. Notez que les paramètres sont enregistrés à la fin de la session donc si vous souhaitez modifier la valeur par défaut, cochez cette case, redémarrez genius puis décochez-la à nouveau.</para>
	  </listitem>
	</varlistentry>
      </variablelist> 
    </sect1> 

    <sect1 id="genius-prefs-terminal"> 
      <title>Terminal</title> 

      <para>Le terminal se réfère à la console dans la zone de travail.</para>

      <variablelist> 
	<varlistentry>
	  <term> 
	    <guilabel>Lignes d'historique</guilabel>
      </term> 
	  <listitem>
        <para>Nombre de lignes d'historique dans le terminal.</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term> 
	    <guilabel>Police</guilabel>
      </term> 
	  <listitem>
        <para>La police à utiliser dans le terminal.</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term> 
	    <guilabel>Noir sur blanc</guilabel>
      </term> 
	  <listitem>
        <para>Si vous utilisez du noir sur blanc dans le terminal.</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term> 
	    <guilabel>Curseur clignotant</guilabel>
      </term> 
	  <listitem>
        <para>Si le curseur dans le terminal doit clignoter lorsque le terminal possède le focus. Cela peut être parfois ennuyant et génère du trafic inutile si vous utilisez Genius à distance.</para>
	  </listitem>
	</varlistentry>
      </variablelist> 
    </sect1> 

    <sect1 id="genius-prefs-memory"> 
      <title>Mémoire</title> 
      <variablelist> 
	<varlistentry>
	  <term> 
	    <guilabel>Nombre maximum de nœuds à allouer</guilabel>
      </term> 
	  <listitem>
        <para>De manière interne, toutes les données sont placées dans des nœuds en mémoire. Ce paramètre fournit une limite sur le nombre maximum de nœuds à allouer pour les calculs. Cela évite le problème d'une saturation de mémoire si vous faites quelque chose par erreur qui utilise trop de mémoire, telle qu'un calcul récursif sans fin. Cela pourrait ralentir votre ordinateur et rendre difficile même l'interruption du programme.</para>
        <para>Une fois que la limite est atteinte, l'<application>Outil de maths Genius</application> vous demande si vous voulez interrompre le calcul ou si vous souhaitez continuer. Si vous continuez, aucune limite n'est appliquée et il est possible de saturer la mémoire de l'ordinateur. La limite s'applique à nouveau la prochaine fois que vous exécuterez un programme ou une expression dans la console indépendamment de votre réponse précédente.</para>
        <para>Régler la limite à zéro signifie qu'il n'y a aucune limite sur la quantité de mémoire utilisable par Genius.</para>
	  </listitem>
	</varlistentry>

      </variablelist> 
    </sect1> 

  </chapter>

<!-- ============= About ====================================== -->
  <chapter id="genius-about"> 
    <title>À propos de l'<application>Outil de maths Genius</application></title> 

    <para>L'<application>Outil de maths Genius</application> a été écrit par Jiří (George) Lebl (<email>jirka@5z.com</email>). L'historique de l'<application>Outil de maths Genius</application> commence à la fin de l'année 1997. C'était la première calculatrice pour GNOME, mais il a grossi au point de devenir bien plus qu'une simple calculatrice de bureau. Pour trouver plus d'informations à propos de l'<application>Outil de maths Genius</application>, visitez la <ulink url="http://www.jirka.org/genius.html" type="http">page Web de Genius</ulink>.</para>
    <para>Pour rapporter une anomalie ou émettre une suggestion concernant cette application ou ce manuel, procédez comme indiqué sur la <ulink url="ghelp:gnome-feedback" type="help">page de réactions sur GNOME</ulink>.</para>

    <para>Ce programme est distribué au titre des clauses de la Licence Publique Générale GNU (GPL), telle que publiée par la Free Software Foundation ; soit la version 2 de la licence, ou (à votre discrétion) une version ultérieure quelconque. Une copie de cette licence peut être trouvée à ce <ulink url="ghelp:gpl" type="help">lien</ulink>, ou dans le fichier COPYING inclus avec le code source du programme.</para>

    <para>Jiří Lebl was during various parts of the development
      partially supported for the work by NSF grant DMS 0900885, 
      the University of Illinois at Urbana-Champaign,
      the University of California at San Diego and
      the University of Wisconsin-Madison.  The software has
      been used for both teaching and research.</para>

  </chapter>

</book>
