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

    <copyright lang="en">
      <year>1997-2021</year>
      <holder>Jiří (George) Lebl</holder>
    </copyright>
    <copyright lang="en">
      <year>2004</year>
      <holder>Kai Willadsen</holder>
    </copyright>
<!-- translators: uncomment this:
  <copyright>
   <year>2002</year>
   <holder>ME-THE-TRANSLATOR (Latin translation)</holder>
  </copyright>
-->

    <publisher> 
      <publishername/> 
    </publisher> 

     <legalnotice id="legalnotice">
	<para>Se concede permiso para copiar, distribuir o modificar este documento según las condiciones de la GNU Free Documentation License (GFDL), Versión 1.1 o cualquier versión posterior publicada por la Free Software Foundation sin Secciones invariantes, Textos de portada y Textos de contraportada. Encontrará una copia de la GFDL en este <ulink type="help" url="ghelp:fdl">enlace</ulink> o en el archivo COPYING-DOCS distribuido con este manual.</para>
         <para>Este manual es parte de la colección de manuales GNOME distribuidos bajo la GFDL. Si quiere distribuir este manual separadamente de la colección, puede hacerlo añadiendo una copia de la licencia al manual, tal como se describe en la sección 6 de la licencia.</para>

	<para>Muchos de los nombres usados por empresas para distinguir sus productos y servicios se mencionan como marcas comerciales. Donde aparezcan dichos nombres en cualquier documentación GNOME, y para que los miembros del proyecto de documentación reconozcan dichas marcas comerciales, dichos nombres se imprimen en mayúsculas o iniciales mayúsculas.</para>

	<para lang="en">
	  DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED
	  UNDER  THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE
	  WITH THE FURTHER UNDERSTANDING THAT:

	  <orderedlist>
		<listitem>
		  <para lang="en">DOCUMENT IS PROVIDED ON AN "AS IS" BASIS,
                    WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
                    IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
                    THAT THE DOCUMENT OR MODIFIED VERSION OF THE
                    DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR
                    A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE
                    RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE
                    OF THE DOCUMENT OR MODIFIED VERSION OF THE
                    DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR
                    MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT,
                    YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY
                    CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
                    SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
                    OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS
                    LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED
                    VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER
                    EXCEPT UNDER THIS DISCLAIMER; AND
		  </para>
		</listitem>
		<listitem>
		  <para lang="en">UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL
                       THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE),
                       CONTRACT, OR OTHERWISE, SHALL THE AUTHOR,
                       INITIAL WRITER, ANY CONTRIBUTOR, OR ANY
                       DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION
                       OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH
                       PARTIES, BE LIABLE TO ANY PERSON FOR ANY
                       DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
                       CONSEQUENTIAL DAMAGES OF ANY CHARACTER
                       INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS
                       OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR
                       MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR
                       LOSSES ARISING OUT OF OR RELATING TO USE OF THE
                       DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT,
                       EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF
                       THE POSSIBILITY OF SUCH DAMAGES.
		  </para>
		</listitem>
	  </orderedlist>
	</para>
  </legalnotice>


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

    <authorgroup> 
      <author role="maintainer" lang="en"> 
		<firstname>Jiří</firstname> 
		<surname>Lebl</surname> 
		<affiliation> 
	  		<orgname>Oklahoma State University</orgname> 
	  		<address> <email>jiri.lebl@gmail.com</email> </address> 
		</affiliation> 
      </author> 
      <author lang="en"> 
		<firstname>Kai</firstname> 
		<surname>Willadsen</surname> 
		<affiliation> 
	  		<orgname>University of Queensland, Australia</orgname> 
	  		<address> <email>kaiw@itee.uq.edu.au</email> </address> 
		</affiliation> 
      </author> 
      
<!-- This is appropriate place for other contributors: translators,
     maintainers,  etc. Commented out by default.
     
      <othercredit role="translator">
		<firstname>Latin</firstname> 
		<surname>Translator 1</surname> 
		<affiliation> 
	  		<orgname>Latin Translation Team</orgname> 
	  		<address> <email>translator@gnome.org</email> </address> 
		</affiliation>
		<contrib>Latin translation</contrib>
      </othercredit>
-->
    </authorgroup>


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

    <revhistory>
      <revision lang="en"> 
		<revnumber>0.2</revnumber> 
		<date>October 2021</date> 
		<revdescription> 
	  		<para role="author" lang="en">Jiri (George) Lebl
	    	<email>jiri.lebl@gmail.com</email>
	  		</para>
		</revdescription> 
      </revision> 
    </revhistory>
    <releaseinfo lang="en">This manual describes version 1.0.27 of Genius.
    </releaseinfo> 
    <legalnotice> 
      <title>Comentarios</title> 
      <para lang="en">
	      To report a bug or make a suggestion regarding the <application>Genius Mathematics Tool</application>
	      application or this manual, please visit the
	      <ulink url="http://www.jirka.org/genius.html" type="http">Genius
		      Web page</ulink>
	      or email me at <email>jiri.lebl@gmail.com</email>.
      </para>
<!-- Translators may also add here feedback address for translations -->
    </legalnotice> 
  </bookinfo> 

<!-- ============= Introduction =============================== -->
  <chapter id="genius-introduction"> 
    <title>Introducción</title> 
    <para lang="en">
	The <application>Genius Mathematics Tool</application> application is a general calculator for use as a desktop
        calculator, an educational tool in mathematics and other STEM fields,
	and has found use in research.  The language used in <application>Genius Mathematics Tool</application> is designed to be
	‘mathematical’ in the sense that it should be ‘what
	you mean is what you get’.  Of course, that is not an
	entirely attainable goal.  <application>Genius Mathematics Tool</application> features rationals, arbitrary
	precision integers and multiple precision floats using the GMP library.
	It handles complex numbers using cartesian notation.  It has good
	vector and matrix manipulation and can handle basic linear algebra.
	The programming language allows user defined functions, variables, and
	parameters.
    </para> 

    <para lang="en">
	<application>Genius Mathematics Tool</application> comes in two versions.  One version is the graphical GNOME
	version, which features an IDE style interface and the ability 
	to plot functions of one or two variables.  Parametric plots of curves
	are also supported.  It can plot slope fields,
	vector fields and draw their solutions.  The plots can be exported
	to several formats.
	The command line version does not require GNOME, but
	does not implement any feature that requires the graphical interface,
	such as plotting
    </para> 

    <para lang="en">
	    Parts of this manual describe the graphical version of the calculator.
	    The language that both versions use is the same, it is simply the
	    graphical features such as plotting that are unique to the GUI version.
    </para>

    <para>Generalmente, cuando alguna característica del lenguaje (función, operador, etc...) es nueva en versiones a la 1.0.5 en adelante, se menciona, pero en versiones anteriores a 1.0.5 debería echar un vistazo al archivo NEWS.</para>

  </chapter>

<!-- =========== Getting Started ============================== -->
  <chapter id="genius-getting-started"> 
    <title>Primeros pasos</title> 

    <sect1 id="genius-to-start">
      <title>Para iniciar la <application>herramienta matemática Genius</application></title>
      <para>Puede iniciar la <application>herramienta matemática Genius</application> de las siguientes formas:</para> 
      <variablelist>
        <varlistentry>
          <term>Menú<guimenu>Aplicaciones</guimenu></term>
          <listitem>
	    <para>Dependiendo de su sistema operativo y de su versión, el elemento de menú de la <application>Herramienta matemática Genius</application> puede aparecer en varios lugares diferentes. Puede estar en <guisubmenu>Educación</guisubmenu>, <guisubmenu>Accesorios</guisubmenu>, <guisubmenu>Oficina</guisubmenu>, <guisubmenu>Ciencia</guisubmenu>, o en un submenú similar, dependiendo de su configuración particular. El elemento de menú que está buscando es <guimenuitem>Herramienta matemática Genius</guimenuitem>. Cuando lo haya localizado, pulse en el para iniciar la <application>Herramienta matemática Genius</application>.</para>
	      </listitem>
        </varlistentry>
        <varlistentry>
          <term>Diálogo <guilabel>Ejecutar</guilabel></term>
          <listitem>
	    <para>Dependiendo de la instalación de su sistema, el elemento del menú puede no estar disponible. si no lo está, puede abrir el diálogo «Ejecutar» y ejecutar <command>gnome-genius</command>.</para>
	      </listitem>
        </varlistentry>
        <varlistentry>
    	  <term>Línea de comandos</term>
    	  <listitem>
    	    <para>Para iniciar la versión de GNOME de la<application>herramienta matemática Genius</application> ejecute <command>gnome-genius</command> desde la línea de comandos.</para>
	    <para>Para iniciar sólo la versión de línea de comandos, ejecute el siguiente comando: <command>genius</command>. Esta versión no incluye el entorno gráfico y ciertas funcionalidades, como dibujar, no estarán disponibles.</para> 
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>

    <sect1 id="genius-when-start">
    <title>Al iniciar Genius</title>
      <para>Cuando inicia la versión de la <application>herramienta matemática Genius</application> para GNOME, se muestra la ventana que aparece en la <xref linkend="mainwindow-fig"/>.</para>

      <figure id="mainwindow-fig"> 
        <title>Ventana de la <application>herramienta matemática Genius</application></title> 
        <screenshot> 
          <mediaobject lang="en"> 
            <imageobject>
              <imagedata fileref="figures/genius_window.png" format="PNG" scalefit="1"/> 
            </imageobject>
            <textobject> 
	      <phrase>Shows <application>Genius Mathematics Tool</application> main window. Contains titlebar, menubar,
toolbar and working area. Menubar contains <guilabel>File</guilabel>,
<guilabel>Edit</guilabel>, <guilabel>Calculator</guilabel>,
<guilabel>Examples</guilabel>,
<guilabel>Programs</guilabel>,
<guilabel>Settings</guilabel>, and <guilabel>Help</guilabel> menus.</phrase> 
            </textobject> 
          </mediaobject>
        </screenshot> 
      </figure>

      <para>La ventana de la <application>herramienta matemática Genius</application> contiene los siguientes elementos:</para>
      <variablelist>
        <varlistentry>
          <term>Barra de menú.</term>
          <listitem>
            <para>Los menús de la barra de menús contienen todos los comandos que necesita para trabajar con archivos en la <application>Herramienta matemática Genius</application>. El menú <guilabel>Archivo</guilabel> contiene elementos para cargar y guardar elementos y crear programas nuevos. El comando <guilabel>Cargar y ejecutar...</guilabel> no abre una ventana nueva para el programa, sino que lo ejecuta directamente. Es equivalente al comando <command>load</command>.</para>
	    <para>El menú <guilabel>Calculadora</guilabel> controla el motor de la calculadora. Permite ejecutar el programa actualmente seleccionado o interrumpir el cálculo actual. También puede mirar la expresión completa del último resultado (útil si el último resultado fue demasiado grande para ajustar a la consola), y puede mirar una lista con los valores de todas las variables definidas por el usuario. También puede monitorizar las variables del usuario, que es especialmente útil cuando se está ejecutando un cálculo muy largo, o para depurar un cierto programa. Finalmente, la <guilabel>Calculadora</guilabel> permite trazar funciones usando un cuadro de diálogo amigable.</para>
	   <para>El menú <guilabel>Ejemplos</guilabel> es una lista de programas de ejemplo o demostraciones. Si abre el menú, cargará el ejemplo en un nuevo programa, que puede ejecutar, editar, modificar y guardar. Estos programas deberían estar bien documentados y generalmente muestran alguna característica de <application>Herramienta matemática Genius</application> o algunos conceptos matemáticos.</para>
	   <para>El menú <guilabel>Programas</guilabel> muestra una lista de programas abiertos y le permite cambiar a uno de ellos.</para>
	   <para>Los otros menús tienen funciones similares a las de otras aplicaciones.</para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Barra de herramientas.</term>
          <listitem>
            <para>La barra de herramientas contiene un subconjunto de comandos a los que puede acceder desde la barra de menús.</para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Área de trabajo</term>
          <listitem>
            <para>El área de trabajo es el método primario para interactuar con la aplicación.</para>
	    <para>Inicialmente, el área de trabajo sólo tenía la pestaña <guilabel>Consola</guilabel>, que es el principal medio de interacción con la calculadora. Aquí puede escribir expresiones y el resultado se devuelve inmediatamente después de pulsar la tecla «Intro».</para>
	    <para>Alternativamente, puede escribir programas más largos y éstos pueden aparecer en pestañas separadas. Los programas son un conjunto de comandos o funciones que se pueden ejecutar a la vez sin tener que ejecutarlos desde una terminal. Los programas se pueden guardar en archivos para su posterior recuperación.</para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>

  </chapter>

<!-- ================ Usage =================================== -->
  <chapter id="genius-usage"> 
    <title>Uso básico</title> 

    <sect1 id="genius-usage-workarea"> 
      <title>Usar el área de trabajo</title> 

      <para>Normalmente, interactúa con la calculadora en la pestaña <guilabel>Consola</guilabel> del área de trabajo. Si ejecuta la versión de solo texto, entonces la consola será el único medio disponible. Si quiere usar la <application>Herramienta matemática Genius</application> como una calculadora solamente, simplemente escriba aquí su expresión y se evaluará, mostrando su resultado en pantalla.</para>

      <para lang="en">
	      To evaluate an expression, type it into the <guilabel>Console</guilabel> work area and press enter.
	      Expressions are written in a
language called GEL.  The most simple GEL expressions just looks like
mathematics.  For example
<screen lang="en"><prompt>genius&gt; </prompt><userinput>30*70 + 67^3.0 + ln(7) * (88.8/100)</userinput>
</screen>
or
<screen lang="en"><prompt>genius&gt; </prompt><userinput>62734 + 812634 + 77^4 mod 5</userinput>
</screen>
or
<screen lang="en"><prompt>genius&gt; </prompt><userinput>| sin(37) - e^7 |</userinput>
</screen>
or
<screen lang="en"><prompt>genius&gt; </prompt><userinput>sum n=1 to 70 do 1/n</userinput>
</screen>
(Last is the harmonic sum from 1 to 70)
</para>
<para lang="en">
To get a list of functions and commands, type:
<screen lang="en"><prompt>genius&gt; </prompt><userinput>help</userinput>
</screen>
If you wish to get more help on a specific function, type:
<screen lang="en"><prompt>genius&gt; </prompt><userinput>help FunctionName</userinput>
</screen>
To view this manual, type:
<screen lang="en"><prompt>genius&gt; </prompt><userinput>manual</userinput>
</screen>
</para>
<para lang="en">
Suppose you have previously saved some GEL commands as a program to a file and
you now want to execute them.
To load this program from the file <filename>path/to/program.gel</filename>,
type
<screen lang="en"><prompt>genius&gt; </prompt><userinput>load path/to/program.gel</userinput>
</screen>
<application>Genius Mathematics Tool</application> keeps track of the current directory.
To list files in the current directory type <command>ls</command>, to change directory
do <userinput>cd directory</userinput> as in the UNIX command shell.
</para>
    </sect1>

    <sect1 id="genius-usage-create-program"> 
      <title>Crear un programa nuevo</title> 
      <para lang="en">
	      If you wish to enter several more complicated commands, or perhaps write a complicated
	      function using the <link linkend="genius-gel">GEL</link> language, you can create a new
	     program; really just a file with many commands.
      </para>
      <para>Para escribir un programa nuevo, eliga <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Programa Nuevo</guimenuitem></menuchoice>. Aparecerá una pestaña nueva en el área de trabajo. Puede escribir un programa <link linkend="genius-gel">GEL</link> en esta área de trabajo. Una vez que haya escrito su programa, puede ejecutarlo desde <menuchoice><guimenu>Calculadora</guimenu><guimenuitem>Ejecutar</guimenuitem></menuchoice> (o el botón de la barra de herramientas <guilabel>Ejecutar</guilabel>). Esto ejecutará su programa y mostrará cualquier salida en la pestaña <guilabel>Consola</guilabel>. Ejecutar un programa es equivalente a tomar el texto del programa y escribirlo en la consola. La única diferencia es que esta entrada se realiza independientemente de la consola y solo la salida va hacia la consola. <menuchoice><guimenu>Calculadora</guimenu><guimenuitem>Ejecutar</guimenuitem></menuchoice> siempre ejecutará el programa actualmente seleccionado incluso si se encuentra en la pestaña <guilabel>Consola</guilabel>. El programa actual tiene su letra en negrita. Para seleccionar un programa, simplemente pulse sobre su pestaña.</para>
      <para>Para guardar el programa que acaba de escribir, elija <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Guardar como...</guimenuitem></menuchoice>. Al igual que en otros programas puede elegir <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Guardar</guimenuitem></menuchoice> para guardar un programa que ya tenía un nombre asignado. Si tiene muchos programas abiertos que ha editado y quiere guardarlos, puede hacerlo eligiendo <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Guardar todo</guimenuitem></menuchoice>.</para>
      <para>Los programas que no han guardado los cambios todavía, tienen un símbolo «[+]» junto al nombre de archivo. Así puede ver si el archivo en la pestaña actual y el que está guardado en el disco, difieren en su contenido. Los programas que no se han nombrado todavía, se consideran siempre como no guardados, por lo que no se muestra el símbolo «[+]».</para>
    </sect1>

    <sect1 id="genius-usage-open-program"> 
      <title>Abrir y ejecutar un programa</title> 
      <para>Para abrir un archivo, elija <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Abrir</guimenuitem></menuchoice>. En el área de trabajo aparecerá una pestaña nueva que contiene al archivo. Puede usarla para editarlo.</para>
      <para>Para ejecutar un programa desde un archivo, elija <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Cargar y ejecutar...</guimenuitem></menuchoice>. Esto ejecutará el programa sin abrir en una pestaña separada. Es equivalente al comando <command>load</command>.</para>
      <para>Si ha hecho cambios en un archivo y quiere descartarlos y volver a la versión original del disco, puede elegir la opción de menú <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Recargar desde el disco</guimenuitem></menuchoice>. Esto es útil para experimentar con un programa y hacer cambios temporales, ejecutar el programa, pero no hacer que dichos cambios sean permanentes.</para>
    </sect1>

  </chapter>

  <!-- ============= Plotting ============================== -->
  <chapter id="genius-gel-plotting">
    <title>Dibujar</title>

    <para>El soporte de dibujo solo está disponible para la versión gráfica de GNOME. Todo el dibujo disponible desde la interfaz gráfica está disponible en la ventana <guilabel>Crear dibujo</guilabel>. Puede acceder a esta ventana pulsando en el botón <guilabel>Dibujo</guilabel> de la barra de herramientas o seleccionando <guilabel>Dibujo</guilabel> desde el menú <guilabel>Calculadora</guilabel>. También puede acceder a las funcionalidades de dibujo usando las <link linkend="genius-gel-function-list-plotting">funciones de trazado</link> del lenguaje GEL. Consulte la <xref linkend="genius-gel"/> para aprender a introducir expresiones que entienda Genius.</para>

    <sect1 id="genius-line-plots">
      <title>Trazado de líneas</title>
      <para lang="en">
	To graph real-valued functions of one variable, open the <guilabel>Create Plot</guilabel>
	window.  You can also use the
        <link linkend="gel-function-LinePlot"><function>LinePlot</function></link> function
	on the command line (see its documentation).  And by the words line plot, we mean plots in the plane,
	as opposed to surface plots, which are in three dimensions.
      </para>
      <para>Una vez que pulse el botón <guilabel>Dibujo</guilabel>, se abre una ventana con algunas pestañas en ella. Se encontrará con la pestaña <guilabel>Dibujo de la línea de función</guilabel> y dentro de ella encontrará la pestaña <guilabel>Funciones / Expresiones</guilabel>. Consulte la <xref linkend="lineplot-fig"/>.</para>

      <figure id="lineplot-fig"> 
        <title>Crear una ventana de dibujo</title> 
        <screenshot> 
          <mediaobject lang="en"> 
            <imageobject>
              <imagedata fileref="figures/line_plot.png" format="PNG" scalefit="1"/> 
            </imageobject>
            <textobject> 
              <phrase>Shows the line plotting window.</phrase> 
            </textobject> 
          </mediaobject> 
        </screenshot> 
      </figure>

      <para lang="en">
	Type expressions with <userinput>x</userinput> as
	the independent variable into the textboxes.  Alternatively you can give names of functions such as
	<userinput>cos</userinput> rather then having to type <userinput>cos(x)</userinput>.
	You can graph up to ten functions.  If you make a mistake and Genius cannot
	parse the input it will signify this with a warning icon on the right of the text
	input box where the error occurred, as well as giving you an error dialog.
	You can change the ranges of the dependent and independent variables in the bottom
	part of the dialog.  In the boxes for the ranges, simple expressions are allowed,
	such as <userinput>2*pi</userinput> or <userinput>10^3</userinput>.
	The <varname>y</varname> (dependent) range can be set automatically by turning on the <guilabel>Fit dependent axis</guilabel>
	checkbox.
	The names of the variables can also be changed.
	Pressing the <guilabel>Plot</guilabel> button produces the graph shown in <xref linkend="lineplot2-fig"/>.
      </para>
      <para>Las variables se pueden renombrar al pulsar el botón <guilabel>Cambiar nombres variables...</guilabel>, lo que es útil si quiere imprimir o guardar la figura y no quiere utilizar los nombres predeterminados. Finalmente, puede evitar imprimir la leyenda y las etiquetas de los ejes completamente, lo que también es útil si está imprimiendo o guardando, cuando la leyenda podría ser confusa.</para>

      <figure id="lineplot2-fig"> 
        <title>Ventana de dibujo</title> 
        <screenshot> 
          <mediaobject lang="en"> 
            <imageobject>
              <imagedata fileref="figures/line_plot_graph.png" format="PNG" scalefit="1"/> 
            </imageobject>
            <textobject> 
              <phrase>The graph produced.</phrase> 
            </textobject> 
          </mediaobject> 
        </screenshot> 
      </figure>

      <para>Desde aquí puede imprimir el dibujo, crear un PostScript encapsulado o un PNG del dibujo, o cambiar la escala. Si el eje dependiente no se ha establecido correctamente, puede hacer que Genius lo ajuste buscando los extremos de las funciones representadas.</para>

      <para>Para dibujar usando la línea de comandos, consulte la documentación de la función <link linkend="gel-function-LinePlot"><function>LinePlot</function></link>.</para>
    </sect1>

    <sect1 id="genius-parametric-plots">
      <title>Gráficos paramétricos</title>
      <para>En la ventana de crear dibujo, también puede elegir la pestaña <guilabel>Paramétrico</guilabel> para crear dibujos paramétricos bidimensionales. De este modo, puede dibujar una única función paramétrica. Puede especificar los puntos como <varname>x</varname> e <varname>y</varname>, o dar un número complejo único como una función de la variable <varname>t</varname>. El rango de la variable <varname>t</varname> se da explícitamente, y la función se simplifica de acuerdo al incremento dado. El rango <varname>x</varname> e <varname>y</varname> se puede establecer automáticamente activando la casilla <guilabel>Ajustar al eje dependiente</guilabel> o se puede establecer explícitamente. consulte la <xref linkend="paramplot-fig"/>.</para>

      <figure id="paramplot-fig"> 
        <title>Pestaña dibujo paramétrico</title> 
        <screenshot> 
          <mediaobject lang="en"> 
            <imageobject>
              <imagedata fileref="figures/parametric.png" format="PNG" scalefit="1"/> 
            </imageobject>
            <textobject> 
              <phrase>Parametric plotting tab in the <guilabel>Create Plot</guilabel> window.</phrase> 
            </textobject> 
          </mediaobject> 
        </screenshot> 
      </figure>

      <para>Puede ver un ejemplo de una gráfica de una función paramétrica en la <xref linkend="paramplot-fig"/>. Puede realizar operaciones similares en esta gráfica, así como en la otras gráficas de funciones lineales. Para dibujar usando la línea de comandos, consulte la documentación de las funciones <link linkend="gel-function-LinePlotParametric"><function>LinePlotParametric</function></link> o <link linkend="gel-function-LinePlotCParametric"><function>LinePlotCParametric</function></link>.</para>

      <figure id="paramplot2-fig"> 
        <title>Gráfico paramétrico</title> 
        <screenshot> 
          <mediaobject lang="en"> 
            <imageobject>
              <imagedata fileref="figures/parametric_graph.png" format="PNG" scalefit="1"/> 
            </imageobject>
            <textobject> 
              <phrase>Parametric plot produced</phrase> 
            </textobject> 
          </mediaobject> 
        </screenshot> 
      </figure>

    </sect1>

    <sect1 id="genius-slopefield-plots">
      <title>Dibujos de campos de inclinación</title>
      <para>En la ventana de crear dibujo, también puede elegir la pestaña <guilabel>Campo de inclinación</guilabel> para crear dibujos de campos de inclinación bidimensionales. Para dibujar usando la línea de comandos, conuslte la documentación de la función <link linkend="gel-function-SlopefieldPlot"><function>SlopefieldPlot</function></link>.</para>

      <para>Cuando un campo de inclinación está activo, hay un menú adicional disponible <guilabel>Solucionador</guilabel>, a través del cual puede abrir el cuadro de diálogo del mismo nombre. Aquí puede tener soluciones específicas de dibujo de Genius. Puede especificar condiciones iniciales en el diálogo, o puede pulsar directamente en el dibujo para indicar el punto inicial. Mientras el diálogo del solucionador esté activo, la ampliación al pulsar y arrastrar no funcionará. Si quiere ampliar usando el cursor tendrá que cerrar el diálogo primero.</para>

      <para>El solucionador usa el método Runge-Kutta estándar. Los gráficos se quedarán en la pantalla hasta que los borre. El solucionador se detendrá cuando alcance el límite de la ventana de dibujo. La ampliación no cambia los límites o los parámetros de la solución, tendrá que borrar y redibujar con los parámetros apropiados. También puede usar la función <link linkend="gel-function-SlopefieldDrawSolution"><function>SlopefieldDrawSolution</function></link> para dibujar soluciones desde la línea de comandos o programas.</para>

    </sect1>

    <sect1 id="genius-vectorfield-plots">
      <title>Gráficos de campos de vectores</title>
      <para>En la ventana de crear dibujo, también puede elegir la pestaña <guilabel>Campo vectorial</guilabel> para crear un dibujo de campos vectoriales bidimensionales. Con este tipo de gráficos se pueden realizar operaciones similares a las que se hacen con otros gráficos de líneas. Para dibujar usando la línea de comandos, consulte la documentación de la función <link linkend="gel-function-VectorfieldPlot"><function>VectorfieldPlot</function></link>.</para>

      <para>De manera predeterminada se muestra la dirección y la magnitud del campo vectorial. Para mostrar únicamente la dirección y no la magnitud, normalice la longitud de las flechas habilitando la opción pertinente.</para>

      <para>Cuando un campo vectorial está activo, hay un menú <guilabel>Resolutor</guilabel> adicional disponible a través del cuál puede abrir el diálogo del Resolutor. Aquí encontrará soluciones gráficas específicas de Genius para las condiciones iniciales dadas. Puede especificar condiciones iniciales en el diálogo o pulsar en el dibujo directamente para especificar el punto inicial. Mientras el diálogo del resolutor esté activa, la opción de aumentar el gráfico pulsando y arrastrando no funcionará. Debe cerrar el diálogo primero si quiere aumentar el gráfico con el ratón.</para>

      <para>El resolutor usa el método estándar de Runge-Kutta. Los gráficos resultantes permanecerán en la pantalla hasta que se limpie. Aumentar el gráfico no cambia los límites o parámetros de las soluciones, tendrá que limpiar y redibujarlos con los parametros adecuados. También puede usar la función <link linkend="gel-function-VectorfieldDrawSolution"><function>VectorfieldDrawSolution</function></link> para dibujar soluciones desde la línea de comandos o desde programas.</para>

    </sect1>

    <sect1 id="genius-surface-plots">
      <title>Gráficos de superficie</title>
      <para>Genius también puede dibujar superficies. Seleccione la pestaña <guilabel>Dibujar superficie</guilabel> en el cuaderno de notas principal de la ventana <guilabel>Crear gráfico</guilabel>. Aquí puede especificar una expresión que use o bien <varname>x</varname> e <varname>y</varname> como variables reales independientes o bien <varname>z</varname> como variable compleja (donde <varname>x</varname> sea la parte real de <varname>z</varname> e <varname>y</varname> la parte imaginaria). Por ejemplo, para dibujar los módulos de la función coseno de variable compleja puede escribir <userinput>|cos(z)|</userinput>. Esto sería equivalente a <userinput>|cos(x+1i*y)|</userinput>. Consulte la <xref linkend="surfaceplot-fig"/>. Para dibujar desde la línea de comandos véase la documentación de la función <link linkend="gel-function-SurfacePlot"><function>SurfacePlot</function></link>.</para>
      <para>El rango <varname>z</varname> puede establecerse automáticamente al activar el cuadro de selección <guilabel>Ajustar eje dependiente</guilabel>. Las variables se pueden renombrar al pulsar el botón <guilabel>Cambiar nombres variable...</guilabel>, lo que es útil si quiere imprimir o guardar la figura y no quiere utilizar los nombres predeterminados. Finalmente, puede evitar imprimir la leyenda y las etiquetas de los ejes completamente, lo que también es útil si está imprimiendo o guardando, cuando la leyenda podría ser confusa.</para>

      <figure id="surfaceplot-fig"> 
        <title>Gráfico de superficie</title> 
        <screenshot> 
          <mediaobject lang="en"> 
            <imageobject>
              <imagedata fileref="figures/surface_graph.png" format="PNG" scalefit="1"/> 
            </imageobject>
            <textobject> 
              <phrase>Modulus of the complex cosine function.</phrase> 
            </textobject> 
          </mediaobject> 
        </screenshot> 
      </figure>

      <para>En el modo de superficie, las teclas izquierda y derecha de su teclado, rotarán la vista a lo largo del eje z. Alternativamente puede rotar en cualquier eje seleccionando <guilabel>Rotar eje...</guilabel> en el menú <guilabel>Ver</guilabel>. El menú <guilabel>Ver</guilabel> también tiene un modo de vista superior que permite rotar el gráfico de modo que el eje z se enfrenta directamente, es decir, vemos el gráfico desde la parte superior y obtenemos los colores que definen los valores de la función obteniendo así un gráfico de temperatura de la función. Finalmente pruebe <guilabel>Iniciar animación de rotación</guilabel>, para iniciar una lenta rotación continua. Esto es especialmente bueno si se utiliza <application>Herramienta matemática Genius</application> para presentar a un público.</para>

    </sect1>

  </chapter>

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

	<para>GEL significa Lenguaje de Extensión de Genius. Éste es el lenguaje que se utiliza para escribir programas para Genius. Un programa en GEL es simplemente una expresión que se evalúa como un número, una matriz, o cualquier objeto en GEL. Por lo tanto, la <application>Herramienta matemática Genius</application> se puede utilizar como una simple calculadora o como una herramienta de investigación teórica muy potente. La sintaxis está pensada para suavizar lo más posible la curva de aprendizaje, especialmente para usarlo como calculadora.</para>

    <sect1 id="genius-gel-values">
      <title>Valores</title>

      <para>Los valores en GEL pueden ser <link linkend="genius-gel-values-numbers">números</link>, <link linkend="genius-gel-values-booleans">booleanos</link> o <link linkend="genius-gel-values-strings">cadenas</link>. GEL también trata las <link linkend="genius-gel-matrices">matrices</link> como valores. Los valores se pueden usar en cálculos, asignarse a variables y devolverse desde funciones, entre otros usos.</para>

      <sect2 id="genius-gel-values-numbers">
        <title>Números</title>
        <para lang="en">
Integers are the first type of number in GEL. Integers are written in the normal way.
<programlisting lang="en">1234
</programlisting>
Hexadecimal and octal numbers can be written using C notation. For example:
<programlisting lang="en">0x123ABC
01234
</programlisting>
Or you can type numbers in an arbitrary base using <literal>&lt;base&gt;\&lt;number&gt;</literal>. Digits higher than 10 use letters in a similar way to hexadecimal. For example, a number in base 23 could be written:
<programlisting lang="en">23\1234ABCD
</programlisting>
        </para>

        <para lang="en">
The second type of GEL number is rationals. Rationals are simply achieved by dividing two integers. So one could write:
<programlisting lang="en">3/4
</programlisting>
to get three quarters. Rationals also accept mixed fraction notation. So in order to get one and three tenths you could write:
<programlisting lang="en">1 3/10
</programlisting>
        </para>

        <para lang="en">
The next type of number is floating point. These are entered in a similar fashion to C notation. You can use <literal>E</literal>, <literal>e</literal> or <literal>@</literal> as the exponent delimiter. Note that using the exponent delimiter gives a float even if there is no decimal point in the number. Examples:
<programlisting lang="en">1.315
7.887e77
7.887e-77
.3
0.3
77e5
</programlisting>
	When Genius prints a floating point number it will always append a
	<computeroutput>.0</computeroutput> even if the number is whole.  This is to indicate that
	floating point numbers are taken as imprecise quantities.  When a number is written in the
	scientific notation, it is always a floating point number and thus Genius does not
	print the <computeroutput>.0</computeroutput>.
        </para>

        <para lang="en">
The final type of number in GEL is the complex numbers. You can enter a complex number as a sum of real and imaginary parts. To add an imaginary part, append an <literal>i</literal>.  Here are examples of entering complex numbers:
<programlisting lang="en">1+2i
8.01i
77*e^(1.3i)
</programlisting>
        </para>

        <important>
          <para>Al introducir números imaginarios, deba haber un número delante de la <literal>i</literal>. Si usa <literal>i</literal> por sí sola, Genius lo interpretará como una referencia a la variable <varname>i</varname>. Si necesita referirse a <literal>i</literal> por sí sola, use <literal>1i</literal> en su lugar.</para>

          <para>Para usar notación de fracciones mixtas con números imaginarios debe colocar las fracciones mixtas entre paréntesis (ej. <userinput>(1 2/5)i</userinput>).</para>
        </important>

      </sect2>


      <sect2 id="genius-gel-values-booleans">
        <title>Booleanos</title>
        <para>Genius también soporta valores booleanos nativos. Las dos constantes booleanas están definidas como <constant>true</constant> y <constant>false</constant>; estos identificadores se pueden utilizar como cualquier otra variable. Así mismo, puede utilizar los identificadores <constant>True</constant>, <constant>TRUE</constant>, <constant>False</constant> y <constant>FALSE</constant> como alias de las anteriores.</para>
        <para>Puede usar un valor booleano o cualquier expresión que produzca un número o valor booleano en cualquier lugar donde se espera una expresión Booleana. Si Genius necesita evaluar un valor numérico como un valor booleano interpretará «0» como <constant>false</constant> y cualquier otro valor como <constant>true</constant>.</para>
        <para lang="en">
In addition, you can do arithmetic with Boolean values. For example:
<programlisting lang="en">( (1 + true) - false ) * true
</programlisting>
is the same as:
<programlisting lang="en">( (true or true) or not false ) and true
</programlisting>
Only addition, subtraction and multiplication are supported. If you mix numbers with Booleans in an expression then the numbers are converted to Booleans as described above. This means that, for example:
<programlisting lang="en">1 == true
</programlisting>
always evaluates to <constant>true</constant> since 1 will be converted to <constant>true</constant> before being compared to <constant>true</constant>.
        </para>
      </sect2>


      <sect2 id="genius-gel-values-strings">
        <title>Cadenas</title>
        <para lang="en">
Like numbers and Booleans, strings in GEL can be stored as values inside variables and passed to functions. You can also concatenate a string with another value using the plus operator. For example:
<programlisting lang="en">a=2+3;"The result is: "+a
</programlisting>
will create the string:
<programlisting lang="en">The result is: 5
</programlisting>
You can also use C-like escape sequences such as <literal>\n</literal>,<literal>\t</literal>,<literal>\b</literal>,<literal>\a</literal> and <literal>\r</literal>. To get a <literal>\</literal> or <literal>"</literal> into the string you can quote it with a <literal>\</literal>. For example:
<programlisting lang="en">"Slash: \\ Quotes: \" Tabs: \t1\t2\t3"
</programlisting>
will make a string:
<programlisting lang="en">Slash: \ Quotes: " Tabs: 	1	2	3
</programlisting>
Do note however that when a string is returned from a function, escapes are
quoted, so that the output can be used as input.  If you wish to print the
string as it is (without escapes), use the 
<link linkend="gel-function-print"><function>print</function></link>
or
<link linkend="gel-function-printn"><function>printn</function></link> functions.
        </para>
        <para lang="en">
		In addition, you can use the library function <link linkend="gel-function-string"><function>string</function></link> to convert anything to a string. For example:
<programlisting lang="en">string(22)
</programlisting>
will return
<programlisting lang="en">"22"
</programlisting>
Strings can also be compared with <literal>==</literal> (equal), <literal>!=</literal> (not equal) and <literal>&lt;=&gt;</literal> (comparison) operators
        </para>
      </sect2>


      <sect2 id="genius-gel-values-null">
        <title>Nulo</title>
        <para>Existe un valor especial llamado <constant>null</constant>. No se permite efectuar operaciones sobre él y no se muestra nada cuando se devuelve este valor. Por lo tanto, <constant>null</constant> es útil cuando no quiera ninguna salida de una expresión. El valor <constant>null</constant> puede obtenerse como una expresión al escribir <literal>.</literal>, la constante <constant>null</constant> o nada. Nada referido a que si termina una expresión con un separador <literal>;</literal>, equivale a terminar la expresión con un separador seguido de <constant>null</constant>.</para>
        <para lang="en">
Example:
<programlisting lang="en">x=5;.
x=5;
</programlisting>
        </para>
<para>Algunas funciones devuelven <constant>null</constant> cuando no pueden devolver un valor o producen algún error. También se usa <constant>null</constant> como un vector o matriz vacía o una referencia vacía.</para>
      </sect2>

    </sect1>

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

      <para lang="en">
Syntax:
<programlisting lang="en">VariableName
</programlisting>
Example:
<screen lang="en"><prompt>genius&gt; </prompt><userinput>e</userinput>
= 2.71828182846
</screen>
      </para>

      <para>Para evaluar una variable por sí misma, simplemente introduzca el nombre de la variable. Esto devolverá el valor de la variable. Puede usar una variable en cualquier lugar donde pueda utilizar un número o cadena. Además, las variables son necesarias al definir funciones que toman argumentos (consulte la <xref linkend="genius-gel-functions-defining"/>).</para>

      <tip>
        <title>Usar completado con el tabulador</title>
        <para>Puede usar el completado con el tabulador para que Genius complete nombres de las variables. Intente escribir las primeras letras del nombre de la variable y pulse <userinput>Tab</userinput>.</para>
      </tip>

      <important>
        <title>Los nombres de variables son sensibles a la capitalización</title>
        <para>Los nombres de variables son sensibles a la capitalización. Esto significa que las variables <varname>hello</varname>, <varname>HELLO</varname> y <varname>Hello</varname> son todas diferentes.</para>
      </important>


      <sect2 id="genius-gel-variables-setting">
        <title>Configurar variables</title>
        <para lang="en">
Syntax:
<programlisting lang="en"><![CDATA[<identifier> = <value>
<identifier> := <value>]]>
</programlisting>
Example:
<programlisting lang="en">x = 3
x := 3
</programlisting>
        </para>

        <para lang="en">
To assign a value to a variable, use the <literal>=</literal> or <literal>:=</literal> operators. These operators set the value of the variable and return the value you set, so you can do things like
<programlisting lang="en">a = b = 5
</programlisting>
This will set <varname>b</varname> to 5 and then also set <varname>a</varname> to 5.
        </para>

        <para>Los operadores <literal>=</literal> y <literal>:=</literal> se pueden usar para asignar variables. La diferencia entre ellos es que <literal>:=</literal> siempre actuará como operador de asignación mientras que <literal>=</literal> se puede interpretar como prueba de igualdad usado en un contexto donde se espera una variable booleana.</para>

	<para>Para temas relacionados con el ámbito de las variables, consulte la <xref linkend="genius-gel-variables-global"/>.</para>
      </sect2>

      <sect2 id="genius-gel-variables-built-in">
        <title>Variables integradas</title>
        <para>GEL tiene un número de «variables» predeterminadas, tales como <varname>e</varname>, <varname>pi</varname> o <varname>GoldenRatio</varname>. Éstas se usan ampliamente con su valor predeterminado y no se pueden modificar. Existen más variables predeterminadas. Consulte la <xref linkend="genius-gel-function-list-constants"/> para obtener la lista completa. Observe que <varname>i</varname> no es el valor predeterminado de la raíz cuadrada de un número negativo (el número imaginario), y es indefinido que permite usarlo como un contador. Si quiere escribir un número imaginario, necesita utilizar <userinput>1i</userinput>.</para>
      </sect2>


      <sect2 id="genius-gel-previous-result">
        <title>Resultado de la variable anterior</title>
        <para lang="en">
The <varname>Ans</varname> and <varname>ans</varname> variables can be used to get the result of the last expression. For example, if you had performed some calculation, to add 389 to the result you could do:
<programlisting lang="en">Ans+389
</programlisting>
        </para>
      </sect2>
    </sect1>

    <sect1 id="genius-gel-functions">
      <title>Usar funciones</title>

      <para lang="en">
Syntax:
<programlisting lang="en">FunctionName(argument1, argument2, ...)
</programlisting>
Example:
<programlisting lang="en">Factorial(5)
cos(2*pi)
gcd(921,317)
</programlisting>

To evaluate a function, enter the name of the function, followed by the arguments (if any) to the function in parentheses. This will return the result of applying the function to its arguments. The number of arguments to the function is, of course, different for each function.
      </para>

      <para>Hay muchas funciones integradas, como <link linkend="gel-function-sin"><function>sin</function></link>, <link linkend="gel-function-cos"><function>cos</function></link> y <link linkend="gel-function-tan"><function>tan</function></link>. Puede usar la función integrada <link linkend="gel-command-help"><function>help</function></link> para obtener una lista de todas las funciones integradas, o consultar la <xref linkend="genius-gel-function-list"/> para obtener una lista completa..</para>

      <tip>
        <title>Usar completado con el tabulador</title>
        <para>Puede usar completado con el tabulador para que Genius complete nombres de funciones. Pruebe a escribir las primeras letras del nombre y pulse <userinput>Tab</userinput>.</para>
      </tip>

      <important>
        <title>Los nombres de las funciones son sensibles a mayúsculas.</title>
        <para>Los nombres de las funciones son sensibles a la capitalización. Esto significa que las funciones <function>haceralgo</function>, <function>HACERALGO</function> y <function>HacerAlgo</function> son todas diferentes entre sí.</para>
      </important>


      <sect2 id="genius-gel-functions-defining">
        <title>Definir funciones</title>
        <para lang="en">
Syntax:
<programlisting lang="en"><![CDATA[function <identifier>(<comma separated arguments>) = <function body>
<identifier> = (`() = <function body>)
]]></programlisting>
The <literal>`</literal> is the backquote character, and signifies an anonymous function. By setting it to a variable name you effectively define a function.
        </para>

        <para lang="en">
A function takes zero or more comma separated arguments, and returns the result of the function body. Defining your own functions is primarily a matter of convenience; one possible use is to have sets of functions defined in GEL files that Genius can load in order to make them available.
Example:
<programlisting lang="en">function addup(a,b,c) = a+b+c
</programlisting>
then <userinput>addup(1,4,9)</userinput> yields 14
        </para>
      </sect2>

      <sect2 id="genius-gel-functions-variable-argument-lists">
        <title>Listas de argumentos de variables</title>
        <para lang="en">
If you include <literal>...</literal> after the last argument name in the function declaration, then Genius will allow any number of arguments to be passed in place of that argument. If no arguments were passed then that argument will be set to <constant>null</constant>. Otherwise, it will be a horizontal vector containing all the arguments. For example:
<programlisting lang="en">function f(a,b...) = b
</programlisting>
Then <userinput>f(1,2,3)</userinput> yields <computeroutput>[2,3]</computeroutput>, while <userinput>f(1)</userinput> yields a <constant>null</constant>.
        </para>
      </sect2>


      <sect2 id="genius-gel-functions-passing-functions">
        <title>Pasar funciones a funciones</title>

        <para>En Genius es posible pasar una función como argumento de otra función. Esto se puede hacer usando «nodos de funciones» o funciones anónimas.</para>

        <para lang="en">
If you do not enter the parentheses after a function name, instead of being evaluated, the function will instead be returned as a ‘function node’. The function node can then be passed to another function.
Example:
<programlisting lang="en">function f(a,b) = a(b)+1;
function b(x) = x*x;
f(b,2)
</programlisting>
        </para>
        <para lang="en">
To pass functions that are not defined,
you can use an anonymous function (see <xref linkend="genius-gel-functions-defining"/>).  That is, you want to pass a function without giving it a name.
Syntax:
<programlisting lang="en"><![CDATA[function(<comma separated arguments>) = <function body>
`(<comma separated arguments>) = <function body>
]]></programlisting>
Example:
<programlisting lang="en">function f(a,b) = a(b)+1;
f(`(x) = x*x,2)
</programlisting>
This will return 5.
        </para>
      </sect2>


    <sect2 id="genius-gel-functions-operations">
      <title>Operaciones con funciones</title>
      <para lang="en">
	      Some functions allow arithmetic operations, and some single argument functions such as <link linkend="gel-function-exp"><function>exp</function></link> or <link linkend="gel-function-ln"><function>ln</function></link>, to operate on the function. For example,
<programlisting lang="en">exp(sin*cos+4)
</programlisting>
will return a function that takes <varname>x</varname> and returns <userinput>exp(sin(x)*cos(x)+4)</userinput>.  It is functionally equivalent
to typing
<programlisting lang="en">`(x) = exp(sin(x)*cos(x)+4)
</programlisting>

This operation can be useful when quickly defining functions. For example to create a function called <varname>f</varname>
to perform the above operation, you can just type:
<programlisting lang="en">f = exp(sin*cos+4)
</programlisting>
It can also be used in plotting. For example, to plot sin squared you can enter:
<programlisting lang="en">LinePlot(sin^2)
</programlisting>
      </para>

      <warning>
        <para>No todas las funciones se pueden usar de este modo. Por ejemplo, cuando usa una función binaria las funciones deben aceptar el mismo número de argumentos.</para>
      </warning>
    </sect2>


    </sect1>

    <sect1 id="genius-gel-separator">
      <title>Separador</title>
      <para lang="en">
	      GEL is somewhat different from other languages in how it deals with multiple commands and functions.
	      In GEL you must chain commands together with a separator operator.
That is, if you want to type more than one expression you have to use
the <literal>;</literal> operator in between the expressions.   This is
a way in which both expressions are evaluated and the result of the second one (or the last one
if there is more than two expressions) is returned.
Suppose you type the following:
<programlisting lang="en">3 ; 5
</programlisting>
This expression will yield 5.
      </para>
      <para lang="en">
This will require some parenthesizing to make it unambiguous sometimes,
especially if the <literal>;</literal> is not the top most primitive. This slightly differs from
other programming languages where the <literal>;</literal> is a terminator of statements, whereas
in GEL it’s actually a binary operator. If you are familiar with pascal
this should be second nature. However genius can let you pretend it is a
terminator to some degree.  If a <literal>;</literal> is found at the end of a parenthesis or a block,
genius will append a null to it as if you would have written
<userinput>;null</userinput>.
This is useful in case you do not want to return a value from a loop,
or if you handle the return differently.
      </para>
      <para lang="en">
	      If you are typing expressions in a program file you do not have to add a semicolon.  In this case
	      genius will simply print the return value whenever it executes the expression.  This is the same
	      as when typing on the command line.  However, do note that if you are defining a
	      function, the body of the function is a single expression.  Usually, therefore, if a function body is
	      long, you will need to enclose it in parentheses.
      </para>
    </sect1>

    <sect1 id="genius-gel-comments">
      <title>Comentarios</title>
      <para lang="en">
	      GEL is similar to other scripting languages in that <literal>#</literal> denotes
	      a comment, that is text that is not meant to be evaluated.  Everything beyond the
	      pound sign till the end of line will just be ignored.  For example,
<programlisting lang="en"># This is just a comment
# every line in a comment must have its own pound sign
# in the next line we set x to the value 123
x=123;
</programlisting>
      </para>
    </sect1>

    <sect1 id="genius-gel-modular-evaluation">
      <title>Evaluación modular</title>
      <para>Genius implementa aritmética modular. Para usarla, simplemente añada «mod &lt;entero&gt;» después de la expresión. Ejemplo: <userinput>2^(5!) * 3^(6!) mod 5</userinput> Podría ser posible realizar aritmética modular trabajando con enteros y aplicando el módulo al final con el operador <literal>%</literal>, que simplemente devuelve el resto, pero puede requerir más tiempo o ser imposible cuando se trabaja con valores muy elevados. Por ejemplo <userinput>10^(10^10) % 6</userinput> puede que no funcione (el exponente es demasiado grande), sin embargo <userinput>10^(10^10) mod 6</userinput> es instantáneo. La primera expresión primero intenta calcular el entero <userinput>10^(10^10)</userinput> y luego el resto de la división por 6, mientras que la segunda expresión calcula el módulo 6 de todo primero que nada.</para>
      <para lang="en">
	      The inverses of numbers mod some integer are computed by writing them as
rational numbers (as long as the desired inverse exists, of course).
Examples:
<programlisting lang="en">10^-1 mod 101
1/10 mod 101</programlisting>
Modular evaluation also works with matrices including taking inverses,
powers, and dividing.
Example:
<programlisting lang="en">A = [1,2;3,4]
B = A^-1 mod 5
A*B mod 5</programlisting>
This should yield the identity matrix as B will be the inverse of A mod 5.
      </para>
      <para lang="en">
Some functions such as
<link linkend="gel-function-sqrt"><function>sqrt</function></link> or
<link linkend="gel-function-log"><function>log</function></link>
work in a different way when in modulo mode.  These will then work like their
discrete versions working within the ring of integers you selected.  For
example:
<programlisting lang="en">genius&gt; sqrt(4) mod 7
=
[2, 5]
genius&gt; 2*2 mod 7
= 4</programlisting>
	<function>sqrt</function> will actually return all the possible square
	roots.
      </para>
      <para>No concatene operadores mod, solo colóquelos al final del cálculo, todos los cálculos en la expresión que está a la izquierda se llevarán a cabo bajo aritmética mod. Si coloca un operador mod dentro de un mod seguramente obtendrá resultados inesperados. Si solo quiere aplicar mod a un único número y controlar cuándo se toma el resto, es mejor utilizar el operador <literal>%</literal>. Cuando necesita concatenar varias expresiones en una aritmética modular con diferentes divisores, lo mejor es simplemente dividir la expresión en varias y usar variables temporales para evitar un mod dentro de un mod.</para>
    </sect1>

    <sect1 id="genius-gel-operator-list">
      <title>Lista de operadores GEL</title>

      <para>Todo en GEL es en realidad una expresión. Las expresiones se encadenan unas tras otras mediante diferentes operadores. Como hemos visto, incluso el separador es un operador binario en GEL. A continuación se muestra una lista de los operadores en GEL.</para>

      <variablelist>
        <varlistentry>
         <term lang="en"><userinput>a;b</userinput></term>
         <listitem>
           <para>El separador evalúa <varname>a</varname> y <varname>b</varname>, pero sólo devuelve el valor de <varname>b</varname>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a=b</userinput></term>
         <listitem>
           <para>El operador asignación. Asigna <varname>b</varname> a <varname>a</varname> (<varname>a</varname> debe ser un <link linkend="genius-gel-lvalues">lvalue</link> válido) (tenga en cuenta que este operador puede equivaler a <literal>==</literal> si se usa cuando se espera una expresión booleana)</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a:=b</userinput></term>
         <listitem>
           <para>El operador asignación. Asigna <varname>b</varname> a <varname>a</varname> (<varname>a</varname> debe ser un <link linkend="genius-gel-lvalues">lvalue</link> válido). Se diferencia de <literal>=</literal> en que nunca equivale a <literal>==</literal>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>|a|</userinput></term>
         <listitem>
           <para>Valor absoluto. En el caso de que la expresión sea un número complejo el resultado será su módulo (distancia desde el origen). Por ejemplo: <userinput>|3 * e^(1i*pi)|</userinput> devuelve 3.</para>
          <para>Consulte <ulink url="http://mathworld.wolfram.com/AbsoluteValue.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a^b</userinput></term>
         <listitem>
           <para>Exponenciación, eleva <varname>a</varname> a la <varname>b</varname>-ésima potencia.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a.^b</userinput></term>
         <listitem>
           <para>Potencia elemento a elemento. Eleva cada elemento de una matriz <varname>a</varname> a la <varname>b</varname>-ésima potencia. O si <varname>b</varname> es una matriz del mismo tamaño que <varname>a</varname>, entonces realiza la operación elemento a elemento. Si <varname>a</varname> es un número y <varname>b</varname> es una matriz entonces crea una matriz del mismo tamaño que <varname>b</varname> formada por <varname>a</varname> elevado a todas las diferentes potencias de <varname>b</varname>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a+b</userinput></term>
         <listitem>
           <para>Adición. Suma dos números, matrices, funciones o cadenas. Si suma una cadena a cualquier valor el resultado es una cadena. Si uno de ellos es una matriz cuadrada y el otro un número, el número se multiplica por la identidad de la matriz.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a-b</userinput></term>
         <listitem>
           <para>Sustracción. Resta dos números, matrices o funciones.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a*b</userinput></term>
         <listitem>
           <para>Multiplicación. Es la multiplicación normal de matrices.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a.*b</userinput></term>
         <listitem>
           <para>Multiplicación elemento a elemento si <varname>a</varname> y <varname>b</varname> son matrices.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a/b</userinput></term>
         <listitem>
           <para>División. Cuando <varname>a</varname> y <varname>b</varname> son sólo números es la división normal. Cuando son matrices, esto es el equivalente a <userinput>a*b^-1</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a./b</userinput></term>
         <listitem>
           <para>División elemento por elemento. Igual que <userinput>a/b</userinput> para números, pero opera elemento por elemento en matrices.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a\b</userinput></term>
         <listitem>
           <para>División hacia atrás. Es lo mismo que <userinput>b/a</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a.\b</userinput></term>
         <listitem>
           <para>División hacia atrás elemento por elemento.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a%b</userinput></term>
         <listitem>
           <para>El operador mod. No activa el <link linkend="genius-gel-modular-evaluation">modo modular</link> sino que simplemente devuelve el resto de la división de enteros <userinput>a/b</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a.%b</userinput></term>
         <listitem>
           <para>Operador mod elemento por elemento. Devuelve el resto despues de la división de enteros de elemento por elemento <userinput>a./b</userinput> .</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a mod b</userinput></term>
         <listitem>
           <para>Operación de evaluación modular. La expresión <varname>a</varname> se evalúa módulo <varname>b</varname>. Consulte la <xref linkend="genius-gel-modular-evaluation"/>. Algunas de las funciones y operadores se comportan de un modo distinto cuando trabajan en módulo entero.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a!</userinput></term>
         <listitem>
           <para>Operador factorial. Esto es <userinput>1*...*(n-2)*(n-1)*n</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a!!</userinput></term>
         <listitem>
           <para>Operador doble factorial. Esto es <userinput>1*...*(n-4)*(n-2)*n</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a==b</userinput></term>
         <listitem>
           <para>Operador de igualdad, devuelve <constant>true</constant> o <constant>false</constant> dependiendo de si <varname>a</varname> y <varname>b</varname> son iguales o no.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a!=b</userinput></term>
         <listitem>
           <para>Operador de desigualdad, devuelve <constant>true</constant> si <varname>a</varname> no es igual a <varname>b</varname>; si lo es, devuelve <constant>false</constant>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a&lt;&gt;b</userinput></term>
         <listitem>
           <para>Operador distinto alternativo devuelve <constant>true</constant> si <varname>a</varname> no es igual a <varname>b</varname> en caso contrario devuelve <constant>false</constant>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a&lt;=b</userinput></term>
         <listitem>
           <para>Operador menor o igual, devuelve <constant>true</constant> si <varname>a</varname> es menor o igual que <varname>b</varname>, si no, devuelve <constant>false</constant>. Esto se puede concatenar como <userinput>a &lt;= b &lt;= c</userinput> (también se puede combinar con el operador menor que).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a&gt;=b</userinput></term>
         <listitem>
           <para>El operador mayor o igual que, devuelve <constant>true</constant> si <varname>a</varname> es mayor o igual que <varname>b</varname>, si no, devuelve <constant>false</constant>. Esto se puede concatenar como <userinput>a &gt;= b &gt;= c</userinput> (también se puede combinar con el operador mayor que).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term lang="en"><userinput>a&lt;b</userinput></term>
         <listitem>
           <para>Operador menor que, devuelve <constant>true</constant> si <varname>a</varname> es menor o igual que <varname>b</varname>, si no, devuelve <constant>false</constant>. Esto se puede concatenar como <userinput>a &lt; b &lt; c</userinput> (también se puede combinar con el operador menor o igual que).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a&gt;b</userinput></term>
         <listitem>
           <para>Operador mayor que, devuelve <constant>true</constant> si <varname>a</varname> es mayor o igual que <varname>b</varname>, si no, devuelve <constant>false</constant>. Esto se puede concatenar como <userinput>a &gt; b &gt; c</userinput> (también se puede combinar con el operador mayor o igual que).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a&lt;=&gt;b</userinput></term>
         <listitem>
           <para>Operador de comparación. Si <varname>a</varname> es igual a <varname>b</varname> devuelve 0, si <varname>a</varname> es menor que <varname>b</varname> devuelve -1 y si <varname>a</varname> es mayor que <varname>b</varname> devuelve 1.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a and b</userinput></term>
         <listitem>
           <para>AND lógico. Devuelve cierto si <varname>a</varname> y <varname>b</varname> son ciertos; si no, devuelve falso. Si se dan números, los números distintos de cero se consideran como «verdadero».</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a or b</userinput></term>
         <listitem>
           <para>OR lógico. Devuelve verdadero si <varname>a</varname> o <varname>b</varname> son verdaderos; si no, devuelve falso. Si se dan números, los números distintos de cero se consideran como verdadero.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a xor b</userinput></term>
         <listitem>
           <para>X-OR lógico. Devuelve cierto si <varname>a</varname> o <varname>b</varname> son ciertos; si no, devuelve falso. Si se dan números, los números distintos de cero se consideran como «verdadero».</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>not a</userinput></term>
         <listitem>
           <para>NOT lógico. Devuelve la negación lógica de <varname>a</varname></para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>-a</userinput></term>
         <listitem>
           <para>Operador de negación. Devuelve el negativo de un número o una matriz (en una matriz, funciona de acuerdo al elemento).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>&amp;a</userinput></term>
         <listitem>
           <para>Referencia de variables (pasar una referencia a una variable). Consulte <xref linkend="genius-gel-references"/>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>*a</userinput></term>
         <listitem>
           <para>Desreferenciar una variable (para acceder a una variable referenciada). Consulte la <xref linkend="genius-gel-references"/>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a'</userinput></term>
         <listitem>
           <para>Transpuesta conjugada de una matriz. Significa que las filas y columnas se intercambian y se toman la conjugada compleja de todas las entradas. Esto es, si el elemento i,j de <varname>a</varname> es x+iy, entonces el elemento j,i de <userinput>a'</userinput> es x-iy.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a.'</userinput></term>
         <listitem>
           <para>Transpuesta de matriz, no conjuga las entradas. Esto significa, el elemento i,j de <varname>a</varname> se convierte en el elemento j,i de <userinput>a.'</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a@(b,c)</userinput></term>
         <listitem>
           <para>Devuelve el elemento de una matriz en la fila <varname>b</varname> y columna <varname>c</varname>. Si <varname>b</varname>, <varname>c</varname> son vectores, devuelve las correspondientes filas, columnas o submatrices.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a@(b,)</userinput></term>
         <listitem>
           <para>Devuelve la fila de la matriz (o múltiples filas si <varname>b</varname> es un vector).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a@(b,:)</userinput></term>
         <listitem>
           <para>Igual que el anterior</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a@(,c)</userinput></term>
         <listitem>
           <para>Devuelve la columna de la matriz (o columnas si <varname>c</varname> es un vector).</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a@(:,c)</userinput></term>
         <listitem>
           <para>Igual que el anterior</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a@(b)</userinput></term>
         <listitem>
           <para>Obtiene un elemento de una matriz tratándola como vector. Recorre la matriz por filas.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a:b</userinput></term>
         <listitem>
           <para lang="en">
             Build a vector from <varname>a</varname> to <varname>b</varname> (or specify a row, column region for the <literal>@</literal> operator).  For example to get rows 2 to 4 of matrix <varname>A</varname> we could do
	     <programlisting lang="en">A@(2:4,)
	     </programlisting>
	     as <userinput>2:4</userinput> will return a vector
	     <userinput>[2,3,4]</userinput>.
           </para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>a:b:c</userinput></term>
         <listitem>
           <para lang="en">
	     Build a vector from <varname>a</varname> to <varname>c</varname>
	     with <varname>b</varname> as a step.  That is for example
	     <programlisting lang="en">genius&gt; 1:2:9
=
`[1, 3, 5, 7, 9]
</programlisting>
           </para>
	   <para>Cuando los números implicados son números en coma flotante, por ejemplo <userinput>1.0:0.4:3.0</userinput>, la salida es lo que se espera a pesar de la adición de 0,4 a 1,0 cinco veces es en realidad sólo un poco más de 3,0 debido a la forma en que los números de coma flotante se almacenan en la base 2 (no hay 0.4, el número real almacenado es sólo ligeramente más grande). La forma en que se maneja es el mismo que en los bucles «for», «sum», y «prod». Si el final está dentro de <userinput>2^-20</userinput> veces el tamaño de paso del punto final, se utiliza el punto final y suponemos que no eran errores de redondeo. Esto no es perfecto, pero maneja la mayoría de los casos. Esta comprobación se realiza sólo desde la versión 1.0.18 en adelante, así que la ejecución de su código puede ser diferente en las versiones anteriores. Si quiere evitar este problema, utilice los números racionales reales, posiblemente usando el <function>float</function> si quiere obtener los números de punto flotante en el final. Por ejemplo <userinput>1:2/5:3</userinput> hace lo correcto y <userinput>float(1:2/5:3)</userinput> incluso le da los números de punto flotante y es ligeramente más precisa que <userinput>1,0:0,4:3,0</userinput>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>(a)i</userinput></term>
         <listitem>
           <para lang="en">
	     Make <varname>a</varname> into an imaginary number (multiply <varname>a</varname> by the
	     imaginary).  Normally the imaginary number <varname>i</varname> is
	     written as <userinput>1i</userinput>.  So the above is equal to
	     <programlisting lang="en">(a)*1i
	     </programlisting>
           </para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term lang="en"><userinput>`a</userinput></term>
         <listitem>
           <para>Escapa un identificador de modo que no sea evaluado. O escapa una matriz de modo que no sea expandida.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term lang="en"><userinput>a swapwith b</userinput></term>
         <listitem>
           <para>Intercambia el valor de <varname>a</varname> con el valor de <varname>b</varname>. Actualmente no funciona con rangos de elementos matriciales. Devuelve <constant>null</constant>. Está disponible desde la versión 1.0.13.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term lang="en"><userinput>increment a</userinput></term>
         <listitem>
           <para>Incrementa la variable <varname>a</varname> en 1. Si <varname>a</varname> es una matriz entonces incrementará cada uno de los elementos. Es equivalente a <userinput>a=a+1</userinput> pero más rápido. Devuelve <constant>null</constant>. Está disponible desde la versión 1.0.13.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term lang="en"><userinput>increment a by b</userinput></term>
         <listitem>
           <para>Incrementa la variable <varname>a</varname> en <varname>b</varname>. Si <varname>a</varname> es una matriz, entonces incrementa cada elemento. Es equivalente a <userinput>a=a+b</userinput>, pero más rápido. Devuelve null <constant>null</constant>. Está disponible desde la versión 1.0.13.</para>
         </listitem>
        </varlistentry>


      </variablelist>

<note>
<para>El operador @() hace el operador «:» más útil. Con éste puede especificar regiones dentro de una matriz. De modo que a@(2:4,6) representa las filas 2, 3 y 4 de la columna 6. O @(,1:2) devuelve las dos primeras columnas de una matriz. Puede asignar al operador @() siempre que el valor sea una matriz cuyo tamaño coincida con el tamaño de la región asignada o cualquier otro tipo de valor.</para>
</note>

<note>
<para>Los operadores de comparación (excepto el operador &lt;=&gt; que se comporta de un modo normal), no son estrictamente operadores binarios, de hecho pueden agruparse de una forma matemática estándar, por ejemplo: (1&lt;x&lt;=y&lt;5) es una expresión booleana válida y significa lo que debería, es decir, (1&lt;x and x≤y and y&lt;5)</para>
</note>

<note>
<para>El operador unario «menos» opera de un modo distinto dependiendo del lugar donde aparece. Si lo hace antes de un número su prioridad es muy alta. Si aparece delante de una expresión tendrá menos prioridad que los operadores potencia y factorial. De este modo, por ejemplo, <userinput>-1^k</userinput> es en realidad <userinput>(-1)^k</userinput>, sin embargo <userinput>-foo(1)^k</userinput> es realmente <userinput>-(foo(1)^k)</userinput>. Por lo tanto, tenga cuidado con el uso de este operador y si tiene alguna duda, use paréntesis.</para>
</note>
    </sect1>

  </chapter>

  <!-- ============= GEL Programming ========================== -->
  <chapter id="genius-gel-programming">
    <title>Programar con GEL</title>

    <sect1 id="genius-gel-conditionals">
      <title>Condicionales</title>
      <para lang="en">
Syntax:
<programlisting lang="en"><![CDATA[if <expression1> then <expression2> [else <expression3>]
]]></programlisting>
If <literal>else</literal> is omitted, then if the <literal>expression1</literal> yields <constant>false</constant> or 0, <literal>NULL</literal> is returned.
      </para>
      <para lang="en">
Examples:
<programlisting lang="en"><![CDATA[if(a==5)then(a=a-1)
if b<a then b=a
if c>0 then c=c-1 else c=0
a = ( if b>0 then b else 1 )
]]></programlisting>
Note that <literal>=</literal> will be translated to <literal>==</literal> if used inside the expression for <literal>if</literal>, so
<programlisting lang="en">if a=5 then a=a-1
</programlisting>
will be interpreted as:
<programlisting lang="en">if a==5 then a:=a-1
</programlisting>
      </para>
    </sect1>

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

      <sect2 id="genius-gel-loops-while">
        <title>Bucles «while»</title>
        <para lang="en">
Syntax:
<programlisting lang="en"><![CDATA[while <expression1> do <expression2>
until <expression1> do <expression2>
do <expression2> while <expression1>
do <expression2> until <expression1>]]></programlisting>

	These are similar to other languages.  However, as in GEL it is simply an expression that must have some return value, these
	constructs will simply return the result of the last iteration or <literal>NULL</literal> if no iteration was done.  In the boolean expression, <literal>=</literal> is translated into <literal>==</literal> just as for the <literal>if</literal> statement.
        </para>
      </sect2>

      <sect2 id="genius-gel-loops-for">
        <title>Bucles «for»</title>
        <para lang="en">
Syntax:
<programlisting lang="en"><![CDATA[for <identifier> = <from> to <to> do <body>
for <identifier> = <from> to <to> by <increment> do <body>]]></programlisting>

Loop with identifier being set to all values from <literal>&lt;from&gt;</literal> to <literal>&lt;to&gt;</literal>, optionally using an increment other than 1. These are faster, nicer and more compact than the normal loops such as above, but less flexible. The identifier must be an identifier and can't be a dereference. The value of identifier is the last value of identifier, or <literal>&lt;from&gt;</literal> if body was never evaluated. The variable is guaranteed to be initialized after a loop, so you can safely use it.  Also the <literal>&lt;from&gt;</literal>, <literal>&lt;to&gt;</literal> and <literal>&lt;increment&gt;</literal> must be non complex values. The <literal>&lt;to&gt;</literal> is not guaranteed to be hit, but will never be overshot, for example the following prints out odd numbers from 1 to 19:
<programlisting lang="en">for i = 1 to 20 by 2 do print(i)
</programlisting>
        </para>
        <para lang="en">
		When one of the values is a floating point number, then the
		final check is done to within 2^-20 of the step size.  That is,
		even if we overshoot by 2^-20 times the "by" above, we still execute the last
		iteration.  This way 
<programlisting lang="en">for x = 0 to 1 by 0.1 do print(x)
</programlisting>
does the expected even though adding 0.1 ten times becomes just slightly more than 1.0 due to the way that floating point numbers
are stored in base 2 (there is no 0.1, the actual number stored is just ever so slightly bigger).  This is not perfect but it handles
the majority of the cases.  If you want to avoid dealing with this issue, use actual rational numbers for example:
<programlisting lang="en">for x = 0 to 1 by 1/10 do print(x)
</programlisting>
		This check is done only from version 1.0.16 onwards, so execution of your code may differ on older versions.
	</para>
      </sect2>

      <sect2 id="genius-gel-loops-foreach">
        <title>Bucles «foreach»</title>
        <para lang="en">
Syntax:
<programlisting lang="en"><![CDATA[for <identifier> in <matrix> do <body>]]></programlisting>

			For each element in the matrix, going row by row from left to right we execute the body
		       with the identifier set to the current element. To
print numbers 1,2,3 and 4 in this order you could do:
<programlisting lang="en">for n in [1,2:3,4] do print(n)
</programlisting>
If you wish to run through the rows and columns of a matrix, you can use
the RowsOf and ColumnsOf functions, which return a vector of the rows or
columns of the matrix.  So,
<programlisting lang="en">for n in RowsOf ([1,2:3,4]) do print(n)
</programlisting>
will print out [1,2] and then [3,4].
        </para>
      </sect2>

      <sect2 id="genius-gel-loops-break-continue">
        <title>Parar y continuar</title>
        <para lang="en">
You can also use the <literal>break</literal> and <literal>continue</literal> commands in loops. The continue <literal>continue</literal> command will restart the current loop at its next iteration, while the <literal>break</literal> command exits the current loop.
<programlisting lang="en"><![CDATA[while(<expression1>) do (
  if(<expression2>) break
  else if(<expression3>) continue;
  <expression4>
)
]]></programlisting>
        </para>
      </sect2>
    </sect1>

    <sect1 id="genius-gel-sums-products">
      <title>Sumas y productos</title>
      <para lang="en">
Syntax:
<programlisting lang="en"><![CDATA[sum <identifier> = <from> to <to> do <body>
sum <identifier> = <from> to <to> by <increment> do <body>
sum <identifier> in <matrix> do <body>
prod <identifier> = <from> to <to> do <body>
prod <identifier> = <from> to <to> by <increment> do <body>
prod <identifier> in <matrix> do <body>]]></programlisting>

If you substitute <literal>for</literal> with <literal>sum</literal> or <literal>prod</literal>, then you will get a sum or a product instead of a <literal>for</literal> loop. Instead of returning the last value, these will return the sum or the product of the values respectively.
      </para>
      <para>Si no se ejecuta ningún comando (por ejemplo <userinput>sum i=1 to 0 do ...</userinput>), <literal>sum</literal> devuelve el valor 0 y <literal>prod</literal> devuelve el valor 1, que es el convenio estándar.</para>
      <para>Para los números en coma flotante el redondeo de protección de errores se realiza como en el bucle for. Consulte la <xref linkend="genius-gel-loops-for"/>.</para>
    </sect1>

    <sect1 id="genius-gel-comparison-operators">
      <title>Operadores de comparación</title>
      <para>Los siguientes operadores de comparación comunes están soportados en GEL, y tienen el significado obvio: <literal>==</literal>, <literal>&gt;=</literal>, <literal>&lt;=</literal>, <literal>!=</literal>, <literal>&lt;&gt;</literal>, <literal>&lt;</literal>, <literal>&gt;</literal>. Éstos devuelven los valores <constant>true</constant> o <constant>false</constant>. Los operadores <literal>!=</literal> y <literal>&lt;&gt;</literal> son lo mismo y significan «no es igual a». GEL también permite utilizar el operador <literal>&lt;=&gt;</literal>, que devuelve el valor -1 si el lado izquierdo es menor, 0 si ambos lados son iguales, y 1 si el lado izquierdo es mayor.</para>

      <para lang="en">
	Normally <literal>=</literal> is translated to <literal>==</literal> if
	it happens to be somewhere where GEL is expecting a condition such as
	in the if condition.  For example
	<programlisting lang="en">if a=b then c
if a==b then c
</programlisting>
	are the same thing in GEL.  However you should really use
	<literal>==</literal> or <literal>:=</literal> when you want to compare
	or assign respectively if you want your code to be easy to read and
	to avoid mistakes.
      </para>

      <para>No todos los operadores de comparación (salvo el operador <literal>&lt;=&gt;</literal>, que se comporta de manera normal), son operadores binarios en el sentido estricto del concepto. De hecho, se pueden agrupar en el modo matemático usual, por ejemplo: (<literal>1&lt;x&lt;=y&lt;5</literal>) es una expresión booleana legítima que significa lo que debería, es decir (1&lt;x and x≤y and y&lt;5)</para>
      <para>Para construir expresiones lógicas utilice las palabras <literal>not</literal>, <literal>and</literal>, <literal>or</literal>, <literal>xor</literal>. Los operadores <literal>or</literal> y <literal>and</literal> son especiales pues evalúan sus argumentos de uno en uno, por lo que la técnica usual para implementar la evaluación condicional también funciona aquí. Por ejemplo, <literal>1 or a=1</literal> no ejecuta el comando <literal>a=1</literal>, pues el primer argumento es verdadero.</para>
    </sect1>

      <sect1 id="genius-gel-variables-global">
        <title>Variables globales y ámbito de variables</title>
	<para>GEL es un <ulink url="https://en.wikipedia.org/wiki/Scope_%28programming%29"> lenguaje con ámbitos dinámicos</ulink>. Esto se explicará más adelante. Esto significa que a las variables ordinarias y a las funciones se les asigna un ámbito de manera dinámica. La única excepción son las <link linkend="genius-gel-parameters">variables de parámetros</link>, que siempre son globales.</para>
	<para lang="en">
	  Like most programming languages, GEL has different types
	  of variables.  Normally when a variable is defined in a function,
	  it is visible from that function and from all functions that are
	  called (all higher contexts).  For example, suppose a function
	  <function>f</function> defines a variable <varname>a</varname>
	  and then calls function <function>g</function>.  Then
	  function <function>g</function> can reference
	  <varname>a</varname>.  But once <function>f</function> returns,
	  the variable <varname>a</varname> goes out of scope.
	  For example, the following code will print out 5.
	  The function <function>g</function> cannot be called on the
	  top level (outside <function>f</function> as <varname>a</varname>
	  will not be defined).
<programlisting lang="en">function f() = (a:=5; g());
function g() = print(a);
f();
</programlisting>
        </para>
        <para lang="en">
	  If you define a variable inside a function it will override
	  any variables defined in calling functions.  For example,
	  we modify the above code and write:
<programlisting lang="en">function f() = (a:=5; g());
function g() = print(a);
a:=10;
f();
</programlisting>
	  This code will still print out 5.  But if you call
	  <function>g</function> outside of <function>f</function> then
	  you will get a printout of 10.  Note that
	  setting <varname>a</varname>
	  to 5 inside <function>f</function> does not change
	  the value of <varname>a</varname> at the top (global) level,
	  so if you now check the value of <varname>a</varname> it will
	  still be 10.
        </para>
	<para>Los argumentos de funciones son exactamente como variables definidas dentro de la función, salvo que éstas se inicializan con el valor que se introduce en la función. Además de esto, se les trata como a cualquier otra variable definida dentro de la función.</para>
	<para lang="en">
	  Functions are treated exactly like variables.  Hence you can
	  locally redefine functions.  Normally (on the top level) you
	  cannot redefine protected variables and functions.  But locally
	  you can do this.  Consider the following session:
<screen lang="en"><prompt>genius&gt; </prompt><userinput>function f(x) = sin(x)^2</userinput>
= (`(x)=(sin(x)^2))
<prompt>genius&gt; </prompt><userinput>function f(x) = sin(x)^2</userinput>
= (`(x)=(sin(x)^2))
<prompt>genius&gt; </prompt><userinput>function g(x) = ((function sin(x)=x^10);f(x))</userinput>
= (`(x)=((sin:=(`(x)=(x^10)));f(x)))
<prompt>genius&gt; </prompt><userinput>g(10)</userinput>
= 1e20
</screen>
	</para>
	<para lang="en">
	  Functions and variables defined at the top level are
	  considered global.  They are visible from anywhere.  As we
	  said the following function <function>f</function>
	  will not change the value of <varname>a</varname> to 5.
<programlisting lang="en">a=6;
function f() = (a:=5);
f();
</programlisting>
	  Sometimes, however, it is necessary to set
a global variable from inside a function.  When this behavior is needed,
use the
<link linkend="gel-function-set"><function>set</function></link> function. Passing a string or a quoted identifier to
this function sets the variable globally (on the top level).
For example, to set
<varname>a</varname> to the value 3 you could call:
<programlisting lang="en">set(`a,3)
</programlisting>
or:
<programlisting lang="en">set("a",3)
</programlisting>
        </para>
        <para>La función <function>set</function> siempre fija el nivel superior global. No existe alguna manera de definir una variable local en alguna función desde alguna subrutina. Si se necesita hacer esto, debe utilizar ...</para>
	<para>Consulte también las funciones <link linkend="gel-function-SetElement"><function>SetElement</function></link> y <link linkend="gel-function-SetVElement"><function>SetVElement</function></link>.</para>
	<para>Para recapitular en un lenguaje más técnico: Genius opera con diferentes contextos numerados. El nivel más alto es el contexto 0 (cero). Siempre que se introduce una función , el contexto aumenta, y cuando la función devuelve su resultado el contexto disminuye. Siempre se puede ver una función o una variable desde los contextos mayores. Cuando una variable se define en un contexto menor, al fijar esta variable se crea una nueva variable local en el contexto actual y esta variable sera visible desde los contextos mayores.</para>
	<para>También existen variables locales, que sólo pueden ser vistas desde el contexto actual. Cuando se devuelven funciones por un valor se pueden referenciar variables que no son visibles desde un contexto mas alto y esto puede ser problemático. Consulte las secciones <link linkend="genius-gel-true-local-variables">Variables locales verdaderas</link> y <link linkend="genius-gel-returning-functions">Devolver funciones</link>.</para>
      </sect1>

      <sect1 id="genius-gel-parameters">
        <title>Variables de parámetros</title>
	<para lang="en">
	  As we said before, there exist special variables called parameters
	  that exist in all scopes.  To declare a parameter called
	  <varname>foo</varname> with the initial value 1, we write
<programlisting lang="en"><![CDATA[parameter foo = 1
]]></programlisting>
	  From then on, <varname>foo</varname> is a strictly global variable.
	  Setting <varname>foo</varname> inside any function will modify the
	  variable in all contexts, that is, functions do not have a private
	  copy of parameters.
        </para>
        <para lang="en">
	  When you undefine a parameter using the
	  <link linkend="gel-function-undefine">
	  <function>undefine</function></link> function, it stops being
	  a parameter.
        </para>
        <para>Algunos parámetros están integrados de manera predeterminada y modifican el comportamiento de genius.</para>
      </sect1>

    <sect1 id="genius-gel-returning">
      <title>Retorno</title>
	<para>Normalmente, una función se compone de una o varias expresiones separadas con punto y coma, y se devuelve el valor de la última expresión. Esto resulta útil en funciones sencillas, pero algunas veces no querrá que una función devuelva el resultado del último cálculo. Podría, por ejemplo, preferir que ésta devolviera algún valor obtenido a la mitad de la función. En este caso, puede utilizar la palabra <literal>return</literal>. La función <literal>return</literal> toma un único valor, que es el valor que se devolverá.</para>
      <para lang="en">
Example:
<programlisting lang="en"><![CDATA[function f(x) = (
  y=1;
  while true do (
    if x>50 then return y;
    y=y+1;
    x=x+1
  )
)
]]></programlisting>
      </para>
    </sect1>


    <sect1 id="genius-gel-references">
      <title>Referencias</title>
      <para>Para algunas funciones puede ser necesario devolver más de un valor. Esto se puede lograr al devolver un vector de valores, pero muchas veces resulta conveniente pasar una referencia a una variable. Puede pasar una referencia a una variable a una función, y la función fijará el valor, eliminando una referencia. Aunque éste es el principal uso de las referencias, no es el único.</para>
      <para lang="en">
	When using functions that return values through references
	in the argument list, just pass the variable name with an ampersand.
	For example the following code will compute an eigenvalue of a matrix
	<varname>A</varname> with initial eigenvector guess
	<varname>x</varname>, and store the computed eigenvector
	into the variable named <varname>v</varname>:
<programlisting lang="en"><![CDATA[RayleighQuotientIteration (A,x,0.001,100,&v)
]]></programlisting>
      </para>
      <para>La manera como funcionan las referencias y la sintaxis que utilizan son similares al lenguaje C. El operador <literal>&amp;</literal> hace referencia a una variable y <literal>*</literal> la elimina. Ambos pueden aplicarse sólo a un identificador, por lo que <literal>**a</literal> no es una expresión legal en GEL.</para>
      <para lang="en">
References are best explained by an example:
<programlisting lang="en"><![CDATA[a=1;
b=&a;
*b=2;
]]></programlisting>
now <varname>a</varname> contains 2.  You can also reference functions:
<programlisting lang="en"><![CDATA[function f(x) = x+1;
t=&f;
*t(3)
]]></programlisting>
gives us 4.
      </para>
    </sect1>

    <sect1 id="genius-gel-lvalues">
      <title>Lvalues</title>
      <para lang="en">
	An lvalue is the left hand side of an assignment. In other words, an
	lvalue is what you assign something to.  Valid lvalues are:
<variablelist>
  <varlistentry>
    <term lang="en"><userinput>a</userinput></term>
    <listitem>
      <para lang="en">
	Identifier.  Here we would be setting the variable of name
	<varname>a</varname>.
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term lang="en"><userinput>*a</userinput></term>
    <listitem>
      <para lang="en">
	Dereference of an identifier.  This will set whatever variable
	<varname>a</varname> points to.
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term lang="en"><userinput>a@(&lt;region&gt;)</userinput></term>
    <listitem>
      <para lang="en">
	A region of a matrix.  Here the region is specified normally as with
	the regular @() operator, and can be a single entry, or an entire
	region of the matrix.
      </para>
    </listitem>
  </varlistentry>
</variablelist>
      </para>
      <para lang="en">
Examples:
<programlisting lang="en">a:=4
*tmp := 89
a@(1,1) := 5
a@(4:8,3) := [1,2,3,4,5]'
</programlisting>
Note that both <literal>:=</literal> and <literal>=</literal> can be used
interchangeably.  Except if the assignment appears in a condition.
It is thus always safer to just use
<literal>:=</literal> when you mean assignment, and <literal>==</literal>
when you mean comparison.
      </para>
    </sect1>

  </chapter>

  <chapter id="genius-gel-programming-advanced">
    <title>Programación avanzada con GEL</title>

    <sect1 id="genius-gel-error-handling">
      <title>Control de errores</title>
      <para>Si detecta un error en su función, puede salir de ella. Para errores normales, como argumentos del tipo equivocado, puede impedir que se calcule el resultado de la función al agregar la frase <literal>bailout</literal>. Si algo saliera de verdad mal y quisiera interrumpir definitivamente el cálculo en curso, puede utilizar la palabra <literal>exception</literal>.</para>
      <para lang="en">
	For example if you want to check for arguments in your function.  You
could use the following code.
<programlisting lang="en">function f(M) = (
  if not IsMatrix (M) then (
    error ("M not a matrix!");
    bailout
  );
  ...
)
</programlisting>
      </para>
    </sect1>

    <sect1 id="genius-gel-toplevel-syntax">
      <title>Sintaxis de nivel superior</title>
      <para lang="en">
	The syntax is slightly different if you enter statements on
	the top level versus when they are inside parentheses or
	inside functions.  On the top level, enter acts the same as if
	you press return on the command line.  Therefore think of programs
	as just a sequence of lines as if they were entered on the command line.
	In particular, you do not need to enter the separator at the end of the
	line (unless it is part of several statements inside
	parentheses).  When a statement does not end with a separator on the
	top level, the result is printed after being executed.
      </para>
      <para lang="en">
	For example,
	<programlisting lang="en">function f(x)=x^2
f(3)
</programlisting>
	will print first the result of setting a function (a representation of
	the function, in this case <computeroutput>(`(x)=(x^2))</computeroutput>)
	and then the expected 9.  To avoid this, enter a separator
	after the function definition.
	<programlisting lang="en">function f(x)=x^2;
f(3)
</programlisting>
	If you need to put a separator into your function then you have to surround with
	parenthesis.  For example:
<programlisting lang="en">function f(x)=(
  y=1;
  for j=1 to x do
    y = y+j;
  y^2
);
</programlisting>
      </para>
      <para lang="en">
	The following code will produce an error when entered on the top
	level of a program, while it will work just fine in a function.
<programlisting lang="en">if Something() then
  DoSomething()
else
  DoSomethingElse()
</programlisting>
      </para>
      <para lang="en">
	The problem is that after <application>Genius Mathematics Tool</application> sees the end of line after the
	second line, it will decide that we have whole statement and
	it will execute it.  After the execution is done, <application>Genius Mathematics Tool</application> will
	go on to the next
	line, it will see <literal>else</literal>, and it will produce
	a parsing error.  To fix this, use parentheses.  <application>Genius Mathematics Tool</application> will not
	be satisfied until it has found that all parentheses are closed.
<programlisting lang="en">if Something() then (
  DoSomething()
) else (
  DoSomethingElse()
)
</programlisting>
      </para>
    </sect1>

     <sect1 id="genius-gel-returning-functions">
       <title>Devolver funciones</title>
	<para lang="en">
	  It is possible to return functions as value.  This way you can
	  build functions that construct special purpose functions according
	  to some parameters.  The tricky bit is what variables does the
	  function see.  The way this works in GEL is that when a function
	  returns another function, all identifiers referenced in the
	  function body that went out of scope
	  are prepended a private dictionary of the returned
	  function.  So the function will see all variables that were in
	  scope
	  when it was defined.  For example, we define a function that
	  returns a function that adds 5 to its argument.
<programlisting lang="en">function f() = (
  k = 5;
  `(x) = (x+k)
)
</programlisting>
	  Notice that the function adds <varname>k</varname> to
	  <varname>x</varname>.  You could use this as follows.
<programlisting lang="en">g = f();
g(5)
</programlisting>
	  And <userinput>g(5)</userinput> should return 10.
        </para>
	<para lang="en">
	  One thing to note is that the value of <varname>k</varname>
	  that is used is the one that's in effect when the
	  <function>f</function> returns.  For example:
<programlisting lang="en">function f() = (
  k := 5;
  function r(x) = (x+k);
  k := 10;
  r
)
</programlisting>
	  will return a function that adds 10 to its argument rather than
	  5.  This is because the extra dictionary is created only when
	  the context
	  in which the function was defined ends, which is when the function
	  <function>f</function> returns.  This is consistent with how you
	  would expect the function <function>r</function> to work inside
	  the function <function>f</function> according to the rules of
	  scope of variables in GEL.  Only those variables are added to the
	  extra dictionary that are in the context that just ended and
	  no longer exists.  Variables
	  used in the function that are in still valid contexts will work
	  as usual, using the current value of the variable.
	  The only difference is with global variables and functions.
	  All identifiers that referenced global variables at time of
	  the function definition are not added to the private dictionary.
	  This is to avoid much unnecessary work when returning functions
	  and would rarely be a problem.  For example, suppose that you
	  delete the "k=5" from the function <function>f</function>,
	  and at the top level you define <varname>k</varname> to be
	  say 5.  Then when you run <function>f</function>, the function
	  <function>r</function> will not put <varname>k</varname> into
	  the private dictionary because it was global (toplevel)
	  at the time of definition of <function>r</function>.
	</para>
	<para lang="en">
	  Sometimes it is better to have more control over how variables
	  are copied into the private dictionary.  Since version 1.0.7,
	  you can specify which
	  variables are copied into the private dictionary by putting
	  extra square brackets after the arguments with the list of
	  variables to be copied separated by commas.
	  If you do this, then variables are
	  copied into the private dictionary at time of the function
	  definition, and the private dictionary is not touched afterwards.
	  For example
<programlisting lang="en">function f() = (
  k := 5;
  function r(x) [k] = (x+k);
  k := 10;
  r
)
</programlisting>
	  will return a function that when called will add 5 to its
	  argument.  The local copy of <varname>k</varname> was created
	  when the function was defined.
	</para>
	<para lang="en">
	  When you want the function to not have any private dictionary
	  then put empty square brackets after the argument list.  Then
	  no private dictionary will be created at all.  Doing this is
	  good to increase efficiency when a private dictionary is not
	  needed or when you want the function to lookup all variables
	  as it sees them when called.  For example suppose you want
	  the function returned from <function>f</function> to see
	  the value of <varname>k</varname> from the toplevel despite
	  there being a local variable of the same name during definition.
	  So the code
<programlisting lang="en">function f() = (
  k := 5;
  function r(x) [] = (x+k);
  r
);
k := 10;
g = f();
g(10)
</programlisting>
	  will return 20 and not 15, which would happen if
	  <varname>k</varname> with a value of 5 was added to the private
	  dictionary.
	</para>
    </sect1>

    <sect1 id="genius-gel-true-local-variables">
      <title>Variables locales verdaderas</title>
      <para lang="en">
	When passing functions into other functions, the normal scoping of
	variables might be undesired.  For example:
<programlisting lang="en">k := 10;
function r(x) = (x+k);
function f(g,x) = (
  k := 5;
  g(x)
);
f(r,1)
</programlisting>
	you probably want the function <function>r</function>
	when passed as <function>g</function> into <function>f</function>
	to see <varname>k</varname> as 10 rather than 5, so that
	the code returns 11 and not 6.  However, as written, the function
	when executed will see the <varname>k</varname> that is
	equal to 5.  There are two ways to solve this.  One would be
	to have <function>r</function> get <varname>k</varname> in a
	private dictionary using the square bracket notation section
	<link linkend="genius-gel-returning-functions">Returning
	Functions</link>.
      </para>
      <para lang="en">
	But there is another solution.  Since version 1.0.7 there are
	true local variables.  These are variables that are visible only
	from the current context and not from any called functions.
	We could define <varname>k</varname> as a local variable in the
	function <function>f</function>.  To do this add a
	<command>local</command> statement as the first statement in the
	function (it must always be the first statement in the function).
	You can also make any arguments be local variables as well.
	That is,
<programlisting lang="en">function f(g,x) = (
  local g,x,k;
  k := 5;
  g(x)
);
</programlisting>
	Then the code will work as expected and prints out 11.
	Note that the <command>local</command> statement initializes
	all the referenced variables (except for function arguments) to
	a <constant>null</constant>.
      </para>
      <para lang="en">
	If all variables are to be created as locals you can just pass an
	asterisk instead of a list of variables.  In this case the variables
	will not be initialized until they are actually set.
	So the following definition of <function>f</function>
	will also work:
<programlisting lang="en">function f(g,x) = (
  local *;
  k := 5;
  g(x)
);
</programlisting>
      </para>
      <para>Es bueno que todas las funciones que toman otras funciones como argumentos utilicen variables locales. De esta manera las funciones que pasan no ven los detalles de la implementación y luego no se confunden.</para>
    </sect1>

    <sect1 id="genius-gel-startup-procedure">
      <title>Procedimiento de inicio de GEL</title>
      <para>Primero, el programa busca el archivo de la biblioteca instalada (la versión compilada <filename>lib.cgel</filename>) en la carpeta instalada; luego, busca en la carpeta actual y finalmente trata de cargar algún archivo no compilado llamado <filename>~/.geniusinit</filename>.</para>
      <para>Si alguna vez cambia el lugar donde está instalada la biblioteca, primero deberá compilarla con el comando <command>genius --compile loader.gel &gt; lib.cgel</command></para>
    </sect1>

    <sect1 id="genius-gel-loading-programs">
      <title>Cargar programas</title>
      <para lang="en">
Sometimes you have a larger program you wrote into a file and want to read that file into <application>Genius Mathematics Tool</application>. In these situations, you have two options. You can keep the functions you use most inside the <filename>~/.geniusinit</filename> file. Or if you want to load up a file in a middle of a session (or from within another file), you can type <command>load &lt;list of filenames&gt;</command> at the prompt. This has to be done on the top level and not inside any function or whatnot, and it cannot be part of any expression. It also has a slightly different syntax than the rest of genius, more similar to a shell. You can enter the file in quotes. If you use the '' quotes, you will get exactly the string that you typed, if you use the "" quotes, special characters will be unescaped as they are for strings. Example:
<programlisting lang="en">load program1.gel program2.gel
load "Weird File Name With SPACES.gel"
</programlisting>
There are also <command>cd</command>, <command>pwd</command> and <command>ls</command> commands built in. <command>cd</command> will take one argument, <command>ls</command> will take an argument that is like the glob in the UNIX shell (i.e., you can use wildcards). <command>pwd</command> takes no arguments. For example:
<programlisting lang="en">cd directory_with_gel_programs
ls *.gel
</programlisting>
      </para>
    </sect1>

  </chapter>

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

    <para>Genius tiene soporte para vectores y matrices y una biblioteca dimensionable para manipulación de matrices y funciones de álgebra lineal.</para>

    <sect1 id="genius-gel-matrix-support">
      <title>Introducir matrices</title>
      <para lang="en">
To enter matrices, you can use one of the following two syntaxes. You can either enter
the matrix on one line, separating values by commas and rows by semicolons.  Or you
can enter each row on one line, separating
values by commas.
You can also just combine the two methods.
So to enter a 3x3 matrix
of numbers 1-9 you could do
<programlisting lang="en">[1,2,3;4,5,6;7,8,9]
</programlisting>
or
<programlisting lang="en">[1, 2, 3
 4, 5, 6
 7, 8, 9]
</programlisting>
Do not use both ';' and return at once on the same line though.
      </para>

      <para lang="en">
You can also use the matrix expansion functionality to enter matrices.
For example you can do:
<programlisting lang="en">a = [ 1, 2, 3
      4, 5, 6
      7, 8, 9]
b = [ a,  10
      11, 12]
</programlisting>
and you should get
<programlisting lang="en">[1,   2,  3, 10
 4,   5,  6, 10
 7,   8,  9, 10
 11, 11, 11, 12]
</programlisting>
similarly you can build matrices out of vectors and other stuff like that.
      </para>

      <para lang="en">
Another thing is that non-specified spots are initialized to 0, so
<programlisting lang="en">[1, 2, 3
 4, 5
 6]
</programlisting>
will end up being
<programlisting lang="en">
[1, 2, 3
 4, 5, 0
 6, 0, 0]
</programlisting>
      </para>

      <para>Cuando las matrices se evalúan y se recorre fila por fila, justo como el operador <literal>M@(j)</literal> que recorre la matriz renglón por renglón.</para>

      <note>
        <para>Tenga cuidado al utilizar «return» en expresiones dentro de corchetes <literal>[ ]</literal>, ya que tiene un significado ligeramente distinto en ese contexto. Comenzará una fila nueva.</para>
      </note>

    </sect1>

    <sect1 id="genius-gel-matrix-transpose">
      <title>Conjugada de la traspuesta y operador de trasposición</title>
      <para lang="en">
You can conjugate transpose a matrix by using the <literal>'</literal> operator.  That is
the entry in the
<varname>i</varname>th column and the <varname>j</varname>th row will be
the complex conjugate of the entry in the
<varname>j</varname>th column and the <varname>i</varname>th row of the original matrix.
 For example:
<programlisting lang="en">[1,2,3]*[4,5,6]'
</programlisting>
We transpose the second vector to make matrix multiplication possible.
If you just want to transpose a matrix without conjugating it, you would
use the <literal>.'</literal> operator.  For example:
<programlisting lang="en">[1,2,3]*[4,5,6i].'
</programlisting>
      </para>
	<para>Observe que la matriz traspuesta, esto es la que se calcula utilizando el operador <literal>.'</literal>, es más veloz y no crea una copia nueva de la matriz en la memoria. Desafortunadamente, la matriz traspuesta conjugada sí crea una copia nueva. Se recomienda que siempre utilice el operador <literal>.'</literal> cuando trabaje con matrices y vectores reales.</para>
    </sect1>

    <sect1 id="genius-gel-matrix-linalg">
      <title>Álgebra lineal</title>
      <para>Genius implementa varias rutinas útiles para manipular álgebra lineal y matrices. Consulte las secciones <link linkend="genius-gel-function-list-linear-algebra">álgebra lineal</link> y <link linkend="genius-gel-function-list-matrix">manipulación de matrices</link> de la lista de funciones GEL.</para>
      <para>Las rutinas de álgebra lineal implementadas en GEL no ofrecen actualmente un paquete numérico bien probado, por lo que no se deberían utilizar para cálculos numéricos críticos. Por otro lado, Genius implementa muy bien muchas operaciones de álgebra lineal con coeficientes racionales y enteros. Éstas son intrínsecamente exactas y, de hecho, dan resultados mucho mejores que las rutinas comunes de doble precisión para álgebra lineal.</para>
      <para>Por ejemplo, no tiene sentido calcular el rango y el espacio nulo de una matriz en coma flotante, ya que para todos los fines prácticos, se debe tener en cuenta que la matriz puede tener algunos errores pequeños. Es posible que se obtenga un resultado diferente al esperado. El problema es que con una perturbación pequeña cualquier matriz es de rango completo e invertible. Sin embargo, si la matriz se compone de números racionales, entonces el rango y el espacio nulo serán siempre exactos.</para>
      <para>En general, cuando Genius calcula la base de un espacio vectorial determinado (por ejemplo con la función <link linkend="gel-function-NullSpace"><function>NullSpace</function></link>), se dará la base como una matriz cuyas columnas son los vectores de la base. Es decir, cuando Genius habla de un subespacio lineal se refiere a una matriz cuyo espacio de columna es el subespacio lineal indicado.</para>
      <para>Cabe señalar que Genius puede recordar ciertas propiedades de una matriz. Por ejemplo, se recordará si una matriz está en su forma reducida por filas. Si se hacen muchas llamadas a funciones que utilizan internamente la forma reducida por filas de una matriz, se puede reducir por filas la matriz previamente una sola vez. Las llamadas sucesivas a la función <link linkend="gel-function-rref"><function>rref</function></link> se harán muy rápido.</para>
    </sect1>

  </chapter>

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

    <para>Actualmente, Genius puede manipular polinomios de una variable escritos como vectores y realizar algunas operaciones básicas con ellos. Se prevé ampliar este soporte adicional.</para>

    <sect1 id="genius-gel-polynomials-using">
      <title>Usar polinomios</title>
      <para lang="en">
Currently
polynomials in one variable are just horizontal vectors with value only nodes.
The power of the term is the position in the vector, with the first position
being 0. So,
<programlisting lang="en">[1,2,3]
</programlisting>
translates to a polynomial of
<programlisting lang="en">1 + 2*x + 3*x^2
</programlisting>
      </para>
      <para lang="en">
You can add, subtract and multiply polynomials using the
<link linkend="gel-function-AddPoly"><function>AddPoly</function></link>,
<link linkend="gel-function-SubtractPoly"><function>SubtractPoly</function></link>, and
<link linkend="gel-function-MultiplyPoly"><function>MultiplyPoly</function></link> functions respectively.
You can print a polynomial using the
<link linkend="gel-function-PolyToString"><function>PolyToString</function></link>
function.
For example,
<programlisting lang="en">PolyToString([1,2,3],"y")
</programlisting>
gives
<programlisting lang="en">3*y^2 + 2*y + 1
</programlisting>
You can also get a function representation of the polynomial so that you can
evaluate it. This is done by using
<link linkend="gel-function-PolyToFunction"><function>PolyToFunction</function></link>,
which
returns an anonymous function.
<programlisting lang="en">f = PolyToFunction([0,1,1])
f(2)
</programlisting>
      </para>
      <para>También es posible encontrar raíces de los polinomios de grado 1 a 4 mediante el uso de la función <link linkend="gel-function-PolynomialRoots"><function>PolynomialRoots</function></link>, que llama a la función de la fórmula adecuada. Los polinomios de grado más alto se convertirán en funciones y se resolverán numéricamente al utilizar una función como <link linkend="gel-function-FindRootBisection"><function>FindRootBisection</function></link>, <link linkend="gel-function-FindRootFalsePosition"><function>FindRootFalsePosition</function></link>, <link linkend="gel-function-FindRootMullersMethod"><function>FindRootMullersMethod</function></link>, o <link linkend="gel-function-FindRootSecant"><function>FindRootSecant</function></link>.</para>
      <para>Consulte la <xref linkend="genius-gel-function-list-polynomials"/> en la lista de funciones el resto de funciones que actúan sobre polinomios.</para>
    </sect1>

  </chapter>

  <!-- ============= Set Theory ============================== -->
  <chapter id="genius-gel-settheory">
    <title>Teoría de conjuntos en GEL</title>

    <para>Genius incorpora un juego básico de funcionalidades teoréticas. En la actualidad, un conjunto es sólo un vector (o una matriz). Cada objeto distinto se trata como un elemento diferente.</para>

    <sect1 id="genius-gel-sets-using">
      <title>Usar conjuntos</title>
      <para>Al igual que los vectores, los objetos en conjuntos pueden incluir números, cadenas, <constant>null</constant>, matrices y vectores. En un futuro se plantea tener un tipo determinado de conjuntos, en lugar de utilizar vectores. Tenga en cuenta que los números en coma flotante son distintos de los enteros, y que parecen iguales. Esto significa que Genius los tratará como términos distintos, usando las constantes <constant>0</constant> y <constant>0.0</constant>. La constante <constant>null</constant> se trata como un conjunto vacío.</para>
      <para lang="en">
	To build a set out of a vector, use the 
	<link linkend="gel-function-MakeSet"><function>MakeSet</function></link> function.
	Currently, it will just return a new vector where every element is unique.
<screen lang="en"><prompt>genius&gt; </prompt><userinput>MakeSet([1,2,2,3])</userinput>
= [1, 2, 3]
</screen>
</para>

	<para lang="en">
	Similarly there are functions 
	<link linkend="gel-function-Union"><function>Union</function></link>,
	<link linkend="gel-function-Intersection"><function>Intersection</function></link>,
	<link linkend="gel-function-SetMinus"><function>SetMinus</function></link>, which
	are rather self explanatory.  For example:
<screen lang="en"><prompt>genius&gt; </prompt><userinput>Union([1,2,3], [1,2,4])</userinput>
= [1, 2, 4, 3]
</screen>
	Note that no order is guaranteed for the return values.  If you wish to sort the vector you
should use the
	<link linkend="gel-function-SortVector"><function>SortVector</function></link> function.
	</para>

	<para lang="en">
	  For testing membership, there are functions
	<link linkend="gel-function-IsIn"><function>IsIn</function></link> and
	<link linkend="gel-function-IsSubset"><function>IsSubset</function></link>,
	which return a boolean value.  For example:
<screen lang="en"><prompt>genius&gt; </prompt><userinput>IsIn (1, [0,1,2])</userinput>
= true
</screen>
	The input <userinput>IsIn(x,X)</userinput> is equivalent to
	<userinput>IsSubset([x],X)</userinput>.  Note that since the empty set is a subset
	of every set, <userinput>IsSubset(null,X)</userinput> is always true.
	</para>

    </sect1>

  </chapter>

  <!-- ============= GEL function list ======================== -->
  <chapter id="genius-gel-function-list">
    <title>Lista de funciones GEL</title>

    <!--&gel-function-list;-->

    <para lang="en">
To get help on a specific function from the console type:
<programlisting lang="en">help FunctionName
</programlisting>
    </para>

    <sect1 id="genius-gel-function-list-commands">
      <title>Comandos</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-command-help"/>help</term>
         <listitem>
          <synopsis>help</synopsis>
          <synopsis>ayuda NombreFunción</synopsis>
          <para>Imprimir ayuda (o ayuda en una función/comando).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-command-load"/>load</term>
         <listitem>
          <synopsis>load «archivo.gel»</synopsis>
          <para>Cargar un archivo en el intérprete. El archivo se ejecutará como si se hubiera escrito en la línea de comandos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-command-cd"/>cd</term>
         <listitem>
          <synopsis>cd /carpeta/nombre</synopsis>
          <para>Cambiar la carpeta de trabajo a <filename>/carpeta/nombre</filename>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-command-pwd"/>pwd</term>
         <listitem>
          <synopsis>pwd</synopsis>
          <para>Imprimir la carpeta de trabajo actual.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-command-ls"/>ls</term>
         <listitem>
          <synopsis>ls</synopsis>
          <para>Listar archivos en la carpeta actual.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-command-plugin"/>plugin</term>
         <listitem>
          <synopsis>plugin nombre_del_complemento</synopsis>
          <para>Cargar un complemento. El complemento debe estar instalado en el sistema en la carpeta adecuada.</para>
         </listitem>
        </varlistentry>
      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-basic">
      <title>Básico</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-AskButtons"/>AskButtons</term>
         <listitem>
          <synopsis>AskButtons (consulta)</synopsis>
          <synopsis>AskButtons (consulta, botón1, ...)</synopsis>
	  <para>Hace una pregunta y presenta una lista de botones para el usuario o un menú de opciones en modo texto). Devuelve el índice en base a 1 de la tecla pulsada. Esto es, devuelve 1 si se presiona la primera tecla, 2 si es la segunda, y así sucesivamente. Si el usuario cierra la ventana (o simplemente entra en modo texto), entonces devuelve la constante <constant>null</constant>. La ejecución del programa permanece bloqueada hasta que el usuario responda.</para>
	  <para>Desde la versión 1.0.10 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-AskString"/>AskString</term>
         <listitem>
          <synopsis>AskString (consulta)</synopsis>
          <synopsis>AskString (consulta, predeterminado)</synopsis>
          <para>Hace una pregunta y deja al usuario que introduzca una cadena que luego devuelve. Si el usuario cancela o cierra la ventana, entonces se devuelve la constante <constant>null</constant>. El programa se detiene hasta que el usuario responda. Si de forma predeterminada <varname>default</varname> se da, entonces se escribe de forma automática cada vez que el usuario presiona la tecla «Intro» (desde la versión 1.0.6 en adelante).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Compose"/>Compose</term>
         <listitem>
          <synopsis>Compose (f,g)</synopsis>
          <para>Componer dos funciones y devolver una función, que es la composición de <function>f</function> y <function>g</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ComposePower"/>ComposePower</term>
         <listitem>
          <synopsis>ComposePower (f,n,x)</synopsis>
          <para lang="en">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 lang="en"><prompt>genius&gt;</prompt> <userinput>function f(x) = x^2 ;</userinput>
<prompt>genius&gt;</prompt> <userinput>ComposePower (f,3,7)</userinput>
= 5764801
<prompt>genius&gt;</prompt> <userinput>f(f(f(7)))</userinput>
= 5764801
</screen>
	  </para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Evaluate"/>Evaluate</term>
         <listitem>
          <synopsis>Evaluate (cadena)</synopsis>
          <para>Analiza y evalúa una cadena.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><anchor id="gel-function-GetCurrentModulo"/>GetCurrentModulo</term>
         <listitem>
          <synopsis>GetCurrentModulo</synopsis>
          <para>Obtener el módulo actual desde fuera del contexto de la función. Esto significa que, si fuera de la función se ejecutó en módulo (utilizando <literal>mod</literal>) entonces esto devuelve lo que este módulo fue. El cuerpo de la función que se llama no se ejecuta en aritmética modular, y esta función interna hace posible hacer funciones GEL que utilizan la aritmética modular.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Identity"/>Identity</term>
         <listitem>
          <synopsis>Identity (x)</synopsis>
	  <para>Función identidad, devuelve sus argumentos. Esto es equivalente a <userinput>function Identity(x)=x</userinput>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IntegerFromBoolean"/>IntegerFromBoolean</term>
         <listitem>
          <synopsis>IntegerFromBoolean (bval)</synopsis>
	  <para>Hacer entero (0 para <constant>false</constant> o 1 para <constant>true</constant>) desde un valor booleano. <varname>bval</varname> también puede ser un número y en el caso de que el valor no sea 0 se interpretará como <constant>true</constant> y si es 0 se interpretará como <constant>false</constant>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsBoolean"/>IsBoolean</term>
         <listitem>
          <synopsis>IsBoolean (arg)</synopsis>
          <para>Comprobar si el argumento es un booleano (y no un número).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsDefined"/>IsDefined</term>
         <listitem>
          <synopsis>IsDefined (id)</synopsis>
          <para>Comprobar si un identificador está declarado. Pase una cadena o un identificador. Si pasa una matriz, cada entrada se evaluará por separado y la matriz contendrá cadenas o identificadores.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsFunction"/>IsFunction</term>
         <listitem>
          <synopsis>IsFunction (arg)</synopsis>
          <para>Comprobar si el argumento es una función.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsFunctionOrIdentifier"/>IsFunctionOrIdentifier</term>
         <listitem>
          <synopsis>IsFunctionOrIdentifier (arg)</synopsis>
          <para>Comprobar si el argumento es una función o un identificador.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsFunctionRef"/>IsFunctionRef</term>
         <listitem>
          <synopsis>IsFunctionRef (arg)</synopsis>
          <para>Comprobar si el argumento es una referencia a la función. Esto incluye las referencias a variables.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsMatrix"/>IsMatrix</term>
         <listitem>
          <synopsis>IsMatrix (arg)</synopsis>
          <para>Comprobar si el argumento es una matriz. Si bien <constant>null</constant> se considera en algunas ocasiones como una matriz vacía, la función <function>IsMatrix</function> no considera a <constant>null</constant> como una matriz.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsNull"/>IsNull</term>
         <listitem>
          <synopsis>IsNull (arg)</synopsis>
	  <para>Comprobar si el argumento es <constant>null</constant>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsString"/>IsString</term>
         <listitem>
          <synopsis>IsString (arg)</synopsis>
          <para>Comprobar si el argumento es una cadena de texto.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsValue"/>IsValue</term>
         <listitem>
          <synopsis>IsValue (arg)</synopsis>
          <para>Comprobar si el argumento es un número.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Parse"/>Parse</term>
         <listitem>
          <synopsis>Parse (cadena)</synopsis>
          <para>Comprobar pero no evaluar una cadena. Tenga en cuenta que algunos cálculos internos se realizan durante el análisis.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SetFunctionFlags"/>SetFunctionFlags</term>
         <listitem>
          <synopsis>SetFunctionFlags (id,opciones...)</synopsis>
          <para>Establece opciones para una función, actualmente <literal>"PropagateMod"</literal> y <literal>"NoModuloArguments"</literal>. Si <literal>"PropagateMod"</literal> se activa, entonces el cuerpo de la función se evalúa en la aritmética modular cuando la función se llama dentro de un bloque que se evaluó con la aritmética modular (se utilizó <literal>mod</literal>). Si se activa <literal>"NoModuloArguments"</literal>, entonces los argumentos de la función se evaluarán con la aritmética modular.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SetHelp"/>SetHelp</term>
         <listitem>
          <synopsis>SetHelp (id,categoria,desc)</synopsis>
          <para>Establece la categoría y la línea de descripción de la ayuda para una función.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SetHelpAlias"/>SetHelpAlias</term>
         <listitem>
          <synopsis>SetHelpAlias (id,alias)</synopsis>
          <para>Establece un alias de ayuda.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-chdir"/>chdir</term>
         <listitem>
          <synopsis>chdir (carpeta)</synopsis>
          <para>Cambia la carpeta actual, igual que <command>cd</command>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-CurrentTime"/>CurrentTime</term>
         <listitem>
          <synopsis>CurrentTime</synopsis>
          <para>Devuelve la hora UNIX actual con una precisión de microsegundos, como un número en coma flotante. Esto es, devuelve el número de segundos desde el 1 de enero de 1970.</para>
	  <para>Desde la versión 1.0.15 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-display"/>display</term>
         <listitem>
          <synopsis>display (cadena,expresión)</synopsis>
          <para>Muestra una cadena y una expresión separadas por dos puntos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DisplayVariables"/>DisplayVariables</term>
         <listitem>
          <synopsis>DisplayVariables (var1,var2,...)</synopsis>
	  <para lang="en">Display set of variables.  The variables can be given as
		  strings or identifiers.  For example:
	    <programlisting lang="en">DisplayVariables(`x,`y,`z)
	    </programlisting>
	  </para>
	  <para lang="en">
		  If called without arguments (must supply empty argument list) as
	    <programlisting lang="en">DisplayVariables()
	    </programlisting>
	    then all variables are printed including a stacktrace similar to
	    <guilabel>Show user variables</guilabel> in the graphical version.
	  </para>
	  <para>Desde la versión 1.0.18 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-error"/>error</term>
         <listitem>
          <synopsis>error (cadena)</synopsis>
          <para>Imprime un error en el flujo de error (en la consola).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-exit"/>exit</term>
         <listitem>
          <synopsis>exit</synopsis>
          <para>Aliases: <function>quit</function></para>
          <para>Sale el programa.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-false"/>false</term>
         <listitem>
          <synopsis>false</synopsis>
          <para lang="en">Aliases: <function>False</function> <function>FALSE</function></para>
	  <para>El valor booleano <constant>false</constant>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-manual"/>manual</term>
         <listitem>
          <synopsis>manual</synopsis>
          <para>Muestra el manual de usuario.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-print"/>print</term>
         <listitem>
          <synopsis>print (cadena)</synopsis>
          <para>Imprime una expresión y luego una nueva línea. El argumento <varname>str</varname> puede ser cualquier expresión. Esto se hace dentro de una cadena antes de imprimir.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-printn"/>printn</term>
         <listitem>
          <synopsis>printn (cad)</synopsis>
          <para>Imprime una expresión sin un carácter de nueva línea. El argumento <varname>str</varname> puede ser cualquier expresión. Esto se hace dentro de una cadena antes de imprimir.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PrintTable"/>PrintTable</term>
         <listitem>
          <synopsis>PrintTable (f,v)</synopsis>
	  <para lang="en">Print a table of values for a function.  The values are in the 
		  vector <varname>v</varname>.  You can use the vector
		  building notation as follows:
      		  <programlisting lang="en">PrintTable (f,[0:10])
	    </programlisting>
	    If <varname>v</varname> is a positive integer, then the table of
	    integers from 1 up to and including v will be used.
	  </para>
	  <para>Desde la versión 1.0.18 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-protect"/>protect</term>
         <listitem>
          <synopsis>protect (id)</synopsis>
          <para>Puede proteger una variable de ser modificada. Esto se usa en las funciones de GEL internas para evitar que se sobreescriban accidentalmente.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ProtectAll"/>ProtectAll</term>
         <listitem>
          <synopsis>ProtectAll ()</synopsis>
          <para>Protege todas la variables actuales definidas, parámetros y funciones desde que se modificaron. Se utiliza por las funciones GEL para impedir accidentalmente que se sobrescriba. Normalmente la <application>herramienta matemática Genius</application> considera desprotegidas las variables que el usuario definió.</para>
	  <para>Desde la versión 1.0.7 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-set"/>set</term>
         <listitem>
          <synopsis>set (id,val)</synopsis>
          <para lang="en">Set a global variable.  The <varname>id</varname>
            can be either a string or a quoted identifier.
	    For example:
	    <programlisting lang="en">set(`x,1)
	    </programlisting>
	    will set the global variable <varname>x</varname> to the value 1.
	  </para>
	  <para>La función devuelve el <varname>val</varname>, que podrá utilizarse para encadenamiento.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SetElement"/>SetElement</term>
         <listitem>
          <synopsis>SetElement (id,row,col,val)</synopsis>
	  <para lang="en">Set an element of a global variable which is a matrix.
		  The <varname>id</varname>
            can be either a string or a quoted identifier.
	    For example:
	    <programlisting lang="en">SetElement(`x,2,3,1)
	    </programlisting>
	    will set the second row third column element of the global variable <varname>x</varname> to the value 1.  If no global variable of the name exists, or if it is set to something that's not a matrix, a new zero matrix of appropriate size will be created.
	  </para>
	  <para>Las variables <varname>row</varname> y <varname>col</varname> pueden ser también rangos, y la semántica es la mísma para las configuraciones normales de los elementos con un signo igual.</para>
	  <para>La función devuelve el <varname>val</varname>, que podrá utilizarse para encadenamiento.</para>
	  <para>Disponible desde la versión 1.0.10 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SetVElement"/>SetVElement</term>
         <listitem>
          <synopsis>SetElement (id,elt,val)</synopsis>
	  <para lang="en">Set an element of a global variable which is a vector.
		  The <varname>id</varname>
            can be either a string or a quoted identifier.
	    For example:
	    <programlisting lang="en">SetElement(`x,2,1)
	    </programlisting>
	    will set the second element of the global vector variable <varname>x</varname> to the value 1.  If no global variable of the name exists, or if it is set to something that's not a vector (matrix), a new zero row vector of appropriate size will be created.
	  </para>
	  <para>La variable <varname>elt</varname> puede ser un rango, y la semánticas son la mísmas para las configuraciones normales de los elementos con un signo igual.</para>
	  <para>La función devuelve el <varname>val</varname>, que podrá utilizarse para encadenamiento.</para>
	  <para>Disponible desde la versión 1.0.10 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-string"/>string</term>
         <listitem>
          <synopsis>string (s)</synopsis>
          <para>Crear una cadena. Esto creará una cadena desde cualquier argumento.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-true"/>true</term>
         <listitem>
          <synopsis>true</synopsis>
          <para lang="en">Aliases: <function>True</function> <function>TRUE</function></para>
	  <para>El valor booleano <constant>true</constant>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-undefine"/>undefine</term>
         <listitem>
          <synopsis>undefine (id)</synopsis>
          <para>Alias: <function>Undefine</function></para>
          <para>Elimina la definición de una variable. Esto incluye variables locales y globales, cada valor se limpia en toda su dimensión. Esta función no se usa en variables locales. Se puede usar un vector de identificadores para eliminar la definición de varias variables a la vez.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-UndefineAll"/>UndefineAll</term>
         <listitem>
          <synopsis>UndefineAll ()</synopsis>
	  <para>Elimina la definición de todas las variables desprotegidas globales (incluyendo funciones y parámetros). La <application>herramienta matemática Genius</application> considera a las variables protegidas como variables y funciones definidas por el sistema. Tenga en cuenta que <function>UndefineAll</function> solo elimina la definición global de símbolos no locales, por lo que se puede ejecutar desde dentro de otras funciones de manera segura.</para>
	  <para>Desde la versión 1.0.7 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-unprotect"/>unprotect</term>
         <listitem>
          <synopsis>unprotect (id)</synopsis>
          <para>Desproteger una variable de ser modificada.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-UserVariables"/>UserVariables</term>
         <listitem>
          <synopsis>UserVariables ()</synopsis>
          <para>Devolver un vector con todos los nombres de variables globales definidas por el usuario (sin proteger).</para>
	  <para>Desde la versión 1.0.7 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-wait"/>wait</term>
         <listitem>
          <synopsis>wait (secs)</synopsis>
          <para>Esperar un número específico de segundos. <varname>secs</varname> no puede ser negativo. Cero es aceptable y no pasa nada en este caso, excepto si los posibles eventos de interfaz del usuario se procesan.</para>
	  <para>Desde la versión 1.0.18, la variable <varname>secs</varname> puede ser un número no entero, así <userinput>wait(0.1)</userinput> esperará durante un periodo de una décima de segundo.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-version"/>version</term>
         <listitem>
          <synopsis>version</synopsis>
          <para>Devuelve la versión de Genius como un vector horizontal de tres argumentos en el que el primero es la versión mayor, le sigue menor versión y la revisión en último lugar.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-warranty"/>warranty</term>
         <listitem>
          <synopsis>warranty</synopsis>
          <para>Da la información de garantía.</para>
         </listitem>
        </varlistentry>
      </variablelist>

    </sect1>

    <sect1 id="genius-gel-function-parameters">
      <title>Parámetros</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-ChopTolerance"/>ChopTolerance</term>
         <listitem>
          <synopsis>ChopTolerance = número</synopsis>
          <para>Tolerancia de la función <function>Chop</function></para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ContinuousNumberOfTries"/>ContinuousNumberOfTries</term>
         <listitem>
          <synopsis>ContinuousNumberOfTries = número</synopsis>
          <para>Iteraciones para tratar de obtener el límite de continuidad y sus límites.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ContinuousSFS"/>ContinuousSFS</term>
         <listitem>
          <synopsis>ContinuousSFS = número</synopsis>
          <para>Número de pasos sucesivos dentro de la tolerancia para el cálculo de la continuidad.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ContinuousTolerance"/>ContinuousTolerance</term>
         <listitem>
          <synopsis>ContinuousTolerance = número</synopsis>
          <para>Tolerancia para la continuidad de las funciones y para el cálculo del límite.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DerivativeNumberOfTries"/>DerivativeNumberOfTries</term>
         <listitem>
          <synopsis>DerivativeNumberOfTries = número</synopsis>
          <para>Número de iteraciones para tratar de obtener el límite para la derivada.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DerivativeSFS"/>DerivativeSFS</term>
         <listitem>
          <synopsis>DerivativeSFS = número</synopsis>
          <para>Número de pasos sucesivos dentro de la tolerancia para el cálculo de la derivada.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DerivativeTolerance"/>DerivativeTolerance</term>
         <listitem>
          <synopsis>DerivativeTolerance = número</synopsis>
          <para>Tolerancia para calcular las derivadas de las funciones.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ErrorFunctionTolerance"/>ErrorFunctionTolerance</term>
         <listitem>
          <synopsis>ErrorFunctionTolerance = número</synopsis>
	  <para>Tolerancia de <link linkend="gel-function-ErrorFunction"><function>ErrorFunction</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FloatPrecision"/>FloatPrecision</term>
         <listitem>
          <synopsis>FloatPrecision = número</synopsis>
          <para>Precisión en coma flotante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FullExpressions"/>FullExpressions</term>
         <listitem>
          <synopsis>FullExpressions = booleano</synopsis>
          <para>Imprimir expresiones completas, incluso si son de más de una línea.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-GaussDistributionTolerance"/>GaussDistributionTolerance</term>
         <listitem>
          <synopsis>GaussDistributionTolerance = número</synopsis>
	  <para>Tolerancia de la función <link linkend="gel-function-GaussDistribution"><function>GaussDistribution</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IntegerOutputBase"/>IntegerOutputBase</term>
         <listitem>
          <synopsis>IntegerOutputBase = número</synopsis>
          <para>Base de salida de enteros.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsPrimeMillerRabinReps"/>IsPrimeMillerRabinReps</term>
         <listitem>
          <synopsis>IsPrimeMillerRabinReps = número</synopsis>
	  <para>Número de tests de Miller-Rabin adicionales que ejecutar sobre un número antes de declararlo primo en <link linkend="gel-function-IsPrime"><function>IsPrime</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LinePlotDrawLegends"/>LinePlotDrawLegends</term>
         <listitem>
          <synopsis>LinePlotDrawLegends = true</synopsis>
          <para>Le dice a Genius cómo dibujar las leyendas para las <link linkend="genius-gel-function-list-plotting">funciones para dibujar líneas</link> tales como <link linkend="gel-function-LinePlot"><function>LinePlot</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LinePlotDrawAxisLabels"/>LinePlotDrawAxisLabels</term>
         <listitem>
          <synopsis>LinePlotDrawAxisLabels = true</synopsis>
          <para>Le dice a Genius que dibuje las etiquetas de los ejes cuando se utilizan <link linkend="genius-gel-function-list-plotting">funciones para dibujar líneas</link> como <link linkend="gel-function-LinePlot"><function>LinePlot</function></link>.</para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LinePlotVariableNames"/>LinePlotVariableNames</term>
         <listitem>
          <synopsis>LinePlotVariableNames = ["x","y","z","t"]</synopsis>
          <para>Le dice a Genius qué nombres de variable se usan como nombres predeterminados para <link linkend="genius-gel-function-list-plotting">funciones para dibujar líneas</link> tales como <link linkend="gel-function-LinePlot"><function>LinePlot</function></link> y compañía.</para>
	  <para>Desde la versión 1.0.10 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LinePlotWindow"/>LinePlotWindow</term>
         <listitem>
          <synopsis>LinePlotWindow = [x1,x2,y1,y2]</synopsis>
          <para>Establece los límites para las<link linkend="genius-gel-function-list-plotting">funciones para dibujar líneas</link> tales como <link linkend="gel-function-LinePlot"><function>LinePlot</function></link>.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><anchor id="gel-function-MaxDigits"/>MaxDigits</term>
         <listitem>
          <synopsis>MaxDigits = número</synopsis>
          <para>Máximo de cifras que mostrar.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MaxErrors"/>MaxErrors</term>
         <listitem>
          <synopsis>MaxErrors = número</synopsis>
          <para>Máximo de errores que mostrar.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MixedFractions"/>MixedFractions</term>
         <listitem>
          <synopsis>MixedFractions = booleano</synopsis>
          <para>Si es cierto, las fracciones mixtas se imprimen.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalIntegralFunction"/>NumericalIntegralFunction</term>
         <listitem>
          <synopsis>NumericalIntegralFunction = función</synopsis>
	  <para>La función usada para la integración en <link linkend="gel-function-NumericalIntegral"><function>NumericalIntegral</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalIntegralSteps"/>NumericalIntegralSteps</term>
         <listitem>
          <synopsis>NumericalIntegralSteps = número</synopsis>
	  <para>Pasos que realizar en <link linkend="gel-function-NumericalIntegral"><function>NumericalIntegral</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-OutputChopExponent"/>OutputChopExponent</term>
         <listitem>
          <synopsis>OutputChopExponent = número</synopsis>
	  <para>Cuando otro número que se imprime en el objeto (una matriz o un valor) es mayor que 10<superscript>-OutputChopWhenExponent</superscript>, y el número que se imprime es menor que 10<superscript>-OutputChopExponent</superscript>, entonces se mostrará <computeroutput>0.0</computeroutput> en lugar del número.</para>
<para>La salida nunca se corta si <function>OutputChopExponent</function> es cero. El número será un entero positivo.</para>
<para>Si quiere que la salida siempre se corte según <function>OutputChopExponent</function>, configure <function>OutputChopWhenExponent</function>, para un valor mayor o igual a <function>OutputChopExponent</function>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-OutputChopWhenExponent"/>OutputChopWhenExponent</term>
         <listitem>
          <synopsis>OutputChopWhenExponent = número</synopsis>
	  <para>Cuando recortar la salida. Consulte <link linkend="gel-function-OutputChopExponent"><function>OutputChopExponent</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-OutputStyle"/>OutputStyle</term>
         <listitem>
          <synopsis>OutputStyle = cadena</synopsis>
          <para>Estilo de salida, puede ser <literal>normal</literal>, <literal>latex</literal>, <literal>mathml</literal> o <literal>troff</literal>.</para>
	  <para lang="en">
	    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 lang="en">OutputStyle = "latex"
</programlisting>
	  </para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ResultsAsFloats"/>ResultsAsFloats</term>
         <listitem>
          <synopsis>ResultsAsFloats = booleano</synopsis>
          <para>Convertir todos los resultados a flotantes antes de imprimir.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ScientificNotation"/>ScientificNotation</term>
         <listitem>
          <synopsis>ScientificNotation = booleano</synopsis>
          <para>Usar notación científica.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SlopefieldTicks"/>SlopefieldTicks</term>
         <listitem>
          <synopsis>SlopefieldTicks = [vertical,horizontal]</synopsis>
          <para>Establece el número de pasos verticales y horizontales en un diagrama de pendientes. (Consulte <link linkend="gel-function-SlopefieldPlot"><function>SlopefieldPlot</function></link>).</para>
	  <para>Desde la versión 1.0.10 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SumProductNumberOfTries"/>SumProductNumberOfTries</term>
         <listitem>
          <synopsis>SumProductNumberOfTries = número</synopsis>
	  <para>Cuántas iteraciones probar para <link linkend="gel-function-InfiniteSum"><function>InfiniteSum</function></link> y <link linkend="gel-function-InfiniteProduct"><function>InfiniteProduct</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SumProductSFS"/>SumProductSFS</term>
         <listitem>
          <synopsis>SumProductSFS = número</synopsis>
          <para>La cantidad de pasos consecutivos para estar dentro de los límites para <link linkend="gel-function-InfiniteSum"><function>InfiniteSum</function></link> y <link linkend="gel-function-InfiniteProduct"><function>InfiniteProduct</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SumProductTolerance"/>SumProductTolerance</term>
         <listitem>
          <synopsis>SumProductTolerance = número</synopsis>
          <para>Tolerancia para <link linkend="gel-function-InfiniteSum"><function>InfiniteSum</function></link> y <link linkend="gel-function-InfiniteProduct"><function>InfiniteProduct</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SurfacePlotDrawLegends"/>SurfacePlotDrawLegends</term>
         <listitem>
          <synopsis>SurfacePlotDrawLegends = true</synopsis>
          <para>Le dice a Genius cómo dibujar las leyendas para las <link linkend="genius-gel-function-list-plotting">funciones de dibujado de superficie</link> tales como <link linkend="gel-function-SurfacePlot"><function>SurfacePlot</function></link>.</para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SurfacePlotVariableNames"/>SurfacePlotVariableNames</term>
         <listitem>
          <synopsis>SurfacePlotVariableNames = ["x","y","z"]</synopsis>
          <para>Indica a Genius los nombres de variables que se usan como nombres predeterminados para las <link linkend="genius-gel-function-list-plotting">funciones de superficie de dibujado</link> que utiliza <link linkend="gel-function-SurfacePlot"><function>SurfacePlot</function></link>. Compruebe que <varname>z</varname> no se refiere al eje dependiente (vertical), sino que a la variable compleja independiente <userinput>z=x+iy</userinput>.</para>
	  <para>Desde la versión 1.0.10 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SurfacePlotWindow"/>SurfacePlotWindow</term>
         <listitem>
          <synopsis>SurfacePlotWindow = [x1,x2,y1,y2,z1,z2]</synopsis>
          <para>Establece los límites de la superficie de dibujado (consulte <link linkend="gel-function-SurfacePlot"><function>SurfacePlot</function></link>).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-VectorfieldNormalized"/>VectorfieldNormalized</term>
         <listitem>
          <synopsis>VectorfieldNormalized = true</synopsis>
          <para>Indica si la longitud de las flechas tendrá un tamaño normalizado en el trazado dentro del campo vectorial. Si es cierto, en el campo vectorial solo aparecerá la dirección y no la magnitud. (Consulte <link linkend="gel-function-VectorfieldPlot"><function>VectorfieldPlot</function></link>).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-VectorfieldTicks"/>VectorfieldTicks</term>
         <listitem>
          <synopsis>VectorfieldTicks = [vertical,horizontal]</synopsis>
          <para>Establece el número de pasos verticales y horizontales en un gráfico de campo de vectores. (Observe <link linkend="gel-function-VectorfieldPlot"><function>VectorfieldPlot</function></link>).</para>
	  <para>Desde la versión 1.0.10 en adelante.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-constants">
      <title>Constantes</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-CatalanConstant"/>CatalanConstant</term>
         <listitem>
          <synopsis>CatalanConstant</synopsis>
          <para>Constante de Catalan, aproximadamente 0,915... Se define para las series donde los términos son <userinput>(-1^k)/((2*k+1)^2)</userinput>, donde <varname>k</varname> tiene un rango desde 0 a infinito.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Catalan%27s_constant">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/CatalansConstant.html">la enciclopedia matemática Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-EulerConstant"/>EulerConstant</term>
         <listitem>
          <synopsis>EulerConstant</synopsis>
          <para>Alias: <function>gamma</function></para>
          <para>Constante gamma de Euler. También llamada constante de Euler-Mascheroni.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Euler-Mascheroni_constant">Wikipedia</ulink> o <ulink url="http://planetmath.org/MascheroniConstant">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/Euler-MascheroniConstant.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-GoldenRatio"/>GoldenRatio</term>
         <listitem>
          <synopsis>GoldenRatio</synopsis>
          <para>El número áureo.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Golden_ratio">Wikipedia</ulink> o <ulink url="http://planetmath.org/GoldenRatio">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/GoldenRatio.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Gravity"/>Gravity</term>
         <listitem>
          <synopsis>Gravedad</synopsis>
	  <para>La aceleración en caída libre al nivel del mar en metros por segundos al cuadrado. Es la constante de gravedad estandarizada y su valor es 9.80665. La gravedad en un desfiladero de un bosque es diferente debido principalmente a la diferencia de altitud y al hecho de que la Tierra no es perfectamente redonda ni uniforme.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Standard_gravity">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-e"/>e</term>
         <listitem>
          <synopsis>e</synopsis>
          <para>La base del logaritmo natural. <userinput>e^x</userinput> es la función exponencial <link linkend="gel-function-exp"><function>exp</function></link>. Su valor es aproximadamente 2.71828182846... Este número se llama número de Euler, aúnque hay varios números que se llaman también Euler. Un ejemplo es la constante gamma: <link linkend="gel-function-EulerConstant"><function>Constante de Euler</function></link>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/E_(mathematical_constant)">Wikipedia</ulink> o <ulink url="http://planetmath.org/E">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/e.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-pi"/>pi</term>
         <listitem>
          <synopsis>pi</synopsis>
          <para>El número pi, que es la relación de la circunferencia de un círculo con su diámetro. Esto es aproximadamente 3,14159265359...</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Pi">Wikipedia</ulink> o <ulink url="http://planetmath.org/Pi">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/Pi.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-numeric">
      <title>Numérico</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-AbsoluteValue"/>AbsoluteValue</term>
         <listitem>
          <synopsis>AbsoluteValue (x)</synopsis>
          <para>Alias: <function>abs</function></para>
          <para>Valor absoluto de un número y, si <varname>x</varname> es un valor complejo, el módulo de <varname>x</varname>. Es decir, es la distancia entre <varname>x</varname> y el origen. Esto es equivalente a <userinput>|x|</userinput>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Absolute_value">Wikipedia</ulink>, <ulink url="http://planetmath.org/AbsoluteValue">Planetmath (valor absoluto)</ulink>, <ulink url="http://planetmath.org/ModulusOfComplexNumber">Planetmath (módulo)</ulink>, <ulink url="http://mathworld.wolfram.com/AbsoluteValue.html">Mathworld (valor absoluto)</ulink> o <ulink url="http://mathworld.wolfram.com/ComplexModulus.html">Mathworld (módulo complejo)</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Chop"/>Chop</term>
         <listitem>
          <synopsis>Chop (x)</synopsis>
          <para>Reemplazar números muy pequeños por cero.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ComplexConjugate"/>ComplexConjugate</term>
         <listitem>
          <synopsis>ComplexConjugate (z)</synopsis>
          <para lang="en">Aliases: <function>conj</function> <function>Conj</function></para>
          <para>Calcula el conjugado complejo del número complejo <varname>z</varname>. Si <varname>z</varname> es un vector o una matriz, se conjugan todos sus elementos.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Complex_conjugate">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Denominator"/>Denominator</term>
         <listitem>
          <synopsis>Denominator (x)</synopsis>
          <para>Obtener el denominador de un número racional.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Denominator">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FractionalPart"/>FractionalPart</term>
         <listitem>
          <synopsis>FractionalPart (x)</synopsis>
          <para>Devolver la parte fraccional de un número.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Fractional_part">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Im"/>Im</term>
         <listitem>
          <synopsis>Im (z)</synopsis>
          <para>Alias: <function>ImaginaryPart</function></para>
          <para>Obtener la parte imaginaria de un número complejo. Por ejemplo <userinput>Re(3+4i)</userinput> yields 4.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Imaginary_part">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IntegerQuotient"/>IntegerQuotient</term>
         <listitem>
          <synopsis>IntegerQuotient (m,n)</synopsis>
          <para>División sin resto.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsComplex"/>IsComplex</term>
         <listitem>
          <synopsis>IsComplex (num)</synopsis>
	  <para>Comprueba si el argumento es un número complejo (no real). Observe que hacemos énfasis en número no real. Es decir, <userinput>IsComplex(3)</userinput> que devuelve «false», mientras que <userinput>IsComplex(3-1i)</userinput> devuelve «true».</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsComplexRational"/>IsComplexRational</term>
         <listitem>
          <synopsis>IsComplexRational (num)</synopsis>
	  <para>Comprobar si el argumento es, posiblemente, un número racional complejo. Esto es, si tanto la parte real como la imaginaria se dan como números racionales. Por supuesto, racional significa simplemente que «no se almacena como un número en coma flotante».</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsFloat"/>IsFloat</term>
         <listitem>
          <synopsis>IsFloat (num)</synopsis>
          <para>Comprobar si el argumento es un número real en coma flotante (no complejo).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsGaussInteger"/>IsGaussInteger</term>
         <listitem>
          <synopsis>IsGaussInteger (num)</synopsis>
          <para>Alias: <function>IsComplexInteger</function></para>
	  <para>Comprueba si un argumento es un posible número entero complejo. Es decir, un entero complejo es un número de la forma <userinput>n+1i*m</userinput> donde <varname>n</varname> y <varname>m</varname> son enteros.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsInteger"/>IsInteger</term>
         <listitem>
          <synopsis>IsInteger (num)</synopsis>
          <para>Comprobar si el argumento es un entero (no complejo).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsNonNegativeInteger"/>IsNonNegativeInteger</term>
         <listitem>
          <synopsis>IsNonNegativeInteger (num)</synopsis>
          <para>Comprobar si el argumento es un entero real no negativo. Esto es, cualquier número entero positivo o cero.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsPositiveInteger"/>IsPositiveInteger</term>
         <listitem>
          <synopsis>IsPositiveInteger (num)</synopsis>
          <para>Alias: <function>IsNaturalNumber</function></para>
          <para>Comprueba si el argumento es un entero real positivo. Tenga en cuenta que se acepta el convenio de que 0 no es un número natural.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsRational"/>IsRational</term>
         <listitem>
          <synopsis>IsRational (num)</synopsis>
          <para>Comprobar si el argumento es un número racional (no complejo). Por supuesto, racional significa «no almacenado como un número en coma flotante».</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsReal"/>IsReal</term>
         <listitem>
          <synopsis>IsReal (num)</synopsis>
          <para>Comprobar si el argumento es un número real</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Numerator"/>Numerator</term>
         <listitem>
          <synopsis>Numerator (x)</synopsis>
          <para>Obtener el numerador de un número racional.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Numerator">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Re"/>Re</term>
         <listitem>
          <synopsis>Re (z)</synopsis>
          <para>Alias: <function>RealPart</function></para>
	  <para>Obtiene la parte real de un número complejo. Por ejemplo <userinput>Re(3+4i)</userinput> devuelve 3.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Real_part">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Sign"/>Sign</term>
         <listitem>
          <synopsis>Sign (x)</synopsis>
          <para>Alias: <function>sign</function></para>
          <para>Devolver el signo de un número. Devuelve <literal>-1</literal> si es negativo, <literal>0</literal> si es cero y <literal>1</literal> si es positivo. Si <varname>x</varname> es un valor complejo <function>Sign</function> devuelve su dirección o 0.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ceil"/>ceil</term>
         <listitem>
          <synopsis>ceil (x)</synopsis>
          <para>Alias: <function>Ceiling</function></para>
	  <para lang="en">Get the lowest integer more than or equal to <varname>n</varname>. Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>ceil(1.1)</userinput>
= 2
<prompt>genius&gt;</prompt> <userinput>ceil(-1.1)</userinput>
= -1
</screen>
           </para>
	   <para>Tenga en cuenta que los números en coma flotante se almacenan en binario y que puede que el resultado no sea lo que espera. Por ejemplo <userinput>ceil(420/4.2)</userinput> devuelve 101 en vez de 100. Esto sucede porque en realidad 4,2 es ligeramente menor que 4,2. Utilice la representación racional <userinput>42/10</userinput> si quiere exactitud aritmética.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-exp"/>exp</term>
         <listitem>
          <synopsis>exp (x)</synopsis>
          <para>La función exponencial. Esto es la función <userinput>e^x</userinput> donde <varname>e</varname> es la <link linkend="gel-function-e">base del logaritmo natural</link>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Exponential_function">Wikipedia</ulink> o <ulink url="http://planetmath.org/LogarithmFunction">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/ExponentialFunction.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-float"/>float</term>
         <listitem>
          <synopsis>float (x)</synopsis>
          <para>Convertir un número en un valor en coma flotante. Esto devuelve la representación en coma flotante del número <varname>x</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-floor"/>floor</term>
         <listitem>
          <synopsis>floor (x)</synopsis>
          <para>Alias: <function>Floor</function></para>
          <para>Obtener el entero más alto menor o igual que <varname>n</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ln"/>ln</term>
         <listitem>
          <synopsis>ln (x)</synopsis>
          <para>El logaritmo natural, logaritmo en base <varname>e</varname>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Natural_logarithm">Wikipedia</ulink> o <ulink url="http://planetmath.org/LogarithmFunction">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/NaturalLogarithm.html">Mathworld</ulink> para más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-log"/>log</term>
         <listitem>
          <synopsis>log (x)</synopsis>
          <synopsis>log (x,b)</synopsis>
	  <para>Logaritmo de <varname>x</varname> en base <varname>b</varname> (se llama <link linkend="gel-function-DiscreteLog"><function>DiscreteLog</function></link> en modo módulo), si no se indica la base, se utiliza <link linkend="gel-function-e"><varname>e</varname></link>.</para>
         </listitem>
        </varlistentry>

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

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

        <varlistentry>
         <term><anchor id="gel-function-max"/>max</term>
         <listitem>
          <synopsis>max (a,args...)</synopsis>
          <para lang="en">Aliases: <function>Max</function> <function>Maximum</function></para>
          <para>Devuelve el máximo de los argumentos o las matrices.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-min"/>min</term>
         <listitem>
          <synopsis>min (a,args...)</synopsis>
          <para lang="en">Aliases: <function>Min</function> <function>Minimum</function></para>
          <para>Devuelve el mínimo de los argumentos o las matrices.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-rand"/>rand</term>
         <listitem>
          <synopsis>rand (tamaño...)</synopsis>
          <para>Generar valores en coma flotante aleatorios en el rango <literal>[0,1)</literal>. Si se indica «tamaño», entonces devuelve una matriz (si se especifican dos números) o un vector (si se especifica un número).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-randint"/>randint</term>
         <listitem>
          <synopsis>randint (máx,tamaño...)</synopsis>
          <para lang="en">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 lang="en"><prompt>genius&gt;</prompt> <userinput>randint(4)</userinput>
= 3
<prompt>genius&gt;</prompt> <userinput>randint(4,2)</userinput>
=
[0      1]
<prompt>genius&gt;</prompt> <userinput>randint(4,2,3)</userinput>
=
[2      2       1
 0      0       3]
</screen>
          </para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-round"/>round</term>
         <listitem>
          <synopsis>round (x)</synopsis>
          <para>Alias: <function>Round</function></para>
          <para>Redondear un número.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-sqrt"/>sqrt</term>
         <listitem>
          <synopsis>sqrt (x)</synopsis>
          <para>Alias: <function>SquareRoot</function></para>
          <para lang="en">The square root.  When operating modulo some integer will return either a <constant>null</constant> or a vector of the square roots.  Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>sqrt(2)</userinput>
= 1.41421356237
<prompt>genius&gt;</prompt> <userinput>sqrt(-1)</userinput>
= 1i
<prompt>genius&gt;</prompt> <userinput>sqrt(4) mod 7</userinput>
=
[2      5]
<prompt>genius&gt;</prompt> <userinput>2*2 mod 7</userinput>
= 4
</screen>
	  </para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Square_root">Wikipedia</ulink> o <ulink url="http://planetmath.org/SquareRoot">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-trunc"/>trunc</term>
         <listitem>
          <synopsis>trunc (x)</synopsis>
          <para lang="en">Aliases: <function>Truncate</function> <function>IntegerPart</function></para>
          <para>Truncar el número a un entero (devolver la parte entera)</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-trigonometry">
      <title>Trigonometría</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-acos"/>acos</term>
         <listitem>
          <synopsis>acos (x)</synopsis>
          <para>Alias: <function>arccos</function></para>
          <para>La función arccos (inversa del cos).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-acosh"/>acosh</term>
         <listitem>
          <synopsis>acosh (x)</synopsis>
          <para>Alias: <function>arccosh</function></para>
          <para>La función arccosh (inversa del cosh).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-acot"/>acot</term>
         <listitem>
          <synopsis>acot (x)</synopsis>
          <para>Alias: <function>arccot</function></para>
          <para>La función arccot (inversa de la cot)</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-acoth"/>acoth</term>
         <listitem>
          <synopsis>acoth (x)</synopsis>
          <para>Alias: <function>arccoth</function></para>
          <para>La función arccoth (inversa de la coth).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-acsc"/>acsc</term>
         <listitem>
          <synopsis>acsc (x)</synopsis>
          <para>Alias: <function>arccsc</function></para>
          <para>La inversa de la función cosecante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-acsch"/>acsch</term>
         <listitem>
          <synopsis>acsch (x)</synopsis>
          <para>Alias: <function>arccsch</function></para>
          <para>La inversa de la función cosecante hiperbólica.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-asec"/>asec</term>
         <listitem>
          <synopsis>asec (x)</synopsis>
          <para>Alias: <function>arcsec</function></para>
          <para>La inversa de la función secante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-asech"/>asech</term>
         <listitem>
          <synopsis>asech (x)</synopsis>
          <para>Alias: <function>arcsech</function></para>
          <para>La inversa de la función secante hiperbólica.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-asin"/>asin</term>
         <listitem>
          <synopsis>asin (x)</synopsis>
          <para>Alias: <function>arcsin</function></para>
          <para>La función arcsen (inversa del sen).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-asinh"/>asinh</term>
         <listitem>
          <synopsis>asinh (x)</synopsis>
          <para>Alias: <function>arcsinh</function></para>
          <para>La función arcsenh (inversa del senh).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-atan"/>atan</term>
         <listitem>
          <synopsis>atan (x)</synopsis>
          <para>Alias: <function>arctan</function></para>
          <para>Calcula la función «arctan» (inversa de «tan»).</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Arctangent">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/InverseTangent.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-atanh"/>atanh</term>
         <listitem>
          <synopsis>atanh (x)</synopsis>
          <para>Alias: <function>arctanh</function></para>
          <para>La función arctanh (inversa de la tanh).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-atan2"/>atan2</term>
         <listitem>
          <synopsis>atan2 (y, x)</synopsis>
          <para>Alias: <function>arctan2</function></para>
          <para lang="en">Calculates the arctan2 function.  If
	  <userinput>x&gt;0</userinput> then it returns
	  <userinput>atan(y/x)</userinput>.  If <userinput>x&lt;0</userinput>
	  then it returns <userinput>sign(y) * (pi - atan(|y/x|)</userinput>.
	  When <userinput>x=0</userinput> it returns <userinput>sign(y) *
	  pi/2</userinput>.  <userinput>atan2(0,0)</userinput> returns 0
	  rather than failing.
	  </para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Atan2">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/InverseTangent.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-cos"/>cos</term>
         <listitem>
          <synopsis>cos (x)</synopsis>
          <para>Calcula la función coseno.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Trigonometric_functions">Wikipedia</ulink> o <ulink url="http://planetmath.org/DefinitionsInTrigonometry">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-cosh"/>cosh</term>
         <listitem>
          <synopsis>cosh (x)</synopsis>
          <para>Calcula la función coseno hiperbólico.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Hyperbolic_function">Wikipedia</ulink> o <ulink url="http://planetmath.org/HyperbolicFunctions">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-cot"/>cot</term>
         <listitem>
          <synopsis>cot (x)</synopsis>
          <para>La función cotangente.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Trigonometric_functions">Wikipedia</ulink> o <ulink url="http://planetmath.org/DefinitionsInTrigonometry">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-coth"/>coth</term>
         <listitem>
          <synopsis>coth (x)</synopsis>
          <para>La función cotangente hiperbólica.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Hyperbolic_function">Wikipedia</ulink> o <ulink url="http://planetmath.org/HyperbolicFunctions">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-csc"/>csc</term>
         <listitem>
          <synopsis>csc (x)</synopsis>
          <para>La función cosecante.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Trigonometric_functions">Wikipedia</ulink> o <ulink url="http://planetmath.org/DefinitionsInTrigonometry">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-csch"/>csch</term>
         <listitem>
          <synopsis>csch (x)</synopsis>
          <para>La función cosecante hiperbólica.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Hyperbolic_function">Wikipedia</ulink> o <ulink url="http://planetmath.org/HyperbolicFunctions">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-sec"/>sec</term>
         <listitem>
          <synopsis>sec (x)</synopsis>
          <para>La función secante.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Trigonometric_functions">Wikipedia</ulink> o <ulink url="http://planetmath.org/DefinitionsInTrigonometry">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-sech"/>sech</term>
         <listitem>
          <synopsis>sech (x)</synopsis>
          <para>La función secante hiperbólica.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Hyperbolic_function">Wikipedia</ulink> o <ulink url="http://planetmath.org/HyperbolicFunctions">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-sin"/>sin</term>
         <listitem>
          <synopsis>sin (x)</synopsis>
          <para>Calcula la función seno.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Trigonometric_functions">Wikipedia</ulink> o <ulink url="http://planetmath.org/DefinitionsInTrigonometry">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-sinh"/>sinh</term>
         <listitem>
          <synopsis>sinh (x)</synopsis>
          <para>Calcula la función seno hiperbólico.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Hyperbolic_function">Wikipedia</ulink> o <ulink url="http://planetmath.org/HyperbolicFunctions">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-tan"/>tan</term>
         <listitem>
          <synopsis>tan (x)</synopsis>
          <para>Calcula la función tangente.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Trigonometric_functions">Wikipedia</ulink> o <ulink url="http://planetmath.org/DefinitionsInTrigonometry">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-tanh"/>tanh</term>
         <listitem>
          <synopsis>tanh (x)</synopsis>
          <para>La función tangente hiperbólica.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Hyperbolic_function">Wikipedia</ulink> o <ulink url="http://planetmath.org/HyperbolicFunctions">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-number-theory">
      <title>Teoría de números</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-AreRelativelyPrime"/>AreRelativelyPrime</term>
         <listitem>
          <synopsis>AreRelativelyPrime (a,b)</synopsis>
          <para>¿Son los números reales <varname>a</varname> and <varname>b</varname> primos entre sí? Devuelve <constant>true</constant> o <constant>false</constant>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Coprime_integers">Wikipedia</ulink> o <ulink url="http://planetmath.org/RelativelyPrime">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/RelativelyPrime.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-BernoulliNumber"/>BernoulliNumber</term>
         <listitem>
          <synopsis>BernoulliNumber (n)</synopsis>
          <para>Devolver el <varname>n</varname>-ésimo número de Bernoulli.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Bernoulli_number">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/BernoulliNumber.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ChineseRemainder"/>ChineseRemainder</term>
         <listitem>
          <synopsis>ChineseRemainder (a,m)</synopsis>
          <para>Alias: <function>CRT</function></para>
	  <para>Encontrar la <varname>x</varname> que resuelve el sistema dado por el vector <varname>a</varname> y el módulo de los elementos de <varname>m</varname>, utilizando el «teorema chino del resto».</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Chinese_remainder_theorem">Wikipedia</ulink> o <ulink url="http://planetmath.org/ChineseRemainderTheorem">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/ChineseRemainderTheorem.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-CombineFactorizations"/>CombineFactorizations</term>
         <listitem>
          <synopsis>CombineFactorizations (a,b)</synopsis>
	  <para>Dadas dos factorizaciones, dar la factorización del producto.</para>
	  <para>Consulte la sección<link linkend="gel-function-Factorize">factorizar</link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ConvertFromBase"/>ConvertFromBase</term>
         <listitem>
          <synopsis>ConvertFromBase (v,b)</synopsis>
          <para>Convertir un vector de valores mostrando potencias de b a un número.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ConvertToBase"/>ConvertToBase</term>
         <listitem>
          <synopsis>ConvertToBase (n,b)</synopsis>
          <para>Convertir un número en un vector de potencias para elementos en base <varname>b</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DiscreteLog"/>DiscreteLog</term>
         <listitem>
          <synopsis>DiscreteLog (n,b,q)</synopsis>
          <para>Encontrar el logaritmo discreto de <varname>n</varname> en base <varname>b</varname> en F<subscript>q</subscript>, el campo finito de orden <varname>q</varname>, donde <varname>q</varname> es primo, utilizando el algoritmo de Silver-Pohlig-Hellman.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Discrete_logarithm">Wikipedia</ulink>, <ulink url="http://planetmath.org/DiscreteLogarithm">Planetmath</ulink>, o <ulink url="http://mathworld.wolfram.com/DiscreteLogarithm.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Divides"/>Divides</term>
         <listitem>
          <synopsis>Divides (m,n)</synopsis>
          <para>Comprueba la divisibilidad (si <varname>m</varname> divide a <varname>n</varname>).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-EulerPhi"/>EulerPhi</term>
         <listitem>
          <synopsis>EulerPhi (n)</synopsis>
          <para>Calcular la función phi de Euler para <varname>n</varname>, que es el número de enteros entre 1 y <varname>n</varname> primo relativo con <varname>n</varname>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Euler_phi">Wikipedia</ulink>, <ulink url="http://planetmath.org/EulerPhifunction">Planetmath</ulink>, o <ulink url="http://mathworld.wolfram.com/TotientFunction.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ExactDivision"/>ExactDivision</term>
         <listitem>
          <synopsis>ExactDivision (n,d)</synopsis>
          <para lang="en">
	    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 it is only
	    useful if you know that the division is exact.
	  </para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Factorize"/>Factorize</term>
         <listitem>
          <synopsis>Factorize (n)</synopsis>
          <para lang="en">
	    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 lang="en"><prompt>genius&gt;</prompt> <userinput>Factorize(11*11*13)</userinput>
=
[1      11      13
 1      2       1]</screen>
	  </para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Factorization">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Factors"/>Factors</term>
         <listitem>
          <synopsis>Factors (n)</synopsis>
          <para lang="en">
	    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 to print all the perfect numbers
	    (those that are sums of their factors) up to the number 1000 you
	    could do (this is clearly very inefficient)
	    <programlisting lang="en">for n=1 to 1000 do (
    if MatrixSum (Factors(n)) == 2*n then
        print(n)
)
</programlisting>
	  </para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FermatFactorization"/>FermatFactorization</term>
         <listitem>
          <synopsis>FermatFactorization (n,tries)</synopsis>
          <para>Probar la factorización de Fermat de <varname>n</varname> en <userinput>(t-s)*(t+s)</userinput>, devuelve <varname>t</varname> y <varname>s</varname> como un vector si es posible, <constant>null</constant> de otra manera <varname>tries</varname> especifica el número de intentos antes de abandonar </para>
          <para>Es una buena factorización si su número es el producto de dos factores que están muy cerca.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Fermat_factorization">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FindPrimitiveElementMod"/>FindPrimitiveElementMod</term>
         <listitem>
          <synopsis>FindPrimitiveElementMod (q)</synopsis>
          <para>Encontrar el primer elemento primitivo en F<subscript>q</subscript>, en el grupo de orden finito<varname>q</varname>. Por supuesto, <varname>q</varname> debe de ser primo.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FindRandomPrimitiveElementMod"/>FindRandomPrimitiveElementMod</term>
         <listitem>
          <synopsis>FindRandomPrimitiveElementMod (q)</synopsis>
          <para>Encontrar un elemento primitivo aleatorio en F<subscript>q</subscript>, en el grupo de orden finito <varname>q</varname> (q debe de ser primo)</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IndexCalculus"/>IndexCalculus</term>
         <listitem>
          <synopsis>IndexCalculus (n,b,q,S)</synopsis>
          <para>Calcula la base del logaritmo discreto <varname>b</varname> de n en F<subscript>q</subscript>, el grupo finito de orden <varname>q</varname> (<varname>q</varname> un primo), utilizando el factor base <varname>S</varname>. <varname>S</varname> será una columna de números primos y una segunda columna precalculada por <link linkend="gel-function-IndexCalculusPrecalculation"><function>IndexCalculusPrecalculation</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IndexCalculusPrecalculation"/>IndexCalculusPrecalculation</term>
         <listitem>
          <synopsis>IndexCalculusPrecalculation (b,q,S)</synopsis>
	  <para>Ejecuta los pasos para los cálculos previos de <link linkend="gel-function-IndexCalculus"><function>IndexCalculus</function></link> para logaritmos de base <varname>b</varname> en F<subscript>q</subscript>, del grupo finito de orden <varname>q</varname> (<varname>q</varname> un primo), para el factor base <varname>S</varname> (donde <varname>S</varname> es una columna de vector de primos). Los registros se calculan previamente y se devuelven en la segunda columna.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsEven"/>IsEven</term>
         <listitem>
          <synopsis>IsEven (n)</synopsis>
          <para>Comprueba si un entero es par.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsMersennePrimeExponent"/>IsMersennePrimeExponent</term>
         <listitem>
          <synopsis>IsMersennePrimeExponent (p)</synopsis>
          <para>Comprueba si un entero positivo <varname>p</varname> es un exponente primo de Mersenne. Esto es si 2<superscript>p</superscript>-1 es un primo. Esto lo hace mirando en una tabla de valores conocidos que es relativamente corta. Vea también <link linkend="gel-function-MersennePrimeExponents">MersennePrimeExponents</link> y <link linkend="gel-function-LucasLehmer">LucasLehmer</link>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Mersenne_prime">Wikipedia</ulink>, <ulink url="http://planetmath.org/MersenneNumbers">Planetmath</ulink>, <ulink url="http://mathworld.wolfram.com/MersennePrime.html">Mathworld</ulink> o <ulink url="http://www.mersenne.org/">GIMPS</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsNthPower"/>IsNthPower</term>
         <listitem>
          <synopsis>IsNthPower (m,n)</synopsis>
          <para>Comprueba si un número racional <varname>m</varname> es una potencia <varname>n</varname>-ésima perfecta. Consulte <link linkend="gel-function-IsPerfectPower">IsPerfectPower</link> y <link linkend="gel-function-IsPerfectSquare">IsPerfectSquare</link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsOdd"/>IsOdd</term>
         <listitem>
          <synopsis>IsOdd (n)</synopsis>
          <para>Comprueba su un entero es impar.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsPerfectPower"/>IsPerfectPower</term>
         <listitem>
          <synopsis>IsPerfectPower (n)</synopsis>
          <para>Comprobar si un entero es una potencia perfecta, a<superscript>b</superscript>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsPerfectSquare"/>IsPerfectSquare</term>
         <listitem>
          <synopsis>IsPerfectSquare (n)</synopsis>
          <para lang="en">
	    Check an integer for being a perfect square of an integer.  The number must
	    be an integer.  Negative integers are never perfect
	    squares of integers.
	  </para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsPrime"/>IsPrime</term>
         <listitem>
          <synopsis>IsPrime (n)</synopsis>
          <para lang="en">
	    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 lang="en">
	    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>Consulte <ulink url="http://planetmath.org/PrimeNumber">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/PrimeNumber.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsPrimitiveMod"/>IsPrimitiveMod</term>
         <listitem>
          <synopsis>IsPrimitiveMod (g,q)</synopsis>
          <para>Comprobar si <varname>g</varname> es primario en F<subscript>q</subscript>, el grupo finito de orden <varname>q</varname>, donde <varname>q</varname> es un primo. Si <varname>q</varname> no es un primo los resultados son falsos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsPrimitiveModWithPrimeFactors"/>IsPrimitiveModWithPrimeFactors</term>
         <listitem>
          <synopsis>IsPrimitiveModWithPrimeFactors (g,q,f)</synopsis>
          <para>Comprobar si <varname>g</varname> es primario en F<subscript>q</subscript>, el grupo finito de orden <varname>q</varname>, donde <varname>q</varname> es un primo y <varname>f</varname> es un vector de factores primos de <varname>q</varname>-1. Si <varname>q</varname> no es primo los resultados son falsos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsPseudoprime"/>IsPseudoprime</term>
         <listitem>
          <synopsis>IsPseudoprime (n,b)</synopsis>
          <para>Si <varname>n</varname> es pseudo-primo en base <varname>b</varname> pero no un primo, esto es si <userinput>b^(n-1) == 1 mod n</userinput>. Esto llama a <link linkend="gel-function-PseudoprimeTest"><function>PseudoprimeTest</function></link></para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsStrongPseudoprime"/>IsStrongPseudoprime</term>
         <listitem>
          <synopsis>IsStrongPseudoprime (n,b)</synopsis>
          <para>Compruebe si <varname>n</varname> es un pseudo-primo fuerte en base <varname>b</varname> pero no un primo.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Jacobi"/>Jacobi</term>
         <listitem>
          <synopsis>Jacobi (a,b)</synopsis>
          <para>Alias: <function>JacobiSymbol</function></para>
          <para>Calcular el símbolo de Jacobi (a/b) (b debe ser impar).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-JacobiKronecker"/>JacobiKronecker</term>
         <listitem>
          <synopsis>JacobiKronecker (a,b)</synopsis>
          <para>Alias: <function>JacobiKroneckerSymbol</function></para>
          <para>Calcular el símbolo de Jacobi (a/b) con extensión de Kronecker (a/2)=(2/a) cuando sea impar, o (a/2)=0 cuando sea par.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LeastAbsoluteResidue"/>LeastAbsoluteResidue</term>
         <listitem>
          <synopsis>LeastAbsoluteResidue (a,n)</synopsis>
          <para>Devuelve el resto de <varname>a</varname> mod <varname>n</varname> con el último valor absoluto (en el intervalo -n/2 to n/2).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Legendre"/>Legendre</term>
         <listitem>
          <synopsis>Legendre (a,p)</synopsis>
          <para>Alias: <function>LegendreSymbol</function></para>
          <para>Calcular el símbolo de Legendre (a/p).</para>
          <para>Consulte <ulink url="http://planetmath.org/LegendreSymbol">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/LegendreSymbol.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LucasLehmer"/>LucasLehmer</term>
         <listitem>
          <synopsis>LucasLehmer (p)</synopsis>
          <para>Compruebe si 2<superscript>p</superscript>-1 es un primo de Mersenne utilizando la prueba de Lucas-Lehmer. Consulte también <link linkend="gel-function-MersennePrimeExponents">MersennePrimeExponents</link> y <link linkend="gel-function-IsMersennePrimeExponent">IsMersennePrimeExponent</link>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test">Wikipedia</ulink>, <ulink url="http://planetmath.org/LucasLhemer">Planetmath</ulink>, o <ulink url="http://mathworld.wolfram.com/Lucas-LehmerTest.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LucasNumber"/>LucasNumber</term>
         <listitem>
          <synopsis>LucasNumber (n)</synopsis>
          <para>Devuelve el <varname>n</varname>-ésimo número de Lucas.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Lucas_number">Wikipedia</ulink>, <ulink url="http://planetmath.org/LucasNumbers">Planetmath</ulink>, o <ulink url="http://mathworld.wolfram.com/LucasNumber.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MaximalPrimePowerFactors"/>MaximalPrimePowerFactors</term>
         <listitem>
          <synopsis>MaximalPrimePowerFactors (n)</synopsis>
          <para>Devuelve todos los factores primos de un número.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MersennePrimeExponents"/>MersennePrimeExponents</term>
         <listitem>
          <synopsis>MersennePrimeExponents</synopsis>
          <para>Un vector de Mersenne de exponentes primos conocidos, esto es una lista de enteros positivos <varname>p</varname> tal que 2<superscript>p</superscript>-1 es un primo. Consulte también <link linkend="gel-function-IsMersennePrimeExponent">IsMersennePrimeExponent</link> y <link linkend="gel-function-LucasLehmer">LucasLehmer</link>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Mersenne_prime">Wikipedia</ulink>, <ulink url="http://planetmath.org/MersenneNumbers">Planetmath</ulink>, <ulink url="http://mathworld.wolfram.com/MersennePrime.html">Mathworld</ulink> o <ulink url="http://www.mersenne.org/">GIMPS</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MillerRabinTest"/>MillerRabinTest</term>
         <listitem>
          <synopsis>MillerRabinTest (n,reps)</synopsis>
          <para lang="en">
	    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>Consulte la <ulink url="https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test">Wikipedia</ulink> o <ulink url="http://planetmath.org/MillerRabinPrimeTest">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/Rabin-MillerStrongPseudoprimeTest.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MillerRabinTestSure"/>MillerRabinTestSure</term>
         <listitem>
          <synopsis>MillerRabinTestSure (n)</synopsis>
          <para>Utiliza la prueba Miller-Rabin de números primos de <varname>n</varname> con las bases suficientes que asuman la hipótesis generalizada de Reimann, el resultado es determinista.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test">Wikipedia</ulink>, <ulink url="http://planetmath.org/MillerRabinPrimeTest">Planetmath</ulink>, o <ulink url="http://mathworld.wolfram.com/Rabin-MillerStrongPseudoprimeTest.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ModInvert"/>ModInvert</term>
         <listitem>
          <synopsis>ModInvert (n,m)</synopsis>
          <para>Devuelve el inverso de n módulo m.</para>
          <para>Consulte <ulink url="http://mathworld.wolfram.com/ModularInverse.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MoebiusMu"/>MoebiusMu</term>
         <listitem>
          <synopsis>MoebiusMu (n)</synopsis>
          <para>Devuelve la función de Moebius «mu» de <varname>n</varname>. Esto es, devuelve 0 si <varname>n</varname> no es un producto entre primos distintos y <userinput>(-1)^k</userinput> si es un producto de <varname>k</varname> primos distintos.</para>
          <para>Consulte <ulink url="http://planetmath.org/MoebiusFunction">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/MoebiusFunction.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NextPrime"/>NextPrime</term>
         <listitem>
          <synopsis>NextPrime (n)</synopsis>
          <para>Devuelve el primo menor más grande que <varname>n</varname>. Los primos negativos se consideran primos y así para obtener el primo anterior, puede usar <userinput>-NextPrime(-n)</userinput>.</para>
          <para>Esta función utiliza las GMP <function>mpz_nextprime</function> la cual vuelve a utilizar la prueba probabilística de Miller-Rabin (consulte también <link linkend="gel-function-MillerRabinTest"><function>MillerRabinTest</function></link>). La probabilidad de un falso positivo no se da, pero es lo suficientemente baja para prácticamente todos los propósitos.</para>
          <para>Consulte <ulink url="http://planetmath.org/PrimeNumber">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/PrimeNumber.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PadicValuation"/>PadicValuation</term>
         <listitem>
          <synopsis>PadicValuation (n,p)</synopsis>
          <para>Devuelve la evaluación del número «p-adic» (número de ceros que va dejando en base <varname>p</varname>).</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/P-adic_order">Wikipedia</ulink> o <ulink url="http://planetmath.org/PAdicValuation">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PowerMod"/>PowerMod</term>
         <listitem>
          <synopsis>PowerMod (a,b,m)</synopsis>
          <para>Calcula <userinput>a^b mod m</userinput>. La potencia <varname>b</varname> de <varname>a</varname> módulo <varname>m</varname>. No es necesario utilizar esta función ya que se utiliza automáticamente en modo módulo. Por lo tanto <userinput>a^b mod m</userinput> es igual de rápido.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Prime"/>Prime</term>
         <listitem>
          <synopsis>Prime (n)</synopsis>
          <para>Alias: <function>prime</function></para>
          <para>Devuelve el <varname>n</varname>-ésimo primo (hasta un límite).</para>
          <para>Consulte <ulink url="http://planetmath.org/PrimeNumber">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/PrimeNumber.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PrimeFactors"/>PrimeFactors</term>
         <listitem>
          <synopsis>PrimeFactors (n)</synopsis>
          <para>Devuelve todos los factores primos de un número como un vector.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Prime_factor">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/PrimeFactor.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PseudoprimeTest"/>PseudoprimeTest</term>
         <listitem>
          <synopsis>PseudoprimeTest (n,b)</synopsis>
	  <para lang="en">Pseudoprime test, returns <constant>true</constant> if and only if
		<userinput>b^(n-1) == 1  mod n</userinput></para>
          <para>Consulte <ulink url="http://planetmath.org/Pseudoprime">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/Pseudoprime.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RemoveFactor"/>RemoveFactor</term>
         <listitem>
          <synopsis>RemoveFactor (n,m)</synopsis>
          <para>Elimina todas las instancias del factor <varname>m</varname> desde el número <varname>n</varname>. Esto es, lo divide por la potencia mas grande de <varname>m</varname>, que divide <varname>n</varname>.</para>
          <para>Consulte <ulink url="http://planetmath.org/Divisibility">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/Factor.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SilverPohligHellmanWithFactorization"/>SilverPohligHellmanWithFactorization</term>
         <listitem>
          <synopsis>SilverPohligHellmanWithFactorization (n,b,q,f)</synopsis>
          <para>Buscar el logaritmo sencillo de <varname>n</varname> base <varname>b</varname> en F<subscript>q</subscript>, de grupo de orden finito <varname>q</varname>, donde <varname>q</varname> es un primo que utiliza el algoritmo de Silver-Pohlig-Hellman, dado <varname>f</varname> es la factorización de <varname>q</varname>-1.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SqrtModPrime"/>SqrtModPrime</term>
         <listitem>
          <synopsis>SqrtModPrime (n,p)</synopsis>
          <para>Buscar la raíz cuadrada de <varname>n</varname> módulo <varname>p</varname> (donde <varname>p</varname> es un primo). Se devuelve «null» si el resto no es cuadrático.</para>
          <para>Consulte <ulink url="http://planetmath.org/QuadraticResidue">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/QuadraticResidue.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-StrongPseudoprimeTest"/>StrongPseudoprimeTest</term>
         <listitem>
          <synopsis>StrongPseudoprimeTest (n,b)</synopsis>
          <para>Ejecutar la prueba del pseudo-primo fuerte en base <varname>b</varname> de <varname>n</varname>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Strong_pseudoprime">Wikipedia</ulink>, <ulink url="http://planetmath.org/StrongPseudoprime">Planetmath</ulink>, o <ulink url="http://mathworld.wolfram.com/StrongPseudoprime.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-gcd"/>gcd</term>
         <listitem>
          <synopsis>gcd (a,args...)</synopsis>
          <para>Alias: <function>GCD</function></para>
          <para>Máximo común divisor de enteros. Puede introducir tantos enteros en la lista de argumentos, o puede introducir un vector o una matriz de enteros. Si introduce más de una matriz del mismo tamaño, entonces el máximo común divisor se realiza elemento a elemento.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Greatest_common_divisor">Wikipedia</ulink>, <ulink url="http://planetmath.org/GreatestCommonDivisor">Planetmath</ulink>, o <ulink url="http://mathworld.wolfram.com/GreatestCommonDivisor.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-lcm"/>lcm</term>
         <listitem>
          <synopsis>lcm (a,args...)</synopsis>
          <para>Alias: <function>LCM</function></para>
          <para>Mínimo común múltiplo de enteros. Puede introducir tantos enteros en la lista de argumentos, o introducir un vector o matriz de enteros. Si introduce mas de una matriz del mismo tamaño, entonces el mínimo común múltiplo se realiza elemento a elemento.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Least_common_multiple">Wikipedia</ulink>, <ulink url="http://planetmath.org/LeastCommonMultiple">Planetmath</ulink>, o <ulink url="http://mathworld.wolfram.com/LeastCommonMultiple.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-matrix">
      <title>Manipulación de matrices</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-AppendElement"/>AppendElement</term>
         <listitem>
          <synopsis>AppendElement (v,elt)</synopsis>
	  <para>Añadir un elemento a un vector y devolver el vector. No se realiza la expansión. Normalmente un vector de fila se construye empezando por <constant>null</constant> o por una matriz de 1x1, pero si se da un vector columna construirá correctamente un vector de este tipo.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ApplyOverMatrix"/>ApplyOverMatrix</term>
         <listitem>
          <synopsis>ApplyOverMatrix (a,func)</synopsis>
          <para>Aplicar una función sobre todos los elementos de una matriz y devolver una matriz con los resultados.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ApplyOverMatrix2"/>ApplyOverMatrix2</term>
         <listitem>
          <synopsis>ApplyOverMatrix2 (a,b,func)</synopsis>
          <para>Aplicar una función sobre todos los elementos de dos matrices (o un valor y una matriz) y devolver una matriz con los resultados.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ColumnsOf"/>ColumnsOf</term>
         <listitem>
          <synopsis>ColumnsOf (M)</synopsis>
          <para>Obtener las columnas de una matriz como un vector horizontal.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ComplementSubmatrix"/>ComplementSubmatrix</term>
         <listitem>
          <synopsis>ComplementSubmatrix (m,r,c)</synopsis>
          <para>Eliminar filas y columnas de una matriz.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-CompoundMatrix"/>CompoundMatrix</term>
         <listitem>
          <synopsis>CompoundMatrix (k,A)</synopsis>
          <para>Calcular la k-ésima matriz compuesta de A.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-CountZeroColumns"/>CountZeroColumns</term>
         <listitem>
          <synopsis>CountZeroColumns (M)</synopsis>
          <para>Contar el número de cero columnas en una matriz. Por ejemplo una vez que su columna reduce una matriz puede usar esto para encontrar la nulidad. Consulte <link linkend="gel-function-cref"><function>cref</function></link> y <link linkend="gel-function-Nullity"><function>Nullity</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DeleteColumn"/>DeleteColumn</term>
         <listitem>
          <synopsis>DeleteColumn (M,col)</synopsis>
          <para>Eliminar una columna de una matriz.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DeleteRow"/>DeleteRow</term>
         <listitem>
          <synopsis>DeleteRow (M,row)</synopsis>
          <para>Eliminar una fila de una matriz.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DiagonalOf"/>DiagonalOf</term>
         <listitem>
          <synopsis>DiagonalOf (M)</synopsis>
          <para>Obtener las entradas diagonales de una matriz como un vector columna.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Diagonal_of_a_matrix#Matrices">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DotProduct"/>DotProduct</term>
         <listitem>
          <synopsis>DotProduct (u,v)</synopsis>
	  <para>Obtener el producto escalar de dos vectores. Los vectores serán del mismo tamaño. Se toman no conjugados por lo que tendrá forma bilineal incluso si se trabaja con números complejos. Esto es el producto escalar bilineal, no el producto escalar sesquilienal. Consulte <link linkend="gel-function-HermitianProduct">HermitianProduct</link> para el producto interno estándar sesquilinear.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Dot_product">Wikipedia</ulink> o <ulink url="http://planetmath.org/DotProduct">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ExpandMatrix"/>ExpandMatrix</term>
         <listitem>
          <synopsis>ExpandMatrix (M)</synopsis>
          <para>Expandir una matriz de la misma manera que hacemos con la entrada sin comillas de la matriz. Esto es, se expande cualquier matriz interna como bloques. Esto es una manera de construir matrices fuera de las mas pequeñas y se hace de manera automática en la entrada a menos que la matriz se entrecomille.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-HermitianProduct"/>HermitianProduct</term>
         <listitem>
          <synopsis>HermitianProduct (u,v)</synopsis>
          <para>Alias: <function>InnerProduct</function></para>
          <para>Obtener el producto de Hermitian de dos vectores. Los vectores serán del mismo tamaño. Esto es una forma «sesquilinear» para utilizar la identidad de la matriz.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Sesquilinear_form">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/HermitianInnerProduct.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-I"/>I</term>
         <listitem>
          <synopsis>I (n)</synopsis>
          <para>Alias: <function>eye</function></para>
	  <para>Devolver una matriz identidad del tamaño dado, es decir, de <varname>n</varname> por <varname>n</varname>. Si <varname>n</varname> es cero, devuelve <constant>null</constant>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Identity_matrix">Wikipedia</ulink> o <ulink url="http://planetmath.org/IdentityMatrix">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IndexComplement"/>IndexComplement</term>
         <listitem>
          <synopsis>IndexComplement (vec,msize)</synopsis>
          <para>Devuelve el complemento índice de un vector de índices. Todo en base a uno. Por ejemplo para el vector <userinput>[2,3]</userinput> y tamaño <userinput>5</userinput>, devolverá <userinput>[1,4,5]</userinput>. Si <varname>msize</varname> es 0, siempre devolverá <constant>null</constant>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsDiagonal"/>IsDiagonal</term>
         <listitem>
          <synopsis>IsDiagonal (M)</synopsis>
          <para>Es una matriz diagonal.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Diagonal_matrix">Wikipedia</ulink> o <ulink url="http://planetmath.org/DiagonalMatrix">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsIdentity"/>IsIdentity</term>
         <listitem>
          <synopsis>IsIdentity (x)</synopsis>
          <para>Comprobar si una matriz es la matriz de identidad. Automáticamente devuelve <constant>false</constant> si la matriz no es cuadrada. También trabaja con números, en cualquier caso este es equivalente a <userinput>x==1</userinput>. Cuando <varname>x</varname> es <constant>null</constant> (imaginemos que es como una matriz de 0 por 0), no se genera error y se devuelve <constant>false</constant>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsLowerTriangular"/>IsLowerTriangular</term>
         <listitem>
          <synopsis>IsLowerTriangular (M)</synopsis>
          <para>Es una matriz triangular inferior. Esto es, todas las entradas están por encima de la diagonal cero.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsMatrixInteger"/>IsMatrixInteger</term>
         <listitem>
          <synopsis>IsMatrixInteger (M)</synopsis>
          <para>Comprobar si una matriz es una matriz de enteros (no compleja).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsMatrixNonnegative"/>IsMatrixNonnegative</term>
         <listitem>
          <synopsis>IsMatrixNonnegative (M)</synopsis>
          <para>Comprobar si una matriz no es negativa, es decir, si cada elemento no es negativo. No confunda matrices positivas con matrices semidefinidas positivas.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Positive_matrix">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsMatrixPositive"/>IsMatrixPositive</term>
         <listitem>
          <synopsis>IsMatrixPositive (M)</synopsis>
	  <para>Comprobar si una matriz es positiva, es decir, si cada elemento es positivo (y por lo tanto real). Individualmente, ningún elemento es 0. No confunda matrices positivas con matrices definidas positivas.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Positive_matrix">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsMatrixRational"/>IsMatrixRational</term>
         <listitem>
          <synopsis>IsMatrixRational (M)</synopsis>
          <para>Comprobar si el argumento es una matriz de números racionales (no complejos)</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsMatrixReal"/>IsMatrixReal</term>
         <listitem>
          <synopsis>IsMatrixReal (M)</synopsis>
          <para>Comprobar si el argumento es una matriz de números reales (no complejos).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsMatrixSquare"/>IsMatrixSquare</term>
         <listitem>
          <synopsis>IsMatrixSquare (M)</synopsis>
          <para>Comprobar si una matriz es cuadrada, es decir, si su altura es igual a su anchura.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsUpperTriangular"/>IsUpperTriangular</term>
         <listitem>
          <synopsis>IsUpperTriangular (M)</synopsis>
          <para>¿Es una matriz triangular superior?. Esto se cumple si todas las entradas por debajo de la diagonal son cero.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsValueOnly"/>IsValueOnly</term>
         <listitem>
          <synopsis>IsValueOnly (M)</synopsis>
          <para>Comprobar si una matriz es una matriz de sólo números. Muchas funciones internas hacen esta comprobación. Los valores pueden ser cualquier número, incluyendo números complejos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsVector"/>IsVector</term>
         <listitem>
          <synopsis>IsVector (v)</synopsis>
          <para>Indica si el argumento de un vector es horizontal o vertical. Genius no distingue entre una matriz y un vector, y un vector es justo una matriz 1 por <varname>n</varname> o <varname>n</varname> por 1.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsZero"/>IsZero</term>
         <listitem>
          <synopsis>IsZero (x)</synopsis>
          <para>Comprobar si una matriz está compuesta toda por ceros. También trabaja con números, en cualquier caso esto es equivalente a <userinput>x==0</userinput>. Cuando <varname>x</varname> es <constant>null</constant> (imagine que es una matriz de 0 por 0), no se genera ningún error y devuelve <constant>true</constant> que indica que la matriz está compuesta de ceros.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LowerTriangular"/>LowerTriangular</term>
         <listitem>
          <synopsis>LowerTriangular (M)</synopsis>
          <para>Devuelve una copia de la matriz <varname>M</varname> con todas las entradas por encima de la diagonal establecidas a cero.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MakeDiagonal"/>MakeDiagonal</term>
         <listitem>
          <synopsis>MakeDiagonal (v,arg...)</synopsis>
          <para>Alias: <function>diag</function></para>
	  <para>Hacer una matriz diagonal desde un vector. Alternativamente puede pasarle los valores como argumentos para la diagonal. Así <userinput>MakeDiagonal([1,2,3])</userinput> es lo mismo que <userinput>MakeDiagonal(1,2,3)</userinput>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Diagonal_matrix">Wikipedia</ulink> o <ulink url="http://planetmath.org/DiagonalMatrix">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MakeVector"/>MakeVector</term>
         <listitem>
          <synopsis>MakeVector (A)</synopsis>
          <para>Alias: <function>MakeColumnVector</function></para>
          <para>Hacer un vector columna fuera de la matriz colocando columnas una encima de la otra. Devuelve <constant>null</constant> cuando se introduce <constant>null</constant>. Se puede usar para asegurarse de que un vector es un vector columna.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MakeRowVector"/>MakeRowVector</term>
         <listitem>
          <synopsis>MakeRowVector (A)</synopsis>
	  <para>Hacer un vector fila fuera de la matriz colocando columnas una después de la otra. Devuelve <constant>null</constant> cuando se introduce <constant>null</constant>. Se puede usar para asegurarse de que un vector es un vector fila.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MatrixProduct"/>MatrixProduct</term>
         <listitem>
          <synopsis>MatrixProduct (A)</synopsis>
          <para>Calcular el producto de todos los elementos en una matriz o vector. Es decir, multiplicar todos los elementos y devolver un número que es el producto de todos los elementos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MatrixSum"/>MatrixSum</term>
         <listitem>
          <synopsis>MatrixSum (A)</synopsis>
          <para>Calcular la suma de todos los elementos en una matriz o vector. Es decir, sumar todos los elementos y devolver un número que es el resultado de la suma de todos los elementos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MatrixSumSquares"/>MatrixSumSquares</term>
         <listitem>
          <synopsis>MatrixSumSquares (A)</synopsis>
          <para>Calcular la suma de los cuadrados de todos los elementos en una matriz o vector.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NonzeroColumns"/>NonzeroColumns</term>
         <listitem>
          <synopsis>NonzeroColumns (M)</synopsis>
          <para>Devuelve una fila vector de índices de columnas distintas de cero en la matriz <varname>M</varname>.</para>
	  <para>Desde la versión 1.0.18 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NonzeroElements"/>NonzeroElements</term>
         <listitem>
          <synopsis>NonzeroElements (v)</synopsis>
          <para>Devuelve una fila vector de índices de elementos distintos de cero en el vector <varname>v</varname>.</para>
	  <para>Desde la versión 1.0.18 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-OuterProduct"/>OuterProduct</term>
         <listitem>
          <synopsis>OuterProduct (u,v)</synopsis>
          <para>Obtener el producto externo de dos vectores. Esto es, suponga que <varname>u</varname> y <varname>v</varname> son vectores verticales, entonces el producto externo es  <userinput>v * u.'</userinput>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ReverseVector"/>ReverseVector</term>
         <listitem>
          <synopsis>ReverseVector (v)</synopsis>
	  <para>Invierte el orden de los elementos de un vector (devuelve <constant>null</constant> si se le pasa <constant>null</constant>).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RowSum"/>RowSum</term>
         <listitem>
          <synopsis>RowSum (m)</synopsis>
          <para>Calcula la suma de cada fila de una matriz y devuelve el resultado en un vector vertical con el resultado</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RowSumSquares"/>RowSumSquares</term>
         <listitem>
          <synopsis>RowSumSquares (m)</synopsis>
          <para>Calcular la suma de los cuadrados de cada fila de una matriz y devolver una matriz columna con los resultados.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RowsOf"/>RowsOf</term>
         <listitem>
          <synopsis>RowsOf (M)</synopsis>
	  <para lang="en">Gets the rows of a matrix as a vertical vector.  Each element
of the vector is a horizontal vector that 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>
         <term><anchor id="gel-function-SetMatrixSize"/>SetMatrixSize</term>
         <listitem>
          <synopsis>SetMatrixSize (M,filas,columnas)</synopsis>
          <para>Hacer una nueva matriz del mismo tamaño que otra. Es decir, devolverá una nueva matriz con la copia de otra. Las entradas que no caben, se recortan y el espacio adicional se rellena con ceros. Si <varname>rows</varname> o <varname>columns</varname> son cero, entonces se devuelve<constant>null</constant>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ShuffleVector"/>ShuffleVector</term>
         <listitem>
          <synopsis>ShuffleVector (v)</synopsis>
	  <para>Mezcla los elementos en un vector. Devuelve <constant>null</constant> si se le pasa <constant>null</constant>.</para>
	  <para>Desde la versión 1.0.13 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SortVector"/>SortVector</term>
         <listitem>
          <synopsis>SortVector (v)</synopsis>
          <para>Ordenar los elementos del vector en orden ascendente.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-StripZeroColumns"/>StripZeroColumns</term>
         <listitem>
          <synopsis>StripZeroColumns (M)</synopsis>
          <para>Quita todas las columnas de ceros de <varname>M</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-StripZeroRows"/>StripZeroRows</term>
         <listitem>
          <synopsis>StripZeroRows (M)</synopsis>
          <para>Quita todas las filas de ceros de <varname>M</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Submatrix"/>Submatrix</term>
         <listitem>
          <synopsis>Submatrix (m,r,c)</synopsis>
          <para>Devolver columnas y filas desde una matriz. Esto es equivalente a <userinput>m@(r,c)</userinput>. <varname>r</varname> y <varname>c</varname> serán vectores de filas y columnas (o números sencillos si sólo se necesita una fila o columna).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SwapRows"/>SwapRows</term>
         <listitem>
          <synopsis>SwapRows (m,fila1,fila2)</synopsis>
          <para>Intercambiar dos columnas de una matriz.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-UpperTriangular"/>UpperTriangular</term>
         <listitem>
          <synopsis>UpperTriangular (M)</synopsis>
          <para>Devuelve una copia de la matriz <varname>M</varname> con todas las entradas por debajo de la diagonal establecidas a cero.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-columns"/>columns</term>
         <listitem>
          <synopsis>columns (M)</synopsis>
          <para>Obtener el número de columnas de una matriz.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-elements"/>elements</term>
         <listitem>
          <synopsis>elements (M)</synopsis>
          <para>Obtener el número total de elementos de una matriz. Es decir, el número de columnas por el número de filas.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ones"/>ones</term>
         <listitem>
          <synopsis>ones (filas,columnas...)</synopsis>
	  <para>Hacer una matriz rellena de unos (o un vector fila si sólo se introduce un argumento). Devuelve <constant>null</constant> si cualquier fila o columna es cero.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-rows"/>rows</term>
         <listitem>
          <synopsis>rows (M)</synopsis>
          <para>Obtener el número de filas de una matriz.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-zeros"/>zeros</term>
         <listitem>
          <synopsis>zeros (filas,columnas...)</synopsis>
	  <para>Hacer una matriz llena de ceros (o un vector fila si se introduce sólo un argumento). Devuelve <constant>null</constant> si cualquier fila o columna es cero.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-linear-algebra">
      <title>Álgebra lineal</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-AuxiliaryUnitMatrix"/>AuxiliaryUnitMatrix</term>
         <listitem>
          <synopsis>AuxiliaryUnitMatrix (n)</synopsis>
          <para>Obtener la matriz auxiliar de tamaño <varname>n</varname>. Esto es una matriz cuadrada que es toda ceros excepto la superdiagonal, que son todos unos. Es la matriz de bloques de Jordan de un cero como valor propio.</para>
          <para>Consulte <ulink url="http://planetmath.org/JordanCanonicalFormTheorem">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/JordanBlock.html">Mathworld</ulink> para obtener más información sobre la forma canónica de Jordan.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-BilinearForm"/>BilinearForm</term>
         <listitem>
          <synopsis>BilinearForm (v,A,w)</synopsis>
          <para>Evaluar (v,w) con respecto a la forma bilineal dada por la matriz A.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-BilinearFormFunction"/>BilinearFormFunction</term>
         <listitem>
          <synopsis>BilinearFormFunction (A)</synopsis>
          <para>Devolver una función que evalúa dos vectores con respecto a la forma bilineal dada por A.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-CharacteristicPolynomial"/>CharacteristicPolynomial</term>
         <listitem>
          <synopsis>CharacteristicPolynomial (M)</synopsis>
          <para>Alias: <function>CharPoly</function></para>
	  <para>Obtener el polinomio característico como un vector. Es decir, devuelve los coeficientes del polinomio empezando por el término constante. Este polinomio se define por <userinput>det(M-xI)</userinput>. Las raíces de este polinomio tienen como valor propio a <varname>M</varname>. Consulte <link linkend="gel-function-CharacteristicPolynomialFunction">CharacteristicPolynomialFunction</link>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Characteristic_polynomial">Wikipedia</ulink> o <ulink url="http://planetmath.org/CharacteristicEquation">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-CharacteristicPolynomialFunction"/>CharacteristicPolynomialFunction</term>
         <listitem>
          <synopsis>CharacteristicPolynomialFunction (M)</synopsis>
	  <para>Obtener el polinomio característico como una función. Es decir, el polinomio se define por <userinput>det(M-xI)</userinput>. Las raíces de este polinomio tienen un valor propio de <varname>M</varname>. Consulte <link linkend="gel-function-CharacteristicPolynomial">CharacteristicPolynomial</link>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Characteristic_polynomial">Wikipedia</ulink> o <ulink url="http://planetmath.org/CharacteristicEquation">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ColumnSpace"/>ColumnSpace</term>
         <listitem>
          <synopsis>ColumnSpace (M)</synopsis>
	  <para>Obtener una matriz base para el espacio de la columna de una matriz. Es decir, devuelve una matriz la cual las columnas son las bases para el espacio de la columna <varname>M</varname>. Esto es el espacio generado por las columnas de <varname>M</varname>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Row_and_column_spaces">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-CommutationMatrix"/>CommutationMatrix</term>
         <listitem>
          <synopsis>CommutationMatrix (m, n)</synopsis>
	  <para>Devolver la matriz de conmutación <userinput>K(m,n)</userinput> que es la única matriz <userinput>m*n</userinput> por <userinput>m*n</userinput> tal que <userinput>K(m,n) * MakeVector(A) = MakeVector(A.')</userinput> para todas las matrices <varname>A</varname> <varname>m</varname> por <varname>n</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-CompanionMatrix"/>CompanionMatrix</term>
         <listitem>
          <synopsis>CompanionMatrix (p)</synopsis>
          <para>Matriz acompañante de un polinomio (como vector).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ConjugateTranspose"/>ConjugateTranspose</term>
         <listitem>
          <synopsis>ConjugateTranspose (M)</synopsis>
          <para>Conjugada traspuesta de una matriz (adjunta). Es lo mismo que el operador <userinput>'</userinput>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Conjugate_transpose">Wikipedia</ulink> o <ulink url="http://planetmath.org/ConjugateTranspose">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Convolution"/>Convolution</term>
         <listitem>
          <synopsis>Convolution (a,b)</synopsis>
          <para>Alias: <function>convol</function></para>
          <para>Calcular la convolución de dos vectores horizontales.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ConvolutionVector"/>ConvolutionVector</term>
         <listitem>
          <synopsis>ConvolutionVector (a,b)</synopsis>
          <para>Calcular la convolución de dos vectores horizontales. Devuelve el resultado como un vector y no se suman.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-CrossProduct"/>CrossProduct</term>
         <listitem>
          <synopsis>CrossProduct (v,w)</synopsis>
	  <para>Producto cruzado de dos vectores en R<superscript>3</superscript> como un vector columna.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Cross_product">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DeterminantalDivisorsInteger"/>DeterminantalDivisorsInteger</term>
         <listitem>
          <synopsis>DeterminantalDivisorsInteger (M)</synopsis>
          <para>Obtiene determinantes divisores de una matriz de enteros.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DirectSum"/>DirectSum</term>
         <listitem>
          <synopsis>DirectSum (M,N...)</synopsis>
          <para>Suma directa de matrices.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Matrix_addition#directsum">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DirectSumMatrixVector"/>DirectSumMatrixVector</term>
         <listitem>
          <synopsis>DirectSumMatrixVector (v)</synopsis>
          <para>Suma directa de un vector de matrices.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Matrix_addition#directsum">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Eigenvalues"/>Eigenvalues</term>
         <listitem>
          <synopsis>Eigenvalues (M)</synopsis>
          <para>Alias: <function>eig</function></para>
          <para>Obtener los valores propios de una matriz cuadrada. En la actualidad solo funciona con matrices de tamaño 4 por 4 como máximo, o para matrices triangulares (cuyo valores propios están en la diagonal).</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Eigenvalue">Wikipedia</ulink>, <ulink url="http://planetmath.org/Eigenvalue">Planetmath</ulink>, o <ulink url="http://mathworld.wolfram.com/Eigenvalue.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Eigenvectors"/>Eigenvectors</term>
         <listitem>
          <synopsis>Eigenvectors (M)</synopsis>
          <synopsis>Eigenvectors (M, &amp;eigenvalues)</synopsis>
          <synopsis>Eigenvectors (M, &amp;eigenvalues, &amp;multiplicities)</synopsis>
	  <para>Obtener los autovectores de una matriz cuadrada. Opcionalmente, obtener los autovalores y su multiplicidad algebraica. Actualmente funciona sólo para matrices de hasta 2x2.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Eigenvector">Wikipedia</ulink>, <ulink url="http://planetmath.org/Eigenvector">Planetmath</ulink>, o <ulink url="http://mathworld.wolfram.com/Eigenvector.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-GramSchmidt"/>GramSchmidt</term>
         <listitem>
          <synopsis>GramSchmidt (v,B...)</synopsis>
	  <para>Aplicar el proceso de Gram-Schmidt (a las columnas) con respecto al propio producto dado por <varname>B</varname>. Si <varname>B</varname> no se da, entonces se utiliza el producto Hermitiano estándar. <varname>B</varname> también puede ser una función sesquilineal de dos argumentos o puede ser una matriz que devuelve una forma sesquilineal. Los vectores serán ortonormales con respecto a <varname>B</varname>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process">Wikipedia</ulink> o <ulink url="http://planetmath.org/GramSchmidtOrthogonalization">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-HankelMatrix"/>HankelMatrix</term>
         <listitem>
          <synopsis>HankelMatrix (c,r)</synopsis>
	  <para>La matriz de Hankel es una matriz cuyas diagonales (de izquierda a derecha) son constantes. La primera fila es <varname>c</varname> y  la última colúmna es <varname>r</varname>. Se considera que ambos argumentos son vectores y que el último elemento de la fila <varname>c</varname> es el mismo que el primer elemento de la columna <varname>r</varname>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Hankel_matrix">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-HilbertMatrix"/>HilbertMatrix</term>
         <listitem>
          <synopsis>HilbertMatrix (n)</synopsis>
          <para>Matriz de Hilbert de orden <varname>n</varname>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Hilbert_matrix">Wikipedia</ulink> o <ulink url="http://planetmath.org/HilbertMatrix">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Image"/>Image</term>
         <listitem>
          <synopsis>Image (T)</synopsis>
          <para>Obtener la imagen (espacio columna) de una transformación lineal.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Row_and_column_spaces">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-InfNorm"/>InfNorm</term>
         <listitem>
          <synopsis>InfNorm (v)</synopsis>
          <para>Obtener el operador norma de un vector, a veces también se denomina norma suprema o norma máxima.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-InvariantFactorsInteger"/>InvariantFactorsInteger</term>
         <listitem>
          <synopsis>InvariantFactorsInteger (M)</synopsis>
          <para>Obtiene los factores invariantes de una matriz cuadrada de enteros.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-InverseHilbertMatrix"/>InverseHilbertMatrix</term>
         <listitem>
          <synopsis>InverseHilbertMatrix (n)</synopsis>
          <para>Matriz inversa de Hilbert de orden <varname>n</varname>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Hilbert_matrix">Wikipedia</ulink> o <ulink url="http://planetmath.org/HilbertMatrix">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsHermitian"/>IsHermitian</term>
         <listitem>
          <synopsis>IsHermitian (M)</synopsis>
          <para>Es una matriz Hermitian. Es decir, es igual a su traspuesta conjugada.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Hermitian_matrix">Wikipedia</ulink> o <ulink url="http://planetmath.org/HermitianMatrix">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsInSubspace"/>IsInSubspace</term>
         <listitem>
          <synopsis>IsInSubspace (v,W)</synopsis>
          <para>Comprueba si un vector está en un subespacio.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsInvertible"/>IsInvertible</term>
         <listitem>
          <synopsis>IsInvertible (n)</synopsis>
          <para>Es una matriz (o número) invertible (La matriz de enteros es invertible si, y sólo si esta es invertible sobre los enteros).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsInvertibleField"/>IsInvertibleField</term>
         <listitem>
          <synopsis>IsInvertibleField (n)</synopsis>
          <para>Es una matriz (o un número) inversible sobre un campo.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsNormal"/>IsNormal</term>
         <listitem>
          <synopsis>IsNormal (M)</synopsis>
          <para>Indica que <varname>M</varname> es una matriz normal. Es decir, realiza <userinput>M*M' == M'*M</userinput>.</para>
          <para>Consulte <ulink url="http://planetmath.org/NormalMatrix">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/NormalMatrix.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsPositiveDefinite"/>IsPositiveDefinite</term>
         <listitem>
          <synopsis>IsPositiveDefinite (M)</synopsis>
          <para>Indica que <varname>M</varname> es una matriz definida positiva Hermitiana. Esto es si <userinput>HermitianProduct(M*v,v)</userinput> es siempre estrictamente positivo para cualquier vector <varname>v</varname>. <varname>M</varname> será cuadrada y Hermitiana para ser definida positiva. La comprobación de que se lleva a cabo es que cada submatriz principal tiene un determinante no negativo. (Consulte <link linkend="gel-function-HermitianProduct">HermitianProduct</link>)</para>
	  <para>Tenga en cuenta que algunos autores (por ejemplo Mathworld) no requieren que <varname>M</varname> sea Hermitiana, y entonces la condición está en la parte real del propio producto, pero aquí no se compartirá este punto de vista. Si quiere comprobarlo, hacer sólo la parte Hermitiana de la matriz <varname>M</varname> como sigue: <userinput>IsPositiveDefinite(M+M')</userinput>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Positive-definite_matrix">Wikipedia</ulink>, <ulink url="http://planetmath.org/PositiveDefinite">Planetmath</ulink>, o <ulink url="http://mathworld.wolfram.com/PositiveDefiniteMatrix.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsPositiveSemidefinite"/>IsPositiveSemidefinite</term>
         <listitem>
          <synopsis>IsPositiveSemidefinite (M)</synopsis>
          <para>Indica si <varname>M</varname> es una matriz semidefinida positiva Hermitiana. Esto es si <userinput>HermitianProduct(M*v,v)</userinput> es siempre no negativo para cualquier vector <varname>v</varname>. <varname>M</varname> será cuadrada y Hermitiana para ser semidefinida positiva. La comprobación que se lleva a cabo es que cada submatriz principal tenga un determinante no negativo. (Consulte <link linkend="gel-function-HermitianProduct">HermitianProduct</link>)</para>
	  <para>Tenga en cuenta que algunos autores no requieren que <varname>M</varname> sea Hermitiana, y entonces la condición está en la parte real del propio producto, pero aquí no se compartirá este punto de vista. Si quiere comprobarlo, hacer sólo la parte Hermitiana de la matriz <varname>M</varname> como sigue: <userinput>IsPositiveSemidefinite(M+M')</userinput>.</para>
          <para>Consulte <ulink url="http://planetmath.org/PositiveSemidefinite">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/PositiveSemidefiniteMatrix.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsSkewHermitian"/>IsSkewHermitian</term>
         <listitem>
          <synopsis>IsSkewHermitian (M)</synopsis>
          <para>Es matriz antihermítica. Esto es, la transposición conjugada es igual al negativo de la matriz.</para>
          <para>Consulte <ulink url="http://planetmath.org/SkewHermitianMatrix">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsUnitary"/>IsUnitary</term>
         <listitem>
          <synopsis>IsUnitary (M)</synopsis>
          <para>¿Es una matriz unitaria?. Esto es, hacer <userinput>M'*M</userinput> y <userinput>M*M'</userinput> igual a la identidad.</para>
          <para>Consulte <ulink url="http://planetmath.org/UnitaryTransformation">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/UnitaryMatrix.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-JordanBlock"/>JordanBlock</term>
         <listitem>
          <synopsis>JordanBlock (n,lambda)</synopsis>
          <para>Alias: <function>J</function></para>
          <para>Obtener el bloque de Jordan correspondiente al valor propio  <varname>lambda</varname> con multiplicidad <varname>n</varname>.</para>
          <para>Consulte <ulink url="http://planetmath.org/JordanCanonicalFormTheorem">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/JordanBlock.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Kernel"/>Kernel</term>
         <listitem>
          <synopsis>Kernel (T)</synopsis>
          <para>Obtener el núcleo (espacio nulo) de una trasformación lineal.</para>
	  <para>(Consulte <link linkend="gel-function-NullSpace">NullSpace</link>)</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-KroneckerProduct"/>KroneckerProduct</term>
         <listitem>
          <synopsis>KroneckerProduct (M, N)</synopsis>
          <para>Alias: <function>TensorProduct</function></para>
	  <para>Calcula el producto de Kronecker (producto tensorial en base estándar) de dos matrices.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Kronecker_product">Wikipedia</ulink>, <ulink url="http://planetmath.org/KroneckerProduct">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/KroneckerProduct.html">Mathworld</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.18 en adelante.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><anchor id="gel-function-LUDecomposition"/>LUDecomposition</term>
         <listitem>
          <synopsis>LUDecomposition (A, L, U)</synopsis>
          <para lang="en">
		  Get the LU decomposition of <varname>A</varname>, that is
		  find a lower triangular matrix and upper triangular
		  matrix whose product is <varname>A</varname>.
	    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 lang="en"><prompt>genius&gt;</prompt> <userinput>LUDecomposition(A,&amp;L,&amp;U)</userinput>
</screen>
	    You will have the lower matrix stored in a variable called
	    <varname>L</varname> and the upper matrix in a variable called
	    <varname>U</varname>.
	  </para>
	  <para>Esto es la descomposición de LU de una matriz también conocido como Crout y/o reducción de Cholesky. (ISBN 0-201-11577-8 pp.99-103) La matriz triangular superior cuenta con una diagonal de valores 1 (uno). Esto no es el método de Doolittle en las que los unos de la diagonal están sobre la matriz inferior.</para>
	  <para>No todas las matrices tienen la descomposición de LU, por ejemplo <userinput>[0,1;1,0]</userinput> no lo hace y esta función devuelve <constant>false</constant> en este caso, y establece <varname>L</varname> y <varname>U</varname> a <constant>null</constant>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/LU_decomposition">Wikipedia</ulink>, <ulink url="http://planetmath.org/LUDecomposition">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/LUDecomposition.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Minor"/>Minor</term>
         <listitem>
          <synopsis>Minor (M,i,j)</synopsis>
          <para>Obtener el menor <varname>i</varname>-<varname>j</varname> de una matriz.</para>
          <para>Consulte <ulink url="http://planetmath.org/Minor">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NonPivotColumns"/>NonPivotColumns</term>
         <listitem>
          <synopsis>NonPivotColumns (M)</synopsis>
          <para>Devolver las columnas que no son las columnas pivotes de una matriz.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Norm"/>Norm</term>
         <listitem>
          <synopsis>Norm (v,p...)</synopsis>
          <para>Alias: <function>norm</function></para>
          <para>Obtener la norma p (o 2 normas si no se suministra p) de un vector.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NullSpace"/>NullSpace</term>
         <listitem>
          <synopsis>NullSpace (T)</synopsis>
          <para>Obtener el espacio nulo de una matriz. Ese es el núcleo de la aplicación lineal que representa la matriz. Esto se devuelve como una matriz cuyo espacio de columna es el espacio nulo de <varname>T</varname>.</para>
          <para>Consulte <ulink url="http://planetmath.org/Nullspace">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Nullity"/>Nullity</term>
         <listitem>
          <synopsis>Nullity (M)</synopsis>
          <para>Alias: <function>nullity</function></para>
          <para>Obtener la nulidad de una matriz. Es decir, devuelve la dimensión del espacio nulo; la dimensión del núcleo de <varname>M</varname>.</para>
          <para>Consulte <ulink url="http://planetmath.org/Nullity">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-OrthogonalComplement"/>OrthogonalComplement</term>
         <listitem>
          <synopsis>OrthogonalComplement (M)</synopsis>
          <para>Obtener el complemento ortogonal del espacio de columnas.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PivotColumns"/>PivotColumns</term>
         <listitem>
          <synopsis>PivotColumns (M)</synopsis>
          <para>Devuelve las columnas pivote de una matriz, que son columnas que tienen un 1 en la fila forma reducida. También devuelve la fila en la que se producen.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Projection"/>Projection</term>
         <listitem>
          <synopsis>Projection (v,W,B...)</synopsis>
	  <para>Proyección del vector <varname>v</varname> sobre el sub-espacio <varname>W</varname> con respecto al propio producto dado por <varname>B</varname>. Si <varname>B</varname> no se da, entonces se usa el producto estándar Hermitiano. <varname>B</varname> puede también ser una función sesquilineal de dos argumentos o puede ser una matriz que devuelve una forma sesquilineal.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-QRDecomposition"/>QRDecomposition</term>
         <listitem>
          <synopsis>QRDecomposition (A, Q)</synopsis>
          <para lang="en">
	    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 lang="en"><prompt>genius&gt;</prompt> <userinput>R = QRDecomposition(A,&amp;Q)</userinput>
</screen>
	    You will have the upper triangular matrix stored in
	    a variable called
	    <varname>R</varname> and the orthogonal (unitary) matrix stored in
	    <varname>Q</varname>.
	  </para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/QR_decomposition">Wikipedia</ulink> o <ulink url="http://planetmath.org/QRDecomposition">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/QRDecomposition.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RayleighQuotient"/>RayleighQuotient</term>
         <listitem>
          <synopsis>RayleighQuotient (A,x)</synopsis>
          <para>Devuelve el cociente de Rayleigh (también llamado el cociente de Rayleigh-Ritz o ratio) de una matriz y un vector.</para>
          <para>Consulte <ulink url="http://planetmath.org/RayleighQuotient">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RayleighQuotientIteration"/>RayleighQuotientIteration</term>
         <listitem>
          <synopsis>RayleighQuotientIteration (A,x,epsilon,maxiter,vecref)</synopsis>
          <para>Buscar valores propios de <varname>A</varname> utilizando el método de iteración de cociente de Rayleigh. <varname>x</varname> es una conjetura en un vector propio que será aleatoria. Esto tendrá una parte imaginaria no nula si es posible encontrar valores propios complejos. El código ejecutará en la mayoría de las interacciones <varname>maxiter</varname> y devuelve <constant>null</constant> si no se puede obtener un error de <varname>epsilon</varname>. <varname>vecref</varname> será o bién un <constant>null</constant> o una referencia a una variable donde se guarde el vector propio.</para>
          <para>Conuslte <ulink url="http://planetmath.org/RayleighQuotient">Planetmath</ulink> para obtener más información sobre el cociente de Rayleigh.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Rank"/>Rank</term>
         <listitem>
          <synopsis>Rank (M)</synopsis>
          <para>Alias: <function>rank</function></para>
          <para>Obtener el rango de una matriz.</para>
          <para>Consulte <ulink url="http://planetmath.org/SylvestersLaw">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RosserMatrix"/>RosserMatrix</term>
         <listitem>
          <synopsis>RosserMatrix ()</synopsis>
          <para>Devolver la matriz de Rosser, que es un problemático y clásico test simétrico de valores propios.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Rotation2D"/>Rotation2D</term>
         <listitem>
          <synopsis>Rotation2D (ángulo)</synopsis>
          <para>Alias: <function>RotationMatrix</function></para>
          <para>Devolver la matriz correspondiente a la rotación alrededor del origen en R<superscript>2</superscript>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Rotation3DX"/>Rotation3DX</term>
         <listitem>
          <synopsis>Rotation3DX (ángulo)</synopsis>
          <para>Devuelve la matriz correspondiente a la rotación alrededor del origen en R<superscript>3</superscript> sobre el eje x.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Rotation3DY"/>Rotation3DY</term>
         <listitem>
          <synopsis>Rotation3DY (ángulo)</synopsis>
          <para>Devolver la matriz correspondiente a la rotación alrededor del origen en R<superscript>3</superscript> sobre el eje Y.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Rotation3DZ"/>Rotation3DZ</term>
         <listitem>
          <synopsis>Rotation3DZ (ángulo)</synopsis>
          <para>Devolver la matriz correspondiente a la rotación alrededor del origen en R<superscript>3</superscript> sobre el eje Z.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RowSpace"/>RowSpace</term>
         <listitem>
          <synopsis>RowSpace (M)</synopsis>
          <para>Obtener una matriz base para el espacio de filas de una matriz.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SesquilinearForm"/>SesquilinearForm</term>
         <listitem>
          <synopsis>SesquilinearForm (v,A,w)</synopsis>
          <para>Evaluar (v,w) con respecto a la forma sesquilineal dada por la matriz A.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SesquilinearFormFunction"/>SesquilinearFormFunction</term>
         <listitem>
          <synopsis>SesquilinearFormFunction (A)</synopsis>
          <para>Devolver una función que evalúa dos vectores con respecto a la forma sesquilineal dada por A.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SmithNormalFormField"/>SmithNormalFormField</term>
         <listitem>
          <synopsis>SmithNormalFormField (A)</synopsis>
          <para>Devuelve la forma normal de Smith de una matriz sobre los campos (terminará con unos en la diagonal).</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Smith_normal_form">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SmithNormalFormInteger"/>SmithNormalFormInteger</term>
         <listitem>
          <synopsis>SmithNormalFormInteger (M)</synopsis>
          <para>Devuelve la forma normal de Smith para matrices cuadradas sobre enteros.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Smith_normal_form">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SolveLinearSystem"/>SolveLinearSystem</term>
         <listitem>
          <synopsis>SolveLinearSystem (M,V,args...)</synopsis>
	  <para>Resuelve el sistema lineal Mx=V, devuelve la solución V si hay una única solución y <constant>null</constant> en cualquier otro caso. Opcionalmente, se pueden usar dos parámetros de referencia para obtener M y V reducidos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ToeplitzMatrix"/>ToeplitzMatrix</term>
         <listitem>
          <synopsis>ToeplitzMatrix (c, r...)</synopsis>
	  <para lang="en">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).</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Toeplitz_matrix">Wikipedia</ulink> o <ulink url="http://planetmath.org/ToeplitzMatrix">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Trace"/>Trace</term>
         <listitem>
          <synopsis>Trace (M)</synopsis>
          <para>Alias: <function>trace</function></para>
          <para>Calcular la traza de una matriz. Esto es la suma de sus elementos diagonales.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Trace_(linear_algebra)">Wikipedia</ulink> o <ulink url="http://planetmath.org/Trace">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Transpose"/>Transpose</term>
         <listitem>
          <synopsis>Transpose (M)</synopsis>
          <para>Traspuesta de una matriz. Es lo mismo que el operador  <userinput>.'</userinput>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Transpose">Wikipedia</ulink> o <ulink url="http://planetmath.org/Transpose">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-VandermondeMatrix"/>VandermondeMatrix</term>
         <listitem>
          <synopsis>VandermondeMatrix (v)</synopsis>
          <para>Alias: <function>vander</function></para>
          <para>Devuelve la matriz de Vandermonde.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Vandermonde_matrix">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-VectorAngle"/>VectorAngle</term>
         <listitem>
          <synopsis>VectorAngle (v,w,B...)</synopsis>
          <para>El ángulo de dos vectores con respecto al propio producto viene dado por <varname>B</varname>. Si no se da <varname>B</varname>, entonces se usará el producto estándar Hermitiano. <varname>B</varname> puede ser una función sesquilineal de dos argumentos o bien, una matriz que devuelve una forma sesquilineal.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-VectorSpaceDirectSum"/>VectorSpaceDirectSum</term>
         <listitem>
          <synopsis>VectorSpaceDirectSum (M,N)</synopsis>
          <para>Suma directa de los espacios vectoriales M y N.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-VectorSubspaceIntersection"/>VectorSubspaceIntersection</term>
         <listitem>
          <synopsis>VectorSubspaceIntersection (M,N)</synopsis>
          <para>Intersección de subespacios dados por M y N.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-VectorSubspaceSum"/>VectorSubspaceSum</term>
         <listitem>
          <synopsis>VectorSubspaceSum (M,N)</synopsis>
          <para>La suma de los espacios vectoriales M y N, esto es {w | w=m+n, m en M, n en N}.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-adj"/>adj</term>
         <listitem>
          <synopsis>adj (m)</synopsis>
          <para>Alias: <function>Adjugate</function></para>
          <para>Obtener el adjunto clásico de una matriz.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-cref"/>cref</term>
         <listitem>
          <synopsis>cref (M)</synopsis>
          <para lang="en">Aliases: <function>CREF</function> <function>ColumnReducedEchelonForm</function></para>
          <para>Calcular la forma en escalón reducida por columnas.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-det"/>det</term>
         <listitem>
          <synopsis>det (M)</synopsis>
          <para>Alias: <function>Determinant</function></para>
          <para>Obtener el determinante de una matriz.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Determinant">Wikipedia</ulink> o <ulink url="http://planetmath.org/Determinant2">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ref"/>ref</term>
         <listitem>
          <synopsis>ref (M)</synopsis>
          <para lang="en">Aliases: <function>REF</function> <function>RowEchelonForm</function></para>
	  <para>Obtener la matriz escalonada por fila. Es decir, aplicar la eliminación gausiana pero no hacer la reducción a <varname>M</varname>. Las filas pivote están divididas para que todos los pivotes sean 1.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Row_echelon_form">Wikipedia</ulink> o <ulink url="http://planetmath.org/RowEchelonForm">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-rref"/>rref</term>
         <listitem>
          <synopsis>rref (M)</synopsis>
          <para lang="en">Aliases: <function>RREF</function> <function>ReducedRowEchelonForm</function></para>
          <para>Obtener la matriz escalonada reducida por filas. Es decir, aplicar la eliminación gausiana junto con la reducción a <varname>M</varname>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Reduced_row_echelon_form">Wikipedia</ulink> o <ulink url="http://planetmath.org/ReducedRowEchelonForm">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-combinatorics">
      <title>Combinatoria</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-Catalan"/>Catalan</term>
         <listitem>
          <synopsis>Catalan (n)</synopsis>
          <para>Obtener el <varname>n</varname>-ésimo número de Catalan.</para>
          <para>Consulte <ulink url="http://planetmath.org/CatalanNumbers">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Combinations"/>Combinations</term>
         <listitem>
          <synopsis>Combinations (k,n)</synopsis>
          <para>Obtener todas las combinaciones de «k» números desde 1 a «n» como un vector de vectores. (Consulte <link linkend="gel-function-NextCombination">NextCombination</link>)</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Denominator">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DoubleFactorial"/>DoubleFactorial</term>
         <listitem>
          <synopsis>DoubleFactorial (n)</synopsis>
          <para>Doble factorial: <userinput>n(n-2)(n-4)...</userinput></para>
          <para>Consulte <ulink url="http://planetmath.org/DoubleFactorial">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Factorial"/>Factorial</term>
         <listitem>
          <synopsis>Factorial (n)</synopsis>
          <para>Factorial: <userinput>n(n-1)(n-2)...</userinput></para>
          <para>Consulte <ulink url="http://planetmath.org/Factorial">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FallingFactorial"/>FallingFactorial</term>
         <listitem>
          <synopsis>FallingFactorial (n,k)</synopsis>
          <para>Factorial descendente: <userinput>(n)_k = n(n-1)...(n-(k-1))</userinput></para>
          <para>Consulte la <ulink url="http://planetmath.org/FallingFactorial">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Fibonacci"/>Fibonacci</term>
         <listitem>
          <synopsis>Fibonacci (x)</synopsis>
          <para>Alias: <function>fib</function></para>
          <para>Calcular el <varname>n</varname>-ésimo número de Fibonacci. El número se define recursivamente por <userinput>Fibonacci(n) = Fibonacci(n-1) + Fibonacci(n-2)</userinput> y <userinput>Fibonacci(1) = Fibonacci(2) = 1</userinput>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Fibonacci_number">Wikipedia</ulink> o <ulink url="http://planetmath.org/FibonacciSequence">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/FibonacciNumber.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FrobeniusNumber"/>FrobeniusNumber</term>
         <listitem>
          <synopsis>FrobeniusNumber (v,arg...)</synopsis>
          <para>Calcular el número de Frobenius. Calcular en número más grande que no se puede dar como una combinación de entero lineal no negativo de un vector dado de enteros no negativos. El vector se puede dar como números separados o un simple vector. Todos los números tendrán un máximo común divisor de enteros «GCD» de 1.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Bernoulli_number">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/BernoulliNumber.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-GaloisMatrix"/>GaloisMatrix</term>
         <listitem>
          <synopsis>GaloisMatrix (regla_de_combinación)</synopsis>
          <para>Matriz de Galois dada una regla de combinación lineal (a_1*x_1+...+a_n*x_n=x_(n+1)).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-GreedyAlgorithm"/>GreedyAlgorithm</term>
         <listitem>
          <synopsis>GreedyAlgorithm (n,v)</synopsis>
          <para>Buscar el vector <varname>c</varname> de enteros no negativos de tal manera que al realizar el producto escalar con <varname>v</varname> es igual a n. Si no es posible, se devuelve <constant>null</constant>. <varname>v</varname> estará ordenada de forma incremental y estará constituida de enteros no negativos.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Prime_factor">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/PrimeFactor.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-HarmonicNumber"/>HarmonicNumber</term>
         <listitem>
          <synopsis>HarmonicNumber (n,r)</synopsis>
          <para>Alias: <function>HarmonicH</function></para>
	  <para>Número Armónico, el <varname>n</varname>-ésimo número armónico de orden <varname>r</varname>. Esto es, el sumatorio de <userinput>1/k^r</userinput> para <varname>k</varname> desde 1 a n. Equivalente a <userinput>sum k = 1 to n do 1/k^r</userinput>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Hankel_matrix">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Hofstadter"/>Hofstadter</term>
         <listitem>
          <synopsis>Hofstadter (n)</synopsis>
          <para>Función q(n) de Hofstadter definida por q(1)=1, q(2)=1, q(n)=q(n-q(n-1))+q(n-q(n-2)).</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Row_and_column_spaces">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LinearRecursiveSequence"/>LinearRecursiveSequence</term>
         <listitem>
          <synopsis>LinearRecursiveSequence (seed_values,combining_rule,n)</synopsis>
          <para>Calcular la sucesión lineal recursiva utilizando el escalamiento de Galois.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Multinomial"/>Multinomial</term>
         <listitem>
          <synopsis>Multinomial (v,arg...)</synopsis>
          <para>Calcular los coeficientes multinomiales. Toma un vector de <varname>k</varname> enteros no negativos y calcula el coeficiente multinomial. Esto corresponde al coeficiente en el polinomio homogéneo en <varname>k</varname> variables con las correspondientes potencias.</para>
	  <para lang="en">
	    The formula for <userinput>Multinomial(a,b,c)</userinput>
	    can be written as:
<programlisting lang="en">(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>Consulte la <ulink url="https://en.wikipedia.org/wiki/Multinomial_theorem">Wikipedia</ulink>, <ulink url="http://planetmath.org/MultinomialTheorem">Planetmath</ulink>, o <ulink url="http://mathworld.wolfram.com/MultinomialCoefficient.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NextCombination"/>NextCombination</term>
         <listitem>
          <synopsis>NextCombination (v,n)</synopsis>
	  <para>Obtener las combinaciones que v devolverá después de su ejecución. La primera combinación será <userinput>[1:k]</userinput>. Esta función es útil si tiene muchas combinaciones que pasar y no quiere olvidarse de guardarlas todas.</para>
	  <para lang="en">
	    For example with Combinations you would normally write a loop like:
          <screen lang="en"><userinput>for n in Combinations (4,6) do (
  SomeFunction (n)
);</userinput>
</screen>
	    But with NextCombination you would write something like:
          <screen lang="en"><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>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Denominator">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Pascal"/>Pascal</term>
         <listitem>
          <synopsis>Pascal (i)</synopsis>
          <para>Obtener el triángulo de Pascal como una matriz. Esto devolverá una <varname>i</varname>+1 por <varname>i</varname>+1 la diagonal inferior de la matriz que es el triángulo de Pascal después de <varname>i</varname> iteraciones.</para>
          <para>Consulte <ulink url="http://planetmath.org/PascalsTriangle">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Permutations"/>Permutations</term>
         <listitem>
          <synopsis>Permutations (k,n)</synopsis>
          <para>Obtener todas las permutaciones de <varname>k</varname> números desde el 1 al <varname>n</varname> como un vector de vectores.</para>
          <para>Consulte <ulink url="http://mathworld.wolfram.com/Permutation.html">Mathworld</ulink> o la <ulink url="https://en.wikipedia.org/wiki/Permutation">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RisingFactorial"/>RisingFactorial</term>
         <listitem>
          <synopsis>RisingFactorial (n,k)</synopsis>
          <para>Alias: <function>Pochhammer</function></para>
          <para>(Puchhammer) factorial creciente: (n)_k = n(n+1)...(n+(k-1)).</para>
          <para>Consulte <ulink url="http://planetmath.org/RisingFactorial">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-StirlingNumberFirst"/>StirlingNumberFirst</term>
         <listitem>
          <synopsis>StirlingNumberFirst (n,m)</synopsis>
          <para>Alias: <function>StirlingS1</function></para>
          <para>Número de Stirling de primera clase.</para>
          <para>Consulte <ulink url="http://planetmath.org/StirlingNumbersOfTheFirstKind">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/StirlingNumberoftheFirstKind.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-StirlingNumberSecond"/>StirlingNumberSecond</term>
         <listitem>
          <synopsis>StirlingNumberSecond (n,m)</synopsis>
          <para>Alias: <function>StirlingS2</function></para>
          <para>Número de Stirling de segunda clase.</para>
          <para>Consulte <ulink url="http://planetmath.org/StirlingNumbersSecondKind">Planetmath</ulink> o <ulink url="http://mathworld.wolfram.com/StirlingNumberoftheSecondKind.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Subfactorial"/>Subfactorial</term>
         <listitem>
          <synopsis>Subfactorial (n)</synopsis>
          <para>Subfactorial: n! times sum_{k=0}^n (-1)^k/k!.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Triangular"/>Triangular</term>
         <listitem>
          <synopsis>Triangular (nth)</synopsis>
          <para>Calcular el <varname>n</varname>-ésimo número triangular.</para>
          <para>Consulte <ulink url="http://planetmath.org/TriangularNumbers">Planetmath</ulink>&gt; para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-nCr"/>nCr</term>
         <listitem>
          <synopsis>nCr (n,r)</synopsis>
          <para>Alias: <function>Binomial</function></para>
          <para>Calcular combinaciones, es decir, el coeficiente del binomio. <varname>n</varname> puede ser cualquier número real.</para>
          <para>Consulte <ulink url="http://planetmath.org/Choose">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-nPr"/>nPr</term>
         <listitem>
          <synopsis>nPr (n,r)</synopsis>
          <para>Calcular el número de permutaciones de tamaño <varname>r</varname> de números desde el 1 al <varname>n</varname>.</para>
          <para>Consulte <ulink url="http://mathworld.wolfram.com/Permutation.html">Mathworld</ulink> o la <ulink url="https://en.wikipedia.org/wiki/Permutation">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-calculus">
      <title>Cálculo</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-CompositeSimpsonsRule"/>CompositeSimpsonsRule</term>
         <listitem>
          <synopsis>CompositeSimpsonsRule (f,a,b,n)</synopsis>
          <para>Integrar f usando la Regla Compuesta de Simpson en el intervalo [a,b] con n subintervalos y un error de max(f'''')*h^4*(b-a)/180, n debe ser entero.</para>
          <para>Consulte <ulink url="http://planetmath.org/SimpsonsRule">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-CompositeSimpsonsRuleTolerance"/>CompositeSimpsonsRuleTolerance</term>
         <listitem>
          <synopsis>CompositeSimpsonsRuleTolerance (f,a,b,FourthDerivativeBound,Tolerance)</synopsis>
          <para>Integración de F por la Regla compuesta de Simpson en el intervalo [a,b] con el número de pasos calculado por la cuarta derivada y la tolerancia deseada.</para>
          <para>Consulte <ulink url="http://planetmath.org/SimpsonsRule">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Derivative"/>Derivative</term>
         <listitem>
          <synopsis>Derivative (f,x0)</synopsis>
          <para>Intentar calcular la derivada, primero simbólicamente y después numéricamente.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Derivative">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-EvenPeriodicExtension"/>EvenPeriodicExtension</term>
         <listitem>
          <synopsis>EvenPeriodicExtension (f,L)</synopsis>
	  <para>Devolver una función que es una extensión periódica par de <function>f</function> con medio periodo <varname>L</varname>. Esto es una función que se define en el intervalo <userinput>[0,L]</userinput> extendido para ser par en <userinput>[-L,L]</userinput> y entonces extendido para ser periódico con periodo <userinput>2*L</userinput>.</para>
	  <para>Consulte <link linkend="gel-function-OddPeriodicExtension">OddPeriodicExtension</link> y <link linkend="gel-function-PeriodicExtension">PeriodicExtension</link>.</para>
	  <para>Desde la versión 1.0.7 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FourierSeriesFunction"/>FourierSeriesFunction</term>
         <listitem>
          <synopsis>FourierSeriesFunction (a,b,L)</synopsis>
	  <para>Devuelve una función que es una serie de Fourier con coeficientes devueltos por los vectores <varname>a</varname> (senos) y <varname>b</varname> (cosenos). Tenga en cuenta que <userinput>a@(1)</userinput> es el coeficiente constante. Es decir, <userinput>a@(n)</userinput> se refiere al término <userinput>cos(x*(n-1)*pi/L)</userinput>, mientras que <userinput>b@(n)</userinput> se refiere al término <userinput>sin(x*n*pi/L)</userinput>. Tanto <varname>a</varname> o <varname>b</varname> puede ser <constant>null</constant>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Fourier_series">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/FourierSeries.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-InfiniteProduct"/>InfiniteProduct</term>
         <listitem>
          <synopsis>InfiniteProduct (func,inicio,inc)</synopsis>
          <para>Intenta calcular un producto infinito para una función de un sólo parámetro.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-InfiniteProduct2"/>InfiniteProduct2</term>
         <listitem>
          <synopsis>InfiniteProduct2 (func,arg,inicio,inc)</synopsis>
          <para>Intenta calcular un producto infinito para una función de dos parámetros con func(arg,n)</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-InfiniteSum"/>InfiniteSum</term>
         <listitem>
          <synopsis>InfiniteSum (func,inicio,inc)</synopsis>
          <para>Intentar calcular una suma infinita para una función de un sólo parámetro.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-InfiniteSum2"/>InfiniteSum2</term>
         <listitem>
          <synopsis>InfiniteSum2 (func,arg,inicio,inc)</synopsis>
          <para>Intenta calcular una suma infinita para una función de dos parámetros con func(arg,n).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsContinuous"/>IsContinuous</term>
         <listitem>
          <synopsis>IsContinuous (f,x0)</synopsis>
          <para>Comprueba si una función real es continua en x0 calculando el límite en ese punto.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsDifferentiable"/>IsDifferentiable</term>
         <listitem>
          <synopsis>IsDifferentiable (f,x0)</synopsis>
          <para>Comprobar la diferenciabilidad aproximando los límites izquierdo y derecho y comparándolos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LeftLimit"/>LeftLimit</term>
         <listitem>
          <synopsis>LeftLimit (f,x0)</synopsis>
          <para>Calcular el límite por la izquierda de una función real en x0.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Limit"/>Limit</term>
         <listitem>
          <synopsis>Limit (f,x0)</synopsis>
          <para>Calcular el límite de una función real en x0. Intenta calcular tanto el límite por la derecha como por la izquierda.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MidpointRule"/>MidpointRule</term>
         <listitem>
          <synopsis>MidpointRule (f,a,b,n)</synopsis>
          <para>Integración por la regla del punto medio.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalDerivative"/>NumericalDerivative</term>
         <listitem>
          <synopsis>NumericalDerivative (f,x0)</synopsis>
          <para>Alias: <function>NDerivative</function></para>
          <para>Intentar calcular la derivada numérica.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Derivative">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalFourierSeriesCoefficients"/>NumericalFourierSeriesCoefficients</term>
         <listitem>
          <synopsis>NumericalFourierSeriesCoefficients (f,L,N)</synopsis>
	  <para>Devuelve un vector de vectores <userinput>[a,b]</userinput> donde <varname>a</varname> son los coeficientes cosenos y <varname>b</varname> son los coeficientes senos de la serie de Fourier de <function>f</function> con medio periodo <varname>L</varname> (esto se define en <userinput>[-L,L]</userinput> y extendido periódicamente) con coeficientes hasta <varname>N</varname>-ésimo harmónico calculado numéricamente. Los coeficientes se calculan por la integración numérica al usar <link linkend="gel-function-NumericalIntegral"><function>NumericalIntegral</function></link>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Fourier_series">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/FourierSeries.html">Mathworld</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.7 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalFourierSeriesFunction"/>NumericalFourierSeriesFunction</term>
         <listitem>
          <synopsis>NumericalFourierSeriesFunction (f,L,N)</synopsis>
	  <para>Devuelve una función que es la serie de Fourier de <function>f</function> con medio periodo <varname>L</varname> (esto se define en <userinput>[-L,L]</userinput> y extendido periódicamente) con coeficientes hasta <varname>N</varname>-ésimo harmónico calculado numéricamente. Esto es, la serie trigonométrica real compuesta de senos y cosenos. Los coeficientes se calculan por la integración numérica al utilizar <link linkend="gel-function-NumericalIntegral"><function>NumericalIntegral</function></link>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Fourier_series">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/FourierSeries.html">Mathworld</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.7 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalFourierCosineSeriesCoefficients"/>NumericalFourierCosineSeriesCoefficients</term>
         <listitem>
          <synopsis>NumericalFourierCosineSeriesCoefficients (f,L,N)</synopsis>
	  <para>Devuelve un vector de coeficientes de coseno de la serie de Fourier de <function>f</function> con medio periodo <varname>L</varname>. Es decir, se toma <function>f</function> definida en <userinput>[0,L]</userinput> toma la extensión periódica par y calcula la serie de Fourier, que sólo tiene cosenos como términos. La serie se calcula hasta la <varname>N</varname>-ésima harmónica. Los coeficientes se calculan por la integración numérica al utilizar <link linkend="gel-function-NumericalIntegral"><function>NumericalIntegral</function></link>. Tenga en cuenta que <userinput>a@(1)</userinput> es el coeficiente constante. Es decir, <userinput>a@(n)</userinput> se refiere a el término <userinput>cos(x*(n-1)*pi/L)</userinput>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Fourier_series">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/FourierCosineSeries.html">Mathworld</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.7 en adelante.</para>
	  </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalFourierCosineSeriesFunction"/>NumericalFourierCosineSeriesFunction</term>
         <listitem>
          <synopsis>NumericalFourierCosineSeriesFunction (f,L,N)</synopsis>
	  <para>Devuelve una función que es el coseno de la serie de Fourier de <function>f</function> con medio periodo <varname>L</varname>. Es decir, se toma <function>f</function> definida en <userinput>[0,L]</userinput> toma la extensión periódica par y calcula la serie de Fourier, que sólo tiene coseno como términos. La serie se calcula hasta la <varname>N</varname>-ésima harmónica. Los coeficientes se calculan por la integración numérica al utilizar <link linkend="gel-function-NumericalIntegral"><function>NumericalIntegral</function></link>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Fourier_series">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/FourierCosineSeries.html">Mathworld</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.7 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalFourierSineSeriesCoefficients"/>NumericalFourierSineSeriesCoefficients</term>
         <listitem>
          <synopsis>NumericalFourierSineSeriesCoefficients (f,L,N)</synopsis>
	  <para>Devuelve un vector de coeficientes de senos de la serie de Fourier de <function>f</function> con medio periodo <varname>L</varname>. Es decir, se toma <function>f</function> definido en <userinput>[0,L]</userinput> toma la extensión periódica impar y calcula la serie de Fourier, que sólo tiene senos como términos. La serie se calcula hasta el <varname>N</varname>-ésimo harmónico. Los coeficientes se calculan por la integración numérica al utilizar <link linkend="gel-function-NumericalIntegral"><function>NumericalIntegral</function></link>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Fourier_series">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/FourierSineSeries.html">Mathworld</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.7 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalFourierSineSeriesFunction"/>NumericalFourierSineSeriesFunction</term>
         <listitem>
          <synopsis>NumericalFourierSineSeriesFunction (f,L,N)</synopsis>
	  <para>Devuelve una función que es el seno de la serie de Fourier de <function>f</function> con medio periodo <varname>L</varname>. Es decir, se toma <function>f</function> definida en <userinput>[0,L]</userinput> toma la extensión periódica impar y calcula ls series de Fourier, que sólo tiene seno como términos. La serie se calcula hasta la <varname>N</varname>-ésima harmónica. Los coeficientes se calculan por la integración numérica al utilizar <link linkend="gel-function-NumericalIntegral"><function>NumericalIntegral</function></link>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Fourier_series">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/FourierSineSeries.html">Mathworld</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.7 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalIntegral"/>NumericalIntegral</term>
         <listitem>
          <synopsis>NumericalIntegral (f,a,b)</synopsis>
          <para>Integración por el conjunto de reglas en NumericalIntegralFunction de f desde «a» a «b» usando NumericalIntegralSteps pasos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalLeftDerivative"/>NumericalLeftDerivative</term>
         <listitem>
          <synopsis>NumericalLeftDerivative (f,x0)</synopsis>
          <para>Intentar calcular la derivada numérica por la izquierda.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalLimitAtInfinity"/>NumericalLimitAtInfinity</term>
         <listitem>
          <synopsis>NumericalLimitAtInfinity (_f,step_fun,tolerance,successive_for_success,N)</synopsis>
          <para>Intentar calcular el límite de f(step_fun(i)), para i desde 1 hasta N.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NumericalRightDerivative"/>NumericalRightDerivative</term>
         <listitem>
          <synopsis>NumericalRightDerivative (f,x0)</synopsis>
          <para>Intentar calcular la derivada numérica por la derecha.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-OddPeriodicExtension"/>OddPeriodicExtension</term>
         <listitem>
          <synopsis>OddPeriodicExtension (f,L)</synopsis>
	  <para>Devuelve una función que es la extensión periódica impar de <function>f</function> con medio periodo <varname>L</varname>. Esto es una función definida en el intervalo <userinput>[0,L]</userinput> extendida para ser impar en <userinput>[-L,L]</userinput> y entonces extendida para ser periódica con periodo <userinput>2*L</userinput>.</para>
	  <para>Consulte también <link linkend="gel-function-EvenPeriodicExtension">EvenPeriodicExtension</link> y <link linkend="gel-function-PeriodicExtension">PeriodicExtension</link>.</para>
	  <para>Desde la versión 1.0.7 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-OneSidedFivePointFormula"/>OneSidedFivePointFormula</term>
         <listitem>
          <synopsis>OneSidedFivePointFormula (f,x0,h)</synopsis>
          <para>Calcular la derivada de un lado usando una fórmula de 5 puntos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-OneSidedThreePointFormula"/>OneSidedThreePointFormula</term>
         <listitem>
          <synopsis>OneSidedThreePointFormula (f,x0,h)</synopsis>
          <para>Calcular la derivada de un lado usando una fórmula de tres puntos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PeriodicExtension"/>PeriodicExtension</term>
         <listitem>
          <synopsis>PeriodicExtension (f,a,b)</synopsis>
	  <para>Devuelve una función que es la extensión periódica de <function>f</function> que se define en el intervalo <userinput>[a,b]</userinput> y tiene un periodo <userinput>b-a</userinput>.</para>
	  <para>Consulte también <link linkend="gel-function-OddPeriodicExtension">OddPeriodicExtension</link> y <link linkend="gel-function-EvenPeriodicExtension">EvenPeriodicExtension</link>.</para>
	  <para>Desde la versión 1.0.7 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RightLimit"/>RightLimit</term>
         <listitem>
          <synopsis>RightLimit (f,x0)</synopsis>
          <para>Calcular el límite por la derecha de una función real en x0.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-TwoSidedFivePointFormula"/>TwoSidedFivePointFormula</term>
         <listitem>
          <synopsis>TwoSidedFivePointFormula (f,x0,h)</synopsis>
          <para>Calcular la derivada de dos lados usando una fórmula de cinco puntos.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-TwoSidedThreePointFormula"/>TwoSidedThreePointFormula</term>
         <listitem>
          <synopsis>TwoSidedThreePointFormula (f,x0,h)</synopsis>
          <para>Calcular la derivada de dos lados usando una fórmula de tres puntos.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-functions">
      <title>Funciones</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-Argument"/>Argument</term>
         <listitem>
          <synopsis>Argument (z)</synopsis>
          <para lang="en">Aliases: <function>Arg</function> <function>arg</function></para>
          <para>argumento (ángulo) de un número complejo.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-BesselJ0"/>BesselJ0</term>
         <listitem>
          <synopsis>BesselJ0 (x)</synopsis>
          <para>Función de Bessel de primer tipo de orden 0. Implementada solo para números reales.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Bessel_functions">Wikipedia</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-BesselJ1"/>BesselJ1</term>
         <listitem>
          <synopsis>BesselJ1 (x)</synopsis>
          <para>Función de Bessel de primer tipo de orden 1. Implementada solo para números reales.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Bessel_functions">Wikipedia</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-BesselJn"/>BesselJn</term>
         <listitem>
          <synopsis>BesselJn (n,x)</synopsis>
	  <para>Función de Bessel de primer tipo de orden <varname>n</varname>. Implementada solo para números reales.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Bessel_functions">Wikipedia</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-BesselY0"/>BesselY0</term>
         <listitem>
          <synopsis>BesselY0 (x)</synopsis>
          <para>Función de Bessel de segundo tipo de orden 0. Implementada solo para números reales.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Bessel_functions">Wikipedia</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-BesselY1"/>BesselY1</term>
         <listitem>
          <synopsis>BesselY1 (x)</synopsis>
          <para>Función de Bessel de segunto tipo de orden 1. Implementada solo para números reales.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Bessel_functions">Wikipedia</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-BesselYn"/>BesselYn</term>
         <listitem>
          <synopsis>BesselYn (n,x)</synopsis>
	  <para>Función de Bessel de segundo tipo de orden <varname>n</varname>. Implementada solo para números reales.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Bessel_functions">Wikipedia</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DirichletKernel"/>DirichletKernel</term>
         <listitem>
          <synopsis>DirichletKernel (n,t)</synopsis>
	  <para>Núcleo de Dirichlet de orden <varname>n</varname>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DiscreteDelta"/>DiscreteDelta</term>
         <listitem>
          <synopsis>DiscreteDelta (v)</synopsis>
          <para>Devuelve 1 si y sólo si todos los elementos son cero.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-ErrorFunction"/>ErrorFunction</term>
         <listitem>
          <synopsis>ErrorFunction (x)</synopsis>
          <para>Alias: <function>erf</function></para>
          <para>La función de error, 2/sqrt(pi) * int_0^x e^(-t^2) dt.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Error_function">Wikipedia</ulink> o <ulink url="http://planetmath.org/ErrorFunction">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FejerKernel"/>FejerKernel</term>
         <listitem>
          <synopsis>FejerKernel (n,t)</synopsis>
          <para>Núcleo de Fejer de orden <varname>n</varname> evaluado en <varname>t</varname></para>
          <para>Consulte <ulink url="http://planetmath.org/FejerKernel">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-GammaFunction"/>GammaFunction</term>
         <listitem>
          <synopsis>GammaFunction (x)</synopsis>
          <para>Alias: <function>Gamma</function></para>
          <para>La función «Gamma». Actualmente sólo implementada para valores reales.</para>
          <para>Consulte <ulink url="http://planetmath.org/GammaFunction">Planetmath</ulink> o <ulink url="https://en.wikipedia.org/wiki/Gamma_function">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-KroneckerDelta"/>KroneckerDelta</term>
         <listitem>
          <synopsis>KroneckerDelta (v)</synopsis>
          <para>Devuelve 1 si y sólo si todos los elementos son iguales.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LambertW"/>LambertW</term>
         <listitem>
          <synopsis>LambertW (x)</synopsis>
	  <para>La rama principal de la función de Lambert W calculada sólo para los valores reales más grandes o iguales que <userinput>-1/e</userinput>. Es decir, que la función <function>LambertW</function> es la inversa de la expresión <userinput>x*e^x</userinput>. Incluso para una variable real <varname>x</varname> esta expresión no es uno a uno y por lo tanto tiene dos ramas más <userinput>[-1/e,0)</userinput>. Consulte <link linkend="gel-function-LambertWm1"><function>LambertWm1</function></link> para otras ramas reales.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Lambert_W_function">Wikipedia</ulink> para más información.</para>
	  <para>Desde la versión 1.0.18 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LambertWm1"/>LambertWm1</term>
         <listitem>
          <synopsis>LambertWm1 (x)</synopsis>
	  <para>La rama menos uno «-1» de la función de Lambert W calculada sólo para valores reales más grandes o igual a <userinput>-1/e</userinput> y menor que 0. Es decir, <function>LambertWm1</function> es la segunda rama de la inversa de <userinput>x*e^x</userinput>. Consulte <link linkend="gel-function-LambertW"><function>LambertW</function></link> para la rama principal.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Lambert_W_function">Wikipedia</ulink> para más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MinimizeFunction"/>MinimizeFunction</term>
         <listitem>
          <synopsis>MinimizeFunction (func,x,incr)</synopsis>
          <para>Buscar el primer valor donde f(x)=0.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MoebiusDiskMapping"/>MoebiusDiskMapping</term>
         <listitem>
          <synopsis>MoebiusDiskMapping (a,z)</synopsis>
          <para>Mapa de Moebius del disco a sí mismo mapeando a 0.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Transpose">Wikipedia</ulink> o <ulink url="http://planetmath.org/Transpose">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MoebiusMapping"/>MoebiusMapping</term>
         <listitem>
          <synopsis>MoebiusMapping (z,z2,z3,z4)</synopsis>
          <para>Mapa de Moebius usando el radio cruzado z2,z3,z4 a 1,0 e infinito respectivamente.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Transpose">Wikipedia</ulink> o <ulink url="http://planetmath.org/Transpose">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MoebiusMappingInftyToInfty"/>MoebiusMappingInftyToInfty</term>
         <listitem>
          <synopsis>MoebiusMappingInftyToInfty (z,z2,z3)</synopsis>
          <para>Mapa de Moebius usando el radio cruzado tomando infinito a infinito y z2,z3 a 1 y 0 respectivamente.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Transpose">Wikipedia</ulink> o <ulink url="http://planetmath.org/Transpose">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MoebiusMappingInftyToOne"/>MoebiusMappingInftyToOne</term>
         <listitem>
          <synopsis>MoebiusMappingInftyToOne (z,z3,z4)</synopsis>
          <para>Mapa de Moebius usando la relación cruzada tomando de infinito a 1 y z3,z4 a 0 e infinito respectivamente.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Transpose">Wikipedia</ulink> o <ulink url="http://planetmath.org/Transpose">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MoebiusMappingInftyToZero"/>MoebiusMappingInftyToZero</term>
         <listitem>
          <synopsis>MoebiusMappingInftyToZero (z,z2,z4)</synopsis>
          <para>Mapa de Moebius usando la relación cruzada tomando de infinito a 0 y z2,z4 a 1 e infinito respectivamente.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Transpose">Wikipedia</ulink> o <ulink url="http://planetmath.org/Transpose">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PoissonKernel"/>PoissonKernel</term>
         <listitem>
          <synopsis>PoissonKernel (r,sigma)</synopsis>
          <para>El núcleo de Poisson en D(0,1) (no normalizado a 1, esto es, su integral es 2pi).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PoissonKernelRadius"/>PoissonKernelRadius</term>
         <listitem>
          <synopsis>PoissonKernelRadius (r,sigma)</synopsis>
          <para>El núcleo de Poisson en D(0,R) (no normalizado a 1).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RiemannZeta"/>RiemannZeta</term>
         <listitem>
          <synopsis>RiemannZeta (x)</synopsis>
          <para>Alias: <function>zeta</function></para>
          <para>La función «zeta de Riemann». Actualmente sólo implementada para valores reales.</para>
          <para>Consulte <ulink url="http://planetmath.org/RiemannZetaFunction">Planetmath</ulink> o <ulink url="https://en.wikipedia.org/wiki/Riemann_zeta_function">Wikipedia</ulink> para más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-UnitStep"/>UnitStep</term>
         <listitem>
          <synopsis>UnitStep (x)</synopsis>
          <para>La función escalón unitario es 0 para x&lt;0, 1 si no. Es la integral de la función delta de Dirac. También llamada función de Heaviside.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Unit_step">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-cis"/>cis</term>
         <listitem>
          <synopsis>cis (x)</synopsis>
          <para>La función <function>cis</function> es la misma que <userinput>cos(x)+1i*sin(x)</userinput></para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-deg2rad"/>deg2rad</term>
         <listitem>
          <synopsis>deg2rad (x)</synopsis>
          <para>Convertir grados a radianes.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-rad2deg"/>rad2deg</term>
         <listitem>
          <synopsis>rad2deg (x)</synopsis>
          <para>Convertir radianes a grados.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-sinc"/>sinc</term>
         <listitem>
          <synopsis>sinc (x)</synopsis>
	  <para>Calcular la función sinc no normalizada, esto es <userinput>sin(x)/x</userinput>. Si quiere normalizar la función utilice <userinput>sinc(pi*x)</userinput>.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Denominator">Wikipedia</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-equation-solving">
      <title>Resolución de ecuaciones</title>
      <variablelist>

        <varlistentry>
         <term><anchor id="gel-function-CubicFormula"/>CubicFormula</term>
         <listitem>
          <synopsis>CubicFormula (p)</synopsis>
          <para>Calcular las raíces de un polinomio cúbico (de grado 3) utilizando la fórmula cúbica. El polinomio se dará como un vector de coeficientes. Esto es <userinput>4*x^3 + 2*x + 1</userinput> que corresponde al vector <userinput>[1,2,0,4]</userinput>. Devuelve un vector columna de tres soluciones. La primera solución siempre es la real como un cúbico siempre tiene una solución real.</para>
          <para>Consulte <ulink url="http://planetmath.org/CubicFormula">Planetmath</ulink>, <ulink url="http://mathworld.wolfram.com/CubicFormula.html">Mathworld</ulink>, o <ulink url="https://en.wikipedia.org/wiki/Cubic_equation">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-EulersMethod"/>EulersMethod</term>
         <listitem>
          <synopsis>EulersMethod (f,x0,y0,x1,n)</synopsis>
          <para>Utilizar el método clásico de Euler para resolver numéricamente y'=f(x,y) de forma inicial <varname>x0</varname>, <varname>y0</varname> pasan a <varname>x1</varname> con <varname>n</varname> incrementos, devuelve <varname>y</varname> junto con <varname>x1</varname>. Excepto que especifique explícitamente que quiere utilizar el método clásico de Euler, piense en utilizar <link linkend="gel-function-RungeKutta">RungeKutta</link> para resolver ODE.</para>
	  <para>Los sistemas se pueden resolver teniendo a <varname>y</varname> como un vector (columna) en cualquier parte. Es decir, <varname>y0</varname> puede ser un vector en cuyo caso <varname>f</varname> será un número <varname>x</varname> y un vector del mismo tamaño para el segundo argumento y devolverá un vector del mismo tamaño.</para>
          <para>Consulte <ulink url="http://mathworld.wolfram.com/EulerForwardMethod.html">Mathworld</ulink> o <ulink url="https://en.wikipedia.org/wiki/Eulers_method">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-EulersMethodFull"/>EulersMethodFull</term>
         <listitem>
          <synopsis>EulersMethodFull (f,x0,y0,x1,n)</synopsis>
          <para>Utilizar el método clásico de Euler para resolver numéricamente y'=f(x,y) de forma inicial <varname>x0</varname>, <varname>y0</varname> pasan a <varname>x1</varname> con <varname>n</varname> incrementos, devuelve una matriz de 2 por <userinput>n+1</userinput> con los valores <varname>x</varname> e <varname>y</varname>.Excepto que quiera utilizar explícitamente el método clásico de Euler, utilice mejor <link linkend="gel-function-RungeKuttaFull">RungeKuttaFull</link> para resolver ODE. Adecuado para enlazar con <link linkend="gel-function-LinePlotDrawLine">LinePlotDrawLine</link> o <link linkend="gel-function-LinePlotDrawPoints">LinePlotDrawPoints</link>.</para>
	  <para lang="en">
	    Example:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>LinePlotClear();</userinput>
<prompt>genius&gt;</prompt> <userinput>line = EulersMethodFull(`(x,y)=y,0,1.0,3.0,50);</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine(line,"window","fit","color","blue","legend","Exponential growth");</userinput>
</screen>
	  </para>
	  <para>Los sistemas se pueden resolver teniendo a <varname>y</varname> como un vector (columna) en cualquier parte. Es decir, <varname>y0</varname> puede ser un vector en cuyo caso <varname>f</varname> será un número <varname>x</varname> y un vector del mismo tamaño para el segundo argumento y devolverá un vector del mismo tamaño.</para>
	  <para lang="en">
		  The output for a system is still a n by 2 matrix with the second
		  entry being a vector.  If you wish to plot the line, make sure to use row vectors, and then flatten the matrix with
		  <link linkend="gel-function-ExpandMatrix">ExpandMatrix</link>,
		  and pick out the right columns.  Example:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>LinePlotClear();</userinput>
<prompt>genius&gt;</prompt> <userinput>lines = EulersMethodFull(`(x,y)=[y@(2),-y@(1)],0,[1.0,1.0],10.0,500);</userinput>
<prompt>genius&gt;</prompt> <userinput>lines = ExpandMatrix(lines);</userinput>
<prompt>genius&gt;</prompt> <userinput>firstline = lines@(,[1,2]);</userinput>
<prompt>genius&gt;</prompt> <userinput>secondline = lines@(,[1,3]);</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotWindow = [0,10,-2,2];</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine(firstline,"color","blue","legend","First");</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawPoints(secondline,"color","red","thickness",3,"legend","Second");</userinput>
</screen>
	  </para>
          <para>Consulte <ulink url="http://mathworld.wolfram.com/EulerForwardMethod.html">Mathworld</ulink> o <ulink url="https://en.wikipedia.org/wiki/Eulers_method">Wikipedia</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.10 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FindRootBisection"/>FindRootBisection</term>
         <listitem>
          <synopsis>FindRootBisection (f,a,b,TOL,N)</synopsis>
          <para>Buscar la raíz de una función utilizando el método de la bisección. <varname>a</varname> y <varname>b</varname> son los límites iniciales del intervalo, <userinput>f(a)</userinput> y <userinput>f(b)</userinput> deben tener signos opuestos. <varname>TOL</varname> es la tolerancia deseada y <varname>N</varname> es el límite del número de iteraciones a ejecutar, 0 indica sin límites. La función devuelve un vector <userinput>[success,value,iteration]</userinput>, donde <varname>success</varname> un booleano que indica el éxito, <varname>value</varname> es el último valor calculado, e <varname>iteration</varname> es el número de iteraciones realizadas.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FindRootFalsePosition"/>FindRootFalsePosition</term>
         <listitem>
          <synopsis>FindRootFalsePosition (f,a,b,TOL,N)</synopsis>
          <para>Buscar la raíz de una función utilizando el método de la posición falsa. <varname>a</varname> y <varname>b</varname> son los valores iniciales del intervalo, <userinput>f(a)</userinput> y <userinput>f(b)</userinput> deben tener signos opuestos. <varname>TOL</varname> es la tolerancia deseada y <varname>N</varname> es el límite del número de iteraciones a ejecutar, 0 indica sin límites. La función devuelve un vector <userinput>[success,value,iteration]</userinput>, donde <varname>success</varname> es un booleano que indica el éxito, <varname>value</varname> es el último valor calculado, e <varname>iteration</varname> es el número de iteraciones realizadas.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FindRootMullersMethod"/>FindRootMullersMethod</term>
         <listitem>
          <synopsis>FindRootMullersMethod (f,x0,x1,x2,TOL,N)</synopsis>
          <para>Buscar la raíz de una función utilizando el método de Muller. <varname>TOL</varname> es la tolerancia deseada y <varname>N</varname> es el límite del número de iteraciones a ejecutar, 0 indica sin límites. La función devuelve un vector <userinput>[success,value,iteration]</userinput>, donde <varname>success</varname> un booleano que indica el éxito, <varname>value</varname> es el último valor calculado, e <varname>iteration</varname> es el número de iteraciones realizadas.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-FindRootSecant"/>FindRootSecant</term>
         <listitem>
          <synopsis>FindRootSecant (f,a,b,TOL,N)</synopsis>
          <para>Buscar la raíz de una función utilizando el método de la secante. <varname>a</varname> y <varname>b</varname> son los límites iniciales del intervalo, <userinput>f(a)</userinput> y <userinput>f(b)</userinput> deben tener signos opuestos. <varname>TOL</varname> es la tolerancia deseada y <varname>N</varname> es el límite del número de iteraciones a ejecutar, 0 indica sin límites. La función devuelve un vector <userinput>[success,value,iteration]</userinput>, donde <varname>success</varname> es un booleano que indica el éxito, <varname>value</varname> es el último valor calculado, e <varname>iteration</varname> es el número de iteraciones realizadas.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-HalleysMethod"/>HalleysMethod</term>
         <listitem>
          <synopsis>HalleysMethod (f,df,ddf,guess,epsilon,maxn)</synopsis>
	  <para>Encontrar ceros utilizando el método de Halleys. Siendo <varname>f</varname> la función, <varname>df</varname> es la derivada de <varname>f</varname>, y <varname>ddf</varname> es la segunda derivada de <varname>f</varname>. La variable <varname>guess</varname> es la aproximación inicial. La función devuelve después dos valores sucesivos que están dentro de los límites que marca <varname>epsilon</varname> o después de <varname>maxn</varname> iteraciones en cuyo caso devuelve <constant>null</constant> indicando un fallo.</para>
	  <para>Consulte también <link linkend="gel-function-NewtonsMethod"><function>NewtonsMethod</function></link> y <link linkend="gel-function-SymbolicDerivative"><function>SymbolicDerivative</function></link>.</para>
	  <para lang="en">
	    Example to find the square root of 10:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>HalleysMethod(`(x)=x^2-10,`(x)=2*x,`(x)=2,3,10^-10,100)</userinput>
</screen>
	  </para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Halley%27s_method">Wikipedia</ulink> para más información.</para>
	  <para>Desde la versión 1.0.18 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NewtonsMethod"/>NewtonsMethod</term>
         <listitem>
          <synopsis>NewtonsMethod (f,df,guess,epsilon,maxn)</synopsis>
	  <para>Encontrar ceros utilizando el método de Newton. La variable <varname>f</varname> es la función y <varname>df</varname> es la derivada de <varname>f</varname>. La variable <varname>guess</varname> el supuesto inicial. La función devuelve después dos valores sucesivos que están dentro de los límites que marca <varname>epsilon</varname> o después de <varname>maxn</varname> iteraciones en cuyo caso devuelve <constant>null</constant> indicando un fallo.</para>
	  <para>Consulte también <link linkend="gel-function-NewtonsMethodPoly"><function>NewtonsMethodPoly</function></link> y <link linkend="gel-function-SymbolicDerivative"><function>SymbolicDerivative</function></link>.</para>
	  <para lang="en">
	    Example to find the square root of 10:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>NewtonsMethod(`(x)=x^2-10,`(x)=2*x,3,10^-10,100)</userinput>
</screen>
	  </para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Newtons_method">Wikipedia</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.18 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PolynomialRoots"/>PolynomialRoots</term>
         <listitem>
          <synopsis>PolynomialRoots (p)</synopsis>
          <para>Calcular las raíces de un polinomio (de grado 1 a 4) utilizando una de las fórmulas para cada polinomio. El polinomio entregará un vector de coeficientes. Esto es <userinput>4*x^3 + 2*x + 1</userinput> que corresponde al vector <userinput>[1,2,0,4]</userinput>. Devuelve un vector columna de las soluciones.</para>
	  <para>La función llama a <link linkend="gel-function-QuadraticFormula">QuadraticFormula</link>, <link linkend="gel-function-CubicFormula">CubicFormula</link>, y a <link linkend="gel-function-QuarticFormula">QuarticFormula</link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-QuadraticFormula"/>QuadraticFormula</term>
         <listitem>
          <synopsis>QuadraticFormula (p)</synopsis>
          <para>Calcular las raíces de una polinomio cuadrático (de grado 2) utilizando la fórmula cuadrática. El polinomio será un vector de coeficientes. Es es <userinput>3*x^2 + 2*x + 1</userinput> que corresponde con el vector <userinput>[1,2,3]</userinput>. Devuelve un vector columna de las dos soluciones.</para>
          <para>Consulte <ulink url="http://planetmath.org/QuarticFormula">Planetmath</ulink>, <ulink url="http://mathworld.wolfram.com/QuarticEquation.html">Mathworld</ulink>, o <ulink url="https://en.wikipedia.org/wiki/Quartic_equation">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-QuarticFormula"/>QuarticFormula</term>
         <listitem>
          <synopsis>QuarticFormula (p)</synopsis>
          <para>Calcular las raíces de un polinomio cuadrático (de grado 4) utilizando la fórmula cuadrática. El polinomio será un vector de coeficientes. Esto es <userinput>5*x^4 + 2*x + 1</userinput> que corresponde con el vector <userinput>[1,2,0,0,5]</userinput>. Devuelve un vector columna de las cuatro soluciones.</para>
          <para>Consulte <ulink url="http://planetmath.org/QuarticFormula">Planetmath</ulink>, <ulink url="http://mathworld.wolfram.com/QuarticEquation.html">Mathworld</ulink>, o <ulink url="https://en.wikipedia.org/wiki/Quartic_equation">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RungeKutta"/>RungeKutta</term>
         <listitem>
          <synopsis>RungeKutta (f,x0,y0,x1,n)</synopsis>
          <para>Utilizar el método clásico no adaptativo de cuarto orden Runge-Kutta para resolver numéricamente y'=f(x,y) que de forma inicial <varname>x0</varname>, <varname>y0</varname> tienden a <varname>x1</varname> con <varname>n</varname> incrementos, devuelve <varname>y</varname> en <varname>x1</varname>.</para>
	  <para>Los sistemas se pueden resolver teniendo a <varname>y</varname> como un vector (columna) en cualquier parte. Es decir, <varname>y0</varname> puede ser un vector en cuyo caso <varname>f</varname> será un número <varname>x</varname> y un vector del mismo tamaño para el segundo argumento y devolverá un vector del mismo tamaño.</para>
          <para>Consulte <ulink url="http://mathworld.wolfram.com/Runge-KuttaMethod.html">Mathworld</ulink> o <ulink url="https://en.wikipedia.org/wiki/Runge-Kutta_methods">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RungeKuttaFull"/>RungeKuttaFull</term>
         <listitem>
          <synopsis>RungeKuttaFull (f,x0,y0,x1,n)</synopsis>
          <para>Utilizar el método clásico no adaptativo de cuarto orden Runge-Kutta para resolver numéricamente y'=f(x,y) que de forma inicial <varname>x0</varname>, <varname>y0</varname> tienden a <varname>x1</varname> con <varname>n</varname> incrementos, devuelve una matriz de 2 por <userinput>n+1</userinput> con los valores <varname>x</varname> e <varname>y</varname>. Adecuado para enlazar con <link linkend="gel-function-LinePlotDrawLine">LinePlotDrawLine</link> o <link linkend="gel-function-LinePlotDrawPoints">LinePlotDrawPoints</link>.</para>
	  <para lang="en">
	    Example:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>LinePlotClear();</userinput>
<prompt>genius&gt;</prompt> <userinput>line = RungeKuttaFull(`(x,y)=y,0,1.0,3.0,50);</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine(line,"window","fit","color","blue","legend","Exponential growth");</userinput>
</screen>
	  </para>
	  <para>Los sistemas se pueden resolver teniendo a <varname>y</varname> como un vector (columna) en cualquier parte. Es decir, <varname>y0</varname> puede ser un vector en cuyo caso <varname>f</varname> será un número <varname>x</varname> y un vector del mismo tamaño para el segundo argumento y devolverá un vector del mismo tamaño.</para>
	  <para lang="en">
		  The output for a system is still a n by 2 matrix with the second
		  entry being a vector.  If you wish to plot the line, make sure to use row vectors, and then flatten the matrix with
		  <link linkend="gel-function-ExpandMatrix">ExpandMatrix</link>,
		  and pick out the right columns.  Example:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>LinePlotClear();</userinput>
<prompt>genius&gt;</prompt> <userinput>lines = RungeKuttaFull(`(x,y)=[y@(2),-y@(1)],0,[1.0,1.0],10.0,100);</userinput>
<prompt>genius&gt;</prompt> <userinput>lines = ExpandMatrix(lines);</userinput>
<prompt>genius&gt;</prompt> <userinput>firstline = lines@(,[1,2]);</userinput>
<prompt>genius&gt;</prompt> <userinput>secondline = lines@(,[1,3]);</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotWindow = [0,10,-2,2];</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine(firstline,"color","blue","legend","First");</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawPoints(secondline,"color","red","thickness",3,"legend","Second");</userinput>
</screen>
	  </para>
          <para>Consulte <ulink url="http://mathworld.wolfram.com/Runge-KuttaMethod.html">Mathworld</ulink> o <ulink url="https://en.wikipedia.org/wiki/Runge-Kutta_methods">Wikipedia</ulink> para obtener más información.</para>
	  <para>Desde la versión 1.0.10 en adelante.</para>
         </listitem>
        </varlistentry>


      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-statistics">
      <title>Estadísticas</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-Average"/>Average</term>
         <listitem>
          <synopsis>Average (m)</synopsis>
          <para lang="en">Aliases: <function>average</function> <function>Mean</function> <function>mean</function></para>
          <para>Calcular la media aritmética de una matriz entera.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Atan2">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/InverseTangent.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-GaussDistribution"/>GaussDistribution</term>
         <listitem>
          <synopsis>GaussDistribution (x,sigma)</synopsis>
	  <para>Integral de la función de Gauss desde 0 a <varname>x</varname> (área debajo de la curva normal).</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Prime_factor">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/PrimeFactor.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-GaussFunction"/>GaussFunction</term>
         <listitem>
          <synopsis>GaussFunction (x,sigma)</synopsis>
          <para>La función de distribución Gausiana normalizada (la curva normal).</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Prime_factor">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/PrimeFactor.html">Mathworld</ulink> para obtener más información.</para>

         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Median"/>Median</term>
         <listitem>
          <synopsis>Median (m)</synopsis>
          <para>Alias: <function>median</function></para>
          <para>Calcular la mediana de una matriz entera.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Atan2">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/InverseTangent.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PopulationStandardDeviation"/>PopulationStandardDeviation</term>
         <listitem>
          <synopsis>PopulationStandardDeviation (m)</synopsis>
          <para>Alias: <function>stdevp</function></para>
          <para>Calcular la desviación de población típica de una matriz completa.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RowAverage"/>RowAverage</term>
         <listitem>
          <synopsis>RowAverage (m)</synopsis>
          <para>Alias: <function>RowMean</function></para>
	  <para>Calcular la media de cada fila de una matriz. Es decir, calcula la media aritmética.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Atan2">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/InverseTangent.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RowMedian"/>RowMedian</term>
         <listitem>
          <synopsis>RowMedian (m)</synopsis>
          <para>Calcular la mediana de cada fila en una matriz y devolver una vector columna de las medianas.</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Atan2">Wikipedia</ulink> o <ulink url="http://mathworld.wolfram.com/InverseTangent.html">Mathworld</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RowPopulationStandardDeviation"/>RowPopulationStandardDeviation</term>
         <listitem>
          <synopsis>RowPopulationStandardDeviation (m)</synopsis>
          <para>Alias: <function>rowstdevp</function></para>
          <para>Calcular la desviación típica de las columnas de una matriz y devuelve una matriz columna.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-RowStandardDeviation"/>RowStandardDeviation</term>
         <listitem>
          <synopsis>RowStandardDeviation (m)</synopsis>
          <para>Alias: <function>rowstdev</function></para>
          <para>Calcular la desviación estándar de las filas de una matriz y devuelve una matriz columna.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
	 <term><anchor id="gel-function-StandardDeviation"/>StandardDeviation</term>
         <listitem>
          <synopsis>StandardDeviation (m)</synopsis>
          <para>Alias: <function>stdev</function></para>
          <para>Calcular la desviación estándar de una matriz entera.</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-polynomials">
      <title>Polinomios</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-AddPoly"/>AddPoly</term>
         <listitem>
          <synopsis>AddPoly (p1,p2)</synopsis>
          <para>Suma dos polinomios (vectores).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-DividePoly"/>DividePoly</term>
         <listitem>
          <synopsis>DividePoly (p,q,&amp;r)</synopsis>
          <para>Dividir dos polinomios (como vectores) utilizando la división larga. Devuelve el cociente de los dos polinomios. El argumento opcional <varname>r</varname> se utiliza para devolver el residuo. El residuo tendrá el grado más bajo que <varname>q</varname>.</para>
          <para>Consulte <ulink url="http://planetmath.org/PolynomialLongDivision">Planetmath</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsPoly"/>IsPoly</term>
         <listitem>
          <synopsis>IsPoly (p)</synopsis>
          <para>Comprobar si un vector se puede usar como un polinomio.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MultiplyPoly"/>MultiplyPoly</term>
         <listitem>
          <synopsis>MultiplyPoly (p1,p2)</synopsis>
          <para>Multiplica dos polinomios (como vectores).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-NewtonsMethodPoly"/>NewtonsMethodPoly</term>
         <listitem>
          <synopsis>NewtonsMethodPoly (poly,guess,epsilon,maxn)</synopsis>
	  <para>Encontrar una raíz de un polinomio utilizando el método de Newton. La variable <varname>poly</varname> es el polinomio en forma vectorial y <varname>guess</varname> es la suposición inicial. La función devuelve después dos valores sucesivos que están dentro de los límites que marca <varname>epsilon</varname> o después de <varname>maxn</varname> iteraciones en cuyo caso devuelve <constant>null</constant> indicando un fallo.</para>
	  <para>Consulte también <link linkend="gel-function-NewtonsMethod"><function>NewtonsMethod</function></link>.</para>
	  <para lang="en">
	    Example to find the square root of 10:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>NewtonsMethodPoly([-10,0,1],3,10^-10,100)</userinput>
</screen>
	  </para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Newtons_method">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Poly2ndDerivative"/>Poly2ndDerivative</term>
         <listitem>
          <synopsis>Poly2ndDerivative (p)</synopsis>
          <para>Tomar la derivada segunda (como vector) polinómico.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PolyDerivative"/>PolyDerivative</term>
         <listitem>
          <synopsis>PolyDerivative (p)</synopsis>
          <para>Tomar la derivada (como vector) polinómico.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PolyToFunction"/>PolyToFunction</term>
         <listitem>
          <synopsis>PolyToFunction (p)</synopsis>
          <para>Extraer una función de un polinomio (como vector).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PolyToString"/>PolyToString</term>
         <listitem>
          <synopsis>PolyToString (p,var...)</synopsis>
          <para>Extraer una cadena de un polinomio (como vector).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SubtractPoly"/>SubtractPoly</term>
         <listitem>
          <synopsis>SubtractPoly (p1,p2)</synopsis>
          <para>Restar dos polinomios (como vectores).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-TrimPoly"/>TrimPoly</term>
         <listitem>
          <synopsis>TrimPoly (p)</synopsis>
          <para>Eliminar ceros de un polinomio (como vector).</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-set-theory">
      <title>Teoría de conjuntos</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-Intersection"/>Intersection</term>
         <listitem>
          <synopsis>Intersection (X,Y)</synopsis>
          <para>Devuelve la intersección de X e Y (X e Y son vectores que se tratan como conjuntos).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsIn"/>IsIn</term>
         <listitem>
          <synopsis>IsIn (x,X)</synopsis>
	  <para>Devuelve <constant>true</constant> si <literal>X</literal> es un subconjunto de <literal>Y</literal> (<literal>X</literal> e <literal>Y</literal> son vectores que se tratan como conjuntos).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-IsSubset"/>IsSubset</term>
         <listitem>
          <synopsis>IsSubset (X, Y)</synopsis>
	  <para>Devuelve <constant>true</constant> si <literal>X</literal> es un subconjunto de <literal>Y</literal> (<literal>X</literal> e <literal>Y</literal> son vectores que se tratan como conjuntos).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MakeSet"/>MakeSet</term>
         <listitem>
          <synopsis>MakeSet (X)</synopsis>
          <para>Devuelve un vector donde cada elemento de X aparece una sola vez.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SetMinus"/>SetMinus</term>
         <listitem>
          <synopsis>SetMinus (X,Y)</synopsis>
          <para>Devuelve un conjunto teorético de diferencia X-Y (X e Y son vectores que pretender ser conjuntos).</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-Union"/>Union</term>
         <listitem>
          <synopsis>Union (X,Y)</synopsis>
          <para>Devuelve la unión de X e Y (X e Y son vectores que se tratan como conjuntos).</para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-commutative-algebra">
      <title>Álgebra conmutativa</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-MacaulayBound"/>MacaulayBound</term>
         <listitem>
          <synopsis>MacaulayBound (c,d)</synopsis>
          <para>Para una función de Hilbert que es c de grado d, dada la función de Macaulay obligado por la función de Hilbert de grado d+1 (el c^&lt;d&gt; operador de la prueba de Green).</para>
	  <para>Desde la versión 1.0.15 en adelante.</para>
         </listitem>
        </varlistentry>
	
        <varlistentry>
         <term><anchor id="gel-function-MacaulayLowerOperator"/>MacaulayLowerOperator</term>
         <listitem>
          <synopsis>MacaulayLowerOperator (c,d)</synopsis>
          <para>El operador c_&lt;d&gt; de la prueba de Green del teorema de Macaulay.</para>
	  <para>Desde la versión 1.0.15 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-MacaulayRep"/>MacaulayRep</term>
         <listitem>
          <synopsis>MacaulayRep (c,d)</synopsis>
          <para>Devolver la representación dth de Macaulay de un entero positivo c.</para>
	  <para>Desde la versión 1.0.15 en adelante.</para>
         </listitem>
        </varlistentry>
      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-miscellaneous">
      <title>Miscelánea</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-ASCIIToString"/>ASCIIToString</term>
         <listitem>
          <synopsis>ASCIIToString (vec)</synopsis>
          <para>Convierte un vector de valores ASCII en una cadena. Consulte <link linkend="gel-function-StringToASCII"><function>StringToASCII</function></link> para más información.</para>
          <para lang="en">
	    Example:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>ASCIIToString([97,98,99])</userinput>
= "abc"
</screen>
          </para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Denominator">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-AlphabetToString"/>AlphabetToString</term>
         <listitem>
          <synopsis>AlphabetToString (vec,alfabeto)</synopsis>
	  <para>Convertir un vector de valores alfanuméricos en base 0 (posiciones alfanuméricas de la cadena) a una cadena. Un <constant>null</constant> vector da como resultado una cadena vacía. Consulte mas información en <link linkend="gel-function-StringToAlphabet"><function>StringToAlphabet</function></link>.</para>
          <para lang="en">
	    Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>AlphabetToString([1,2,3,0,0],"abcd")</userinput>
= "bcdaa"
<prompt>genius&gt;</prompt> <userinput>AlphabetToString(null,"abcd")</userinput>
= ""
</screen>
          </para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-StringToASCII"/>StringToASCII</term>
         <listitem>
          <synopsis>StringToASCII (cad)</synopsis>
	  <para>Convertir una cadena a un vector (fila) de valores ASCII. Consulte también <link linkend="gel-function-ASCIIToString"><function>ASCIIToString</function></link>.</para>
          <para lang="en">
	    Example:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>StringToASCII("abc")</userinput>
= [97, 98, 99]
</screen>
          </para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Denominator">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-StringToAlphabet"/>StringToAlphabet</term>
         <listitem>
          <synopsis>StringToAlphabet (str,alfabeto)</synopsis>
	  <para>Convierte una cadena a un (fila) vector de valores alfabeticos en base 0 (posiciones en la cadena alfabetica), siendo  -1 para caracteres desconocidos. Una cadena vacía será el resultado de una constante <constant>null</constant>. Consulte para más información en <link linkend="gel-function-AlphabetToString"><function>AlphabetToString</function></link>.</para>
          <para lang="en">
	    Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>StringToAlphabet("cca","abcd")</userinput>
= [2, 2, 0]
<prompt>genius&gt;</prompt> <userinput>StringToAlphabet("ccag","abcd")</userinput>
= [2, 2, 0, -1]
</screen>
          </para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-symbolic">
      <title>Operaciones simbólicas</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-SymbolicDerivative"/>SymbolicDerivative</term>
         <listitem>
          <synopsis>SymbolicDerivative (f)</synopsis>
          <para>Intentar diferenciar simbólicamente la función «f», donde «f» es una función de una variable.</para>
          <para lang="en">
	    Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>SymbolicDerivative(sin)</userinput>
= (`(x)=cos(x))
<prompt>genius&gt;</prompt> <userinput>SymbolicDerivative(`(x)=7*x^2)</userinput>
= (`(x)=(7*(2*x)))
</screen>
          </para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Derivative">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SymbolicDerivativeTry"/>SymbolicDerivativeTry</term>
         <listitem>
          <synopsis>SymbolicDerivativeTry (f)</synopsis>
	  <para>Intentar diferenciar simbólicamente la función f, donde f es una función de una variable, devuelve <constant>null</constant> si no es satisfactoria pero es silenciosa. (Consulte <link linkend="gel-function-SymbolicDerivative"><function>SymbolicDerivative</function></link>)</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Derivative">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SymbolicNthDerivative"/>SymbolicNthDerivative</term>
         <listitem>
          <synopsis>SymbolicNthDerivative (f,n)</synopsis>
          <para>Intentar diferenciar simbólicamente una función n veces. (Consulte <link linkend="gel-function-SymbolicDerivative"><function>SymbolicDerivative</function></link>)</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Derivative">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SymbolicNthDerivativeTry"/>SymbolicNthDerivativeTry</term>
         <listitem>
          <synopsis>SymbolicNthDerivativeTry (f,n)</synopsis>
	  <para>Intentar diferenciar simbólicamente una función n veces de manera silenciosa y devolver <constant>null</constant> en caso de fallo. (Consulte <link linkend="gel-function-SymbolicNthDerivative"><function>SymbolicNthDerivative</function></link>)</para>
          <para>Consulte la <ulink url="https://en.wikipedia.org/wiki/Derivative">Wikipedia</ulink> para obtener más información.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SymbolicTaylorApproximationFunction"/>SymbolicTaylorApproximationFunction</term>
         <listitem>
          <synopsis>SymbolicTaylorApproximationFunction (f,x0,n)</synopsis>
	  <para>Intenta construir la aproximación de Taylor alrededor de x0 hasta grado n. (Consulte <link linkend="gel-function-SymbolicDerivative"><function>SymbolicDerivative</function></link>)</para>
         </listitem>
        </varlistentry>
      </variablelist>
    </sect1>

    <sect1 id="genius-gel-function-list-plotting">
      <title>Dibujar</title>
      <variablelist>
        <varlistentry>
         <term><anchor id="gel-function-ExportPlot"/>ExportPlot</term>
         <listitem>
          <synopsis>ExportPlot (archivo,tipo)</synopsis>
          <synopsis>ExportPlot (archivo)</synopsis>
          <para>Exportar el contenido de la ventana de dibujado a un archivo. El tipo es una cadena que especifica el tipo de archivo que usar, «png», «eps» o «ps». Si no se especifica el tipo, se toma a partir de la extensión, en cuyo caso debe ser«.png», «.eps» o «.ps».</para>
	  <para>Tenga en cuneta que los archivos se sobreescriben sin preguntar.</para>
	  <para>Al exportar correctamente, se devuelve. Si falla algo, se muestra un error y se eleva una excepción.</para>
          <para lang="en">
	    Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>ExportPlot("file.png")</userinput>
<prompt>genius&gt;</prompt> <userinput>ExportPlot("/directory/file","eps")</userinput>
</screen>
          </para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LinePlot"/>LinePlot</term>
         <listitem>
          <synopsis>LinePlot (func1,func2,func3,...)</synopsis>
          <synopsis>LinePlot (func1,func2,func3,x1,x2)</synopsis>
          <synopsis>LinePlot (func1,func2,func3,x1,x2,y1,y2)</synopsis>
          <synopsis>LinePlot (func1,func2,func3,[x1,x2])</synopsis>
          <synopsis>LinePlot (func1,func2,func3,[x1,x2,y1,y2])</synopsis>
          <para>Dibujar una función (o varias funciones) con una línea. Los 10 primeros argumentos son funciones, entonces opcionalmente puede especificar los límites de las gráficas como <varname>x1</varname>, <varname>x2</varname>, <varname>y1</varname>, <varname>y2</varname>. Si no se especifican los límites, entonces se aplican los límites actuales (Consulte <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>). Si no se especifican los límites de y, las funciones se calculan y se usan las áreas máxima y mínima.</para>
          <para>El parámetro <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link> controla el dibujado de la leyenda.</para>
          <para lang="en">
	    Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>LinePlot(sin,cos)</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlot(`(x)=x^2,-1,1,0,1)</userinput>
</screen>
          </para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LinePlotClear"/>LinePlotClear</term>
         <listitem>
          <synopsis>LinePlotClear ()</synopsis>
          <para>Muestra la ventana de dibujo lineal y limpia las funciones y otras líneas que se hubiesen dibujado.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LinePlotCParametric"/>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>Dibujar una función valorada paramétrica compleja con una línea. Primero vienen las funciones que devuelven <computeroutput>x+iy</computeroutput>, luego, opcionalmente, los <varname>t</varname> límites como <userinput>t1,t2,tinc</userinput>, y límites como <userinput>x1,x2,y1,y2</userinput>.</para>
	  <para>Si los límites no se especifican, entonces se aplican las configuraciones actuales (Consulte <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>). Si en lugar de la cadena se da el valor «fit» para los límites x e y, los límites son la medida máxima de la gráfica.</para>
          <para>El parámetro <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link> controla el dibujado de la leyenda.</para>
         </listitem>
        </varlistentry>


        <varlistentry>
         <term><anchor id="gel-function-LinePlotDrawLine"/>LinePlotDrawLine</term>
         <listitem>
          <synopsis>LinePlotDrawLine (x1,y1,x2,y2,...)</synopsis>
          <synopsis>LinePlotDrawLine (v,...)</synopsis>
          <para>Dibuja una línea desde <varname>x1</varname>,<varname>y1</varname> a <varname>x2</varname>,<varname>y2</varname>. Es posible reemplazar <varname>x1</varname>,<varname>y1</varname>, <varname>x2</varname>,<varname>y2</varname> por una matriz de <varname>n</varname> por 2 para obtener una curva poligonal de mayor longitud. También el vector <varname>v</varname> puede ser un vector columna de números complejos, esto es una matriz <varname>n</varname> por 1 y cada número complejo se considera un punto en el plano.</para>
          <para>Se pueden añadir parámetros adicionales para especificar el color de la línea, ancho, flechas, ventanas de dibujado o leyendas. Puede modificarlo añadiendo un valor a <userinput>«color»</userinput>, <userinput>«ancho»</userinput>, <userinput>«ventana»</userinput>, <userinput>«flecha»</userinput>, o <userinput>«leyenda»</userinput>, y después especificar su color, la anchura, la ventana como 4 vectores, tipo de flecha, o la leyenda. (Flecha y ventana están desde la versión 1.0.6 y posteriores.)</para>
	  <para>Si la línea se considera como un polígono relleno, relleno con el color dado, se puede especificar el argumento <userinput>«llenado»</userinput>. Desde la versión 1.0.22 en adelante.</para>
    	  <para>La denominación del color debe ser una cadena que identifique al color según el diccionario inglés que GTK reconocerá como <userinput>«red»</userinput>, <userinput>«blue»</userinput>, <userinput>«yellow»</userinput>, etc... De forma alternativa el color se puede especificar en formato RGB como por ejemplo <userinput>«#rgb»</userinput>, <userinput>«#rrggbb»</userinput>, o <userinput>«#rrrrggggbbbb»</userinput>, donde r, g, o b son dígitos hexadecimales de los colores rojo, verde y azul (red, green, blue) . Finalmente, desde la versión 1.0.18, los colores se pueden especificar como vectores siendo el rojo, verde y azul componentes con valores que solo pueden ser 0 o 1. Por ejemplo: <userinput>[1.0,0.5,0.1]</userinput>.</para>
    	  <para>Los valores de entrada de la ventana deben ser del tipo <userinput>[x1,x2,y1,y2]</userinput>, o bien, pueden ser una cadena <userinput>«ajuste»</userinput>, en cualquier caso, el rango de x se establecerá con precisión y el rango y se puede ajustar con cinco por ciento alrededor del borde de la línea.</para>
    	  <para>La especificación para la flecha debería ser <userinput>«origen»</userinput>, <userinput>«fin»</userinput>, <userinput>«ambos»</userinput>, o <userinput>«ninguno»</userinput>.</para>
    	  <para>Finalmente, la leyenda debería ser una cadena que se pueda utilizar como leyenda en un gráfico. Es decir, si se imprimen las leyendas.</para>
	  <para lang="en">
	  Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine(0,0,1,1,"color","blue","thickness",3)</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine([0,0;1,-1;-1,-1])</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine([0,0;1,1],"arrow","end")</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine(RungeKuttaFull(`(x,y)=y,0,0.001,10,100),"color","blue","legend","The Solution")</userinput>
<prompt>genius&gt;</prompt> <userinput>for r=0.0 to 1.0 by 0.1 do LinePlotDrawLine([0,0;1,r],"color",[r,(1-r),0.5],"window",[0,1,0,1])</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawLine([0,0;10,0;10,10;0,10],"filled","color","green")</userinput>
</screen>
          </para>
	  <para>A diferencia de muchas otras funciones que no les importa si toman una columna o un vector fila, si se especifican puntos como un vector de valores complejos, debido a las posibles ambigüedades, es preferible que sea un vector columna.</para>
	  <para>La especificación de <varname>v</varname> como un vector columna de números complejos, se implementa desde la versión 1.0.22 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LinePlotDrawPoints"/>LinePlotDrawPoints</term>
         <listitem>
          <synopsis>LinePlotDrawPoints (x,y,...)</synopsis>
          <synopsis>LinePlotDrawPoints (v,...)</synopsis>
          <para>Dibuja un punto en <varname>x</varname>,<varname>y</varname>. La entrada puede ser una matriz <varname>n</varname> por 2  para <varname>n</varname> puntos diferentes. Esta función es esencialmente la misma entrada que <link linkend="gel-function-LinePlotDrawLine">LinePlotDrawLine</link>. De forma alternativa, el vector <varname>v</varname> puede ser un vector columna de números complejos, esto es una matriz <varname>n</varname> por 1 y cada número complejo se considera un punto en el plano.</para>
          <para>Se pueden añadir parámetros adicionales para especificar el color, ancho, ventanas de dibujado o leyendas. Puede modificarlo añadiendo la palabra <userinput>«color»</userinput>, <userinput>«ancho»</userinput>, <userinput>«ventana»</userinput>, o <userinput>«leyenda»</userinput>, y después especificar su color, la anchura, la ventana como 4 vectores, o la leyenda.</para>
    	  <para>La denominación del color debe ser una cadena que identifique al color según el diccionario inglés que GTK reconocerá como <userinput>«red»</userinput>, <userinput>«blue»</userinput>, <userinput>«yellow»</userinput>, etc... De forma alternativa el color se puede especificar en formato RGB como por ejemplo <userinput>«#rgb»</userinput>, <userinput>«#rrggbb»</userinput>, o <userinput>«#rrrrggggbbbb»</userinput>, donde r, g, o b son dígitos hexadecimales de los colores rojo, verde y azul (red, green, blue) . Finalmente los colores se pueden especificar como vectores siendo el rojo, verde y azul componentes con valores que solo pueden ser 0 o 1.</para>
    	  <para>Los valores de entrada de la ventana deben ser del tipo <userinput>[x1,x2,y1,y2]</userinput>, o bien, pueden ser una cadena <userinput>«ajuste»</userinput>, en cualquier caso, el rango de x se establecerá con precisión y el rango y se puede ajustar con cinco por ciento alrededor del borde de la línea.</para>
    	  <para>Finalmente, la leyenda debería ser una cadena que se pueda utilizar como leyenda en un gráfico. Es decir, si se imprimen las leyendas.</para>
	  <para lang="en">
	  Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>LinePlotDrawPoints(0,0,"color","blue","thickness",3)</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawPoints([0,0;1,-1;-1,-1])</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawPoints(RungeKuttaFull(`(x,y)=y,0,0.001,10,100),"color","blue","legend","The Solution")</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawPoints([1;1+1i;1i;0],"thickness",5)</userinput>
<prompt>genius&gt;</prompt> <userinput>LinePlotDrawPoints(ApplyOverMatrix((0:6)',`(k)=exp(k*2*pi*1i/7)),"thickness",3,"legend","The 7th roots of unity")</userinput>
</screen>
          </para>
	  <para>A diferencia de muchas otras funciones que no les importa si toman una columna o un vector fila, si se especifica los puntos como un vector de valores complejos, debido a las posibles ambigüedades, siempre debe ser suministrado como un vector columna. Por lo tanto, la notificación en el último ejemplo la transpuesta del vector <userinput>0:6</userinput> para convertirlo en un vector columna.</para>
	  <para>Disponible desde la versión 1.0.18 en adelante. La especificación de <varname>v</varname> como un vector columna de números complejos, se implementa desde la versión 1.0.22 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LinePlotMouseLocation"/>LinePlotMouseLocation</term>
         <listitem>
          <synopsis>LinePlotMouseLocation ()</synopsis>
          <para>Devuelve un vector fila de un punto de la línea de la pantalla de dibujado correspondiente a la ubicación actual del ratón. Si la trama de línea no es visible, entonces imprime un error y devuelve <constant> null </constant>. En este caso se debe ejecutar <link linkend="gel-function-LinePlot"><function>LinePlot</function></link> o <link linkend="gel-function-LinePlotClear"><function>LinePlotClear</function></link> para poner la ventana en el modo de dibujado de lineas. Consulte también <link linkend="gel-function-LinePlotWaitForClick"><function>LinePlotWaitForClick</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LinePlotParametric"/>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>
          <synopsis>LinePlotParametric (xfunc,yfunc,t1,t2,tinc,[x1,x2,y1,y2])</synopsis>
          <synopsis>LinePlotParametric (xfunc,yfunc,t1,t2,tinc,"fit")</synopsis>
          <para>Dibujar una función paramétrica con una línea. Primero vienen las funciones para <varname>x</varname> e <varname>y</varname> luego opcionalmente los <varname>t</varname> límites como <userinput>t1,t2,tinc</userinput>, y luego, opcionalmente, los límites como <userinput>x1,x2,y1,y2</userinput>.</para>
	  <para>Si no se especifican los límites x e y, entonces se aplican las configuraciones actuales (Consulte <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>). Si en lugar de la cadena se da el valor «fit» para los límites x e y, los límites son la medida máxima de la gráfica.</para>
          <para>El parámetro <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link> controla el dibujado de la leyenda.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-LinePlotWaitForClick"/>LinePlotWaitForClick</term>
         <listitem>
          <synopsis>LinePlotWaitForClick ()</synopsis>
          <para>Si está en el modo de dibujado de lineas, espera por un clic en la ventana de dibujado de lineas y devuelve la ubicación del clic como un vector fila. Si se cierra la ventana de la función devuelve inmediatamente con <constant>null</constant>. Si la ventana no está en modo de dibujado de lineas, esta se pone de forma automática. Consulte también <link linkend="gel-function-LinePlotMouseLocation"><function>LinePlotMouseLocation</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PlotCanvasFreeze"/>PlotCanvasFreeze</term>
         <listitem>
          <synopsis>PlotCanvasFreeze ()</synopsis>
          <para>Congela el dibujo en el lienzo de dibujado de forma temporal. Esto es útil si necesita dibujar un grupo de elementos y quiere demorar el dibujado para no permitir el parpadeo de una animación. Después de terminar con el dibujo debería descongelar el lienzo de dibujado llamando a la función <link linkend="gel-function-PlotCanvasThaw"><function>PlotCanvasThaw</function></link>.</para>
          <para>El lienzo está siempre desbloqueado hasta el final de cualquier proceso, así que nunca permanece bloqueado. El momento en que se muestra una nueva línea de comandos, por ejemplo, el lienzo de dibujado se descongela automáticamente. También tenga en cuenta que las llamadas a congelar y descongelar puede anidarse de manera segura.</para>
	  <para>Desde la versión 1.0.18 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PlotCanvasThaw"/>PlotCanvasThaw</term>
         <listitem>
          <synopsis>PlotCanvasThaw ()</synopsis>
          <para>Descongela el lienzo de dibujado congelado por la función <link linkend="gel-function-PlotCanvasFreeze"><function>PlotCanvasFreeze</function></link> y volver a dibujar el lienzo inmediatamente. El lienzo también se descongelará al finalizar la ejecución de cualquier programa.</para>
	  <para>Desde la versión 1.0.18 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-PlotWindowPresent"/>PlotWindowPresent</term>
         <listitem>
          <synopsis>PlotWindowPresent ()</synopsis>
          <para>Muestra y eleva la ventana de dibujo, creándola si es necesario. Normalmente, la ventana se crea cuando se invoca a una de las funciones de dibujo, pero no siempre la eleva si está debajo de otra ventana. Esta función es buena para utilizar en un archivo de órdenes llamado «script» en inglés, donde la ventana de dibujo ha sido creada anteriormente, y por ahora, oculta detrás de la consola u otras ventanas.</para>
	  <para>Desde la versión 1.0.19 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SlopefieldClearSolutions"/>SlopefieldClearSolutions</term>
         <listitem>
          <synopsis>SlopefieldClearSolutions ()</synopsis>
          <para>Borra las soluciones elaboradas por la función <link linkend="gel-function-SlopefieldDrawSolution"><function>SlopefieldDrawSolution</function></link>.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SlopefieldDrawSolution"/>SlopefieldDrawSolution</term>
         <listitem>
          <synopsis>SlopefieldDrawSolution (x, y, dx)</synopsis>
          <para>Cuando un campo de dibujo de gráficas está activo, dibuja una solución con las condiciones iniciales especificas. El método estándar de Runge-Kutta se usa con incremento <varname>dx</varname>. Las soluciones permanecen en la gráfica hasta que se muestre un dibujo diferente o se llame a <link linkend="gel-function-SlopefieldClearSolutions"><function>SlopefieldClearSolutions</function></link>. También puede utilizar la interfaz gráfica para dibujar soluciones y especificar las condiciones iniciales con el ratón.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SlopefieldPlot"/>SlopefieldPlot</term>
         <listitem>
          <synopsis>SlopefieldPlot (func)</synopsis>
          <synopsis>SlopefieldPlot (func,x1,x2,y1,y2)</synopsis>
          <para>Dibujar un campo inclinado. La función <varname>func</varname> tomará dos números reales <varname>x</varname> e <varname>y</varname>, o un número complejo. De manera opcional se especificarán los límites de la ventana de dibujo con <varname>x1</varname>, <varname>x2</varname>, <varname>y1</varname>, <varname>y2</varname>. Si no se especifica ningún límite, se aplicarán los que estén configurados actualmente (Consulte <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>).</para>
          <para>El parámetro <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link> controla el dibujado de la leyenda.</para>
          <para lang="en">
	    Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>SlopefieldPlot(`(x,y)=sin(x-y),-5,5,-5,5)</userinput>
</screen>
          </para>
         </listitem>
        </varlistentry>

	<varlistentry>
	 <term><anchor id="gel-function-SurfacePlot"/>SurfacePlot</term>
         <listitem>
          <synopsis>SurfacePlot (func)</synopsis>
          <synopsis>SurfacePlot (func,x1,x2,y1,y2,z1,z2)</synopsis>
          <synopsis>SurfacePlot (func,x1,x2,y1,y2)</synopsis>
          <synopsis>SurfacePlot (func,[x1,x2,y1,y2,z1,z2])</synopsis>
          <synopsis>SurfacePlot (func,[x1,x2,y1,y2])</synopsis>
          <para>Dibujar una función superficial que tome entre dos argumentos o un número complejo. Primero vienen las funciones que las limitan de forma opcional <varname>x1</varname>, <varname>x2</varname>, <varname>y1</varname>, <varname>y2</varname>, <varname>z1</varname>, <varname>z2</varname>. Si no se especifican los límites, entonces las configuraciones actuales se aplicarán (Consulte <link linkend="gel-function-SurfacePlotWindow"><function>SurfacePlotWindow</function></link>). Genius sólo puede dibujar una función superficial sencilla por el momento.</para>
          <para>Si no se especifican los límites de z, se usan los valores máximo y mínimo de la función.</para>
          <para lang="en">
	    Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>SurfacePlot(|sin|,-1,1,-1,1,0,1.5)</userinput>
<prompt>genius&gt;</prompt> <userinput>SurfacePlot(`(x,y)=x^2+y,-1,1,-1,1,-2,2)</userinput>
<prompt>genius&gt;</prompt> <userinput>SurfacePlot(`(z)=|z|^2,-1,1,-1,1,0,2)</userinput>
</screen>
          </para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SurfacePlotClear"/>SurfacePlotClear</term>
         <listitem>
          <synopsis>SurfacePlotClear ()</synopsis>
          <para>Muestra la ventana de dibujo lineal y limpia las funciones y otras líneas que se hubiesen dibujado.</para>
          <para>Disponible en la versión 1.0.19 y posteriores.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SurfacePlotData"/>SurfacePlotData</term>
         <listitem>
          <synopsis>SurfacePlotData (datos)</synopsis>
          <synopsis>SurfacePlotData (datos,etiqueta)</synopsis>
          <synopsis>SurfacePlotData (datos,x1,x2,y1,y2,z1,z2)</synopsis>
          <synopsis>SurfacePlotData (datos,etiqueta,x1,x2,y1,y2,z1,z2)</synopsis>
          <synopsis>SurfacePlotData (datos,[x1,x2,y1,y2,z1,z2])</synopsis>
          <synopsis>SurfacePlotData (datos,etiqueta,[x1,x2,y1,y2,z1,z2])</synopsis>
          <para>Dibujar una superficie a partir de los datos. Los datos son una matriz de n x 3 cuyas filas son las coordenadas x, y, z. Los datos pueden ser un vector cuya longitud sea múltiplo de 3 y que contenga los triples de x, y z. Los datos deben contener al menos 3 puntos.</para>
          <para>Opcionalmente, se pueden indicar una etiqueta y los límites. Si no se indican los límites, se calculan a partir de los datos, no se usa <link linkend="gel-function-SurfacePlotWindow"><function>SurfacePlotWindow</function></link> pero, si quiere usarla, debe pasarla explícitamente. Si no se indica una etiqueta, se usa una etiqueta vacía.</para>
          <para lang="en">
	    Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>SurfacePlotData([0,0,0;1,0,1;0,1,1;1,1,3])</userinput>
<prompt>genius&gt;</prompt> <userinput>SurfacePlotData(data,"My data")</userinput>
<prompt>genius&gt;</prompt> <userinput>SurfacePlotData(data,-1,1,-1,1,0,10)</userinput>
<prompt>genius&gt;</prompt> <userinput>SurfacePlotData(data,SurfacePlotWindow)</userinput>
</screen>
          </para>
	  <para lang="en">
		  Here's an example of how to plot in polar coordinates,
		  in particular how to plot the function
		  <userinput>-r^2 * theta</userinput>:
          <screen lang="en"><prompt>genius&gt;</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&gt;</prompt> <userinput>SurfacePlotData(d)</userinput>
</screen>
          </para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SurfacePlotDataGrid"/>SurfacePlotDataGrid</term>
         <listitem>
          <synopsis>SurfacePlotDataGrid (datos,[x1,x2,y1,y2])</synopsis>
          <synopsis>SurfacePlotDataGrid (datos,[x1,x2,y1,y2,z1,z2])</synopsis>
          <synopsis>SurfacePlotDataGrid (datos,[x1,x2,y1,y2],etiqueta)</synopsis>
          <synopsis>SurfacePlotDataGrid (datos,[x1,x2,y1,y2,z1,z2],etiqueta)</synopsis>
          <para>Dibujar una superficie a partir de datos rectangulares regulares. Los datos se dan en una matriz matriz de n x m donde las filas son la coordenada x y las columnas son la coordenada y. La coordenada x se divide en n-1 subintervalos iguales y la coordenada y se divide en m-1 subintervalos iguales. Los límites <varname>x1</varname> y <varname>x2</varname> dan el intervalo en el eje x usado y los límites <varname>y1</varname> e <varname>y2</varname> dan el intervalo en el eje y usado. Si los límites <varname>z1</varname> y <varname>z2</varname> no se indican, se calculan a partir de los datos (para obtener valores extremos de los datos).</para>
          <para>Opcionalmente se puede indicar la etiqueta; si no se indica ninguna, se unas una etiqueta vacía.</para>
          <para lang="en">
	    Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>SurfacePlotDataGrid([1,2;3,4],[0,1,0,1])</userinput>
<prompt>genius&gt;</prompt> <userinput>SurfacePlotDataGrid(data,[-1,1,-1,1],"My data")</userinput>
<prompt>genius&gt;</prompt> <userinput>d:=null; for i=1 to 20 do for j=1 to 10 do d@(i,j) = (0.1*i-1)^2-(0.1*j)^2;</userinput>
<prompt>genius&gt;</prompt> <userinput>SurfacePlotDataGrid(d,[-1,1,0,1],"half a saddle")</userinput>
</screen>
          </para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SurfacePlotDrawLine"/>SurfacePlotDrawLine</term>
         <listitem>
          <synopsis>SurfacePlotDrawLine (x1,y1,z1,x2,y2,z2,...)</synopsis>
          <synopsis>SurfacePlotDrawLine (v,...)</synopsis>
          <para>Dibuja una línea desde <varname>x1</varname>,<varname>y1</varname>,<varname>z1</varname> hasta <varname>x2</varname>,<varname>y2</varname>,<varname>z2</varname>. <varname>x1</varname>,<varname>y1</varname>,<varname>z1</varname>, <varname>x2</varname>,<varname>y2</varname>,<varname>z2</varname> se puede reemplazar por una matriz de <varname>n</varname> por 3 para obtener una curva poligonal de mayor longitud.</para>
          <para>Se pueden añadir parámetros adicionales para especificar el color de la línea, ancho, ventanas de dibujado o leyendas. Puede modificarlo añadiendo un valor a <userinput>«color»</userinput>, <userinput>«ancho»</userinput>, <userinput>«ventana»</userinput>,o <userinput>«leyenda»</userinput>, y después especificar su color, la anchura, la ventana como 6 vectores, o la leyenda.</para>
    	  <para>La denominación del color debe ser una cadena que identifique al color según el diccionario inglés que GTK reconocerá como <userinput>«red»</userinput>, <userinput>«blue»</userinput>, <userinput>«yellow»</userinput>, etc... De forma alternativa el color se puede especificar en formato RGB como por ejemplo <userinput>«#rgb»</userinput>, <userinput>«#rrggbb»</userinput>, o <userinput>«#rrrrggggbbbb»</userinput>, donde r, g, o b son dígitos hexadecimales de los colores rojo, verde y azul (red, green, blue) . Finalmente, desde la versión 1.0.18, los colores se pueden especificar como vectores siendo el rojo, verde y azul componentes con valores que solo pueden ser 0 o 1. Por ejemplo: <userinput>[1.0,0.5,0.1]</userinput>.</para>
    	  <para>Los valores de entrada de la ventana deben ser del tipo <userinput>[x1,x2,y1,y2,z1,z2]</userinput>, o bien, pueden ser una cadena <userinput>«ajuste»</userinput>, en cualquier caso, el rango de x se establecerá con precisión y el rango y se puede ajustar con cinco por ciento alrededor del borde de la línea.</para>
    	  <para>Finalmente, la leyenda debería ser una cadena que se pueda utilizar como leyenda en un gráfico. Es decir, si se imprimen las leyendas.</para>
	  <para lang="en">
	  Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>SurfacePlotDrawLine(0,0,0,1,1,1,"color","blue","thickness",3)</userinput>
<prompt>genius&gt;</prompt> <userinput>SurfacePlotDrawLine([0,0,0;1,-1,2;-1,-1,-3])</userinput>
</screen>
          </para>
	  <para>Disponible desde la versión 1.0.19 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-SurfacePlotDrawPoints"/>SurfacePlotDrawPoints</term>
         <listitem>
          <synopsis>SurfacePlotDrawPoints (x,y,z,...)</synopsis>
          <synopsis>SurfacePlotDrawPoints (v,...)</synopsis>
          <para>Dibuja un punto en <varname>x</varname>,<varname>y</varname>,<varname>z</varname>. La entrada puede ser una <varname>n</varname> por 3 matriz para <varname>n</varname> puntos diferentes. Esta función es esencialmente la misma entrada que <link linkend="gel-function-SurfacePlotDrawLine">SurfacePlotDrawLine</link>.</para>
          <para>Se pueden añadir parámetros adicionales para especificar el color de la línea, ancho, ventanas de dibujado o leyendas. Puede modificarlo añadiendo un valor a <userinput>«color»</userinput>, <userinput>«ancho»</userinput>, <userinput>«ventana»</userinput>,o <userinput>«leyenda»</userinput>, y después especificar su color, la anchura, la ventana como 6 vectores, o la leyenda.</para>
    	  <para>La denominación del color debe ser una cadena que identifique al color según el diccionario inglés que GTK reconocerá como <userinput>«red»</userinput>, <userinput>«blue»</userinput>, <userinput>«yellow»</userinput>, etc... De forma alternativa el color se puede especificar en formato RGB como por ejemplo <userinput>«#rgb»</userinput>, <userinput>«#rrggbb»</userinput>, o <userinput>«#rrrrggggbbbb»</userinput>, donde r, g, o b son dígitos hexadecimales de los colores rojo, verde y azul (red, green, blue) . Finalmente los colores se pueden especificar como vectores siendo el rojo, verde y azul componentes con valores que solo pueden ser 0 o 1.</para>
    	  <para>Los valores de entrada de la ventana deben ser del tipo <userinput>[x1,x2,y1,y2,z1,z2]</userinput>, o bien, pueden ser una cadena <userinput>«ajuste»</userinput>, en cualquier caso, el rango de x se establecerá con precisión y el rango y se puede ajustar con cinco por ciento alrededor del borde de la línea.</para>
    	  <para>Finalmente, la leyenda debería ser una cadena que se pueda utilizar como leyenda en un gráfico. Es decir, si se imprimen las leyendas.</para>
	  <para lang="en">
	  Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>SurfacePlotDrawPoints(0,0,0,"color","blue","thickness",3)</userinput>
<prompt>genius&gt;</prompt> <userinput>SurfacePlotDrawPoints([0,0,0;1,-1,2;-1,-1,1])</userinput>
</screen>
          </para>
	  <para>Disponible desde la versión 1.0.19 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-VectorfieldClearSolutions"/>VectorfieldClearSolutions</term>
         <listitem>
          <synopsis>VectorfieldClearSolutions ()</synopsis>
          <para>Limpia las soluciones realizadas por la función <link linkend="gel-function-VectorfieldDrawSolution"><function>VectorfieldDrawSolution</function></link>.</para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-VectorfieldDrawSolution"/>VectorfieldDrawSolution</term>
         <listitem>
          <synopsis>VectorfieldDrawSolution (x, y, dt, tlen)</synopsis>
          <para>Cuando un campo de dibujo vectorial está activo, dibuja una solución con las condición específica inicial. El método estándar de Runge-Kutta se utiliza con incremento <varname>dt</varname> para un intervalo de longitud <varname>tlen</varname>. Las soluciones permanecen en la gráfica hasta que se muestra un dibujo diferente o hasta que se llama a <link linkend="gel-function-VectorfieldClearSolutions"><function>VectorfieldClearSolutions</function></link>. Puede también utilizar la gráfica para dibujar soluciones y especificar las condiciones iniciales con el ratón.</para>
	  <para>Desde la versión 1.0.16 en adelante.</para>
         </listitem>
        </varlistentry>

        <varlistentry>
         <term><anchor id="gel-function-VectorfieldPlot"/>VectorfieldPlot</term>
         <listitem>
          <synopsis>VectorfieldPlot (funcx, funcy)</synopsis>
          <synopsis>VectorfieldPlot (funcx, funcy, x1, x2, y1, y2)</synopsis>
          <para>Dibujar un vector bidimensional. La función <varname>funcx</varname> será la dx/dt del campo vectorial y la función <varname>funcy</varname> la dy/dt del campo vectorial. Las funciones tomarán dos números reales <varname>x</varname> e <varname>y</varname>, o un simple número complejo. Cuando el parámetro <link linkend="gel-function-VectorfieldNormalized"><function>VectorfieldNormalized</function></link> es <constant>true</constant>, la magnitud de los vectores se normaliza. Es decir, sólo se muestra la dirección y no la magnitud.</para>
	  <para>De manera opcional puede especificar los límites de la ventana de dibujo como <varname>x1</varname>, <varname>x2</varname>, <varname>y1</varname>, <varname>y2</varname>. Si no se especifican los límites, entonces se aplicará los actuales (Consulte <link linkend="gel-function-LinePlotWindow"><function>LinePlotWindow</function></link>).</para>
          <para>El parámetro <link linkend="gel-function-LinePlotDrawLegends"><function>LinePlotDrawLegends</function></link> controla el dibujado de la leyenda.</para>
          <para lang="en">
	    Examples:
          <screen lang="en"><prompt>genius&gt;</prompt> <userinput>VectorfieldPlot(`(x,y)=x^2-y, `(x,y)=y^2-x, -1, 1, -1, 1)</userinput>
</screen>
          </para>
         </listitem>
        </varlistentry>

      </variablelist>
    </sect1>

  </chapter>

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

    <para lang="en">
Here is a function that calculates factorials:
<programlisting lang="en"><![CDATA[function f(x) = if x <= 1 then 1 else (f(x-1)*x)
]]></programlisting>
    </para>
    <para lang="en">
With indentation it becomes:
<programlisting lang="en"><![CDATA[function f(x) = (
  if x <= 1 then
    1
  else
    (f(x-1)*x)
)
]]></programlisting>
    </para>
    <para lang="en">
This is a direct port of the factorial function from the <application>bc</application> manpage. The syntax seems similar to <application>bc</application>, but different in that in GEL, the last expression is the one that is returned. Using the <literal>return</literal> function instead, it would be:
<programlisting lang="en"><![CDATA[function f(x) = (
  if (x <= 1) then return (1);
  return (f(x-1) * x)
)
]]></programlisting>
    </para>

    <para lang="en">
By far the easiest way to define a factorial function would be using
the product loop as follows.  This is not only the shortest and fastest,
but also probably the most readable version.
<programlisting lang="en">function f(x) = prod k=1 to x do k
</programlisting>
    </para>

    <para lang="en">
Here is a larger example, this basically redefines the internal
<link linkend="gel-function-ref"><function>ref</function></link> function to calculate the row echelon form of a
matrix.  The function <function>ref</function> is built in and much faster,
but this example demonstrates some of the more complex features of GEL.
<programlisting lang="en"><![CDATA[# Calculate the row-echelon form of a matrix
function MyOwnREF(m) = (
  if not IsMatrix(m) or not IsValueOnly(m) then
    (error("MyOwnREF: argument not a value only matrix");bailout);
  s := min(rows(m), columns(m));
  i := 1;
  d := 1;
  while d <= s and i <= columns(m) do (

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

  </chapter>

  <!-- ============= Customization ============================ -->
  <chapter id="genius-prefs"> 
    <title>Configuración</title> 

    <para lang="en">
      To configure <application>Genius Mathematics Tool</application>, choose
      <menuchoice><guimenu>Settings</guimenu>
      <guimenuitem>Preferences</guimenuitem></menuchoice>.
      There are several basic parameters provided by the calculator in addition
      to the ones provided by the standard library.  These control how the
      calculator behaves.
    </para>

    <note>
      <title>Cambiar la configuración con GEL</title>
      <para>Muchas de las configuraciones en Genius son simplemente variables globales, y que se pueden evaluar y asignar de la misma manera que las variables normales. Consulte la <xref linkend="genius-gel-variables"/> sobre evaluar y asignar a variables, y la <xref linkend="genius-gel-function-parameters"/> para una lista de configuraciones que se pueden modificar por este método.</para>
      <para lang="en">
As an example, you can set the maximum number of digits in a result to 12 by typing:
<programlisting lang="en">MaxDigits = 12
</programlisting>
      </para>
    </note>

    <sect1 id="genius-prefs-output"> 
      <title>Salida</title> 
      <variablelist> 
	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Maximum digits to output</guilabel>
      </term> 
	  <listitem>
		  <para>El número máximo de dígitos en un resultado (<link linkend="gel-function-MaxDigits"><function>MaxDigits</function></link>)</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Results as floats</guilabel>
      </term> 
	  <listitem>
		  <para>Indica si los resultados se imprimirán siempre como números flotantes (<link linkend="gel-function-ResultsAsFloats"><function>ResultsAsFloats</function></link>)</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Floats in scientific notation</guilabel>
      </term> 
	  <listitem>
		  <para>Indica si los números flotantes están en notación científica (<link linkend="gel-function-ScientificNotation"><function>ScientificNotation</function></link>)</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Always print full expressions</guilabel>
      </term> 
	  <listitem>
		  <para>Indica si se imprimen expresiones completas para valores de retorno no numéricos (más largos que una línea) (<link linkend="gel-function-FullExpressions"><function>FullExpressions</function></link>))</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Use mixed fractions</guilabel>
      </term> 
	  <listitem>
		  <para>Indica si se imprimen las fracciones como fracciones mixtas utilizando la forma «1 1/3» en vez de «4/3». (<link linkend="gel-function-MixedFractions"><function>MixedFractions</function></link>)</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Display 0.0 when floating point number is less than 10^-x (0=never chop)</guilabel>
      </term> 
	  <listitem>
	  <para>Indica cómo cortar la salida. Pero sólo cuando otros números pueden ser muy grandes. Consulte la documentación del parámetro <link linkend="gel-function-OutputChopExponent"><function>OutputChopExponent</function></link>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term lang="en"> 
            <guilabel>Only chop numbers when another number is greater than 10^-x</guilabel>
      </term> 
	  <listitem>
		  <para>Indica cuándo se corta la salida. Esto lo configura el parámetro <link linkend="gel-function-OutputChopWhenExponent"><function>OutputChopWhenExponent</function></link>. Consulte la documentación del parámetro <link linkend="gel-function-OutputChopExponent"><function>OutputChopExponent</function></link>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Remember output settings across sessions</guilabel>
      </term> 
	  <listitem>
        <para>Indica si la configuración de la salida en el campo <guilabel>Opciones de salida de número/expresión</guilabel> se recordarán para la próxima sesión. No se aplica al campo <guilabel>Opciones de salida de error/información</guilabel>.</para>
	      <para>Si no está activada, se usará el valor predeterminado o cualquier configuración guardada anteriormente cada vez que se inicie Genius. Tenga en cuenta que las configuraciones se guardan al final de la sesión, así que si quiere cambiar los valores predeterminados, active esta casilla, reinicie <application>herramienta matemática Genius</application> y entonces desactive la casilla de nuevo.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Display errors in a dialog</guilabel>
      </term> 
	  <listitem>
        <para>Si se activan, los errores se mostrarán en un diálogo separado, si no se activan, los errores se imprimirán en la consola.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Display information messages in a dialog</guilabel>
      </term> 
	  <listitem>
	<para>Si se activan los mensajes de información se mostraran en un diálogo separado, si no se activan, los mensajes de información se imprimirán en la consola.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Maximum errors to display</guilabel>
      </term> 
	  <listitem>
        <para>El número máximo de errores que devolver por una prueba (<link linkend="gel-function-MaxErrors"><function>MaxErrors</function></link>). Si lo establece a 0, entonces todos los errores se devolverán siempre . En general, si algún bucle causa muchos errores, entonces es poco probable que se de cuenta nada más que de unos pocos fallos, y verá una larga lista de fallos no sirve de mucha ayuda.</para>
	  </listitem>
	</varlistentry>
      </variablelist> 

      <para>Además de estas preferencias, hay algunas preferencias que se pueden cambiar configurándolas en el área de trabajo de la consola. Para otras que puedan afectar a la salida consulte la <xref linkend="genius-gel-function-parameters"/>.</para>

      <variablelist> 
	<varlistentry>
	  <term lang="en"> 
	    <function>IntegerOutputBase</function>
      </term> 
	  <listitem>
        <para>La base que se usará para mostrar enteros</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term lang="en"> 
	    <function>OutputStyle</function>
      </term> 
	  <listitem>
	<para>Una cadena, puede ser <literal>"normal"</literal>, <literal>"latex"</literal>, <literal>"mathml"</literal> o <literal>"troff"</literal> y afectará a cómo se imprimen las matrices (y quizás otras cosas), útil para pegar en documentos. El estilo normal legible para los humanos,es el predeterminado por <application>herramienta matemática Genius</application>. Los otros estilos son para las tipografías de LaTeX, MathML (XML), o en Troff.</para>
	  </listitem>
	</varlistentry>
      </variablelist> 
   </sect1> 

    <sect1 id="genius-prefs-precision"> 
      <title>Precisión</title> 
      <variablelist> 
	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Floating point precision</guilabel>
      </term> 
	  <listitem>
        <para>Indica la precisión en bits de los números en coma flotante (<link linkend="gel-function-FloatPrecision"><function>FloatPrecision</function></link>). Tenga en cuenta que cambiar esto, sólo afecta a las cantidades calculadas más recientes. Los valores antiguos almacenados en variables, obviamente permanecerán en la precisión antigua y si quiere hacerlos más precisos, tendrá que volver a calcularlos. La excepción a esto son las constantes como <link linkend="gel-function-pi"><function>pi</function></link> o <link linkend="gel-function-e"><function>e</function></link>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Remember precision setting across sessions</guilabel>
      </term> 
	  <listitem>
        <para>Indicar si la configuración de la precisión se recordará para la próxima sesión. Si no está activada, la configuración predeterminada o la configuración guardada anteriormente se utilizarán cada vez que Genius se inicie. Tenga en cuenta que las configuraciones se guardan al final de la sesión, así que si quiere cambiar la configuración por defecto, active esta casilla, reinicie Genius y luego vuelva a desactivarla.</para>
	  </listitem>
	</varlistentry>
      </variablelist> 
    </sect1> 

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

      <para>«Terminal» se refiere a la consola en el área de trabajo.</para>

      <variablelist> 
	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Scrollback lines</guilabel>
      </term> 
	  <listitem>
        <para>Líneas de desfile hacia atrás en la terminal.</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Font</guilabel>
      </term> 
	  <listitem>
        <para>La tipografía que usar en la terminal.</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Black on white</guilabel>
      </term> 
	  <listitem>
        <para>Si usar blanco sobre negro en la terminal.</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Blinking cursor</guilabel>
      </term> 
	  <listitem>
        <para>Cuando la terminal tenga el foco, el cursor parpadeará en ella. Puede que a veces resulte molesto y genere tráfico innecesario si ejecuta Genius remotamente.</para>
	  </listitem>
	</varlistentry>
      </variablelist> 
    </sect1> 

    <sect1 id="genius-prefs-memory"> 
      <title>Memoria</title> 
      <variablelist> 
	<varlistentry>
	  <term lang="en"> 
	    <guilabel>Maximum number of nodes to allocate</guilabel>
      </term> 
	  <listitem>
        <para>Internamente, todos los datos se ponen en pequeños nodos en la memoria. Esto da un límite máximo de nodos reservados para el procesado. Esto evita que se quede sin memoria si comete algún error que haga consumir al programa más memoria de lo normal, como podría ser una recursión sin fin. Esto podría ralentizar su máquina y complicar incluso la interrupción del programa.</para>
        <para>Una vez se ha alcanzado el límite, la <application>herramienta matemática Genius</application> preguntará si desea interrumpir el proceso o si desea continuar. Si decide continuar, no se aplicará ningún límite y será posible que su máquina se quede sin memoria. El límite se aplicará en la siguiente ocasión que ejecuté un programa o una expresión en la consola sin importar la respuesta a la pregunta.</para>
        <para>Establecer el límite a cero significa que no hay límite en la cantidad de memoria que usa Genius.</para>
	  </listitem>
	</varlistentry>

      </variablelist> 
    </sect1> 

  </chapter>

<!-- ============= About ====================================== -->
  <chapter id="genius-about"> 
    <title>Acerca de la <application>herramienta matemática Genius</application></title> 

    <para>Jiří (George) Lebl (<email>jirka@5z.com</email>) ha desarrollado la <application>Herramienta matemática Genius</application>. La historia de la <application>herramienta matemática Genius</application> se remonta a 1997. Fue el primer programa calculadora de Gnome, sin embargo evolucionó a algo más que una calculadora de escritorio. Para más información acerca de la <application>herramienta matemática Genius</application>, por favor, visite la <ulink url="http://www.jirka.org/genius.html" type="http">página web de Genius</ulink>.</para>
    <para>Para informar de un error o hacer una sugerencia sobre esta aplicación o sobre este manual, envíe un correo al autor o publique un mensaje en la lista de correo (consulte la página web).</para>

    <para>Este programa se distribuye bajo los términos de la Licencia Pública General GNU (GPL) tal y como fue publicada por la Free Software Foundation, en la versión 3 ó (a su elección) cualquier versión posterior. Una copia de esta licencia puede encontrarse en <ulink url="http://www.gnu.org/copyleft/gpl.html" type="http">link</ulink>, o en el archivo COPYING incluido con el código fuente de este programa.</para>

    <para>Jiří Lebl recibió apoyo parcial de la NSF grant DMS 0900885, DMS 1362337,y la Universidad de Illinois en Urbana-Champaign, la Universidad de California en San Diego, la Universidad de Wisconsin-Madison, y la Universidad del estado de Oklahoma durante el desarrollo del proyecto. El software se ha utilizado tanto para docencia como para investigación.</para>

  </chapter>

</book>
