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