
    <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-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-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-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 n.</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 calles 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 you 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 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.</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.</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 iff it's 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>Rosser matrix, 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-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 iff 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 iff 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>

      </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>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>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,x1,x2,x3,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>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-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-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 line.
          </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>
          <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-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>
