[genius] Wed Apr 24 13:58:27 2013 Jiri (George) Lebl <jirka 5z com>



commit e93d53b4b9fc3073345ad9c9f4d4b97ca734419b
Author: Jiri (George) Lebl <jirka 5z com>
Date:   Wed Apr 24 14:03:45 2013 -0500

    Wed Apr 24 13:58:27 2013  Jiri (George) Lebl <jirka 5z com>
    
        * help/C/genius.xml: include the function list in the main xml
    
        * help/C/genius.xml: expand help for the root finding functions
    
        * lib/equation_solving/find_root.gel: fix FindRootBisection and
          FindRootMullersMethod to actually work.

 ChangeLog                          |    9 +
 help/C/gel-function-list.xml       | 5763 -----------------------------------
 help/C/genius.xml                  | 5773 +++++++++++++++++++++++++++++++++++-
 lib/equation_solving/find_root.gel |   59 +-
 lib/library-strings.c              |    6 +-
 5 files changed, 5814 insertions(+), 5796 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 3e46b08..c79154b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Wed Apr 24 13:58:27 2013  Jiri (George) Lebl <jirka 5z com>
+
+       * help/C/genius.xml: include the function list in the main xml
+
+       * help/C/genius.xml: expand help for the root finding functions
+
+       * lib/equation_solving/find_root.gel: fix FindRootBisection and
+         FindRootMullersMethod to actually work.
+
 Mon Mar 04 12:33:47 2013  Jiri (George) Lebl <jirka 5z com>
 
        * help/C/genius.xml: fix up the about entry to reflect reality a bit
diff --git a/help/C/genius.xml b/help/C/genius.xml
index 77846d8..ab104e9 100644
--- a/help/C/genius.xml
+++ b/help/C/genius.xml
@@ -17,7 +17,7 @@
   <!ENTITY lsquo "&#8216;">
   <!ENTITY rsquo "&#8217;">
 
-  <!ENTITY gel-function-list SYSTEM "gel-function-list.xml">
+  <!--<!ENTITY gel-function-list SYSTEM "gel-function-list.xml">-->
 ]>
 
 <!-- 
@@ -2777,7 +2777,5776 @@ should use the
   <chapter id="genius-gel-function-list">
     <title>List of GEL functions</title>
 
-    &gel-function-list;
+    <!--&gel-function-list;-->
+
+    <para>
+To get help on a specific function from the console type:
+<programlisting>help FunctionName
+</programlisting>
+    </para>
+
+    <sect1 id="genius-gel-function-list-commands">
+      <title>Commands</title>
+      <variablelist>
+        <varlistentry id="gel-command-help">
+         <term>help</term>
+         <listitem>
+          <synopsis>help</synopsis>
+          <synopsis>help FunctionName</synopsis>
+          <para>Print help (or help on a function/command).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-command-load">
+         <term>load</term>
+         <listitem>
+          <synopsis>load "file.gel"</synopsis>
+          <para>Load a file into the interpretor.  The file will execute
+as if it were typed onto the command line.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-command-cd">
+         <term>cd</term>
+         <listitem>
+          <synopsis>cd /directory/name</synopsis>
+          <para>Change working directory to <filename>/directory/name</filename>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-command-pwd">
+         <term>pwd</term>
+         <listitem>
+          <synopsis>pwd</synopsis>
+          <para>Print the current working directory.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-command-ls">
+         <term>ls</term>
+         <listitem>
+          <synopsis>ls</synopsis>
+          <para>List files in the current directory.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-command-plugin">
+         <term>plugin</term>
+         <listitem>
+          <synopsis>plugin plugin_name</synopsis>
+          <para>Load a plugin.  Plugin of that name must be installed on the system
+in the proper directory.</para>
+         </listitem>
+        </varlistentry>
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-basic">
+      <title>Basic</title>
+      <variablelist>
+        <varlistentry id="gel-function-AskButtons">
+         <term>AskButtons</term>
+         <listitem>
+          <synopsis>AskButtons (query)</synopsis>
+          <synopsis>AskButtons (query, button1, ...)</synopsis>
+         <para>Asks a question and presents a list of buttons to the user (or
+a menu of options in text mode).  Returns the 1-based index of the button
+pressed.  That is, returns 1 if the first button was pressed, 2 if the second
+button was pressed, and so on.  If the user closes the window (or simply hits
+enter in text mode), then <constant>null</constant> is returned.  The execution
+of the program is blocked until the user responds.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-AskString">
+         <term>AskString</term>
+         <listitem>
+          <synopsis>AskString (query)</synopsis>
+          <synopsis>AskString (query, default)</synopsis>
+          <para>Asks a question and lets the user enter a string which
+it then returns.  If the user cancels or closes the window, then
+<constant>null</constant> is returned.  The execution of the program
+is blocked until the user responds.  If <varname>default</varname> is given, then it is pre-typed in for the 
user to just press enter on.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Compose">
+         <term>Compose</term>
+         <listitem>
+          <synopsis>Compose (f,g)</synopsis>
+          <para>Compose two functions and return a function that is the composition of 
<function>f</function> and <function>g</function>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ComposePower">
+         <term>ComposePower</term>
+         <listitem>
+          <synopsis>ComposePower (f,n,x)</synopsis>
+          <para>Compose and execute a function with itself <varname>n</varname> times, passing 
<varname>x</varname> as argument.  Returning <varname>x</varname> if
+<varname>n</varname> equals 0.
+               Example:
+          <screen><prompt>genius></prompt> <userinput>function f(x) = x^2 ;</userinput>
+<prompt>genius></prompt> <userinput>ComposePower (f,3,7)</userinput>
+= 5764801
+<prompt>genius></prompt> <userinput>f(f(f(7)))</userinput>
+= 5764801
+</screen>
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Evaluate">
+         <term>Evaluate</term>
+         <listitem>
+          <synopsis>Evaluate (str)</synopsis>
+          <para>Parses and evaluates a string.</para>
+         </listitem>
+        </varlistentry>
+
+
+        <varlistentry id="gel-function-GetCurrentModulo">
+         <term>GetCurrentModulo</term>
+         <listitem>
+          <synopsis>GetCurrentModulo</synopsis>
+          <para>Get current modulo from the context outside the function.  That is, if outside of
+the function was executed in modulo (using <literal>mod</literal>) then this returns what
+this modulo was.  Normally the body of the function called is not executed in modular arithmetic,
+and this builtin function makes it possible to make GEL functions aware of modular arithmetic.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Identity">
+         <term>Identity</term>
+         <listitem>
+          <synopsis>Identity (x)</synopsis>
+          <para>Identity function, returns its argument.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IntegerFromBoolean">
+         <term>IntegerFromBoolean</term>
+         <listitem>
+          <synopsis>IntegerFromBoolean (bval)</synopsis>
+         <para>
+           Make integer (0 for <constant>false</constant> or 1 for
+           <constant>true</constant>) from a boolean value.
+           <varname>bval</varname> can also be a number in which case a
+           non-zero value will be interpreted as <constant>true</constant> and
+           zero will be interpreted as <constant>false</constant>.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsBoolean">
+         <term>IsBoolean</term>
+         <listitem>
+          <synopsis>IsBoolean (arg)</synopsis>
+          <para>Check if argument is a boolean (and not a number).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsDefined">
+         <term>IsDefined</term>
+         <listitem>
+          <synopsis>IsDefined (id)</synopsis>
+          <para>Check if an id is defined.  You should pass a string or
+          and identifier.  If you pass a matrix, each entry will be
+          evaluated separately and the matrix should contain strings
+          or identifiers.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsFunction">
+         <term>IsFunction</term>
+         <listitem>
+          <synopsis>IsFunction (arg)</synopsis>
+          <para>Check if argument is a function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsFunctionOrIdentifier">
+         <term>IsFunctionOrIdentifier</term>
+         <listitem>
+          <synopsis>IsFunctionOrIdentifier (arg)</synopsis>
+          <para>Check if argument is a function or an identifier.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsFunctionRef">
+         <term>IsFunctionRef</term>
+         <listitem>
+          <synopsis>IsFunctionRef (arg)</synopsis>
+          <para>Check if argument is a function reference.  This includes variable
+references.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsMatrix">
+         <term>IsMatrix</term>
+         <listitem>
+          <synopsis>IsMatrix (arg)</synopsis>
+          <para>Check if argument is a matrix.  Even though <constant>null</constant> is
+sometimes considered an empty matrix, the function <function>IsMatrix</function> does
+not consider <constant>null</constant> a matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsNull">
+         <term>IsNull</term>
+         <listitem>
+          <synopsis>IsNull (arg)</synopsis>
+         <para>Check if argument is a <constant>null</constant>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsString">
+         <term>IsString</term>
+         <listitem>
+          <synopsis>IsString (arg)</synopsis>
+          <para>Check if argument is a text string.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsValue">
+         <term>IsValue</term>
+         <listitem>
+          <synopsis>IsValue (arg)</synopsis>
+          <para>Check if argument is a number.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Parse">
+         <term>Parse</term>
+         <listitem>
+          <synopsis>Parse (str)</synopsis>
+          <para>Parses but does not evaluate a string.  Note that certain
+           pre-computation is done during the parsing stage.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SetFunctionFlags">
+         <term>SetFunctionFlags</term>
+         <listitem>
+          <synopsis>SetFunctionFlags (id,flags...)</synopsis>
+          <para>Set flags for a function, currently <literal>"PropagateMod"</literal> and 
<literal>"NoModuloArguments"</literal>.
+If <literal>"PropagateMod"</literal> is set, then the body of the function is evaluated in modular 
arithmetic when the function
+is called inside a block that was evaluated using modular arithmetic (using <literal>mod</literal>).  If
+<literal>"NoModuloArguments"</literal>, then the arguments of the function are never evaluated using modular 
arithmetic.
+ </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SetHelp">
+         <term>SetHelp</term>
+         <listitem>
+          <synopsis>SetHelp (id,category,desc)</synopsis>
+          <para>Set the category and help description line for a function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SetHelpAlias">
+         <term>SetHelpAlias</term>
+         <listitem>
+          <synopsis>SetHelpAlias (id,alias)</synopsis>
+          <para>Sets up a help alias.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-chdir">
+         <term>chdir</term>
+         <listitem>
+          <synopsis>chdir (dir)</synopsis>
+          <para>Changes current directory, same as the <command>cd</command>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-CurrentTime">
+         <term>CurrentTime</term>
+         <listitem>
+          <synopsis>CurrentTime</synopsis>
+          <para>Returns the current UNIX time with microsecond precision as a floating point number.  That 
is, returns the number of seconds since January 1st 1970.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-display">
+         <term>display</term>
+         <listitem>
+          <synopsis>display (str,expr)</synopsis>
+          <para>Display a string and an expression with a colon to separate them.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-error">
+         <term>error</term>
+         <listitem>
+          <synopsis>error (str)</synopsis>
+          <para>Prints a string to the error stream (onto the console).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-exit">
+         <term>exit</term>
+         <listitem>
+          <synopsis>exit</synopsis>
+          <para>Aliases: <function>quit</function></para>
+          <para>Exits the program.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-false">
+         <term>false</term>
+         <listitem>
+          <synopsis>false</synopsis>
+          <para>Aliases: <function>False</function> <function>FALSE</function></para>
+         <para>The <constant>false</constant> boolean value.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-manual">
+         <term>manual</term>
+         <listitem>
+          <synopsis>manual</synopsis>
+          <para>Displays the user manual.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-print">
+         <term>print</term>
+         <listitem>
+          <synopsis>print (str)</synopsis>
+          <para>Prints an expression and then print a newline.  The argument <varname>str</varname> can be 
any expression.  It is
+made into a string before being printed.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-printn">
+         <term>printn</term>
+         <listitem>
+          <synopsis>printn (str)</synopsis>
+          <para>Prints an expression without a trailing newline.  The argument <varname>str</varname> can be 
any expression.  It is
+made into a string before being printed.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-protect">
+         <term>protect</term>
+         <listitem>
+          <synopsis>protect (id)</synopsis>
+          <para>Protect a variable from being modified.  This is used on the internal GEL functions to
+avoid them being accidentally overridden.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ProtectAll">
+         <term>ProtectAll</term>
+         <listitem>
+          <synopsis>ProtectAll ()</synopsis>
+          <para>Protect all currently defined variables, parameters and
+functions from being modified.  This is used on the internal GEL functions to
+avoid them being accidentally overridden.  Normally &app; considers
+unprotected variables as user defined.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-set">
+         <term>set</term>
+         <listitem>
+          <synopsis>set (id,val)</synopsis>
+          <para>Set a global variable.  The <varname>id</varname>
+            can be either a string or a quoted identifier as follows.
+           For example:
+           <programlisting>set(`x,1)
+           </programlisting>
+           will set the global variable <varname>x</varname> to the value 1.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-string">
+         <term>string</term>
+         <listitem>
+          <synopsis>string (s)</synopsis>
+          <para>Make a string.  This will make a string out of any argument.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-true">
+         <term>true</term>
+         <listitem>
+          <synopsis>true</synopsis>
+          <para>Aliases: <function>True</function> <function>TRUE</function></para>
+         <para>The <constant>true</constant> boolean value.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-undefine">
+         <term>undefine</term>
+         <listitem>
+          <synopsis>undefine (id)</synopsis>
+          <para>Alias: <function>Undefine</function></para>
+          <para>Undefine a variable.  This includes locals and globals,
+           every value on all context levels is wiped.  This function
+           should really not be used on local variables.  A vector of
+           identifiers can also be passed to undefine several variables.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-UndefineAll">
+         <term>UndefineAll</term>
+         <listitem>
+          <synopsis>UndefineAll ()</synopsis>
+         <para>Undefine all unprotected global variables
+           (including functions and parameters).  Normally &app;
+           considers protected variables as system defined functions
+           and variables.  Note that <function>UndefineAll</function>
+           only removes the global definition of symbols not local ones,
+           so that it may be run from inside other functions safely.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-unprotect">
+         <term>unprotect</term>
+         <listitem>
+          <synopsis>unprotect (id)</synopsis>
+          <para>Unprotect a variable from being modified.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-UserVariables">
+         <term>UserVariables</term>
+         <listitem>
+          <synopsis>UserVariables ()</synopsis>
+          <para>Return a vector of identifiers of
+           user defined (unprotected) global variables.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-wait">
+         <term>wait</term>
+         <listitem>
+          <synopsis>wait (secs)</synopsis>
+          <para>Waits a specified number of seconds.  <varname>secs</varname>
+must be non-negative.  Zero is accepted and nothing happens in this case,
+except possibly user interface events are processed.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-version">
+         <term>version</term>
+         <listitem>
+          <synopsis>version</synopsis>
+          <para>Returns the version of Genius as a horizontal 3-vector with
+         major version first, then minor version and finally the patch level.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-warranty">
+         <term>warranty</term>
+         <listitem>
+          <synopsis>warranty</synopsis>
+          <para>Gives the warranty information.</para>
+         </listitem>
+        </varlistentry>
+      </variablelist>
+
+    </sect1>
+
+    <sect1 id="genius-gel-function-parameters">
+      <title>Parameters</title>
+      <variablelist>
+        <varlistentry id="gel-function-ChopTolerance">
+         <term>ChopTolerance</term>
+         <listitem>
+          <synopsis>ChopTolerance = number</synopsis>
+          <para>Tolerance of the <function>Chop</function> function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ContinuousNumberOfTries">
+         <term>ContinuousNumberOfTries</term>
+         <listitem>
+          <synopsis>ContinuousNumberOfTries = number</synopsis>
+          <para>How many iterations to try to find the limit for continuity and limits.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ContinuousSFS">
+         <term>ContinuousSFS</term>
+         <listitem>
+          <synopsis>ContinuousSFS = number</synopsis>
+          <para>How many successive steps to be within tolerance for calculation of continuity.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ContinuousTolerance">
+         <term>ContinuousTolerance</term>
+         <listitem>
+          <synopsis>ContinuousTolerance = number</synopsis>
+          <para>Tolerance for continuity of functions and for calculating the limit.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DerivativeNumberOfTries">
+         <term>DerivativeNumberOfTries</term>
+         <listitem>
+          <synopsis>DerivativeNumberOfTries = number</synopsis>
+          <para>How many iterations to try to find the limit for derivative.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DerivativeSFS">
+         <term>DerivativeSFS</term>
+         <listitem>
+          <synopsis>DerivativeSFS = number</synopsis>
+          <para>How many successive steps to be within tolerance for calculation of derivative.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DerivativeTolerance">
+         <term>DerivativeTolerance</term>
+         <listitem>
+          <synopsis>DerivativeTolerance = number</synopsis>
+          <para>Tolerance for calculating the derivatives of functions.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ErrorFunctionTolerance">
+         <term>ErrorFunctionTolerance</term>
+         <listitem>
+          <synopsis>ErrorFunctionTolerance = number</synopsis>
+          <para>Tolerance of the <function>ErrorFunction</function>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-FloatPrecision">
+         <term>FloatPrecision</term>
+         <listitem>
+          <synopsis>FloatPrecision = number</synopsis>
+          <para>Floating point precision.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-FullExpressions">
+         <term>FullExpressions</term>
+         <listitem>
+          <synopsis>FullExpressions = boolean</synopsis>
+          <para>Print full expressions, even if more than a line.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-GaussDistributionTolerance">
+         <term>GaussDistributionTolerance</term>
+         <listitem>
+          <synopsis>GaussDistributionTolerance = number</synopsis>
+          <para>Tolerance of the <function>GaussDistribution</function> function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IntegerOutputBase">
+         <term>IntegerOutputBase</term>
+         <listitem>
+          <synopsis>IntegerOutputBase = number</synopsis>
+          <para>Integer output base.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsPrimeMillerRabinReps">
+         <term>IsPrimeMillerRabinReps</term>
+         <listitem>
+          <synopsis>IsPrimeMillerRabinReps = number</synopsis>
+          <para>Number of extra Miller-Rabin tests to run on a number before declaring it a prime in 
<function>IsPrime</function>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-LinePlotDrawLegends">
+         <term>LinePlotDrawLegends</term>
+         <listitem>
+          <synopsis>LinePlotDrawLegends = true</synopsis>
+          <para>Tells genius to draw the legends for <link linkend="genius-gel-function-list-plotting">line 
plotting
+         functions</link> such as <link linkend="gel-function-LinePlot"><function>LinePlot</function></link>.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-LinePlotDrawAxisLabels">
+         <term>LinePlotDrawAxisLabels</term>
+         <listitem>
+          <synopsis>LinePlotDrawAxisLabels = true</synopsis>
+          <para>Tells genius to draw the axis labels for <link 
linkend="genius-gel-function-list-plotting">line plotting
+         functions</link> such as <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>Tells genius which variable names are used as default names  for <link 
linkend="genius-gel-function-list-plotting">line plotting
+         functions</link> such as <link linkend="gel-function-LinePlot"><function>LinePlot</function></link> 
and friends.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-LinePlotWindow">
+         <term>LinePlotWindow</term>
+         <listitem>
+          <synopsis>LinePlotWindow = [x1,x2,y1,y2]</synopsis>
+          <para>Sets the limits for <link linkend="genius-gel-function-list-plotting">line plotting
+         functions</link> such as <link linkend="gel-function-LinePlot"><function>LinePlot</function></link>.
+          </para>
+         </listitem>
+        </varlistentry>
+
+
+        <varlistentry id="gel-function-MaxDigits">
+         <term>MaxDigits</term>
+         <listitem>
+          <synopsis>MaxDigits = number</synopsis>
+          <para>Maximum digits to display.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MaxErrors">
+         <term>MaxErrors</term>
+         <listitem>
+          <synopsis>MaxErrors = number</synopsis>
+          <para>Maximum errors to display.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MixedFractions">
+         <term>MixedFractions</term>
+         <listitem>
+          <synopsis>MixedFractions = boolean</synopsis>
+          <para>If true, mixed fractions are printed.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalIntegralFunction">
+         <term>NumericalIntegralFunction</term>
+         <listitem>
+          <synopsis>NumericalIntegralFunction = function</synopsis>
+          <para>The function used for numerical integration in <function>NumericalIntegral</function>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalIntegralSteps">
+         <term>NumericalIntegralSteps</term>
+         <listitem>
+          <synopsis>NumericalIntegralSteps = number</synopsis>
+          <para>Steps to perform in <function>NumericalIntegral</function>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-OutputChopExponent">
+         <term>OutputChopExponent</term>
+         <listitem>
+          <synopsis>OutputChopExponent = number</synopsis>
+         <para>When another number in the object being printed (a matrix or a
+value) is greater than
+10<superscript>-OutputChopWhenExponent</superscript>, and
+the number being printed is less than 
+10<superscript>-OutputChopExponent</superscript>, then
+display <computeroutput>0.0</computeroutput> instead of the number.
+</para>
+<para>
+Output is never chopped if <function>OutputChopExponent</function> is zero.
+It must be a non-negative integer.
+</para>
+<para>
+If you want output always chopped according to
+<function>OutputChopExponent</function>, then set
+<function>OutputChopWhenExponent</function>, to something
+greater than or equal to
+<function>OutputChopExponent</function>.
+</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-OutputChopWhenExponent">
+         <term>OutputChopWhenExponent</term>
+         <listitem>
+          <synopsis>OutputChopWhenExponent = number</synopsis>
+         <para>When to chop output.  See
+          <link linkend="gel-function-OutputChopExponent"><function>OutputChopExponent</function></link>.
+</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-OutputStyle">
+         <term>OutputStyle</term>
+         <listitem>
+          <synopsis>OutputStyle = string</synopsis>
+          <para>
+           Output style, this can be <literal>normal</literal>, <literal>latex</literal>, 
<literal>mathml</literal> or <literal>troff</literal>.
+         </para>
+         <para>
+           This affects mostly how matrices and fractions are printed out and
+           is useful for pasting into documents.  For example you can set this
+           to the latex by:
+           <programlisting>OutputStyle = "latex"
+</programlisting>
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ResultsAsFloats">
+         <term>ResultsAsFloats</term>
+         <listitem>
+          <synopsis>ResultsAsFloats = boolean</synopsis>
+          <para>Convert all results to floats before printing.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ScientificNotation">
+         <term>ScientificNotation</term>
+         <listitem>
+          <synopsis>ScientificNotation = boolean</synopsis>
+          <para>Use scientific notation.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SlopefieldTicks">
+         <term>SlopefieldTicks</term>
+         <listitem>
+          <synopsis>SlopefieldTicks = [vertical,horizontal]</synopsis>
+          <para>Sets the number of vertical and horizontal ticks in a
+slopefield plot.  (See <link 
linkend="gel-function-SlopefieldPlot"><function>SlopefieldPlot</function></link>).
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SumProductNumberOfTries">
+         <term>SumProductNumberOfTries</term>
+         <listitem>
+          <synopsis>SumProductNumberOfTries = number</synopsis>
+          <para>How many iterations to try for <function>InfiniteSum</function> and 
<function>InfiniteProduct</function>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SumProductSFS">
+         <term>SumProductSFS</term>
+         <listitem>
+          <synopsis>SumProductSFS = number</synopsis>
+          <para>How many successive steps to be within tolerance for <function>InfiniteSum</function> and 
<function>InfiniteProduct</function>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SumProductTolerance">
+         <term>SumProductTolerance</term>
+         <listitem>
+          <synopsis>SumProductTolerance = number</synopsis>
+          <para>Tolerance for <function>InfiniteSum</function> and 
<function>InfiniteProduct</function>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SurfacePlotDrawLegends">
+         <term>SurfacePlotDrawLegends</term>
+         <listitem>
+          <synopsis>SurfacePlotDrawLegends = true</synopsis>
+          <para>Tells genius to draw the legends for <link 
linkend="genius-gel-function-list-plotting">surface plotting
+         functions</link> such as <link 
linkend="gel-function-SurfacePlot"><function>SurfacePlot</function></link>.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SurfacePlotVariableNames">
+         <term>SurfacePlotVariableNames</term>
+         <listitem>
+          <synopsis>SurfacePlotVariableNames = ["x","y","z"]</synopsis>
+          <para>Tells genius which variable names are used as default names for <link 
linkend="genius-gel-function-list-plotting">surface plotting
+         functions</link> using <link 
linkend="gel-function-SurfacePlot"><function>SurfacePlot</function></link>.
+          Note that the <varname>z</varname> does not refer to the dependent (vertical) axis, but to the 
indepent complex variable
+          <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>Sets the limits for surface plotting (See <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>Should the vectorfield plotting have normalized arrow length.  If true, vector fields will 
only show direction
+          and not magnitude.  (See <link 
linkend="gel-function-VectorfieldPlot"><function>VectorfieldPlot</function></link>).
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-VectorfieldTicks">
+         <term>VectorfieldTicks</term>
+         <listitem>
+          <synopsis>VectorfieldTicks = [vertical,horizontal]</synopsis>
+          <para>Sets the number of vertical and horizontal ticks in a
+vectorfield plot.  (See <link 
linkend="gel-function-VectorfieldPlot"><function>VectorfieldPlot</function></link>).
+          </para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-constants">
+      <title>Constants</title>
+      <variablelist>
+        <varlistentry id="gel-function-CatalanConstant">
+         <term>CatalanConstant</term>
+         <listitem>
+          <synopsis>CatalanConstant</synopsis>
+          <para>
+           Catalan's Constant, approximately 0.915...  It is defined to be the series where terms are 
<userinput>(-1^k)/((2*k+1)^2)</userinput>, where <varname>k</varname> ranges from 0 to infinity.
+         </para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/CatalansConstant.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-EulerConstant">
+         <term>EulerConstant</term>
+         <listitem>
+          <synopsis>EulerConstant</synopsis>
+          <para>Aliases: <function>gamma</function></para>
+          <para>
+           Euler's Constant gamma.  Sometimes called the
+           Euler-Mascheroni constant.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Euler-Mascheroni_constant";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/MascheroniConstant.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/Euler-MascheroniConstant.html";>Mathworld</ulink> for 
more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-GoldenRatio">
+         <term>GoldenRatio</term>
+         <listitem>
+          <synopsis>GoldenRatio</synopsis>
+          <para>The Golden Ratio.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Golden_ratio";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/GoldenRatio.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/GoldenRatio.html";>Mathworld</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Gravity">
+         <term>Gravity</term>
+         <listitem>
+          <synopsis>Gravity</synopsis>
+          <para>Free fall acceleration at sea level.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Standard_gravity";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-e">
+         <term>e</term>
+         <listitem>
+          <synopsis>e</synopsis>
+          <para>
+           The base of the natural logarithm.  <userinput>e^x</userinput>
+           is the exponential function
+           <link linkend="gel-function-exp"><function>exp</function></link>.  This is the
+           number approximately 2.71828182846...
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/E_(mathematical_constant)">Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/E.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/e.html";>Mathworld</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-pi">
+         <term>pi</term>
+         <listitem>
+          <synopsis>pi</synopsis>
+          <para>
+           The number pi, that is the ratio of a circle's circumference
+           to its diameter.  This is approximately 3.14159265359...
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Pi";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/Pi.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/Pi.html";>Mathworld</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-numeric">
+      <title>Numeric</title>
+      <variablelist>
+        <varlistentry id="gel-function-AbsoluteValue">
+         <term>AbsoluteValue</term>
+         <listitem>
+          <synopsis>AbsoluteValue (x)</synopsis>
+          <para>Aliases: <function>abs</function></para>
+          <para>
+           Absolute value of a number and if <varname>x</varname> is
+           a complex value the modulus of <varname>x</varname>.  I.e. this
+           the distance of <varname>x</varname> to the origin.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Absolute_value";>Wikipedia</ulink>,
+           <ulink url="http://planetmath.org/encyclopedia/AbsoluteValue.html";>Planetmath (absolute 
value)</ulink>,
+           <ulink url="http://planetmath.org/encyclopedia/ModulusOfComplexNumber.html";>Planetmath 
(modulus)</ulink>,
+           <ulink url="http://mathworld.wolfram.com/AbsoluteValue.html";>Mathworld (absolute value)</ulink> or
+           <ulink url="http://mathworld.wolfram.com/ComplexModulus.html";>Mathworld (complex modulus)</ulink>
+for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Chop">
+         <term>Chop</term>
+         <listitem>
+          <synopsis>Chop (x)</synopsis>
+          <para>Replace very small number with zero.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ComplexConjugate">
+         <term>ComplexConjugate</term>
+         <listitem>
+          <synopsis>ComplexConjugate (z)</synopsis>
+          <para>Aliases: <function>conj</function> <function>Conj</function></para>
+          <para>Calculates the complex conjugate of the complex number <varname>z</varname>.  If 
<varname>z</varname> is a vector or matrix,
+all its elements are conjugated.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Complex_conjugate";>Wikipedia</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Denominator">
+         <term>Denominator</term>
+         <listitem>
+          <synopsis>Denominator (x)</synopsis>
+          <para>Get the denominator of a rational number.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Denominator";>Wikipedia</ulink> for more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-FractionalPart">
+         <term>FractionalPart</term>
+         <listitem>
+          <synopsis>FractionalPart (x)</synopsis>
+          <para>Return the fractional part of a number.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Fractional_part";>Wikipedia</ulink> for more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Im">
+         <term>Im</term>
+         <listitem>
+          <synopsis>Im (z)</synopsis>
+          <para>Aliases: <function>ImaginaryPart</function></para>
+          <para>Get the imaginary part of a complex number.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Imaginary_part";>Wikipedia</ulink> for more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IntegerQuotient">
+         <term>IntegerQuotient</term>
+         <listitem>
+          <synopsis>IntegerQuotient (m,n)</synopsis>
+          <para>Division without remainder.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsComplex">
+         <term>IsComplex</term>
+         <listitem>
+          <synopsis>IsComplex (num)</synopsis>
+          <para>Check if argument is a complex (non-real) number.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsComplexRational">
+         <term>IsComplexRational</term>
+         <listitem>
+          <synopsis>IsComplexRational (num)</synopsis>
+         <para>Check if argument is a possibly complex rational number.  That is, if both real and imaginary 
parts are
+         given as rational numbers.  Of course rational simply means "not stored as a floating point 
number."</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsFloat">
+         <term>IsFloat</term>
+         <listitem>
+          <synopsis>IsFloat (num)</synopsis>
+          <para>Check if argument is a floating point number (non-complex).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsGaussInteger">
+         <term>IsGaussInteger</term>
+         <listitem>
+          <synopsis>IsGaussInteger (num)</synopsis>
+          <para>Aliases: <function>IsComplexInteger</function></para>
+          <para>Check if argument is a possibly complex integer.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsInteger">
+         <term>IsInteger</term>
+         <listitem>
+          <synopsis>IsInteger (num)</synopsis>
+          <para>Check if argument is an integer (non-complex).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsNonNegativeInteger">
+         <term>IsNonNegativeInteger</term>
+         <listitem>
+          <synopsis>IsNonNegativeInteger (num)</synopsis>
+          <para>Check if argument is a non-negative real integer.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsPositiveInteger">
+         <term>IsPositiveInteger</term>
+         <listitem>
+          <synopsis>IsPositiveInteger (num)</synopsis>
+          <para>Aliases: <function>IsNaturalNumber</function></para>
+          <para>Check if argument is a positive real integer.  Note that
+we accept the convention that 0 is not a natural number.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsRational">
+         <term>IsRational</term>
+         <listitem>
+          <synopsis>IsRational (num)</synopsis>
+          <para>Check if argument is a rational number (non-complex).  Of course rational simply means "not 
stored as a floating point number."</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsReal">
+         <term>IsReal</term>
+         <listitem>
+          <synopsis>IsReal (num)</synopsis>
+          <para>Check if argument is a real number.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Numerator">
+         <term>Numerator</term>
+         <listitem>
+          <synopsis>Numerator (x)</synopsis>
+          <para>Get the numerator of a rational number.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Numerator";>Wikipedia</ulink> for more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Re">
+         <term>Re</term>
+         <listitem>
+          <synopsis>Re (z)</synopsis>
+          <para>Aliases: <function>RealPart</function></para>
+          <para>Get the real part of a complex number.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Real_part";>Wikipedia</ulink> for more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Sign">
+         <term>Sign</term>
+         <listitem>
+          <synopsis>Sign (x)</synopsis>
+          <para>Aliases: <function>sign</function></para>
+          <para>Return the sign of a number.  That is returns
+<literal>-1</literal> if value is negative,
+<literal>0</literal> if value is zero and
+<literal>1</literal> if value is positive.  If <varname>x</varname> is a complex
+value then <function>Sign</function> returns the direction or 0.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ceil">
+         <term>ceil</term>
+         <listitem>
+          <synopsis>ceil (x)</synopsis>
+          <para>Aliases: <function>Ceiling</function></para>
+         <para>Get the lowest integer more than or equal to <varname>n</varname>. Examples:
+          <screen><prompt>genius></prompt> <userinput>ceil(1.1)</userinput>
+= 2
+<prompt>genius></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>
+           The exponential function.  This is the function
+           <userinput>e^x</userinput> where <varname>e</varname>
+           is the <link linkend="gel-function-e">base of the natural
+           logarithm</link>.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Exponential_function";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/LogarithmFunction.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/ExponentialFunction.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-float">
+         <term>float</term>
+         <listitem>
+          <synopsis>float (x)</synopsis>
+          <para>Make number a floating point value.  That is returns the floating point representation of 
the number <varname>x</varname>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-floor">
+         <term>floor</term>
+         <listitem>
+          <synopsis>floor (x)</synopsis>
+          <para>Aliases: <function>Floor</function></para>
+          <para>Get the highest integer less than or equal to <varname>n</varname>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ln">
+         <term>ln</term>
+         <listitem>
+          <synopsis>ln (x)</synopsis>
+          <para>The natural logarithm, the logarithm to 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>Logarithm of <varname>x</varname> base <varname>b</varname> (calls 
<function>DiscreteLog</function> if in modulo mode), if base is not given, <varname>e</varname> is 
used.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-log10">
+         <term>log10</term>
+         <listitem>
+          <synopsis>log10 (x)</synopsis>
+          <para>Logarithm of <varname>x</varname> base 10.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-log2">
+         <term>log2</term>
+         <listitem>
+          <synopsis>log2 (x)</synopsis>
+          <para>Aliases: <function>lg</function></para>
+          <para>Logarithm of <varname>x</varname> base 2.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-max">
+         <term>max</term>
+         <listitem>
+          <synopsis>max (a,args...)</synopsis>
+          <para>Aliases: <function>Max</function> <function>Maximum</function></para>
+          <para>Returns the maximum of arguments or matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-min">
+         <term>min</term>
+         <listitem>
+          <synopsis>min (a,args...)</synopsis>
+          <para>Aliases: <function>Min</function> <function>Minimum</function></para>
+          <para>Returns the minimum of arguments or matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-rand">
+         <term>rand</term>
+         <listitem>
+          <synopsis>rand (size...)</synopsis>
+          <para>Generate random float in the range <literal>[0,1)</literal>.
+If size is given then a matrix (if two numbers are specified) or vector (if one
+number is specified) of the given size returned.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-randint">
+         <term>randint</term>
+         <listitem>
+          <synopsis>randint (max,size...)</synopsis>
+          <para>Generate random integer in the range
+<literal>[0,max)</literal>.
+If size is given then a matrix (if two numbers are specified) or vector (if one
+number is specified) of the given size returned.  For example,
+          <screen><prompt>genius></prompt> <userinput>randint(4)</userinput>
+= 3
+<prompt>genius></prompt> <userinput>randint(4,2)</userinput>
+=
+[0      1]
+<prompt>genius></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>Aliases: <function>Round</function></para>
+          <para>Round a number.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-sqrt">
+         <term>sqrt</term>
+         <listitem>
+          <synopsis>sqrt (x)</synopsis>
+          <para>Aliases: <function>SquareRoot</function></para>
+          <para>The square root.  When operating modulo some integer will return either a 
<constant>null</constant> or a vector of the square roots.  Examples:
+          <screen><prompt>genius></prompt> <userinput>sqrt(2)</userinput>
+= 1.41421356237
+<prompt>genius></prompt> <userinput>sqrt(-1)</userinput>
+= 1i
+<prompt>genius></prompt> <userinput>sqrt(4) mod 7</userinput>
+=
+[2      5]
+<prompt>genius></prompt> <userinput>2*2 mod 7</userinput>
+= 4
+</screen>
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/SquareRoot.html";>Planetmath</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-trunc">
+         <term>trunc</term>
+         <listitem>
+          <synopsis>trunc (x)</synopsis>
+          <para>Aliases: <function>Truncate</function> <function>IntegerPart</function></para>
+          <para>Truncate number to an integer (return the integer part).</para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-trigonometry">
+      <title>Trigonometry</title>
+      <variablelist>
+        <varlistentry id="gel-function-acos">
+         <term>acos</term>
+         <listitem>
+          <synopsis>acos (x)</synopsis>
+          <para>Aliases: <function>arccos</function></para>
+          <para>The arccos (inverse cos) function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-acosh">
+         <term>acosh</term>
+         <listitem>
+          <synopsis>acosh (x)</synopsis>
+          <para>Aliases: <function>arccosh</function></para>
+          <para>The arccosh (inverse cosh) function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-acot">
+         <term>acot</term>
+         <listitem>
+          <synopsis>acot (x)</synopsis>
+          <para>Aliases: <function>arccot</function></para>
+          <para>The arccot (inverse cot) function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-acoth">
+         <term>acoth</term>
+         <listitem>
+          <synopsis>acoth (x)</synopsis>
+          <para>Aliases: <function>arccoth</function></para>
+          <para>The arccoth (inverse coth) function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-acsc">
+         <term>acsc</term>
+         <listitem>
+          <synopsis>acsc (x)</synopsis>
+          <para>Aliases: <function>arccsc</function></para>
+          <para>The inverse cosecant function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-acsch">
+         <term>acsch</term>
+         <listitem>
+          <synopsis>acsch (x)</synopsis>
+          <para>Aliases: <function>arccsch</function></para>
+          <para>The inverse hyperbolic cosecant function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-asec">
+         <term>asec</term>
+         <listitem>
+          <synopsis>asec (x)</synopsis>
+          <para>Aliases: <function>arcsec</function></para>
+          <para>The inverse secant function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-asech">
+         <term>asech</term>
+         <listitem>
+          <synopsis>asech (x)</synopsis>
+          <para>Aliases: <function>arcsech</function></para>
+          <para>The inverse hyperbolic secant function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-asin">
+         <term>asin</term>
+         <listitem>
+          <synopsis>asin (x)</synopsis>
+          <para>Aliases: <function>arcsin</function></para>
+          <para>The arcsin (inverse sin) function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-asinh">
+         <term>asinh</term>
+         <listitem>
+          <synopsis>asinh (x)</synopsis>
+          <para>Aliases: <function>arcsinh</function></para>
+          <para>The arcsinh (inverse sinh) function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-atan">
+         <term>atan</term>
+         <listitem>
+          <synopsis>atan (x)</synopsis>
+          <para>Aliases: <function>arctan</function></para>
+          <para>Calculates the arctan (inverse tan) function.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Arctangent";>Wikipedia</ulink> or
+           <ulink url="http://mathworld.wolfram.com/InverseTangent.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-atanh">
+         <term>atanh</term>
+         <listitem>
+          <synopsis>atanh (x)</synopsis>
+          <para>Aliases: <function>arctanh</function></para>
+          <para>The arctanh (inverse tanh) function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-atan2">
+         <term>atan2</term>
+         <listitem>
+          <synopsis>atan2 (y, x)</synopsis>
+          <para>Aliases: <function>arctan2</function></para>
+          <para>Calculates the arctan2 function.  If
+         <userinput>x&gt;0</userinput> then it returns
+         <userinput>atan(y/x)</userinput>.  If <userinput>x&lt;0</userinput>
+         then it returns <userinput>sign(y) * (pi - atan(|y/x|)</userinput>.
+         When <userinput>x=0</userinput> it returns <userinput>sign(y) *
+         pi/2</userinput>.  <userinput>atan2(0,0)</userinput> returns 0
+         rather then failing.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Atan2";>Wikipedia</ulink> or
+           <ulink url="http://mathworld.wolfram.com/InverseTangent.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-cos">
+         <term>cos</term>
+         <listitem>
+          <synopsis>cos (x)</synopsis>
+          <para>Calculates the cosine function.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/DefinitionsInTrigonometry.html";>Planetmath</ulink> 
for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-cosh">
+         <term>cosh</term>
+         <listitem>
+          <synopsis>cosh (x)</synopsis>
+          <para>Calculates the hyperbolic cosine function.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/HyperbolicFunctions.html";>Planetmath</ulink> for 
more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-cot">
+         <term>cot</term>
+         <listitem>
+          <synopsis>cot (x)</synopsis>
+          <para>The cotangent function.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/DefinitionsInTrigonometry.html";>Planetmath</ulink> 
for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-coth">
+         <term>coth</term>
+         <listitem>
+          <synopsis>coth (x)</synopsis>
+          <para>The hyperbolic cotangent function.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/HyperbolicFunctions.html";>Planetmath</ulink> for 
more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-csc">
+         <term>csc</term>
+         <listitem>
+          <synopsis>csc (x)</synopsis>
+          <para>The cosecant function.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/DefinitionsInTrigonometry.html";>Planetmath</ulink> 
for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-csch">
+         <term>csch</term>
+         <listitem>
+          <synopsis>csch (x)</synopsis>
+          <para>The hyperbolic cosecant function.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/HyperbolicFunctions.html";>Planetmath</ulink> for 
more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-sec">
+         <term>sec</term>
+         <listitem>
+          <synopsis>sec (x)</synopsis>
+          <para>The secant function.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/DefinitionsInTrigonometry.html";>Planetmath</ulink> 
for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-sech">
+         <term>sech</term>
+         <listitem>
+          <synopsis>sech (x)</synopsis>
+          <para>The hyperbolic secant function.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/HyperbolicFunctions.html";>Planetmath</ulink> for 
more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-sin">
+         <term>sin</term>
+         <listitem>
+          <synopsis>sin (x)</synopsis>
+          <para>Calculates the sine function.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/DefinitionsInTrigonometry.html";>Planetmath</ulink> 
for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-sinh">
+         <term>sinh</term>
+         <listitem>
+          <synopsis>sinh (x)</synopsis>
+          <para>Calculates the hyperbolic sine function.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/HyperbolicFunctions.html";>Planetmath</ulink> for 
more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-tan">
+         <term>tan</term>
+         <listitem>
+          <synopsis>tan (x)</synopsis>
+          <para>Calculates the tan function.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/DefinitionsInTrigonometry.html";>Planetmath</ulink> 
for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-tanh">
+         <term>tanh</term>
+         <listitem>
+          <synopsis>tanh (x)</synopsis>
+          <para>The hyperbolic tangent function.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/HyperbolicFunctions.html";>Planetmath</ulink> for 
more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-number-theory">
+      <title>Number Theory</title>
+      <variablelist>
+        <varlistentry id="gel-function-AreRelativelyPrime">
+         <term>AreRelativelyPrime</term>
+         <listitem>
+          <synopsis>AreRelativelyPrime (a,b)</synopsis>
+          <para>
+           Are the real integers <varname>a</varname> and <varname>b</varname> relatively prime?
+           Returns <constant>true</constant> or <constant>false</constant>.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/RelativelyPrime.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/RelativelyPrime.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-BernoulliNumber">
+         <term>BernoulliNumber</term>
+         <listitem>
+          <synopsis>BernoulliNumber (n)</synopsis>
+          <para>Return the <varname>n</varname>th Bernoulli number.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Bernoulli_number";>Wikipedia</ulink> or
+           <ulink url="http://mathworld.wolfram.com/BernoulliNumber.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ChineseRemainder">
+         <term>ChineseRemainder</term>
+         <listitem>
+          <synopsis>ChineseRemainder (a,m)</synopsis>
+          <para>Aliases: <function>CRT</function></para>
+         <para>Find the <varname>x</varname> that solves the system given by
+               the vector <varname>a</varname> and modulo the elements of
+               <varname>m</varname>, using the Chinese Remainder Theorem.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Chinese_remainder_theorem";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/ChineseRemainderTheorem.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/ChineseRemainderTheorem.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-CombineFactorizations">
+         <term>CombineFactorizations</term>
+         <listitem>
+          <synopsis>CombineFactorizations (a,b)</synopsis>
+         <para>Given two factorizations, give the factorization of the
+               product.</para>
+         <para>See <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>Convert a vector of values indicating powers of b to a number.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ConvertToBase">
+         <term>ConvertToBase</term>
+         <listitem>
+          <synopsis>ConvertToBase (n,b)</synopsis>
+          <para>Convert a number to a vector of powers for elements in base <varname>b</varname>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DiscreteLog">
+         <term>DiscreteLog</term>
+         <listitem>
+          <synopsis>DiscreteLog (n,b,q)</synopsis>
+          <para>Find discrete log of <varname>n</varname> base <varname>b</varname> in
+           F<subscript>q</subscript>, the finite field of order <varname>q</varname>, where 
<varname>q</varname>
+           is a prime, using the Silver-Pohlig-Hellman algorithm.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Discrete_logarithm";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/DiscreteLogarithm.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/DiscreteLogarithm.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Divides">
+         <term>Divides</term>
+         <listitem>
+          <synopsis>Divides (m,n)</synopsis>
+          <para>Checks divisibility (if <varname>m</varname> divides <varname>n</varname>).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-EulerPhi">
+         <term>EulerPhi</term>
+         <listitem>
+          <synopsis>EulerPhi (n)</synopsis>
+          <para>
+           Compute the Euler phi function for <varname>n</varname>, that is
+           the number of integers between 1 and <varname>n</varname>
+           relatively prime to <varname>n</varname>.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Euler_phi";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/EulerPhifunction.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/TotientFunction.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ExactDivision">
+         <term>ExactDivision</term>
+         <listitem>
+          <synopsis>ExactDivision (n,d)</synopsis>
+          <para>
+           Return <userinput>n/d</userinput> but only if <varname>d</varname>
+           divides <varname>n</varname>.  If <varname>d</varname>
+           does not divide <varname>n</varname> then this function returns
+           garbage.  This is a lot faster for very large numbers
+           than the operation <userinput>n/d</userinput>, but of course only
+           useful if you know that the division is exact.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Factorize">
+         <term>Factorize</term>
+         <listitem>
+          <synopsis>Factorize (n)</synopsis>
+          <para>
+           Return factorization of a number as a matrix.  The first
+           row is the primes in the factorization (including 1) and the
+           second row are the powers.  So for example:
+           <screen><prompt>genius></prompt> <userinput>Factorize(11*11*13)</userinput>
+=
+[1      11      13
+ 1      2       1]</screen>
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Factorization";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Factors">
+         <term>Factors</term>
+         <listitem>
+          <synopsis>Factors (n)</synopsis>
+          <para>
+           Return all factors of <varname>n</varname> in a vector.  This
+           includes all the non-prime factors as well.  It includes 1 and the
+           number itself.  So for example to print all the perfect numbers
+           (those that are sums of their factors) up to the number 1000 you
+           could do (this is of course very inefficient)
+           <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,tries)</synopsis>
+          <para>
+           Attempt Fermat factorization of <varname>n</varname> into
+           <userinput>(t-s)*(t+s)</userinput>, returns <varname>t</varname>
+           and <varname>s</varname> as a vector if possible, <constant>null</constant> otherwise.
+           <varname>tries</varname> specifies the number of tries before
+           giving up.
+         </para>
+          <para>
+           This is a fairly good factorization if your number is the product
+           of two factors that are very close to each other.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Fermat_factorization";>Wikipedia</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-FindPrimitiveElementMod">
+         <term>FindPrimitiveElementMod</term>
+         <listitem>
+          <synopsis>FindPrimitiveElementMod (q)</synopsis>
+          <para>Find the first primitive element in F<subscript>q</subscript>, the finite
+group of order <varname>q</varname>.  Of course <varname>q</varname> must be a prime.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-FindRandomPrimitiveElementMod">
+         <term>FindRandomPrimitiveElementMod</term>
+         <listitem>
+          <synopsis>FindRandomPrimitiveElementMod (q)</synopsis>
+          <para>Find a random primitive element in F<subscript>q</subscript>, the finite
+group of order <varname>q</varname> (q must be a prime).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IndexCalculus">
+         <term>IndexCalculus</term>
+         <listitem>
+          <synopsis>IndexCalculus (n,b,q,S)</synopsis>
+          <para>Compute discrete log base <varname>b</varname> of n in F<subscript>q</subscript>, the finite
+group of order <varname>q</varname> (<varname>q</varname> a prime), using the
+factor base <varname>S</varname>.  <varname>S</varname> should be a column of
+primes possibly with second column precalculated by
+<function>IndexCalculusPrecalculation</function>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IndexCalculusPrecalculation">
+         <term>IndexCalculusPrecalculation</term>
+         <listitem>
+          <synopsis>IndexCalculusPrecalculation (b,q,S)</synopsis>
+         <para>Run the precalculation step of
+<function>IndexCalculus</function> for logarithms base <varname>b</varname> in
+F<subscript>q</subscript>, the finite group of order <varname>q</varname>
+(<varname>q</varname> a prime), for the factor base <varname>S</varname> (where
+<varname>S</varname> is a column vector of primes).  The logs will be
+precalculated and returned in the second column.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsEven">
+         <term>IsEven</term>
+         <listitem>
+          <synopsis>IsEven (n)</synopsis>
+          <para>Tests if an integer is even.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsMersennePrimeExponent">
+         <term>IsMersennePrimeExponent</term>
+         <listitem>
+          <synopsis>IsMersennePrimeExponent (p)</synopsis>
+          <para>
+           Tests if a positive integer <varname>p</varname> is a
+           Mersenne prime exponent.  That is if 
+            2<superscript>p</superscript>-1 is a prime.  It does this
+           by looking it up in a table of known values which is relatively
+           short.
+           See also
+           <link linkend='gel-function-MersennePrimeExponents'>MersennePrimeExponents</link>
+           and
+           <link linkend='gel-function-LucasLehmer'>LucasLehmer</link>.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Mersenne_prime";>Wikipedia</ulink>,
+           <ulink url="http://planetmath.org/encyclopedia/MersenneNumbers.html";>Planetmath</ulink>,
+           <ulink url="http://mathworld.wolfram.com/MersennePrime.html";>Mathworld</ulink> or 
+           <ulink url="http://www.mersenne.org/";>GIMPS</ulink>
+ for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsNthPower">
+         <term>IsNthPower</term>
+         <listitem>
+          <synopsis>IsNthPower (m,n)</synopsis>
+          <para>
+           Tests if a rational number <varname>m</varname> is a perfect
+           <varname>n</varname>th power.  See also
+           <link linkend='gel-function-IsPerfectPower'>IsPerfectPower</link>
+           and
+           <link linkend='gel-function-IsPerfectSquare'>IsPerfectSquare</link>.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsOdd">
+         <term>IsOdd</term>
+         <listitem>
+          <synopsis>IsOdd (n)</synopsis>
+          <para>Tests if an integer is odd.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsPerfectPower">
+         <term>IsPerfectPower</term>
+         <listitem>
+          <synopsis>IsPerfectPower (n)</synopsis>
+          <para>Check an integer is any perfect power, a<superscript>b</superscript>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsPerfectSquare">
+         <term>IsPerfectSquare</term>
+         <listitem>
+          <synopsis>IsPerfectSquare (n)</synopsis>
+          <para>
+           Check an integer for being a perfect square of an integer.  The number must
+           be a real integer.  Negative integers are of course never perfect
+           squares of real integers.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsPrime">
+         <term>IsPrime</term>
+         <listitem>
+          <synopsis>IsPrime (n)</synopsis>
+          <para>
+           Tests primality of integers, for numbers less than 2.5e10 the
+           answer is deterministic (if Riemann hypothesis is true).  For
+           numbers larger, the probability of a false positive
+           depends on
+           <link linkend='gel-function-IsPrimeMillerRabinReps'>
+           <function>IsPrimeMillerRabinReps</function></link>.  That
+           is the probability of false positive is 1/4 to the power
+           <function>IsPrimeMillerRabinReps</function>.  The default
+           value of 22 yields a probability of about 5.7e-14.
+         </para>
+          <para>
+           If <constant>false</constant> is returned, you can be sure that
+           the number is a composite.  If you want to be absolutely sure
+           that you have a prime you can use 
+           <link linkend='gel-function-MillerRabinTestSure'>
+           <function>MillerRabinTestSure</function></link> but it may take
+           a lot longer.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/PrimeNumber.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/PrimeNumber.html";>Mathworld</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsPrimitiveMod">
+         <term>IsPrimitiveMod</term>
+         <listitem>
+          <synopsis>IsPrimitiveMod (g,q)</synopsis>
+          <para>Check if <varname>g</varname> is primitive in F<subscript>q</subscript>, the finite
+group of order <varname>q</varname>, where <varname>q</varname> is a prime.  If <varname>q</varname> is not 
prime results are bogus.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsPrimitiveModWithPrimeFactors">
+         <term>IsPrimitiveModWithPrimeFactors</term>
+         <listitem>
+          <synopsis>IsPrimitiveModWithPrimeFactors (g,q,f)</synopsis>
+          <para>Check if <varname>g</varname> is primitive in F<subscript>q</subscript>, the finite
+group of order <varname>q</varname>, where <varname>q</varname> is a prime and
+<varname>f</varname> is a vector of prime factors of <varname>q</varname>-1.
+If <varname>q</varname> is not prime results are bogus.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsPseudoprime">
+         <term>IsPseudoprime</term>
+         <listitem>
+          <synopsis>IsPseudoprime (n,b)</synopsis>
+          <para>If <varname>n</varname> is a pseudoprime base <varname>b</varname> but not a prime,
+that is if <userinput>b^(n-1) == 1 mod n</userinput>.  This calls the 
<function>PseudoprimeTest</function></para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsStrongPseudoprime">
+         <term>IsStrongPseudoprime</term>
+         <listitem>
+          <synopsis>IsStrongPseudoprime (n,b)</synopsis>
+          <para>Test if <varname>n</varname> is a strong pseudoprime to base <varname>b</varname> but not a 
prime.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Jacobi">
+         <term>Jacobi</term>
+         <listitem>
+          <synopsis>Jacobi (a,b)</synopsis>
+          <para>Aliases: <function>JacobiSymbol</function></para>
+          <para>Calculate the Jacobi symbol (a/b) (b should be odd).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-JacobiKronecker">
+         <term>JacobiKronecker</term>
+         <listitem>
+          <synopsis>JacobiKronecker (a,b)</synopsis>
+          <para>Aliases: <function>JacobiKroneckerSymbol</function></para>
+          <para>Calculate the Jacobi symbol (a/b) with the Kronecker extension (a/2)=(2/a) when a odd, or 
(a/2)=0 when a even.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-LeastAbsoluteResidue">
+         <term>LeastAbsoluteResidue</term>
+         <listitem>
+          <synopsis>LeastAbsoluteResidue (a,n)</synopsis>
+          <para>Return the residue of <varname>a</varname> mod <varname>n</varname> with the least absolute 
value (in the interval -n/2 to n/2).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Legendre">
+         <term>Legendre</term>
+         <listitem>
+          <synopsis>Legendre (a,p)</synopsis>
+          <para>Aliases: <function>LegendreSymbol</function></para>
+          <para>Calculate the Legendre symbol (a/p).</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/LegendreSymbol.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/LegendreSymbol.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-LucasLehmer">
+         <term>LucasLehmer</term>
+         <listitem>
+          <synopsis>LucasLehmer (p)</synopsis>
+          <para>Test if 2<superscript>p</superscript>-1 is a Mersenne prime using the Lucas-Lehmer test.
+           See also
+           <link linkend='gel-function-MersennePrimeExponents'>MersennePrimeExponents</link>
+           and
+           <link linkend='gel-function-IsMersennePrimeExponent'>IsMersennePrimeExponent</link>.
+          </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/LucasLhemer.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/Lucas-LehmerTest.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-LucasNumber">
+         <term>LucasNumber</term>
+         <listitem>
+          <synopsis>LucasNumber (n)</synopsis>
+          <para>Returns the <varname>n</varname>th Lucas number.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Lucas_number";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/LucasNumbers.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/LucasNumber.html";>Mathworld</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MaximalPrimePowerFactors">
+         <term>MaximalPrimePowerFactors</term>
+         <listitem>
+          <synopsis>MaximalPrimePowerFactors (n)</synopsis>
+          <para>Return all maximal prime power factors of a number.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MersennePrimeExponents">
+         <term>MersennePrimeExponents</term>
+         <listitem>
+          <synopsis>MersennePrimeExponents</synopsis>
+          <para>
+           A vector of known Mersenne prime exponents, that is
+           a list of positive integers
+           <varname>p</varname> such that
+            2<superscript>p</superscript>-1 is a prime.
+           See also
+           <link linkend='gel-function-IsMersennePrimeExponent'>IsMersennePrimeExponent</link>
+           and
+           <link linkend='gel-function-LucasLehmer'>LucasLehmer</link>.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Mersenne_prime";>Wikipedia</ulink>,
+           <ulink url="http://planetmath.org/encyclopedia/MersenneNumbers.html";>Planetmath</ulink>,
+           <ulink url="http://mathworld.wolfram.com/MersennePrime.html";>Mathworld</ulink> or 
+           <ulink url="http://www.mersenne.org/";>GIMPS</ulink>
+ for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MillerRabinTest">
+         <term>MillerRabinTest</term>
+         <listitem>
+          <synopsis>MillerRabinTest (n,reps)</synopsis>
+          <para>
+           Use the Miller-Rabin primality test on <varname>n</varname>,
+           <varname>reps</varname> number of times.  The probability of false
+           positive is <userinput>(1/4)^reps</userinput>.  It is probably
+           usually better to use
+           <link linkend='gel-function-IsPrime'>
+           <function>IsPrime</function></link> since that is faster and
+           better on smaller integers.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/MillerRabinPrimeTest.html";>Planetmath</ulink> or
+           <ulink 
url="http://mathworld.wolfram.com/Rabin-MillerStrongPseudoprimeTest.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MillerRabinTestSure">
+         <term>MillerRabinTestSure</term>
+         <listitem>
+          <synopsis>MillerRabinTestSure (n)</synopsis>
+          <para>
+           Use the Miller-Rabin primality test on <varname>n</varname> with
+           enough bases that assuming the Generalized Reimann Hypothesis the
+           result is deterministic.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/MillerRabinPrimeTest.html";>Planetmath</ulink> or
+           <ulink 
url="http://mathworld.wolfram.com/Rabin-MillerStrongPseudoprimeTest.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ModInvert">
+         <term>ModInvert</term>
+         <listitem>
+          <synopsis>ModInvert (n,m)</synopsis>
+          <para>Returns inverse of n mod m.</para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/ModularInverse.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MoebiusMu">
+         <term>MoebiusMu</term>
+         <listitem>
+          <synopsis>MoebiusMu (n)</synopsis>
+          <para>
+           Return the Moebius mu function evaluated in <varname>n</varname>.
+           That is, it returns 0 if <varname>n</varname> is not a product
+           of distinct primes and <userinput>(-1)^k</userinput> if it is
+           a product of <varname>k</varname> distinct primes.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/MoebiusFunction.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/MoebiusFunction.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NextPrime">
+         <term>NextPrime</term>
+         <listitem>
+          <synopsis>NextPrime (n)</synopsis>
+          <para>
+           Returns the least prime greater than <varname>n</varname>.
+           Negatives of primes are considered prime and so to get the
+           previous prime you can use <userinput>-NextPrime(-n)</userinput>.
+         </para>
+          <para>
+           This function uses the GMP's <function>mpz_nextprime</function>
+           which in turn uses the probabilistic Miller-Rabin test
+           (See also <link linkend="gel-function-MillerRabinTest">MillerRabinTest</link>).
+           The probability
+           of false positive is not tunable, but is low enough
+           for all practical purposes.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/PrimeNumber.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/PrimeNumber.html";>Mathworld</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PadicValuation">
+         <term>PadicValuation</term>
+         <listitem>
+          <synopsis>PadicValuation (n,p)</synopsis>
+          <para>Returns the p-adic valuation (number of trailing zeros in base <varname>p</varname>).</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/PAdicValuation.html";>Planetmath</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PowerMod">
+         <term>PowerMod</term>
+         <listitem>
+          <synopsis>PowerMod (a,b,m)</synopsis>
+          <para>
+           Compute <userinput>a^b mod m</userinput>.  The
+           <varname>b</varname>'s power of <varname>a</varname> modulo
+           <varname>m</varname>.  It is not neccessary to use this function
+           as it is automatically used in modulo mode.  Hence
+           <userinput>a^b mod m</userinput> is just as fast.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Prime">
+         <term>Prime</term>
+         <listitem>
+          <synopsis>Prime (n)</synopsis>
+          <para>Aliases: <function>prime</function></para>
+          <para>Return the <varname>n</varname>th prime (up to a limit).</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/PrimeNumber.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/PrimeNumber.html";>Mathworld</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PrimeFactors">
+         <term>PrimeFactors</term>
+         <listitem>
+          <synopsis>PrimeFactors (n)</synopsis>
+          <para>Return all prime factors of a number as a vector.</para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/PrimeFactor.html";>Mathworld</ulink> for more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PseudoprimeTest">
+         <term>PseudoprimeTest</term>
+         <listitem>
+          <synopsis>PseudoprimeTest (n,b)</synopsis>
+         <para>Pseudoprime test, returns <constant>true</constant> if and only if
+               <userinput>b^(n-1) == 1  mod n</userinput></para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/Pseudoprime.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/Pseudoprime.html";>Mathworld</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RemoveFactor">
+         <term>RemoveFactor</term>
+         <listitem>
+          <synopsis>RemoveFactor (n,m)</synopsis>
+          <para>Removes all instances of the factor <varname>m</varname> from the number 
<varname>n</varname>.  That is divides by the largest power of <varname>m</varname>, that divides 
<varname>n</varname>.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/Divisibility.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/Factor.html";>Mathworld</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SilverPohligHellmanWithFactorization">
+         <term>SilverPohligHellmanWithFactorization</term>
+         <listitem>
+          <synopsis>SilverPohligHellmanWithFactorization (n,b,q,f)</synopsis>
+          <para>Find discrete log of <varname>n</varname> base <varname>b</varname> in 
F<subscript>q</subscript>, the finite group of order <varname>q</varname>, where <varname>q</varname> is a 
prime using the Silver-Pohlig-Hellman algorithm, given <varname>f</varname> being the factorization of 
<varname>q</varname>-1.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SqrtModPrime">
+         <term>SqrtModPrime</term>
+         <listitem>
+          <synopsis>SqrtModPrime (n,p)</synopsis>
+          <para>Find square root of <varname>n</varname> modulo <varname>p</varname> (where 
<varname>p</varname> is a prime).  Null is returned if not a quadratic residue.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/QuadraticResidue.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/QuadraticResidue.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-StrongPseudoprimeTest">
+         <term>StrongPseudoprimeTest</term>
+         <listitem>
+          <synopsis>StrongPseudoprimeTest (n,b)</synopsis>
+          <para>Run the strong pseudoprime test base <varname>b</varname> on <varname>n</varname>.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/StrongPseudoprime.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/StrongPseudoprime.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-gcd">
+         <term>gcd</term>
+         <listitem>
+          <synopsis>gcd (a,args...)</synopsis>
+          <para>Aliases: <function>GCD</function></para>
+          <para>
+           Greatest common divisor of integers.  You can enter as many
+           integers in the argument list, or you can give a vector or a matrix
+           of integers.  If you give more than one matrix of the same
+           size then GCD is done element by element.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/GreatestCommonDivisor.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/GreatestCommonDivisor.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-lcm">
+         <term>lcm</term>
+         <listitem>
+          <synopsis>lcm (a,args...)</synopsis>
+          <para>Aliases: <function>LCM</function></para>
+          <para>
+           Least common multiplier of integers.  You can enter as many
+           integers in the argument list, or you can give a vector or a matrix
+           of integers.  If you give more than one matrix of the same size
+           then LCM is done element by element.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/LeastCommonMultiple.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/LeastCommonMultiple.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-matrix">
+      <title>Matrix Manipulation</title>
+      <variablelist>
+        <varlistentry id="gel-function-ApplyOverMatrix">
+         <term>ApplyOverMatrix</term>
+         <listitem>
+          <synopsis>ApplyOverMatrix (a,func)</synopsis>
+          <para>Apply a function over all entries of a matrix and return a matrix of the results.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ApplyOverMatrix2">
+         <term>ApplyOverMatrix2</term>
+         <listitem>
+          <synopsis>ApplyOverMatrix2 (a,b,func)</synopsis>
+          <para>Apply a function over all entries of 2 matrices (or 1 value and 1 matrix) and return a 
matrix of the results.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ColumnsOf">
+         <term>ColumnsOf</term>
+         <listitem>
+          <synopsis>ColumnsOf (M)</synopsis>
+          <para>Gets the columns of a matrix as a horizontal vector.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ComplementSubmatrix">
+         <term>ComplementSubmatrix</term>
+         <listitem>
+          <synopsis>ComplementSubmatrix (m,r,c)</synopsis>
+          <para>Remove column(s) and row(s) from a matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-CompoundMatrix">
+         <term>CompoundMatrix</term>
+         <listitem>
+          <synopsis>CompoundMatrix (k,A)</synopsis>
+          <para>Calculate the kth compound matrix of A.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-CountZeroColumns">
+         <term>CountZeroColumns</term>
+         <listitem>
+          <synopsis>CountZeroColumns (M)</synopsis>
+          <para>
+          Count the number of zero columns in a matrix.  For example
+          once your column reduce a matrix you can use this to find
+          the nullity.  See <link linkend="gel-function-cref"><function>cref</function></link>
+          and <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>Delete a column of a matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DeleteRow">
+         <term>DeleteRow</term>
+         <listitem>
+          <synopsis>DeleteRow (M,row)</synopsis>
+          <para>Delete a row of a matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DiagonalOf">
+         <term>DiagonalOf</term>
+         <listitem>
+          <synopsis>DiagonalOf (M)</synopsis>
+          <para>Gets the diagonal entries of a matrix as a column vector.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Diagonal_of_a_matrix#Matrices";>Wikipedia</ulink> for 
more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DotProduct">
+         <term>DotProduct</term>
+         <listitem>
+          <synopsis>DotProduct (u,v)</synopsis>
+         <para>Get the dot product of two vectors.  The vectors must be of the
+same size.  No conjugates are taken so this is a bilinear form even if working over the complex 
numbers.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/DotProduct.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ExpandMatrix">
+         <term>ExpandMatrix</term>
+         <listitem>
+          <synopsis>ExpandMatrix (M)</synopsis>
+          <para>
+           Expands a matrix just like we do on unquoted matrix input.
+           That is we expand any internal matrices as blocks.  This is
+           a way to construct matrices out of smaller ones and this is
+           normally done automatically on input unless the matrix is quoted.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-HermitianProduct">
+         <term>HermitianProduct</term>
+         <listitem>
+          <synopsis>HermitianProduct (u,v)</synopsis>
+          <para>Aliases: <function>InnerProduct</function></para>
+          <para>Get the Hermitian product of two vectors.  The vectors must be of the same size.  This is a 
sesquilinear form using the identity matrix.</para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/HermitianInnerProduct.html";>Mathworld</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-I">
+         <term>I</term>
+         <listitem>
+          <synopsis>I (n)</synopsis>
+          <para>Aliases: <function>eye</function></para>
+         <para>Return an identity matrix of a given size, that is <varname>n</varname> by 
<varname>n</varname>.  If <varname>n</varname> is zero, returns <constant>null</constant>.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/IdentityMatrix.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IndexComplement">
+         <term>IndexComplement</term>
+         <listitem>
+          <synopsis>IndexComplement (vec,msize)</synopsis>
+          <para>Return the index complement of a vector of indexes.  Everything is one based.  For example 
for vector <userinput>[2,3]</userinput> and size
+<userinput>5</userinput>, we return <userinput>[1,4,5]</userinput>.  If
+<varname>msize</varname> is 0, we always return <constant>null</constant>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsDiagonal">
+         <term>IsDiagonal</term>
+         <listitem>
+          <synopsis>IsDiagonal (M)</synopsis>
+          <para>Is a matrix diagonal.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Diagonal_matrix";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/DiagonalMatrix.html";>Planetmath</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsIdentity">
+         <term>IsIdentity</term>
+         <listitem>
+          <synopsis>IsIdentity (x)</synopsis>
+          <para>Check if a matrix is the identity matrix.  Automatically returns <constant>false</constant>
+           if the matrix is not square.  Also works on numbers, in which
+           case it is equivalent to <userinput>x==1</userinput>.  When <varname>x</varname> is
+           <constant>null</constant> (we could think of that as a 0 by 0 matrix),
+           no error is generated and <constant>false</constant> is returned.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsLowerTriangular">
+         <term>IsLowerTriangular</term>
+         <listitem>
+          <synopsis>IsLowerTriangular (M)</synopsis>
+          <para>Is a matrix lower triangular. That is, are all the entries above the diagonal zero.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsMatrixInteger">
+         <term>IsMatrixInteger</term>
+         <listitem>
+          <synopsis>IsMatrixInteger (M)</synopsis>
+          <para>Check if a matrix is a matrix of an integers (non-complex).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsMatrixNonnegative">
+         <term>IsMatrixNonnegative</term>
+         <listitem>
+          <synopsis>IsMatrixNonnegative (M)</synopsis>
+          <para>Check if a matrix is non-negative, that is if each element is non-negative.
+         Do not confuse positive matrices with positive semi-definite matrices.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Positive_matrix";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsMatrixPositive">
+         <term>IsMatrixPositive</term>
+         <listitem>
+          <synopsis>IsMatrixPositive (M)</synopsis>
+         <para>Check if a matrix is positive, that is if each element is
+positive (and hence real).  In particular, no element is 0.  Do not confuse
+positive matrices with positive definite matrices.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Positive_matrix";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsMatrixRational">
+         <term>IsMatrixRational</term>
+         <listitem>
+          <synopsis>IsMatrixRational (M)</synopsis>
+          <para>Check if a matrix is a matrix of rational (non-complex)
+numbers.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsMatrixReal">
+         <term>IsMatrixReal</term>
+         <listitem>
+          <synopsis>IsMatrixReal (M)</synopsis>
+          <para>Check if a matrix is a matrix of real (non-complex) numbers.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsMatrixSquare">
+         <term>IsMatrixSquare</term>
+         <listitem>
+          <synopsis>IsMatrixSquare (M)</synopsis>
+          <para>
+           Check if a matrix is square, that is its width is equal to
+           its height.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsUpperTriangular">
+         <term>IsUpperTriangular</term>
+         <listitem>
+          <synopsis>IsUpperTriangular (M)</synopsis>
+          <para>Is a matrix upper triangular?  That is, a matrix is upper triangular if all the entries 
below the diagonal are zero.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsValueOnly">
+         <term>IsValueOnly</term>
+         <listitem>
+          <synopsis>IsValueOnly (M)</synopsis>
+          <para>Check if a matrix is a matrix of numbers only.  Many internal
+functions make this check.  Values can be any number including complex numbers.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsVector">
+         <term>IsVector</term>
+         <listitem>
+          <synopsis>IsVector (v)</synopsis>
+          <para>
+           Is argument a horizontal or a vertical vector.  Genius does
+           not distinguish between a matrix and a vector and a vector
+           is just a 1 by <varname>n</varname> or <varname>n</varname> by 1 matrix.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsZero">
+         <term>IsZero</term>
+         <listitem>
+          <synopsis>IsZero (x)</synopsis>
+          <para>Check if a matrix is composed of all zeros.  Also works on numbers, in which
+           case it is equivalent to <userinput>x==0</userinput>.  When <varname>x</varname> is
+           <constant>null</constant> (we could think of that as a 0 by 0 matrix),
+           no error is generated and <constant>true</constant> is returned as the condition is
+           vacuous.
+           </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-LowerTriangular">
+         <term>LowerTriangular</term>
+         <listitem>
+          <synopsis>LowerTriangular (M)</synopsis>
+          <para>Returns a copy of the matrix <varname>M</varname> with all the entries above the diagonal 
set to zero.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MakeDiagonal">
+         <term>MakeDiagonal</term>
+         <listitem>
+          <synopsis>MakeDiagonal (v,arg...)</synopsis>
+          <para>Aliases: <function>diag</function></para>
+         <para>Make diagonal matrix from a vector.  Alternatively you can pass
+                 in the values to put on the diagonal as arguments.  So
+                 <userinput>MakeDiagonal([1,2,3])</userinput> is the same as
+                 <userinput>MakeDiagonal(1,2,3)</userinput>.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Diagonal_matrix";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/DiagonalMatrix.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MakeVector">
+         <term>MakeVector</term>
+         <listitem>
+          <synopsis>MakeVector (A)</synopsis>
+          <para>Make column vector out of matrix by putting columns above
+                 each other.  Returns <constant>null</constant> when given <constant>null</constant>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MatrixProduct">
+         <term>MatrixProduct</term>
+         <listitem>
+          <synopsis>MatrixProduct (A)</synopsis>
+          <para>
+           Calculate the product of all elements in a matrix or vector.
+           That is we multiply all the elements and return a number that
+           is the product of all the elements.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MatrixSum">
+         <term>MatrixSum</term>
+         <listitem>
+          <synopsis>MatrixSum (A)</synopsis>
+          <para>
+           Calculate the sum of all elements in a matrix or vector.  That is
+           we add all the elements and return a number that is the
+           sum of all the elements.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MatrixSumSquares">
+         <term>MatrixSumSquares</term>
+         <listitem>
+          <synopsis>MatrixSumSquares (A)</synopsis>
+          <para>Calculate the sum of squares of all elements in a matrix
+           or vector.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-OuterProduct">
+         <term>OuterProduct</term>
+         <listitem>
+          <synopsis>OuterProduct (u,v)</synopsis>
+          <para>Get the outer product of two vectors.  That is, suppose that
+<varname>u</varname> and <varname>v</varname> are vertical vectors, then
+the outer product is <userinput>v * u.'</userinput>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ReverseVector">
+         <term>ReverseVector</term>
+         <listitem>
+          <synopsis>ReverseVector (v)</synopsis>
+         <para>Reverse elements in a vector.  Return <constant>null</constant> if given 
<constant>null</constant></para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RowSum">
+         <term>RowSum</term>
+         <listitem>
+          <synopsis>RowSum (m)</synopsis>
+          <para>Calculate sum of each row in a matrix and return a vertical
+vector with the result.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RowSumSquares">
+         <term>RowSumSquares</term>
+         <listitem>
+          <synopsis>RowSumSquares (m)</synopsis>
+          <para>Calculate sum of squares of each row in a matrix and return a vertical vector with the 
results.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RowsOf">
+         <term>RowsOf</term>
+         <listitem>
+          <synopsis>RowsOf (M)</synopsis>
+         <para>Gets the rows of a matrix as a vertical vector.  Each element
+of the vector is a horizontal vector which is the corresponding row of
+<varname>M</varname>.  This function is useful if you wish to loop over the
+rows of a matrix.  For example, as <userinput>for r in RowsOf(M) do
+something(r)</userinput>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SetMatrixSize">
+         <term>SetMatrixSize</term>
+         <listitem>
+          <synopsis>SetMatrixSize (M,rows,columns)</synopsis>
+          <para>Make new matrix of given size from old one.  That is, a new
+         matrix will be returned to which the old one is copied.  Entries that
+         don't fit are clipped and extra space is filled with zeros.
+         If <varname>rows</varname> or <varname>columns</varname> are zero
+         then <constant>null</constant> is returned.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ShuffleVector">
+         <term>ShuffleVector</term>
+         <listitem>
+          <synopsis>ShuffleVector (v)</synopsis>
+         <para>Shuffle elements in a vector.  Return <constant>null</constant> if given 
<constant>null</constant></para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SortVector">
+         <term>SortVector</term>
+         <listitem>
+          <synopsis>SortVector (v)</synopsis>
+          <para>Sort vector elements in an increasing order.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-StripZeroColumns">
+         <term>StripZeroColumns</term>
+         <listitem>
+          <synopsis>StripZeroColumns (M)</synopsis>
+          <para>Removes any all-zero columns of <varname>M</varname>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-StripZeroRows">
+         <term>StripZeroRows</term>
+         <listitem>
+          <synopsis>StripZeroRows (M)</synopsis>
+          <para>Removes any all-zero rows of <varname>M</varname>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Submatrix">
+         <term>Submatrix</term>
+         <listitem>
+          <synopsis>Submatrix (m,r,c)</synopsis>
+          <para>Return column(s) and row(s) from a matrix.  This is
+just equivalent to <userinput>m@(r,c)</userinput>.  <varname>r</varname>
+and <varname>c</varname> should be vectors of rows and columns (or single numbers if only one row or column 
is needed).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SwapRows">
+         <term>SwapRows</term>
+         <listitem>
+          <synopsis>SwapRows (m,row1,row2)</synopsis>
+          <para>Swap two rows in a matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-UpperTriangular">
+         <term>UpperTriangular</term>
+         <listitem>
+          <synopsis>UpperTriangular (M)</synopsis>
+          <para>Returns a copy of the matrix <varname>M</varname> with all the entries below the diagonal 
set to zero.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-columns">
+         <term>columns</term>
+         <listitem>
+          <synopsis>columns (M)</synopsis>
+          <para>Get the number of columns of a matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-elements">
+         <term>elements</term>
+         <listitem>
+          <synopsis>elements (M)</synopsis>
+          <para>Get the total number of elements of a matrix.  This is the
+number of columns times the number of rows.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ones">
+         <term>ones</term>
+         <listitem>
+          <synopsis>ones (rows,columns...)</synopsis>
+         <para>Make an matrix of all ones (or a row vector if only one argument is given).  Returns 
<constant>null</constant> if either rows or columns are zero.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-rows">
+         <term>rows</term>
+         <listitem>
+          <synopsis>rows (M)</synopsis>
+          <para>Get the number of rows of a matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-zeros">
+         <term>zeros</term>
+         <listitem>
+          <synopsis>zeros (rows,columns...)</synopsis>
+         <para>Make a matrix of all zeros (or a row vector if only one argument is given).  Returns 
<constant>null</constant> if either rows or columns are zero.</para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-linear-algebra">
+      <title>Linear Algebra</title>
+      <variablelist>
+        <varlistentry id="gel-function-AuxiliaryUnitMatrix">
+         <term>AuxiliaryUnitMatrix</term>
+         <listitem>
+          <synopsis>AuxiliaryUnitMatrix (n)</synopsis>
+          <para>Get the auxiliary unit matrix of size <varname>n</varname>.  This is a square matrix matrix 
with that is all zero except the
+superdiagonal being all ones.  It is the Jordan block matrix of one zero eigenvalue.</para>
+          <para>
+           See
+           <ulink 
url="http://planetmath.org/encyclopedia/JordanCanonicalFormTheorem.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/JordanBlock.html";>Mathworld</ulink> for more information 
on Jordan Cannonical Form.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-BilinearForm">
+         <term>BilinearForm</term>
+         <listitem>
+          <synopsis>BilinearForm (v,A,w)</synopsis>
+          <para>Evaluate (v,w) with respect to the bilinear form given by the matrix A.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-BilinearFormFunction">
+         <term>BilinearFormFunction</term>
+         <listitem>
+          <synopsis>BilinearFormFunction (A)</synopsis>
+          <para>Return a function that evaluates two vectors with respect to the bilinear form given by 
A.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-CharacteristicPolynomial">
+         <term>CharacteristicPolynomial</term>
+         <listitem>
+          <synopsis>CharacteristicPolynomial (M)</synopsis>
+          <para>Aliases: <function>CharPoly</function></para>
+         <para>Get the characteristic polynomial as a vector.  That is, return
+the coefficients of the polynomial starting with the constant term.  This is
+the polynomial defined by <userinput>det(M-xI)</userinput>.  The roots of this
+polynomial are the eigenvalues of <varname>M</varname>.
+See also <link 
linkend="gel-function-CharacteristicPolynomialFunction">CharacteristicPolynomialFunction</link>.
+</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/CharacteristicEquation.html";>Planetmath</ulink> 
for more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-CharacteristicPolynomialFunction">
+         <term>CharacteristicPolynomialFunction</term>
+         <listitem>
+          <synopsis>CharacteristicPolynomialFunction (M)</synopsis>
+         <para>Get the characteristic polynomial as a function.  This is
+the polynomial defined by <userinput>det(M-xI)</userinput>.  The roots of this
+polynomial are the eigenvalues of <varname>M</varname>.
+See also <link linkend="gel-function-CharacteristicPolynomial">CharacteristicPolynomial</link>.
+</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/CharacteristicEquation.html";>Planetmath</ulink> 
for more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ColumnSpace">
+         <term>ColumnSpace</term>
+         <listitem>
+          <synopsis>ColumnSpace (M)</synopsis>
+         <para>Get a basis matrix for the columnspace of a matrix.  That is,
+return a matrix whose columns are the basis for the column space of
+<varname>M</varname>.  That is the space spanned by the columns of
+<varname>M</varname>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-CommutationMatrix">
+         <term>CommutationMatrix</term>
+         <listitem>
+          <synopsis>CommutationMatrix (m, n)</synopsis>
+         <para>Return the commutation matrix K(m,n) which is the unique m*n by
+m*n matrix such that K(m,n) * MakeVector(A) = MakeVector(A.') for all m by n
+matrices A.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-CompanionMatrix">
+         <term>CompanionMatrix</term>
+         <listitem>
+          <synopsis>CompanionMatrix (p)</synopsis>
+          <para>Companion matrix of a polynomial (as vector).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ConjugateTranspose">
+         <term>ConjugateTranspose</term>
+         <listitem>
+          <synopsis>ConjugateTranspose (M)</synopsis>
+          <para>Conjugate transpose of a matrix (adjoint).  This is the
+         same as the <userinput>'</userinput> operator.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/ConjugateTranspose.html";>Planetmath</ulink> for 
more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Convolution">
+         <term>Convolution</term>
+         <listitem>
+          <synopsis>Convolution (a,b)</synopsis>
+          <para>Aliases: <function>convol</function></para>
+          <para>Calculate convolution of two horizontal vectors.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ConvolutionVector">
+         <term>ConvolutionVector</term>
+         <listitem>
+          <synopsis>ConvolutionVector (a,b)</synopsis>
+          <para>Calculate convolution of two horizontal vectors.  Return
+result as a vector and not added together.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-CrossProduct">
+         <term>CrossProduct</term>
+         <listitem>
+          <synopsis>CrossProduct (v,w)</synopsis>
+         <para>CrossProduct of two vectors in R<superscript>3</superscript> as
+                 a column vector.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DeterminantalDivisorsInteger">
+         <term>DeterminantalDivisorsInteger</term>
+         <listitem>
+          <synopsis>DeterminantalDivisorsInteger (M)</synopsis>
+          <para>Get the determinantal divisors of an integer matrix (not its characteristic).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DirectSum">
+         <term>DirectSum</term>
+         <listitem>
+          <synopsis>DirectSum (M,N...)</synopsis>
+          <para>Direct sum of matrices.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DirectSumMatrixVector">
+         <term>DirectSumMatrixVector</term>
+         <listitem>
+          <synopsis>DirectSumMatrixVector (v)</synopsis>
+          <para>Direct sum of a vector of matrices.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Eigenvalues">
+         <term>Eigenvalues</term>
+         <listitem>
+          <synopsis>Eigenvalues (M)</synopsis>
+          <para>Aliases: <function>eig</function></para>
+          <para>Get the eigenvalues of a square matrix.
+           Currently only works for matrices of size up to 4 by 4, or for
+           triangular matrices (for which the eigenvalues are on the
+            diagonal).
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Eigenvalue";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/Eigenvalue.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/Eigenvalue.html";>Mathworld</ulink> for more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Eigenvectors">
+         <term>Eigenvectors</term>
+         <listitem>
+          <synopsis>Eigenvectors (M)</synopsis>
+          <synopsis>Eigenvectors (M, &amp;eigenvalues)</synopsis>
+          <synopsis>Eigenvectors (M, &amp;eigenvalues, &amp;multiplicities)</synopsis>
+         <para>Get the eigenvectors of a square matrix.  Optionally get also
+the eigenvalues and their algebraic multiplicities.
+           Currently only works for matrices of size up to 2 by 2.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Eigenvector";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/Eigenvector.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/Eigenvector.html";>Mathworld</ulink> for more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-GramSchmidt">
+         <term>GramSchmidt</term>
+         <listitem>
+          <synopsis>GramSchmidt (v,B...)</synopsis>
+         <para>Apply the Gram-Schmidt process (to the columns) with respect to
+inner product given by <varname>B</varname>.  If <varname>B</varname> is not
+given then the standard Hermitian product is used.  <varname>B</varname> can
+either be a sesquilinear function of two arguments or it can be a matrix giving
+a sesquilinear form.  The vectors will be made orthonormal with respect to
+<varname>B</varname>.</para>
+          <para>
+           See
+           <ulink 
url="http://planetmath.org/encyclopedia/GramSchmidtOrthogonalization.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-HankelMatrix">
+         <term>HankelMatrix</term>
+         <listitem>
+          <synopsis>HankelMatrix (c,r)</synopsis>
+          <para>Hankel matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-HilbertMatrix">
+         <term>HilbertMatrix</term>
+         <listitem>
+          <synopsis>HilbertMatrix (n)</synopsis>
+          <para>Hilbert matrix of order <varname>n</varname>.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/HilbertMatrix.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Image">
+         <term>Image</term>
+         <listitem>
+          <synopsis>Image (T)</synopsis>
+          <para>Get the image (columnspace) of a linear transform.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-InfNorm">
+         <term>InfNorm</term>
+         <listitem>
+          <synopsis>InfNorm (v)</synopsis>
+          <para>Get the Inf Norm of a vector, sometimes called the sup norm or the max norm.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-InvariantFactorsInteger">
+         <term>InvariantFactorsInteger</term>
+         <listitem>
+          <synopsis>InvariantFactorsInteger (M)</synopsis>
+          <para>Get the invariant factors of a square integer matrix (not its characteristic).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-InverseHilbertMatrix">
+         <term>InverseHilbertMatrix</term>
+         <listitem>
+          <synopsis>InverseHilbertMatrix (n)</synopsis>
+          <para>Inverse Hilbert matrix of order <varname>n</varname>.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/HilbertMatrix.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsHermitian">
+         <term>IsHermitian</term>
+         <listitem>
+          <synopsis>IsHermitian (M)</synopsis>
+          <para>Is a matrix Hermitian.  That is, is it equal to its conjugate transpose.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/HermitianMatrix.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsInSubspace">
+         <term>IsInSubspace</term>
+         <listitem>
+          <synopsis>IsInSubspace (v,W)</synopsis>
+          <para>Test if a vector is in a subspace.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsInvertible">
+         <term>IsInvertible</term>
+         <listitem>
+          <synopsis>IsInvertible (n)</synopsis>
+          <para>Is a matrix (or number) invertible (Integer matrix is invertible if and only if it is 
invertible over the integers).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsInvertibleField">
+         <term>IsInvertibleField</term>
+         <listitem>
+          <synopsis>IsInvertibleField (n)</synopsis>
+          <para>Is a matrix (or number) invertible over a field.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsNormal">
+         <term>IsNormal</term>
+         <listitem>
+          <synopsis>IsNormal (M)</synopsis>
+          <para>Is <varname>M</varname> a normal matrix.  That is,
+         does <userinput>M*M' == M'*M</userinput>.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/NormalMatrix.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/NormalMatrix.html";>Mathworld</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsPositiveDefinite">
+         <term>IsPositiveDefinite</term>
+         <listitem>
+          <synopsis>IsPositiveDefinite (M)</synopsis>
+          <para>Is <varname>M</varname> a Hermitian positive definite matrix.  That is if
+<userinput>HermitianProduct(M*v,v)</userinput> is always strictly positive for
+any vector <varname>v</varname>.
+<varname>M</varname> must be square and Hermitian to be positive definite.
+The check that is performed is that every principal submatrix has a non-negative
+determinant.
+(See <link linkend="gel-function-HermitianProduct">HermitianProduct</link>)</para>
+         <para>
+           Note that some authors (for example Mathworld) do not require that
+           <varname>M</varname> be Hermitian, and then the condition is
+           on the real part of the inner product, but we do not take this
+           view.  If you wish to perform this check, just check the
+           Hermitian part of the matrix <varname>M</varname> as follows:
+           <userinput>IsPositiveDefinite(M+M')</userinput>.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/PositiveDefinite.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/PositiveDefiniteMatrix.html";>Mathworld</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsPositiveSemidefinite">
+         <term>IsPositiveSemidefinite</term>
+         <listitem>
+          <synopsis>IsPositiveSemidefinite (M)</synopsis>
+          <para>Is <varname>M</varname> a Hermitian positive semidefinite matrix.  That is if
+<userinput>HermitianProduct(M*v,v)</userinput> is always non-negative for
+any vector <varname>v</varname>.
+<varname>M</varname> must be square and Hermitian to be positive semidefinite.
+The check that is performed is that every principal submatrix has a non-negative
+determinant.
+(See <link linkend="gel-function-HermitianProduct">HermitianProduct</link>)</para>
+         <para>
+           Note that some authors do not require that
+           <varname>M</varname> be Hermitian, and then the condition is
+           on the real part of the inner product, but we do not take this
+           view.  If you wish to perform this check, just check the
+           Hermitian part of the matrix <varname>M</varname> as follows:
+           <userinput>IsPositiveSemidefinite(M+M')</userinput>.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/PositiveSemidefinite.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/PositiveSemidefiniteMatrix.html";>Mathworld</ulink> for 
more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsSkewHermitian">
+         <term>IsSkewHermitian</term>
+         <listitem>
+          <synopsis>IsSkewHermitian (M)</synopsis>
+          <para>Is a matrix skew-Hermitian.  That is, is the conjugate transpose equal to negative of the 
matrix.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/SkewHermitianMatrix.html";>Planetmath</ulink> for 
more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsUnitary">
+         <term>IsUnitary</term>
+         <listitem>
+          <synopsis>IsUnitary (M)</synopsis>
+          <para>Is a matrix unitary?  That is, does
+         <userinput>M'*M</userinput> and <userinput>M*M'</userinput>
+         equal the identity.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/UnitaryTransformation.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/UnitaryMatrix.html";>Mathworld</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-JordanBlock">
+         <term>JordanBlock</term>
+         <listitem>
+          <synopsis>JordanBlock (n,lambda)</synopsis>
+          <para>Aliases: <function>J</function></para>
+          <para>Get the Jordan block corresponding to the eigenvalue
+         <varname>lambda</varname> with multiplicity <varname>n</varname>.
+         </para>
+          <para>
+           See
+           <ulink 
url="http://planetmath.org/encyclopedia/JordanCanonicalFormTheorem.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/JordanBlock.html";>Mathworld</ulink> for more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Kernel">
+         <term>Kernel</term>
+         <listitem>
+          <synopsis>Kernel (T)</synopsis>
+          <para>Get the kernel (nullspace) of a linear transform.</para>
+         <para>
+         (See <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>
+           Get the LU decomposition of <varname>A</varname>
+           and store the result in the <varname>L</varname> and
+           <varname>U</varname> which should be references.  It returns <constant>true</constant>
+           if successful.
+           For example suppose that A is a square matrix, then after running:
+           <screen><prompt>genius></prompt> <userinput>LUDecomposition(A,&amp;L,&amp;U)</userinput>
+</screen>
+           You will have the lower matrix stored in a variable called
+           <varname>L</varname> and the upper matrix in a variable called
+           <varname>U</varname>.
+         </para>
+         <para>
+           This is the LU decomposition of a matrix aka Crout and/or Cholesky
+           reduction.
+           (ISBN 0-201-11577-8 pp.99-103)
+           The upper triangular matrix features a diagonal
+           of values 1 (one).  This is not Doolittle's Method which features
+           the 1's diagonal on the lower matrix. 
+         </para>
+         <para>
+           Not all matrices have LU decompositions, for example
+           <userinput>[0,1;1,0]</userinput> does not and this function returns
+           <constant>false</constant> in this case and sets <varname>L</varname>
+           and <varname>U</varname> to <constant>null</constant>.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/LUDecomposition.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/LUDecomposition.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Minor">
+         <term>Minor</term>
+         <listitem>
+          <synopsis>Minor (M,i,j)</synopsis>
+          <para>Get the <varname>i</varname>-<varname>j</varname> minor of a matrix.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/Minor.html";>Planetmath</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NonPivotColumns">
+         <term>NonPivotColumns</term>
+         <listitem>
+          <synopsis>NonPivotColumns (M)</synopsis>
+          <para>Return the columns that are not the pivot columns of a matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Norm">
+         <term>Norm</term>
+         <listitem>
+          <synopsis>Norm (v,p...)</synopsis>
+          <para>Aliases: <function>norm</function></para>
+          <para>Get the p Norm (or 2 Norm if no p is supplied) of a vector.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NullSpace">
+         <term>NullSpace</term>
+         <listitem>
+          <synopsis>NullSpace (T)</synopsis>
+          <para>Get the nullspace of a matrix.  That is the kernel of the
+         linear mapping that the matrix represents.  This is returned
+         as a matrix whose column space is the nullspace of
+         <varname>T</varname>.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/Nullspace.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Nullity">
+         <term>Nullity</term>
+         <listitem>
+          <synopsis>Nullity (M)</synopsis>
+          <para>Aliases: <function>nullity</function></para>
+          <para>Get the nullity of a matrix.  That is, return the dimension of
+the nullspace; the dimension of the kernel of <varname>M</varname>.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/Nullity.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-OrthogonalComplement">
+         <term>OrthogonalComplement</term>
+         <listitem>
+          <synopsis>OrthogonalComplement (M)</synopsis>
+          <para>Get the orthogonal complement of the columnspace.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PivotColumns">
+         <term>PivotColumns</term>
+         <listitem>
+          <synopsis>PivotColumns (M)</synopsis>
+          <para>Return pivot columns of a matrix, that is columns which have a leading 1 in row reduced 
form.  Also returns the row where they occur.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Projection">
+         <term>Projection</term>
+         <listitem>
+          <synopsis>Projection (v,W,B...)</synopsis>
+         <para>Projection of vector <varname>v</varname> onto subspace
+<varname>W</varname> with respect to inner product given by
+<varname>B</varname>.  If <varname>B</varname> is not given then the standard
+Hermitian product is used.  <varname>B</varname> can either be a sesquilinear
+function of two arguments or it can be a matrix giving a sesquilinear form.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-QRDecomposition">
+         <term>QRDecomposition</term>
+         <listitem>
+          <synopsis>QRDecomposition (A, Q)</synopsis>
+          <para>
+           Get the QR decomposition of a square matrix <varname>A</varname>,
+           returns the upper triangular matrix <varname>R</varname>
+           and sets <varname>Q</varname> to the orthogonal (unitary) matrix.
+           <varname>Q</varname> should be a reference or <constant>null</constant> if you don't
+           want any return.
+           For example:
+           <screen><prompt>genius></prompt> <userinput>R = QRDecomposition(A,&amp;Q)</userinput>
+</screen>
+           You will have the upper triangular matrix stored in
+           a variable called
+           <varname>R</varname> and the orthogonal (unitary) matrix stored in
+           <varname>Q</varname>.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/QRDecomposition.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/QRDecomposition.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RayleighQuotient">
+         <term>RayleighQuotient</term>
+         <listitem>
+          <synopsis>RayleighQuotient (A,x)</synopsis>
+          <para>Return the Rayleigh quotient (also called the Rayleigh-Ritz quotient or ratio) of a matrix 
and a vector.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/RayleighQuotient.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RayleighQuotientIteration">
+         <term>RayleighQuotientIteration</term>
+         <listitem>
+          <synopsis>RayleighQuotientIteration (A,x,epsilon,maxiter,vecref)</synopsis>
+          <para>Find eigenvalues of <varname>A</varname> using the Rayleigh
+               quotient iteration method.  <varname>x</varname> is a guess
+               at a eigenvector and could be random.  It should have 
+               nonzero imaginary part if it will have any chance at finding
+               complex eigenvalues.  The code will run at most
+               <varname>maxiter</varname> iterations and return <constant>null</constant>
+               if we cannot get within an error of <varname>epsilon</varname>.
+               <varname>vecref</varname> should either be <constant>null</constant> or a reference
+               to a variable where the eigenvector should be stored.
+               </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/RayleighQuotient.html";>Planetmath</ulink> for more 
information on Rayleigh quotient.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Rank">
+         <term>Rank</term>
+         <listitem>
+          <synopsis>Rank (M)</synopsis>
+          <para>Aliases: <function>rank</function></para>
+          <para>Get the rank of a matrix.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/SylvestersLaw.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RosserMatrix">
+         <term>RosserMatrix</term>
+         <listitem>
+          <synopsis>RosserMatrix ()</synopsis>
+          <para>Returns the Rosser matrix, which is a classic symmetric eigenvalue test problem.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Rotation2D">
+         <term>Rotation2D</term>
+         <listitem>
+          <synopsis>Rotation2D (angle)</synopsis>
+          <para>Aliases: <function>RotationMatrix</function></para>
+          <para>Return the matrix corresponding to rotation around origin in 
R<superscript>2</superscript>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Rotation3DX">
+         <term>Rotation3DX</term>
+         <listitem>
+          <synopsis>Rotation3DX (angle)</synopsis>
+          <para>Return the matrix corresponding to rotation around origin in R<superscript>3</superscript> 
about the x-axis.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Rotation3DY">
+         <term>Rotation3DY</term>
+         <listitem>
+          <synopsis>Rotation3DY (angle)</synopsis>
+          <para>Return the matrix corresponding to rotation around origin in R<superscript>3</superscript> 
about the y-axis.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Rotation3DZ">
+         <term>Rotation3DZ</term>
+         <listitem>
+          <synopsis>Rotation3DZ (angle)</synopsis>
+          <para>Return the matrix corresponding to rotation around origin in R<superscript>3</superscript> 
about the z-axis.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RowSpace">
+         <term>RowSpace</term>
+         <listitem>
+          <synopsis>RowSpace (M)</synopsis>
+          <para>Get a basis matrix for the rowspace of a matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SesquilinearForm">
+         <term>SesquilinearForm</term>
+         <listitem>
+          <synopsis>SesquilinearForm (v,A,w)</synopsis>
+          <para>Evaluate (v,w) with respect to the sesquilinear form given by the matrix A.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SesquilinearFormFunction">
+         <term>SesquilinearFormFunction</term>
+         <listitem>
+          <synopsis>SesquilinearFormFunction (A)</synopsis>
+          <para>Return a function that evaluates two vectors with respect to the sesquilinear form given by 
A.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SmithNormalFormField">
+         <term>SmithNormalFormField</term>
+         <listitem>
+          <synopsis>SmithNormalFormField (A)</synopsis>
+          <para>Smith Normal Form for fields (will end up with 1's on the diagonal).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SmithNormalFormInteger">
+         <term>SmithNormalFormInteger</term>
+         <listitem>
+          <synopsis>SmithNormalFormInteger (M)</synopsis>
+          <para>Smith Normal Form for square integer matrices (not its characteristic).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SolveLinearSystem">
+         <term>SolveLinearSystem</term>
+         <listitem>
+          <synopsis>SolveLinearSystem (M,V,args...)</synopsis>
+         <para>Solve linear system Mx=V, return solution V if there is a unique solution, 
<constant>null</constant> otherwise.  Extra two reference parameters can optionally be used to get the 
reduced M and V.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ToeplitzMatrix">
+         <term>ToeplitzMatrix</term>
+         <listitem>
+          <synopsis>ToeplitzMatrix (c, r...)</synopsis>
+         <para>Return the Toeplitz matrix constructed given the first column c
+and (optionally) the first row r.  If only the column c is given then it is
+conjugated and the nonconjugated version is used for the first row to give a
+Hermitian matrix (if the first element is real of course).</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/ToeplitzMatrix.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Trace">
+         <term>Trace</term>
+         <listitem>
+          <synopsis>Trace (M)</synopsis>
+          <para>Aliases: <function>trace</function></para>
+          <para>Calculate the trace of a matrix.  That is the sum of the diagonal elements.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/Trace.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Transpose">
+         <term>Transpose</term>
+         <listitem>
+          <synopsis>Transpose (M)</synopsis>
+          <para>Transpose of a matrix.  This is the same as the
+          <userinput>.'</userinput> operator.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/Transpose.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-VandermondeMatrix">
+         <term>VandermondeMatrix</term>
+         <listitem>
+          <synopsis>VandermondeMatrix (v)</synopsis>
+          <para>Aliases: <function>vander</function></para>
+          <para>Return the Vandermonde matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-VectorAngle">
+         <term>VectorAngle</term>
+         <listitem>
+          <synopsis>VectorAngle (v,w,B...)</synopsis>
+          <para>The angle of two vectors with respect to inner product given by
+<varname>B</varname>.  If <varname>B</varname> is not given then the standard
+Hermitian product is used.  <varname>B</varname> can either be a sesquilinear
+function of two arguments or it can be a matrix giving a sesquilinear form.
+</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-VectorSpaceDirectSum">
+         <term>VectorSpaceDirectSum</term>
+         <listitem>
+          <synopsis>VectorSpaceDirectSum (M,N)</synopsis>
+          <para>The direct sum of the vector spaces M and N.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-VectorSubspaceIntersection">
+         <term>VectorSubspaceIntersection</term>
+         <listitem>
+          <synopsis>VectorSubspaceIntersection (M,N)</synopsis>
+          <para>Intersection of the subspaces given by M and N.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-VectorSubspaceSum">
+         <term>VectorSubspaceSum</term>
+         <listitem>
+          <synopsis>VectorSubspaceSum (M,N)</synopsis>
+          <para>The sum of the vector spaces M and N, that is {w | w=m+n, m in M, n in N}.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-adj">
+         <term>adj</term>
+         <listitem>
+          <synopsis>adj (m)</synopsis>
+          <para>Aliases: <function>Adjugate</function></para>
+          <para>Get the classical adjoint (adjugate) of a matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-cref">
+         <term>cref</term>
+         <listitem>
+          <synopsis>cref (M)</synopsis>
+          <para>Aliases: <function>CREF</function> <function>ColumnReducedEchelonForm</function></para>
+          <para>Compute the Column Reduced Echelon Form.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-det">
+         <term>det</term>
+         <listitem>
+          <synopsis>det (M)</synopsis>
+          <para>Aliases: <function>Determinant</function></para>
+          <para>Get the determinant of a matrix.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Determinant";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/Determinant2.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ref">
+         <term>ref</term>
+         <listitem>
+          <synopsis>ref (M)</synopsis>
+          <para>Aliases: <function>REF</function> <function>RowEchelonForm</function></para>
+         <para>Get the row echelon form of a matrix.  That is, apply gaussian
+elimination but not backaddition to <varname>M</varname>.  The pivot rows are
+divided to make all pivots 1.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Row_echelon_form";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/RowEchelonForm.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-rref">
+         <term>rref</term>
+         <listitem>
+          <synopsis>rref (M)</synopsis>
+          <para>Aliases: <function>RREF</function> <function>ReducedRowEchelonForm</function></para>
+          <para>Get the reduced row echelon form of a matrix.  That is, apply gaussian elimination together 
with backaddition to <varname>M</varname>.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Reduced_row_echelon_form";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/ReducedRowEchelonForm.html";>Planetmath</ulink> for 
more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-combinatorics">
+      <title>Combinatorics</title>
+      <variablelist>
+        <varlistentry id="gel-function-Catalan">
+         <term>Catalan</term>
+         <listitem>
+          <synopsis>Catalan (n)</synopsis>
+          <para>Get <varname>n</varname>th Catalan number.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/CatalanNumbers.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Combinations">
+         <term>Combinations</term>
+         <listitem>
+          <synopsis>Combinations (k,n)</synopsis>
+          <para>Get all combinations of k numbers from 1 to n as a vector of vectors.
+         (See also <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 factorial: <userinput>n(n-2)(n-4)...</userinput></para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/DoubleFactorial.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Factorial">
+         <term>Factorial</term>
+         <listitem>
+          <synopsis>Factorial (n)</synopsis>
+          <para>Factorial: <userinput>n(n-1)(n-2)...</userinput></para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/Factorial.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-FallingFactorial">
+         <term>FallingFactorial</term>
+         <listitem>
+          <synopsis>FallingFactorial (n,k)</synopsis>
+          <para>Falling factorial: <userinput>(n)_k = n(n-1)...(n-(k-1))</userinput></para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/FallingFactorial.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Fibonacci">
+         <term>Fibonacci</term>
+         <listitem>
+          <synopsis>Fibonacci (x)</synopsis>
+          <para>Aliases: <function>fib</function></para>
+          <para>
+           Calculate <varname>n</varname>th Fibonacci number.  That
+           is the number defined recursively by
+           <userinput>Fibonacci(n) = Fibonacci(n-1) + Fibonacci(n-2)</userinput>
+           and 
+           <userinput>Fibonacci(1) = Fibonacci(2) = 1</userinput>.
+         </para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Fibonacci_number";>Wikipedia</ulink> or
+           <ulink url="http://planetmath.org/encyclopedia/FibonacciSequence.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/FibonacciNumber.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-FrobeniusNumber">
+         <term>FrobeniusNumber</term>
+         <listitem>
+          <synopsis>FrobeniusNumber (v,arg...)</synopsis>
+          <para>
+           Calculate the Frobenius number.  That is calculate smallest
+           number that cannot be given as a non-negative integer linear
+           combination of a given vector of non-negative integers.
+           The vector can be given as separate numbers or a single vector.
+           All the numbers given should have GCD of 1.
+         </para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/FrobeniusNumber.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-GaloisMatrix">
+         <term>GaloisMatrix</term>
+         <listitem>
+          <synopsis>GaloisMatrix (combining_rule)</synopsis>
+          <para>Galois matrix given a linear combining rule (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>
+           Find the vector <varname>c</varname> of non-negative integers
+           such that taking the dot product with <varname>v</varname> is
+           equal to n.  If not possible returns <constant>null</constant>.  <varname>v</varname>
+           should be given sorted in increasing order and should consist
+           of non-negative integers.
+         </para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/GreedyAlgorithm.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-HarmonicNumber">
+         <term>HarmonicNumber</term>
+         <listitem>
+          <synopsis>HarmonicNumber (n,r)</synopsis>
+          <para>Aliases: <function>HarmonicH</function></para>
+          <para>Harmonic Number, the <varname>n</varname>th harmonic number of order 
<varname>r</varname>.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Hofstadter">
+         <term>Hofstadter</term>
+         <listitem>
+          <synopsis>Hofstadter (n)</synopsis>
+          <para>Hofstadter's function q(n) defined by 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 (seed_values,combining_rule,n)</synopsis>
+          <para>Compute linear recursive sequence using Galois stepping.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Multinomial">
+         <term>Multinomial</term>
+         <listitem>
+          <synopsis>Multinomial (v,arg...)</synopsis>
+          <para>Calculate multinomial coefficients.  Takes a vector of
+           <varname>k</varname>
+           non-negative integers and computes the multinomial coefficient.
+           This corresponds to the coefficient in the homogeneous polynomial
+           in <varname>k</varname> variables with the corresponding powers.
+         </para>
+         <para>
+           The formula for <userinput>Multinomial(a,b,c)</userinput>
+           can be written as:
+<programlisting>(a+b+c)! / (a!b!c!)
+</programlisting>
+           In other words, if we would have only two elements, then
+<userinput>Multinomial(a,b)</userinput> is the same thing as
+<userinput>Binomial(a+b,a)</userinput> or
+<userinput>Binomial(a+b,b)</userinput>.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/MultinomialTheorem.html";>Planetmath</ulink>,
+           <ulink url="http://mathworld.wolfram.com/MultinomialCoefficient.html";>Mathworld</ulink>, or
+           <ulink url="http://en.wikipedia.org/wiki/Multinomial_theorem";>Wikipedia</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NextCombination">
+         <term>NextCombination</term>
+         <listitem>
+          <synopsis>NextCombination (v,n)</synopsis>
+         <para>Get combination that would come after v in call to
+combinations, first combination should be <userinput>[1:k]</userinput>.  This
+function is useful if you have many combinations to go through and you don't
+want to waste memory to store them all.
+         </para>
+         <para>
+           For example with Combination you would normally write a loop like:
+          <screen><userinput>for n in Combinations (4,6) do (
+  SomeFunction (n)
+);</userinput>
+</screen>
+           But with NextCombination you would write something like:
+          <screen><userinput>n:=[1:4];
+do (
+  SomeFunction (n)
+) while not IsNull(n:=NextCombination(n,6));</userinput>
+</screen>
+         See also <link linkend="gel-function-Combinations">Combinations</link>.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Pascal">
+         <term>Pascal</term>
+         <listitem>
+          <synopsis>Pascal (i)</synopsis>
+          <para>Get the Pascal's triangle as a matrix.  This will return
+         an <varname>i</varname>+1 by <varname>i</varname>+1 lower diagonal
+         matrix which is the Pascal's triangle after <varname>i</varname>
+         iterations.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/PascalsTriangle.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Permutations">
+         <term>Permutations</term>
+         <listitem>
+          <synopsis>Permutations (k,n)</synopsis>
+          <para>Get all permutations of <varname>k</varname> numbers from 1 to <varname>n</varname> as a 
vector of vectors.</para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/Permutation.html";>Mathworld</ulink> or
+           <ulink url="http://en.wikipedia.org/wiki/Permutation";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RisingFactorial">
+         <term>RisingFactorial</term>
+         <listitem>
+          <synopsis>RisingFactorial (n,k)</synopsis>
+          <para>Aliases: <function>Pochhammer</function></para>
+          <para>(Pochhammer) Rising factorial: (n)_k = n(n+1)...(n+(k-1)).</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/RisingFactorial.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-StirlingNumberFirst">
+         <term>StirlingNumberFirst</term>
+         <listitem>
+          <synopsis>StirlingNumberFirst (n,m)</synopsis>
+          <para>Aliases: <function>StirlingS1</function></para>
+          <para>Stirling number of the first kind.</para>
+          <para>
+           See
+           <ulink 
url="http://planetmath.org/encyclopedia/StirlingNumbersOfTheFirstKind.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/StirlingNumberoftheFirstKind.html";>Mathworld</ulink> for 
more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-StirlingNumberSecond">
+         <term>StirlingNumberSecond</term>
+         <listitem>
+          <synopsis>StirlingNumberSecond (n,m)</synopsis>
+          <para>Aliases: <function>StirlingS2</function></para>
+          <para>Stirling number of the second kind.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/StirlingNumbersSecondKind.html";>Planetmath</ulink> 
or
+           <ulink url="http://mathworld.wolfram.com/StirlingNumberoftheSecondKind.html";>Mathworld</ulink> 
for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Subfactorial">
+         <term>Subfactorial</term>
+         <listitem>
+          <synopsis>Subfactorial (n)</synopsis>
+          <para>Subfactorial: n! times sum_{k=1}^n (-1)^k/k!.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Triangular">
+         <term>Triangular</term>
+         <listitem>
+          <synopsis>Triangular (nth)</synopsis>
+          <para>Calculate the <varname>n</varname>th triangular number.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/TriangularNumbers.html";>Planetmath</ulink> for 
more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-nCr">
+         <term>nCr</term>
+         <listitem>
+          <synopsis>nCr (n,r)</synopsis>
+          <para>Aliases: <function>Binomial</function></para>
+          <para>Calculate combinations, that is, the binomial coefficient.
+               <varname>n</varname> can be any real number.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/Choose.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-nPr">
+         <term>nPr</term>
+         <listitem>
+          <synopsis>nPr (n,r)</synopsis>
+          <para>Calculate the number of permutations of size
+          <varname>r</varname>of numbers from 1 to <varname>n</varname>.</para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/Permutation.html";>Mathworld</ulink> or
+           <ulink url="http://en.wikipedia.org/wiki/Permutation";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-calculus">
+      <title>Calculus</title>
+      <variablelist>
+        <varlistentry id="gel-function-CompositeSimpsonsRule">
+         <term>CompositeSimpsonsRule</term>
+         <listitem>
+          <synopsis>CompositeSimpsonsRule (f,a,b,n)</synopsis>
+          <para>Integration of f by Composite Simpson's Rule on the interval [a,b] with n subintervals with 
error of max(f'''')*h^4*(b-a)/180, note that n should be even.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/SimpsonsRule.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-CompositeSimpsonsRuleTolerance">
+         <term>CompositeSimpsonsRuleTolerance</term>
+         <listitem>
+          <synopsis>CompositeSimpsonsRuleTolerance (f,a,b,FourthDerivativeBound,Tolerance)</synopsis>
+          <para>Integration of f by Composite Simpson's Rule on the interval [a,b] with the number of steps 
calculated by the fourth derivative bound and the desired tolerance.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/SimpsonsRule.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Derivative">
+         <term>Derivative</term>
+         <listitem>
+          <synopsis>Derivative (f,x0)</synopsis>
+          <para>Attempt to calculate derivative by trying first symbolically and then numerically.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-EvenPeriodicExtension">
+         <term>EvenPeriodicExtension</term>
+         <listitem>
+          <synopsis>EvenPeriodicExtension (f,L)</synopsis>
+         <para>Return a function which is even periodic extension of
+<function>f</function> with half period <varname>L</varname>.  That
+is a function defined on the interval <userinput>[0,L]</userinput>
+extended to be even on <userinput>[-L,L]</userinput> and then
+extended to be periodic with period <userinput>2*L</userinput>.</para>
+         <para>
+           See also
+           <link linkend='gel-function-OddPeriodicExtension'>OddPeriodicExtension</link>
+           and
+           <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>Return a function which is a Fourier series with the
+coefficients given by the vectors <varname>a</varname> (sines) and
+<varname>b</varname> (cosines).  Note that <userinput>a@(1)</userinput> is
+the constant coefficient!  That is, <userinput>a@(n)</userinput> refers to
+the term <userinput>cos(x*(n-1)*pi/L)</userinput>, while
+<userinput>b@(n)</userinput> refers to the term
+<userinput>sin(x*n*pi/L)</userinput>.  Either <varname>a</varname>
+or <varname>b</varname> can be <constant>null</constant>.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Fourier_series";>Wikipedia</ulink> or
+           <ulink url="http://mathworld.wolfram.com/FourierSeries.html";>Mathworld</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-InfiniteProduct">
+         <term>InfiniteProduct</term>
+         <listitem>
+          <synopsis>InfiniteProduct (func,start,inc)</synopsis>
+          <para>Try to calculate an infinite product for a single parameter function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-InfiniteProduct2">
+         <term>InfiniteProduct2</term>
+         <listitem>
+          <synopsis>InfiniteProduct2 (func,arg,start,inc)</synopsis>
+          <para>Try to calculate an infinite product for a double parameter function with func(arg,n).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-InfiniteSum">
+         <term>InfiniteSum</term>
+         <listitem>
+          <synopsis>InfiniteSum (func,start,inc)</synopsis>
+          <para>Try to calculate an infinite sum for a single parameter function.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-InfiniteSum2">
+         <term>InfiniteSum2</term>
+         <listitem>
+          <synopsis>InfiniteSum2 (func,arg,start,inc)</synopsis>
+          <para>Try to calculate an infinite sum for a double parameter function with func(arg,n).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsContinuous">
+         <term>IsContinuous</term>
+         <listitem>
+          <synopsis>IsContinuous (f,x0)</synopsis>
+          <para>Try and see if a real-valued function is continuous at x0 by calculating the limit 
there.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsDifferentiable">
+         <term>IsDifferentiable</term>
+         <listitem>
+          <synopsis>IsDifferentiable (f,x0)</synopsis>
+          <para>Test for differentiability by approximating the left and right limits and comparing.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-LeftLimit">
+         <term>LeftLimit</term>
+         <listitem>
+          <synopsis>LeftLimit (f,x0)</synopsis>
+          <para>Calculate the left limit of a real-valued function at x0.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Limit">
+         <term>Limit</term>
+         <listitem>
+          <synopsis>Limit (f,x0)</synopsis>
+          <para>Calculate the limit of a real-valued function at x0.  Tries to calculate both left and right 
limits.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MidpointRule">
+         <term>MidpointRule</term>
+         <listitem>
+          <synopsis>MidpointRule (f,a,b,n)</synopsis>
+          <para>Integration by midpoint rule.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalDerivative">
+         <term>NumericalDerivative</term>
+         <listitem>
+          <synopsis>NumericalDerivative (f,x0)</synopsis>
+          <para>Aliases: <function>NDerivative</function></para>
+          <para>Attempt to calculate numerical derivative.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalFourierSeriesCoefficients">
+         <term>NumericalFourierSeriesCoefficients</term>
+         <listitem>
+          <synopsis>NumericalFourierSeriesCoefficients (f,L,N)</synopsis>
+         <para>Return a vector of vectors <userinput>[a,b]</userinput>
+where <varname>a</varname> are the cosine coefficients and
+<varname>b</varname> are the sine coefficients of
+the Fourier series of
+<function>f</function> with half-period <varname>L</varname> (that is defined
+on <userinput>[-L,L]</userinput> and extended periodically) with coefficients
+up to <varname>N</varname>th harmonic computed numerically.  The coefficients are
+computed by numerical integration using
+<function>NumericalIntegral</function>.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Fourier_series";>Wikipedia</ulink> or
+           <ulink url="http://mathworld.wolfram.com/FourierSeries.html";>Mathworld</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalFourierSeriesFunction">
+         <term>NumericalFourierSeriesFunction</term>
+         <listitem>
+          <synopsis>NumericalFourierSeriesFunction (f,L,N)</synopsis>
+         <para>Return a function which is the Fourier series of
+<function>f</function> with half-period <varname>L</varname> (that is defined
+on <userinput>[-L,L]</userinput> and extended periodically) with coefficients
+up to <varname>N</varname>th harmonic computed numerically.  This is the
+trigonometric real series composed of sines and cosines.  The coefficients are
+computed by numerical integration using
+<function>NumericalIntegral</function>.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Fourier_series";>Wikipedia</ulink> or
+           <ulink url="http://mathworld.wolfram.com/FourierSeries.html";>Mathworld</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalFourierCosineSeriesCoefficients">
+         <term>NumericalFourierCosineSeriesCoefficients</term>
+         <listitem>
+          <synopsis>NumericalFourierCosineSeriesCoefficients (f,L,N)</synopsis>
+         <para>Return a vector of coefficients of the
+the cosine Fourier series of
+<function>f</function> with half-period <varname>L</varname>.  That is,
+we take <function>f</function> defined on <userinput>[0,L]</userinput>
+take the even periodic extension and compute the Fourier series, which
+only has cosine terms.  The series is computed up to the 
+<varname>N</varname>th harmonic.  The coefficients are
+computed by numerical integration using
+<function>NumericalIntegral</function>.
+Note that <userinput>a@(1)</userinput> is
+the constant coefficient!  That is, <userinput>a@(n)</userinput> refers to
+the term <userinput>cos(x*(n-1)*pi/L)</userinput>.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Fourier_series";>Wikipedia</ulink> or
+           <ulink url="http://mathworld.wolfram.com/FourierCosineSeries.html";>Mathworld</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalFourierCosineSeriesFunction">
+         <term>NumericalFourierCosineSeriesFunction</term>
+         <listitem>
+          <synopsis>NumericalFourierCosineSeriesFunction (f,L,N)</synopsis>
+         <para>Return a function which is the cosine Fourier series of
+<function>f</function> with half-period <varname>L</varname>.  That is,
+we take <function>f</function> defined on <userinput>[0,L]</userinput>
+take the even periodic extension and compute the Fourier series, which
+only has cosine terms.  The series is computed up to the 
+<varname>N</varname>th harmonic.  The coefficients are
+computed by numerical integration using
+<function>NumericalIntegral</function>.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Fourier_series";>Wikipedia</ulink> or
+           <ulink url="http://mathworld.wolfram.com/FourierCosineSeries.html";>Mathworld</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalFourierSineSeriesCoefficients">
+         <term>NumericalFourierSineSeriesCoefficients</term>
+         <listitem>
+          <synopsis>NumericalFourierSineSeriesCoefficients (f,L,N)</synopsis>
+         <para>Return a vector of coefficients of the
+the sine Fourier series of
+<function>f</function> with half-period <varname>L</varname>.  That is,
+we take <function>f</function> defined on <userinput>[0,L]</userinput>
+take the odd periodic extension and compute the Fourier series, which
+only has sine terms.  The series is computed up to the 
+<varname>N</varname>th harmonic.  The coefficients are
+computed by numerical integration using
+<function>NumericalIntegral</function>.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Fourier_series";>Wikipedia</ulink> or
+           <ulink url="http://mathworld.wolfram.com/FourierSineSeries.html";>Mathworld</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalFourierSineSeriesFunction">
+         <term>NumericalFourierSineSeriesFunction</term>
+         <listitem>
+          <synopsis>NumericalFourierSineSeriesFunction (f,L,N)</synopsis>
+         <para>Return a function which is the sine Fourier series of
+<function>f</function> with half-period <varname>L</varname>.  That is,
+we take <function>f</function> defined on <userinput>[0,L]</userinput>
+take the odd periodic extension and compute the Fourier series, which
+only has sine terms.  The series is computed up to the 
+<varname>N</varname>th harmonic.  The coefficients are
+computed by numerical integration using
+<function>NumericalIntegral</function>.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Fourier_series";>Wikipedia</ulink> or
+           <ulink url="http://mathworld.wolfram.com/FourierSineSeries.html";>Mathworld</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalIntegral">
+         <term>NumericalIntegral</term>
+         <listitem>
+          <synopsis>NumericalIntegral (f,a,b)</synopsis>
+          <para>Integration by rule set in NumericalIntegralFunction of f from a to b using 
NumericalIntegralSteps steps.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalLeftDerivative">
+         <term>NumericalLeftDerivative</term>
+         <listitem>
+          <synopsis>NumericalLeftDerivative (f,x0)</synopsis>
+          <para>Attempt to calculate numerical left derivative.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalLimitAtInfinity">
+         <term>NumericalLimitAtInfinity</term>
+         <listitem>
+          <synopsis>NumericalLimitAtInfinity (_f,step_fun,tolerance,successive_for_success,N)</synopsis>
+          <para>Attempt to calculate the limit of f(step_fun(i)) as i goes from 1 to N.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NumericalRightDerivative">
+         <term>NumericalRightDerivative</term>
+         <listitem>
+          <synopsis>NumericalRightDerivative (f,x0)</synopsis>
+          <para>Attempt to calculate numerical right derivative.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-OddPeriodicExtension">
+         <term>OddPeriodicExtension</term>
+         <listitem>
+          <synopsis>OddPeriodicExtension (f,L)</synopsis>
+         <para>Return a function which is odd periodic extension of
+<function>f</function> with half period <varname>L</varname>.  That
+is a function defined on the interval <userinput>[0,L]</userinput>
+extended to be odd on <userinput>[-L,L]</userinput> and then
+extended to be periodic with period <userinput>2*L</userinput>.</para>
+         <para>
+           See also
+           <link linkend='gel-function-EvenPeriodicExtension'>EvenPeriodicExtension</link>
+           and
+           <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>Compute one-sided derivative using five point formula.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-OneSidedThreePointFormula">
+         <term>OneSidedThreePointFormula</term>
+         <listitem>
+          <synopsis>OneSidedThreePointFormula (f,x0,h)</synopsis>
+          <para>Compute one-sided derivative using three-point formula.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PeriodicExtension">
+         <term>PeriodicExtension</term>
+         <listitem>
+          <synopsis>PeriodicExtension (f,a,b)</synopsis>
+         <para>Return a function which is the periodic extension of
+<function>f</function> defined on the interval <userinput>[a,b]</userinput>
+and has period <userinput>b-a</userinput>.</para>
+         <para>
+           See also
+           <link linkend='gel-function-OddPeriodicExtension'>OddPeriodicExtension</link>
+           and
+           <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>Calculate the right limit of a real-valued function at x0.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-TwoSidedFivePointFormula">
+         <term>TwoSidedFivePointFormula</term>
+         <listitem>
+          <synopsis>TwoSidedFivePointFormula (f,x0,h)</synopsis>
+          <para>Compute two-sided derivative using five-point formula.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-TwoSidedThreePointFormula">
+         <term>TwoSidedThreePointFormula</term>
+         <listitem>
+          <synopsis>TwoSidedThreePointFormula (f,x0,h)</synopsis>
+          <para>Compute two-sided derivative using three-point formula.</para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-functions">
+      <title>Functions</title>
+      <variablelist>
+        <varlistentry id="gel-function-Argument">
+         <term>Argument</term>
+         <listitem>
+          <synopsis>Argument (z)</synopsis>
+          <para>Aliases: <function>Arg</function> <function>arg</function></para>
+          <para>argument (angle) of complex number.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-BesselJ0">
+         <term>BesselJ0</term>
+         <listitem>
+          <synopsis>BesselJ0 (x)</synopsis>
+          <para>Bessel function of the first kind of order 0.  Only implemented for real numbers.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Bessel_functions";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-BesselJ1">
+         <term>BesselJ1</term>
+         <listitem>
+          <synopsis>BesselJ1 (x)</synopsis>
+          <para>Bessel function of the first kind of order 1.  Only implemented for real numbers.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Bessel_functions";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-BesselJn">
+         <term>BesselJn</term>
+         <listitem>
+          <synopsis>BesselJn (n,x)</synopsis>
+         <para>Bessel function of the first kind of order <varname>n</varname>.  Only implemented for real 
numbers.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Bessel_functions";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-BesselY0">
+         <term>BesselY0</term>
+         <listitem>
+          <synopsis>BesselY0 (x)</synopsis>
+          <para>Bessel function of the second kind of order 0.  Only implemented for real numbers.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Bessel_functions";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-BesselY1">
+         <term>BesselY1</term>
+         <listitem>
+          <synopsis>BesselY1 (x)</synopsis>
+          <para>Bessel function of the second kind of order 1.  Only implemented for real numbers.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Bessel_functions";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-BesselYn">
+         <term>BesselYn</term>
+         <listitem>
+          <synopsis>BesselYn (n,x)</synopsis>
+         <para>Bessel function of the second kind of order <varname>n</varname>.  Only implemented for real 
numbers.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Bessel_functions";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DirichletKernel">
+         <term>DirichletKernel</term>
+         <listitem>
+          <synopsis>DirichletKernel (n,t)</synopsis>
+          <para>Dirichlet kernel of order n.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DiscreteDelta">
+         <term>DiscreteDelta</term>
+         <listitem>
+          <synopsis>DiscreteDelta (v)</synopsis>
+          <para>Returns 1 if and only if all elements are zero.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-ErrorFunction">
+         <term>ErrorFunction</term>
+         <listitem>
+          <synopsis>ErrorFunction (x)</synopsis>
+          <para>Aliases: <function>erf</function></para>
+          <para>The error function, 2/sqrt(pi) * int_0^x e^(-t^2) dt.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/ErrorFunction.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-FejerKernel">
+         <term>FejerKernel</term>
+         <listitem>
+          <synopsis>FejerKernel (n,t)</synopsis>
+          <para>Fejer kernel of order <varname>n</varname> evaluated at
+               <varname>t</varname></para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/FejerKernel.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-GammaFunction">
+         <term>GammaFunction</term>
+         <listitem>
+          <synopsis>GammaFunction (x)</synopsis>
+          <para>Aliases: <function>Gamma</function></para>
+          <para>The Gamma function.  Currently only implemented for real values.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/GammaFunction.html";>Planetmath</ulink> for more 
information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-KroneckerDelta">
+         <term>KroneckerDelta</term>
+         <listitem>
+          <synopsis>KroneckerDelta (v)</synopsis>
+          <para>Returns 1 if and only if all elements are equal.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MinimizeFunction">
+         <term>MinimizeFunction</term>
+         <listitem>
+          <synopsis>MinimizeFunction (func,x,incr)</synopsis>
+          <para>Find the first value where f(x)=0.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MoebiusDiskMapping">
+         <term>MoebiusDiskMapping</term>
+         <listitem>
+          <synopsis>MoebiusDiskMapping (a,z)</synopsis>
+          <para>Moebius mapping of the disk to itself mapping a to 0.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/MobiusTransformation.html";>Planetmath</ulink> for 
more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MoebiusMapping">
+         <term>MoebiusMapping</term>
+         <listitem>
+          <synopsis>MoebiusMapping (z,z2,z3,z4)</synopsis>
+          <para>Moebius mapping using the cross ratio taking z2,z3,z4 to 1,0, and infinity 
respectively.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/MobiusTransformation.html";>Planetmath</ulink> for 
more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MoebiusMappingInftyToInfty">
+         <term>MoebiusMappingInftyToInfty</term>
+         <listitem>
+          <synopsis>MoebiusMappingInftyToInfty (z,z2,z3)</synopsis>
+          <para>Moebius mapping using the cross ratio taking infinity to infinity and z2,z3 to 1 and 0 
respectively.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/MobiusTransformation.html";>Planetmath</ulink> for 
more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MoebiusMappingInftyToOne">
+         <term>MoebiusMappingInftyToOne</term>
+         <listitem>
+          <synopsis>MoebiusMappingInftyToOne (z,z3,z4)</synopsis>
+          <para>Moebius mapping using the cross ratio taking infinity to 1 and z3,z4 to 0 and infinity 
respectively.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/MobiusTransformation.html";>Planetmath</ulink> for 
more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MoebiusMappingInftyToZero">
+         <term>MoebiusMappingInftyToZero</term>
+         <listitem>
+          <synopsis>MoebiusMappingInftyToZero (z,z2,z4)</synopsis>
+          <para>Moebius mapping using the cross ratio taking infinity to 0 and z2,z4 to 1 and infinity 
respectively.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/MobiusTransformation.html";>Planetmath</ulink> for 
more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PoissonKernel">
+         <term>PoissonKernel</term>
+         <listitem>
+          <synopsis>PoissonKernel (r,sigma)</synopsis>
+          <para>Poisson kernel on D(0,1) (not normalized to 1, that is integral of this is 2pi).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PoissonKernelRadius">
+         <term>PoissonKernelRadius</term>
+         <listitem>
+          <synopsis>PoissonKernelRadius (r,sigma)</synopsis>
+          <para>Poisson kernel on D(0,R) (not normalized to 1).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RiemannZeta">
+         <term>RiemannZeta</term>
+         <listitem>
+          <synopsis>RiemannZeta (x)</synopsis>
+          <para>Aliases: <function>zeta</function></para>
+          <para>The Riemann zeta function.  Currently only implemented for real values.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/RiemannZetaFunction.html";>Planetmath</ulink> for 
more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-UnitStep">
+         <term>UnitStep</term>
+         <listitem>
+          <synopsis>UnitStep (x)</synopsis>
+          <para>The unit step function is 0 for x&lt;0, 1 otherwise.  This is the integral of the Dirac 
Delta function.  Also called the Heaviside function.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Unit_step";>Wikipedia</ulink> for more information.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-cis">
+         <term>cis</term>
+         <listitem>
+          <synopsis>cis (x)</synopsis>
+          <para>
+           The <function>cis</function> function, that is the same as
+           <userinput>cos(x)+1i*sin(x)</userinput>
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-deg2rad">
+         <term>deg2rad</term>
+         <listitem>
+          <synopsis>deg2rad (x)</synopsis>
+          <para>Convert degrees to radians.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-rad2deg">
+         <term>rad2deg</term>
+         <listitem>
+          <synopsis>rad2deg (x)</synopsis>
+          <para>Convert radians to degrees.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-sinc">
+         <term>sinc</term>
+         <listitem>
+          <synopsis>sinc (x)</synopsis>
+         <para>Calculates the unnormalized sinc function, that is
+                 <userinput>sin(x)/x</userinput>.
+                 If you want the normalized function call <userinput>sinc(pi*x)</userinput>.</para>
+          <para>
+           See
+           <ulink url="http://en.wikipedia.org/wiki/Sinc";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-equation-solving">
+      <title>Equation Solving</title>
+      <variablelist>
+
+        <varlistentry id="gel-function-CubicFormula">
+         <term>CubicFormula</term>
+         <listitem>
+          <synopsis>CubicFormula (p)</synopsis>
+          <para>
+           Compute roots of a cubic (degree 3) polynomial using the
+           cubic formula.  The polynomial should be given as a
+           vector of coefficients.  That is
+           <userinput>4*x^3 + 2*x + 1</userinput> corresponds to the vector
+            <userinput>[1,2,0,4]</userinput>.
+           Returns a column vector of the three solutions.  The first solution is always
+           the real one as a cubic always has one real solution.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/CubicFormula.html";>Planetmath</ulink>,
+           <ulink url="http://mathworld.wolfram.com/CubicFormula.html";>Mathworld</ulink>, or
+           <ulink url="http://en.wikipedia.org/wiki/Cubic_equation";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-EulersMethod">
+         <term>EulersMethod</term>
+         <listitem>
+          <synopsis>EulersMethod (f,x0,y0,x1,n)</synopsis>
+          <para>
+           Use classical Euler's method to numerically solve y'=f(x,y) for
+           initial <varname>x0</varname>, <varname>y0</varname> going to
+           <varname>x1</varname> with <varname>n</varname> increments,
+           returns <varname>y</varname> at <varname>x1</varname>.
+         </para>
+         <para>
+           Systems can be solved by just having <varname>y</varname> be a
+           (column) vector everywhere.  That is, <varname>y0</varname> can
+           be a vector in which case <varname>f</varname> should take a number
+           <varname>x</varname> and a vector of the same size for the second
+           argument and should return a vector of the same size.
+         </para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/EulerForwardMethod.html";>Mathworld</ulink>, or
+           <ulink url="http://en.wikipedia.org/wiki/Eulers_method";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-EulersMethodFull">
+         <term>EulersMethodFull</term>
+         <listitem>
+          <synopsis>EulersMethodFull (f,x0,y0,x1,n)</synopsis>
+          <para>
+           Use classical Euler's method to numerically solve y'=f(x,y) for
+           initial <varname>x0</varname>, <varname>y0</varname> going to
+           <varname>x1</varname> with <varname>n</varname> increments,
+           returns a 2 by <userinput>n+1</userinput> matrix with the
+           <varname>x</varname> and <varname>y</varname> values.  Suitable
+           for plugging into 
+           <link linkend="gel-function-LinePlotDrawLine">LinePlotDrawLine</link>.
+         </para>
+         <para>
+           Systems can be solved by just having <varname>y</varname> be a
+           (column) vector everywhere.  That is, <varname>y0</varname> can
+           be a vector in which case <varname>f</varname> should take a number
+           <varname>x</varname> and a vector of the same size for the second
+           argument and should return a vector of the same size.
+         </para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/EulerForwardMethod.html";>Mathworld</ulink>, or
+           <ulink url="http://en.wikipedia.org/wiki/Eulers_method";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-FindRootBisection">
+         <term>FindRootBisection</term>
+         <listitem>
+          <synopsis>FindRootBisection (f,a,b,TOL,N)</synopsis>
+          <para>Find root of a function using the bisection method.
+                 <varname>a</varname> and <varname>b</varname> are the initial guess interval,
+                 <userinput>f(a)</userinput> and <userinput>f(b)</userinput> should have opposite signs.
+           <varname>TOL</varname> is the desired tolerance and
+<varname>N</varname> is the limit on the number of iterations to run, 0 means no limit.  The function 
returns a vector <userinput>[success,value,iteration]</userinput>, where <varname>success</varname> is a 
boolean indicating success, <varname>value</varname> is the last value computed, and 
<varname>iteration</varname> is the number of iterations done.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-FindRootFalsePosition">
+         <term>FindRootFalsePosition</term>
+         <listitem>
+          <synopsis>FindRootFalsePosition (f,a,b,TOL,N)</synopsis>
+          <para>Find root of a function using the method of false position.
+                 <varname>a</varname> and <varname>b</varname> are the initial guess interval,
+                 <userinput>f(a)</userinput> and <userinput>f(b)</userinput> should have opposite signs.
+           <varname>TOL</varname> is the desired tolerance and
+<varname>N</varname> is the limit on the number of iterations to run, 0 means no limit.  The function 
returns a vector <userinput>[success,value,iteration]</userinput>, where <varname>success</varname> is a 
boolean indicating success, <varname>value</varname> is the last value computed, and 
<varname>iteration</varname> is the number of iterations done.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-FindRootMullersMethod">
+         <term>FindRootMullersMethod</term>
+         <listitem>
+          <synopsis>FindRootMullersMethod (f,x0,x1,x2,TOL,N)</synopsis>
+          <para>Find root of a function using the Muller's method.
+           <varname>TOL</varname> is the desired tolerance and
+<varname>N</varname> is the limit on the number of iterations to run, 0 means no limit.  The function 
returns a vector <userinput>[success,value,iteration]</userinput>, where <varname>success</varname> is a 
boolean indicating success, <varname>value</varname> is the last value computed, and 
<varname>iteration</varname> is the number of iterations done.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-FindRootSecant">
+         <term>FindRootSecant</term>
+         <listitem>
+          <synopsis>FindRootSecant (f,a,b,TOL,N)</synopsis>
+          <para>Find root of a function using the secant method.
+                 <varname>a</varname> and <varname>b</varname> are the initial guess interval,
+                 <userinput>f(a)</userinput> and <userinput>f(b)</userinput> should have opposite signs.
+           <varname>TOL</varname> is the desired tolerance and
+<varname>N</varname> is the limit on the number of iterations to run, 0 means no limit.  The function 
returns a vector <userinput>[success,value,iteration]</userinput>, where <varname>success</varname> is a 
boolean indicating success, <varname>value</varname> is the last value computed, and 
<varname>iteration</varname> is the number of iterations done.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PolynomialRoots">
+         <term>PolynomialRoots</term>
+         <listitem>
+          <synopsis>PolynomialRoots (p)</synopsis>
+          <para>
+           Compute roots of a polynomial (degrees 1 through 4)
+           using one of the formulas for such polynomials.
+           The polynomial should be given as a
+           vector of coefficients.  That is
+           <userinput>4*x^3 + 2*x + 1</userinput> corresponds to the vector
+            <userinput>[1,2,0,4]</userinput>.
+           Returns a column vector of the solutions.
+         </para>
+         <para>
+           The function calls
+           <link linkend="gel-function-QuadraticFormula">QuadraticFormula</link>,
+           <link linkend="gel-function-CubicFormula">CubicFormula</link>, and
+           <link linkend="gel-function-QuarticFormula">QuarticFormula</link>.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-QuadraticFormula">
+         <term>QuadraticFormula</term>
+         <listitem>
+          <synopsis>QuadraticFormula (p)</synopsis>
+          <para>
+           Compute roots of a quadratic (degree 2) polynomial using the
+           quadratic formula.  The polynomial should be given as a
+           vector of coefficients.  That is
+           <userinput>3*x^2 + 2*x + 1</userinput> corresponds to the vector
+            <userinput>[1,2,3]</userinput>.
+           Returns a column vector of the two solutions.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/QuadraticFormula.html";>Planetmath</ulink> or
+           <ulink url="http://mathworld.wolfram.com/QuadraticFormula.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-QuarticFormula">
+         <term>QuarticFormula</term>
+         <listitem>
+          <synopsis>QuarticFormula (p)</synopsis>
+          <para>
+           Compute roots of a quartic (degree 4) polynomial using the
+           quartic formula.  The polynomial should be given as a
+           vector of coefficients.  That is
+           <userinput>5*x^4 + 2*x + 1</userinput> corresponds to the vector
+            <userinput>[1,2,0,0,5]</userinput>.
+           Returns a column vector of the four solutions.
+         </para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/QuarticFormula.html";>Planetmath</ulink>,
+           <ulink url="http://mathworld.wolfram.com/QuarticEquation.html";>Mathworld</ulink>, or
+           <ulink url="http://en.wikipedia.org/wiki/Quartic_equation";>Wikipedia</ulink> for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RungeKutta">
+         <term>RungeKutta</term>
+         <listitem>
+          <synopsis>RungeKutta (f,x0,y0,x1,n)</synopsis>
+          <para>
+           Use classical non-adaptive fourth order Runge-Kutta method to
+           numerically solve
+           y'=f(x,y) for initial <varname>x0</varname>, <varname>y0</varname>
+           going to <varname>x1</varname> with <varname>n</varname>
+           increments, returns <varname>y</varname> at <varname>x1</varname>.
+         </para>
+         <para>
+           Systems can be solved by just having <varname>y</varname> be a
+           (column) vector everywhere.  That is, <varname>y0</varname> can
+           be a vector in which case <varname>f</varname> should take a number
+           <varname>x</varname> and a vector of the same size for the second
+           argument and should return a vector of the same size.
+         </para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/Runge-KuttaMethod.html";>Mathworld</ulink>, or
+           <ulink url="http://en.wikipedia.org/wiki/Runge-Kutta_methods";>Wikipedia</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RungeKuttaFull">
+         <term>RungeKuttaFull</term>
+         <listitem>
+          <synopsis>RungeKuttaFull (f,x0,y0,x1,n)</synopsis>
+          <para>
+           Use classical non-adaptive fourth order Runge-Kutta method to
+           numerically solve
+           y'=f(x,y) for initial <varname>x0</varname>, <varname>y0</varname>
+           going to <varname>x1</varname> with <varname>n</varname>
+           increments,
+           returns a 2 by <userinput>n+1</userinput> matrix with the
+           <varname>x</varname> and <varname>y</varname> values.  Suitable
+           for plugging into 
+           <link linkend="gel-function-LinePlotDrawLine">LinePlotDrawLine</link>.
+         </para>
+         <para>
+           Systems can be solved by just having <varname>y</varname> be a
+           (column) vector everywhere.  That is, <varname>y0</varname> can
+           be a vector in which case <varname>f</varname> should take a number
+           <varname>x</varname> and a vector of the same size for the second
+           argument and should return a vector of the same size.
+         </para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/Runge-KuttaMethod.html";>Mathworld</ulink>, or
+           <ulink url="http://en.wikipedia.org/wiki/Runge-Kutta_methods";>Wikipedia</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-statistics">
+      <title>Statistics</title>
+      <variablelist>
+        <varlistentry id="gel-function-Average">
+         <term>Average</term>
+         <listitem>
+          <synopsis>Average (m)</synopsis>
+          <para>Aliases: <function>average</function> <function>Mean</function> 
<function>mean</function></para>
+          <para>Calculate average of an entire matrix.</para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/ArithmeticMean.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-GaussDistribution">
+         <term>GaussDistribution</term>
+         <listitem>
+          <synopsis>GaussDistribution (x,sigma)</synopsis>
+         <para>Integral of the GaussFunction from 0 to <varname>x</varname> (area under the normal 
curve).</para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/NormalDistribution.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-GaussFunction">
+         <term>GaussFunction</term>
+         <listitem>
+          <synopsis>GaussFunction (x,sigma)</synopsis>
+          <para>The normalized Gauss distribution function (the normal curve).</para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/NormalDistribution.html";>Mathworld</ulink> for more 
information.
+         </para>
+
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Median">
+         <term>Median</term>
+         <listitem>
+          <synopsis>Median (m)</synopsis>
+          <para>Aliases: <function>median</function></para>
+          <para>Calculate median of an entire matrix.</para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/StatisticalMedian.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PopulationStandardDeviation">
+         <term>PopulationStandardDeviation</term>
+         <listitem>
+          <synopsis>PopulationStandardDeviation (m)</synopsis>
+          <para>Aliases: <function>stdevp</function></para>
+          <para>Calculate the population standard deviation of a whole matrix.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RowAverage">
+         <term>RowAverage</term>
+         <listitem>
+          <synopsis>RowAverage (m)</synopsis>
+          <para>Aliases: <function>RowMean</function></para>
+          <para>Calculate average of each row in a matrix.</para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/ArithmeticMean.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RowMedian">
+         <term>RowMedian</term>
+         <listitem>
+          <synopsis>RowMedian (m)</synopsis>
+          <para>Calculate median of each row in a matrix and return a column
+         vector of the medians.</para>
+          <para>
+           See
+           <ulink url="http://mathworld.wolfram.com/StatisticalMedian.html";>Mathworld</ulink> for more 
information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RowPopulationStandardDeviation">
+         <term>RowPopulationStandardDeviation</term>
+         <listitem>
+          <synopsis>RowPopulationStandardDeviation (m)</synopsis>
+          <para>Aliases: <function>rowstdevp</function></para>
+          <para>Calculate the population standard deviations of rows of a matrix and return a vertical 
vector.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-RowStandardDeviation">
+         <term>RowStandardDeviation</term>
+         <listitem>
+          <synopsis>RowStandardDeviation (m)</synopsis>
+          <para>Aliases: <function>rowstdev</function></para>
+          <para>Calculate the standard deviations of rows of a matrix and return a vertical vector.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-StandardDeviation">
+         <term>StandardDeviation</term>
+         <listitem>
+          <synopsis>StandardDeviation (m)</synopsis>
+          <para>Aliases: <function>stdev</function></para>
+          <para>Calculate the standard deviation of a whole matrix.</para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-polynomials">
+      <title>Polynomials</title>
+      <variablelist>
+        <varlistentry id="gel-function-AddPoly">
+         <term>AddPoly</term>
+         <listitem>
+          <synopsis>AddPoly (p1,p2)</synopsis>
+          <para>Add two polynomials (vectors).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-DividePoly">
+         <term>DividePoly</term>
+         <listitem>
+          <synopsis>DividePoly (p,q,&amp;r)</synopsis>
+          <para>Divide two polynomials (as vectors) using long division.
+          Returns the quotient
+          of the two polynomials.  The optional argument <varname>r</varname>
+          is used to return the remainder.  The remainder will have lower
+          degree than <varname>q</varname>.</para>
+          <para>
+           See
+           <ulink url="http://planetmath.org/encyclopedia/PolynomialLongDivision.html";>Planetmath</ulink> 
for more information.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsPoly">
+         <term>IsPoly</term>
+         <listitem>
+          <synopsis>IsPoly (p)</synopsis>
+          <para>Check if a vector is usable as a polynomial.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MultiplyPoly">
+         <term>MultiplyPoly</term>
+         <listitem>
+          <synopsis>MultiplyPoly (p1,p2)</synopsis>
+          <para>Multiply two polynomials (as vectors).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-NewtonsMethodPoly">
+         <term>NewtonsMethodPoly</term>
+         <listitem>
+          <synopsis>NewtonsMethodPoly (poly,guess,epsilon,maxn)</synopsis>
+         <para>Run newton's method on a polynomial to attempt to find a root, returns after two successive 
values are within epsilon or after maxn tries (then returns <constant>null</constant>).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Poly2ndDerivative">
+         <term>Poly2ndDerivative</term>
+         <listitem>
+          <synopsis>Poly2ndDerivative (p)</synopsis>
+          <para>Take second polynomial (as vector) derivative.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PolyDerivative">
+         <term>PolyDerivative</term>
+         <listitem>
+          <synopsis>PolyDerivative (p)</synopsis>
+          <para>Take polynomial (as vector) derivative.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PolyToFunction">
+         <term>PolyToFunction</term>
+         <listitem>
+          <synopsis>PolyToFunction (p)</synopsis>
+          <para>Make function out of a polynomial (as vector).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-PolyToString">
+         <term>PolyToString</term>
+         <listitem>
+          <synopsis>PolyToString (p,var...)</synopsis>
+          <para>Make string out of a polynomial (as vector).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SubtractPoly">
+         <term>SubtractPoly</term>
+         <listitem>
+          <synopsis>SubtractPoly (p1,p2)</synopsis>
+          <para>Subtract two polynomials (as vectors).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-TrimPoly">
+         <term>TrimPoly</term>
+         <listitem>
+          <synopsis>TrimPoly (p)</synopsis>
+          <para>Trim zeros from a polynomial (as vector).</para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-set-theory">
+      <title>Set Theory</title>
+      <variablelist>
+        <varlistentry id="gel-function-Intersection">
+         <term>Intersection</term>
+         <listitem>
+          <synopsis>Intersection (X,Y)</synopsis>
+          <para>Returns a set theoretic intersection of X and Y (X and Y are vectors pretending to be 
sets).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsIn">
+         <term>IsIn</term>
+         <listitem>
+          <synopsis>IsIn (x,X)</synopsis>
+         <para>Returns <constant>true</constant> if the element x is in the set X (where X is a vector 
pretending to be a set).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-IsSubset">
+         <term>IsSubset</term>
+         <listitem>
+          <synopsis>IsSubset (X, Y)</synopsis>
+         <para>Returns <constant>true</constant> if X is a subset of Y (X and Y are vectors pretending to be 
sets).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-MakeSet">
+         <term>MakeSet</term>
+         <listitem>
+          <synopsis>MakeSet (X)</synopsis>
+          <para>Returns a vector where every element of X appears only once.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SetMinus">
+         <term>SetMinus</term>
+         <listitem>
+          <synopsis>SetMinus (X,Y)</synopsis>
+          <para>Returns a set theoretic difference X-Y (X and Y are vectors pretending to be sets).</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-Union">
+         <term>Union</term>
+         <listitem>
+          <synopsis>Union (X,Y)</synopsis>
+          <para>Returns a set theoretic union of X and Y (X and Y are vectors pretending to be sets).</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>Miscellaneous</title>
+      <variablelist>
+        <varlistentry id="gel-function-ASCIIToString">
+         <term>ASCIIToString</term>
+         <listitem>
+          <synopsis>ASCIIToString (vec)</synopsis>
+          <para>Convert a vector of ASCII values to a string.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-AlphabetToString">
+         <term>AlphabetToString</term>
+         <listitem>
+          <synopsis>AlphabetToString (vec,alphabet)</synopsis>
+          <para>Convert a vector of 0-based alphabet values (positions in the alphabet string) to a 
string.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-StringToASCII">
+         <term>StringToASCII</term>
+         <listitem>
+          <synopsis>StringToASCII (str)</synopsis>
+          <para>Convert a string to a vector of ASCII values.</para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-StringToAlphabet">
+         <term>StringToAlphabet</term>
+         <listitem>
+          <synopsis>StringToAlphabet (str,alphabet)</synopsis>
+          <para>Convert a string to a vector of 0-based alphabet values (positions in the alphabet string), 
-1's for unknown letters.</para>
+         </listitem>
+        </varlistentry>
+
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-symbolic">
+      <title>Symbolic Operations</title>
+      <variablelist>
+        <varlistentry id="gel-function-SymbolicDerivative">
+         <term>SymbolicDerivative</term>
+         <listitem>
+          <synopsis>SymbolicDerivative (f)</synopsis>
+          <para>Attempt to symbolically differentiate the function f, where f is a function of one 
variable.</para>
+          <para>
+           Examples:
+          <screen><prompt>genius></prompt> <userinput>SymbolicDerivative(sin)</userinput>
+= (`(x)=cos(x))
+<prompt>genius></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>Attempt to symbolically differentiate the function f, where f is a function of one variable, 
returns <constant>null</constant> if unsuccessful but is silent.
+         (See <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>Attempt to symbolically differentiate a function n times.
+         (See <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>Attempt to symbolically differentiate a function n times quietly and return 
<constant>null</constant> on failure
+         (See <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>Attempt to construct the Taylor approximation function around x0 to the nth degree.
+         (See <link linkend="gel-function-SymbolicDerivative"><function>SymbolicDerivative</function></link>)
+          </para>
+         </listitem>
+        </varlistentry>
+      </variablelist>
+    </sect1>
+
+    <sect1 id="genius-gel-function-list-plotting">
+      <title>Plotting</title>
+      <variablelist>
+        <varlistentry id="gel-function-ExportPlot">
+         <term>ExportPlot</term>
+         <listitem>
+          <synopsis>ExportPlot (file,type)</synopsis>
+          <synopsis>ExportPlot (file)</synopsis>
+          <para>
+                 Export the contents of the plotting window to a file.
+                 The type is a string that specifies the file type to
+                 use, "png", "eps", or "ps".  If the type is not
+                 specified, then it is taken to be the extension, in
+                 which case the extension must be ".png", ".eps", or ".ps".
+         </para>
+         <para>
+                 Note that files are overwritten without asking.
+         </para>
+         <para>
+                 On successful export, true is returned.  Otherwise
+                 error is printed and exception is raised.
+         </para>
+          <para>
+           Examples:
+          <screen><prompt>genius></prompt> <userinput>ExportPlot("file.png")</userinput>
+<prompt>genius></prompt> <userinput>ExportPlot("/directory/file","eps")</userinput>
+</screen>
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-LinePlot">
+         <term>LinePlot</term>
+         <listitem>
+          <synopsis>LinePlot (func1,func2,func3,...)</synopsis>
+          <synopsis>LinePlot (func1,func2,func3,x1,x2,y1,y2)</synopsis>
+          <para>
+           Plot a function (or several functions) with a line.
+           First up to 10 arguments are functions, then optionally
+            you can specify the limits of the plotting window as
+           <varname>x1</varname>, <varname>x2</varname>,
+           <varname>y1</varname>, <varname>y2</varname>.  If limits are not
+           specified, then the currently set limits apply
+           (See <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>)
+          </para>
+          <para>
+           The parameter
+           <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link>
+           controls the drawing of the legend.
+         </para>
+          <para>
+           Examples:
+          <screen><prompt>genius></prompt> <userinput>LinePlot(sin,cos)</userinput>
+<prompt>genius></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>
+            Show the line plot window and clear out functions and any other
+            lines that were drawn.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-LinePlotDrawLine">
+         <term>LinePlotDrawLine</term>
+         <listitem>
+          <synopsis>LinePlotDrawLine (x1,y1,x2,y2,...)</synopsis>
+          <synopsis>LinePlotDrawLine (v,...)</synopsis>
+          <para>
+           Draw a line from <varname>x1</varname>,<varname>y1</varname> to
+           <varname>x2</varname>,<varname>y2</varname>.
+           <varname>x1</varname>,<varname>y1</varname>,
+           <varname>x2</varname>,<varname>y2</varname> can be replaced by an
+           <varname>n</varname> by 2 matrix for a longer polyline.
+          </para>
+          <para>
+           Extra parameters can be added to specify line color, thickness,
+           arrows, and the plotting window.
+           You can do this by adding a string <userinput>"color"</userinput>, 
+           <userinput>"thickness"</userinput>,
+           <userinput>"window"</userinput>, or
+           <userinput>"arrow"</userinput>, and after it either
+           the color string, the thicknes as an integer, the window
+           as 4-vector, and for arrow either 
+           <userinput>"origin"</userinput>,
+           <userinput>"end"</userinput>,
+           <userinput>"both"</userinput>, or
+           <userinput>"none"</userinput>.  For 
+           <userinput>"window"</userinput> we can specify 
+           <userinput>"fit"</userinput> rather than a vector in which case,
+           the x range will be set precisely and the y range will be set with
+           five percent borders around the line.  Finally, the legend
+           can be specified by adding
+           <userinput>"legend"</userinput> and the string with the legend.
+          </para>
+         <para>
+         Examples:
+          <screen><prompt>genius></prompt> 
<userinput>LinePlotDrawLine(0,0,1,1,"color","blue","thickness",3)</userinput>
+<prompt>genius></prompt> <userinput>LinePlotDrawLine([0,0;1,-1;-1,-1])</userinput>
+<prompt>genius></prompt> <userinput>LinePlotDrawLine([0,0;1,1],"arrow","end")</userinput>
+<prompt>genius></prompt> 
<userinput>LinePlotDrawLine(EulersMethodFull(`(x,y)=y,0,3,100),"color","blue","legend","The 
Solution")</userinput>
+</screen>
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-LinePlotParametric">
+         <term>LinePlotParametric</term>
+         <listitem>
+          <synopsis>LinePlotParametric (xfunc,yfunc,...)</synopsis>
+          <synopsis>LinePlotParametric (xfunc,yfunc,t1,t2,tinc)</synopsis>
+          <synopsis>LinePlotParametric (xfunc,yfunc,t1,t2,tinc,x1,x2,y1,y2)</synopsis>
+          <para>
+           Plot a parametric function with a line.  First come the functions
+for <varname>x</varname> and <varname>y</varname> then optionally the <varname>t</varname> limits as 
<userinput>t1,t2,tinc</userinput>, then optionally the
+limits as <userinput>x1,x2,y1,y2</userinput>.
+          </para>
+         <para>
+           If limits are not
+           specified, then the currently set limits apply
+           (See <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>).
+          </para>
+          <para>
+           The parameter
+           <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link>
+           controls the drawing of the legend.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-LinePlotCParametric">
+         <term>LinePlotCParametric</term>
+         <listitem>
+          <synopsis>LinePlotCParametric (func,...)</synopsis>
+          <synopsis>LinePlotCParametric (func,t1,t2,tinc)</synopsis>
+          <synopsis>LinePlotCParametric (func,t1,t2,tinc,x1,x2,y1,y2)</synopsis>
+          <para>
+           Plot a parametric complex valued function with a line.  First comes
+the function that returns <computeroutput>x+iy</computeroutput>,
+then optionally the <varname>t</varname> limits as <userinput>t1,t2,tinc</userinput>, then
+optionally the limits as <userinput>x1,x2,y1,y2</userinput>.
+          </para>
+         <para>
+           If limits are not
+           specified, then the currently set limits apply
+           (See <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>).
+          </para>
+          <para>
+           The parameter
+           <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link>
+           controls the drawing of the legend.
+         </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SlopefieldClearSolutions">
+         <term>SlopefieldClearSolutions</term>
+         <listitem>
+          <synopsis>SlopefieldClearSolutions ()</synopsis>
+          <para>
+           Clears the solutions drawn by the
+           <link 
linkend="gel-function-SlopefieldDrawSolution"><function>SlopefieldDrawSolution</function></link>
+           function.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SlopefieldDrawSolution">
+         <term>SlopefieldDrawSolution</term>
+         <listitem>
+          <synopsis>SlopefieldDrawSolution (x, y, dx)</synopsis>
+          <para>
+           When a slope field plot is active, draw a solution with
+           the specified initial condition.  The standard
+           Runge-Kutta method is used with increment <varname>dx</varname>.
+           Solutions stay on the graph until a different plot is shown or until
+           you call 
+           <link 
linkend="gel-function-SlopefieldClearSolutions"><function>SlopefieldClearSolutions</function></link>.
+           You can also use the graphical interface to draw solutions and specify
+           initial conditions with the mouse.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SlopefieldPlot">
+         <term>SlopefieldPlot</term>
+         <listitem>
+          <synopsis>SlopefieldPlot (func)</synopsis>
+          <synopsis>SlopefieldPlot (func,x1,x2,y1,y2)</synopsis>
+          <para>
+           Plot a slope field.  The function <varname>func</varname>
+           should take two real numbers <varname>x</varname>
+           and <varname>y</varname>, or a single complex
+           number.
+            Optionally you can specify the limits of the plotting window as
+           <varname>x1</varname>, <varname>x2</varname>,
+           <varname>y1</varname>, <varname>y2</varname>.  If limits are not
+           specified, then the currently set limits apply
+           (See <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>).
+          </para>
+          <para>
+           The parameter
+           <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link>
+           controls the drawing of the legend.
+         </para>
+          <para>
+           Examples:
+          <screen><prompt>genius></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 (func)</synopsis>
+          <synopsis>SurfacePlot (func,x1,x2,y1,y2,z1,z2)</synopsis>
+          <synopsis>SurfacePlot (func,[x1,x2,y1,y2,z1,z2])</synopsis>
+          <para>
+           Plot a surface function which takes either two arguments or a complex number.  First comes the 
function then optionally limits as <varname>x1</varname>, <varname>x2</varname>,
+           <varname>y1</varname>, <varname>y2</varname>,
+           <varname>z1</varname>, <varname>z2</varname>.  If limits are not
+           specified, then the currently set limits apply
+           (See <link 
linkend="gel-function-SurfacePlotWindow"><function>SurfacePlotWindow</function></link>).
+           Genius can only plot a single surface function at this time.
+          </para>
+          <para>
+           Examples:
+          <screen><prompt>genius></prompt> <userinput>SurfacePlot(|sin|,-1,1,-1,1,0,1.5)</userinput>
+<prompt>genius></prompt> <userinput>SurfacePlot(`(x,y)=x^2+y,-1,1,-1,1,-2,2)</userinput>
+<prompt>genius></prompt> <userinput>SurfacePlot(`(z)=|z|^2,-1,1,-1,1,0,2)</userinput>
+</screen>
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SurfacePlotData">
+         <term>SurfacePlotData</term>
+         <listitem>
+          <synopsis>SurfacePlotData (data)</synopsis>
+          <synopsis>SurfacePlotData (data,label)</synopsis>
+          <synopsis>SurfacePlotData (data,x1,x2,y1,y2,z1,z2)</synopsis>
+          <synopsis>SurfacePlotData (data,label,x1,x2,y1,y2,z1,z2)</synopsis>
+          <synopsis>SurfacePlotData (data,[x1,x2,y1,y2,z1,z2])</synopsis>
+          <synopsis>SurfacePlotData (data,label,[x1,x2,y1,y2,z1,z2])</synopsis>
+          <para>
+                 Plot a surface from data.  The data is an n by 3 matrix whose
+                 rows are the x, y and z coordinates.  The data can also be
+                 simply a vector whose length is a multiple of 3 and so
+                 contains the tripples of x, y, z.  The data should contain at
+                 least 3 points.
+         </para>
+          <para>
+                 Optionally we can give the label and also optionally the
+                 limits.  If limits are not given, they are computed from
+                 the data, <link 
linkend="gel-function-SurfacePlotWindow"><function>SurfacePlotWindow</function></link>
+                 is not used, if you want to use it, pass it in explicitly.
+                 If label is not given then empty label is used.
+         </para>
+          <para>
+           Examples:
+          <screen><prompt>genius></prompt> <userinput>SurfacePlotData([0,0,0;1,0,1;0,1,1;1,1,3])</userinput>
+<prompt>genius></prompt> <userinput>SurfacePlotData(data,"My data")</userinput>
+<prompt>genius></prompt> <userinput>SurfacePlotData(data,-1,1,-1,1,0,10)</userinput>
+<prompt>genius></prompt> <userinput>SurfacePlotData(data,SurfacePlotWindow)</userinput>
+</screen>
+          </para>
+         <para>
+                 Here's an example of how to plot in polar coordinates,
+                 in particular how to plot the function
+                 <userinput>-r^2 * theta</userinput>:
+          <screen><prompt>genius></prompt> <userinput>d:=null; for r=0 to 1 by 0.1 do for theta=0 to 2*pi by 
pi/5 do d=[d;[r*cos(theta),r*sin(theta),-r^2*theta]];</userinput>
+<prompt>genius></prompt> <userinput>SurfacePlotData(d)</userinput>
+</screen>
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-SurfacePlotDataGrid">
+         <term>SurfacePlotDataGrid</term>
+         <listitem>
+          <synopsis>SurfacePlotDataGrid (data,[x1,x2,y1,y2])</synopsis>
+          <synopsis>SurfacePlotDataGrid (data,[x1,x2,y1,y2,z1,z2])</synopsis>
+          <synopsis>SurfacePlotDataGrid (data,[x1,x2,y1,y2],label)</synopsis>
+          <synopsis>SurfacePlotDataGrid (data,[x1,x2,y1,y2,z1,z2],label)</synopsis>
+          <para>
+                 Plot a surface from regular rectangular data.
+                 The data is given in a n by m matrix where the rows are the
+                 x coordinate and the columns are the y coordinate.
+                 The x coordinate is divided into equal n-1 subintervals
+                 and y coordinate is divided into equal m-1 subintervals.
+                 The limits <varname>x1</varname> and <varname>x2</varname>
+                 give the interval on the x-axis that we use, and 
+                 the limits <varname>y1</varname> and <varname>y2</varname>
+                 give the interval on the y-axis that we use.
+                 If the limits <varname>z1</varname> and <varname>z2</varname>
+                 are not given they are computed from the data (to be
+                 the extreme values from the data).
+         </para>
+          <para>
+                 Optionally we can give the label, if label is not given then
+                 empty label is used.
+         </para>
+          <para>
+           Examples:
+          <screen><prompt>genius></prompt> <userinput>SurfacePlotDataGrid([1,2;3,4],[0,1,0,1])</userinput>
+<prompt>genius></prompt> <userinput>SurfacePlotDataGrid(data,[-1,1,-1,1],"My data")</userinput>
+<prompt>genius></prompt> <userinput>d:=null; for i=1 to 20 do for j=1 to 10 d@(i,j) = 
(0.1*i-1)^2-(0.1*j)^2;</userinput>
+<prompt>genius></prompt> <userinput>SurfacePlotDataGrid(d,[-1,1,0,1],"half a saddle")</userinput>
+</screen>
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-VectorfieldClearSolutions">
+         <term>VectorfieldClearSolutions</term>
+         <listitem>
+          <synopsis>VectorfieldClearSolutions ()</synopsis>
+          <para>
+           Clears the solutions drawn by the
+           <link 
linkend="gel-function-VectorfieldDrawSolution"><function>VectorfieldDrawSolution</function></link>
+           function.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-VectorfieldDrawSolution">
+         <term>VectorfieldDrawSolution</term>
+         <listitem>
+          <synopsis>VectorfieldDrawSolution (x, y, dt, tlen)</synopsis>
+          <para>
+           When a vector field plot is active, draw a solution with
+           the specified initial condition.  The standard
+           Runge-Kutta method is used with increment <varname>dt</varname>
+           for an interval of length <varname>tlen</varname>.
+           Solutions stay on the graph until a different plot is shown or until
+           you call 
+           <link 
linkend="gel-function-VectorfieldClearSolutions"><function>VectorfieldClearSolutions</function></link>.
+           You can also use the graphical interface to draw solutions and specify
+           initial conditions with the mouse.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="gel-function-VectorfieldPlot">
+         <term>VectorfieldPlot</term>
+         <listitem>
+          <synopsis>VectorfieldPlot (funcx, funcy)</synopsis>
+          <synopsis>VectorfieldPlot (funcx, funcy, x1, x2, y1, y2)</synopsis>
+          <para>
+           Plot a two dimensional vector field.  The function
+           <varname>funcx</varname>
+           should be the dx/dt of the vectorfield and the function
+           <varname>funcy</varname> should be the dy/dt of the vectorfield.
+           The functions
+           should take two real numbers <varname>x</varname>
+           and <varname>y</varname>, or a single complex
+           number.  When the parameter
+           <link 
linkend="gel-function-VectorfieldNormalized"><function>VectorfieldNormalized</function></link>
+           is <constant>true</constant>, then the magnitude of the vectors is normalized.  That is, only
+           the direction and not the magnitude is shown.
+         </para>
+         <para>
+            Optionally you can specify the limits of the plotting window as
+           <varname>x1</varname>, <varname>x2</varname>,
+           <varname>y1</varname>, <varname>y2</varname>.  If limits are not
+           specified, then the currently set limits apply
+           (See <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>).
+          </para>
+          <para>
+           The parameter
+           <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link>
+           controls the drawing of the legend.
+         </para>
+          <para>
+           Examples:
+          <screen><prompt>genius></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>
 
diff --git a/lib/equation_solving/find_root.gel b/lib/equation_solving/find_root.gel
index ec579ad..981a42e 100644
--- a/lib/equation_solving/find_root.gel
+++ b/lib/equation_solving/find_root.gel
@@ -21,60 +21,61 @@
 
 # The Bisection Method, Section 2.1, Algorithm 2.1, pp. 41-42
 SetHelp ("FindRootBisection", "equation_solving",
-         "Find root of a function using the bisection method")
+         "Find root of a function using the bisection method to within TOL tolerance in up to N iterations.  
f(a) and f(b) must have opposite signs.")
 function FindRootBisection(f,a,b,TOL,N) =
        (
        local *;
 # check arguments
 ## check types
        if(not IsFunction(f)) then
-               (error("find_root_bisection: argument 1 must be a function");bailout)
+               (error("FindRootBisection: argument 1 must be a function");bailout)
        else if(not IsReal(a) or not IsReal(b) or not IsReal(TOL)) then
-               (error("find_root_bisection: arguments 2, 3, 4 must be real values");bailout)
+               (error("FindRootBisection: arguments 2, 3, 4 must be real values");bailout)
        else if(not IsInteger(N)) then
-               (error("find_root_bisection: argument 5 must be an integer");bailout);
+               (error("FindRootBisection: argument 5 must be an integer");bailout);
 ## check bounds
-       if(a>b) then (error("find_root_bisection: argument 2 must be less than or equal to argument 
3");bailout)
-       else if(f(a)*f(b)>0) then (error("find_root_bisection: value of endpoints must have differing 
sign");bailout);
+       if(a>b) then (error("FindRootBisection: argument 2 must be less than or equal to argument 3");bailout)
+       else if(Sign(f(a)) == Sign(f(b))) then (error("FindRootBisection: value of endpoints must have 
differing sign");bailout);
 
 # Start calculating
-       iteration=1;
-       p=a;
+       iteration:=1;
+        a:=float(a);
+        b:=float(b);
+       p:=a;
        while((iteration <= N) or (N==0)) do
        (
         diff=(b-a)/2;
         p=a+diff;
-        if(f(p)==0 or diff<TOL) then (return [true,p,iteration]);
+        if(Sign(f(p))==0 or diff<TOL) then (return [true,p,iteration]);
         increment iteration;
-        if(f(a)*f(b)>0) then (a=p) else (b=p)
+        if(Sign(f(a)) == Sign(f(p))) then (a:=p) else (b:=p)
        );
        [false,p,iteration]
        )
 
-#function root_find_newton
-#FIXME: I can't take derivatives, so this doesn't work
-
 # The Secant Method, Section 2.3, Algorithm 2.4, p. 62
 #FIXME: doesn't work right, check this
 SetHelp ("FindRootSecant", "equation_solving",
-         "Find root of a function using the secant method")
+         "Find root of a function using the secant method to within TOL tolerance in up to N iterations.  
f(a) and f(b) must have opposite signs.")
 function FindRootSecant(f,a,b,TOL,N) =
        (
        local *;
 # check arguments
 ## check types
        if(not IsFunction(f)) then
-               (error("find_root_secant: argument 1 must be a function");bailout)
+               (error("FindRootSecant: argument 1 must be a function");bailout)
        else if(not IsReal(a) or not IsReal(b) or not IsReal(TOL)) then
-               (error("find_root_secant: arguments 2, 3, 4 must be real values");bailout)
+               (error("FindRootSecant: arguments 2, 3, 4 must be real values");bailout)
        else if(not IsInteger(N)) then
-               (error("find_root_secant: argument 5 must be an integer");bailout);
+               (error("FindRootSecant: argument 5 must be an integer");bailout);
 ## check bounds
-       if(a>b) then (error("find_root_secant: argument 2 must be less than or equal to argument 3");bailout)
-       else if(f(a)*f(b)>0) then (error("find_root_secant: value of endpoints must have differing 
sign");bailout);
+       if(a>b) then (error("FindRootSecant: argument 2 must be less than or equal to argument 3");bailout)
+        else if(Sign(f(a)) == Sign(f(b))) then (error("FindRootSecant: value of endpoints must have 
differing sign");bailout);
 
 # Start calculating
        iteration=2;
+        a:=float(a);
+        b:=float(b);
        qa=f(a);
        qb=f(b);
        p=a;
@@ -93,24 +94,26 @@ function FindRootSecant(f,a,b,TOL,N) =
 
 # The Method of False Position, Section 2.3, Algorithm 2.5, p. 64
 SetHelp ("FindRootFalsePosition", "equation_solving",
-         "Find root of a function using the method of false position")
+         "Find root of a function using the method of false position to within TOL tolerance in up to N 
iterations.  f(a) and f(b) must have opposite signs.")
 function FindRootFalsePosition(f,a,b,TOL,N) =
        (
        local *;
 # check arguments
 ## check types
        if(not IsFunction(f)) then
-               (error("find_root_false_position: argument 1 must be a function");bailout)
+               (error("FindRootFalsePosition: argument 1 must be a function");bailout)
        else if(not IsReal(a) or not IsReal(b) or not IsReal(TOL)) then
-               (error("find_root_false_position: arguments 2, 3, 4 must be real values");bailout)
+               (error("FindRootFalsePosition: arguments 2, 3, 4 must be real values");bailout)
        else if(not IsInteger(N)) then
-               (error("find_root_false_position: argument 5 must be an integer");bailout);
+               (error("FindRootFalsePosition: argument 5 must be an integer");bailout);
 ## check bounds
-       if(a>b) then (error("find_root_false_position: argument 2 must be less than or equal to argument 
3");bailout)
-       else if(f(a)*f(b)>0) then (error("find_root_false_position: value of endpoints must have differing 
sign");bailout);
+       if(a>b) then (error("FindRootFalsePosition: argument 2 must be less than or equal to argument 
3");bailout)
+       else if(Sign(f(a)) == Sign(f(b))) then (error("FindRootFalsePosition: value of endpoints must have 
differing sign");bailout);
 
 # Start calculating
        iteration=2;
+        a:=float(a);
+        b:=float(b);
        qa=f(a);
        qb=f(b);
        p=a;
@@ -132,14 +135,14 @@ function FindRootFalsePosition(f,a,b,TOL,N) =
 #FIXME: doesn't work right, check this
 SetHelp ("FindRootMullersMethod", "equation_solving",
          "Find root of a function using the Muller's method")
-function FindRootMullersMethod(f,x1,x2,x3,TOL,N) =
+function FindRootMullersMethod(f,x0,x1,x2,TOL,N) =
        (
        local *;
 # check arguments
 ## check types
        if(not IsFunction(f)) then
                (error("FindRootMullersMethod: argument 1 must be a function");bailout)
-       else if(not IsReal(x1) or not IsReal(x2) or not IsReal(x3) or not IsReal(TOL)) then
+       else if(not IsReal(x0) or not IsReal(x1) or not IsReal(x2) or not IsReal(TOL)) then
                (error("FindRootMullersMethod: arguments 2, 3, 4, 5 must be real values");bailout)
        else if(not IsInteger(N)) then
                (error("FindRootMullersMethod: argument 6 must be an integer");bailout);
@@ -170,5 +173,5 @@ function FindRootMullersMethod(f,x1,x2,x3,TOL,N) =
        d=(d2-d1)/(h2+h1);
        increment i
        );
-       [false,p,iteration]
+       [false,p,i]
 )
diff --git a/lib/library-strings.c b/lib/library-strings.c
index 0a1dcef..69459c2 100644
--- a/lib/library-strings.c
+++ b/lib/library-strings.c
@@ -230,10 +230,10 @@ char *fake = N_("Convert radians to degrees");
 char *fake = N_("Find roots of a cubic polynomial (given as vector of coefficients)");
 char *fake = N_("Use classical Euler's method to numerically solve y'=f(x,y) for initial x0,y0 going to x1 
with n increments, returns y at x1");
 char *fake = N_("Use classical Euler's method to numerically solve y'=f(x,y) for initial x0,y0 going to x1 
with n increments, returns an n+1 by 2 matrix of values");
-char *fake = N_("Find root of a function using the bisection method");
-char *fake = N_("Find root of a function using the method of false position");
+char *fake = N_("Find root of a function using the bisection method to within TOL tolerance in up to N 
iterations.  f(a) and f(b) must have opposite signs.");
+char *fake = N_("Find root of a function using the method of false position to within TOL tolerance in up to 
N iterations.  f(a) and f(b) must have opposite signs.");
 char *fake = N_("Find root of a function using the Muller's method");
-char *fake = N_("Find root of a function using the secant method");
+char *fake = N_("Find root of a function using the secant method to within TOL tolerance in up to N 
iterations.  f(a) and f(b) must have opposite signs.");
 char *fake = N_("Find roots of a polynomial (given as vector of coefficients)");
 char *fake = N_("Find roots of a quartic polynomial (given as vector of coefficients)");
 char *fake = N_("Use classical non-adaptive Runge-Kutta of fourth order method to numerically solve 
y'=f(x,y) for initial x0,y0 going to x1 with n increments, returns y at x1");



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]