<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
  <!ENTITY kappname "&kalgebra;">
  <!ENTITY package "kdeedu">
  <!ENTITY % addindex "IGNORE">
  <!ENTITY % English "INCLUDE">
]>

<book lang="&language;">

<bookinfo>
<title>The &kalgebra; Handbook</title>

<authorgroup>
<author>
<firstname>Aleix</firstname>
<surname>Pol</surname>
<affiliation>
<address>&Aleix.Pol.mail;</address>
</affiliation>
</author>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
</authorgroup>

<copyright>
<year>2007</year>
<holder>&Aleix.Pol;</holder>
</copyright>

<legalnotice>&FDLNotice;</legalnotice>


<date>2009-01-28</date>
<releaseinfo>0.8 (&kde; 4.2.0</releaseinfo>

<abstract>
<para>
&kalgebra; is a mathematical calculator based on content markup MathML language.
Nowadays it is capable to make simple MathML operations (arithmetic and logical)
and to representate 2D and 3D graphs. It is actually not necessary to know MathML
to use &kalgebra;.
</para>
</abstract>

<keywordset>
<keyword>KDE</keyword>
<keyword>kdeedu</keyword>
<keyword>graph</keyword>
<keyword>mathematics</keyword>
<keyword>2D</keyword>
<keyword>3D</keyword>
<keyword>mathML</keyword>
</keywordset>

</bookinfo>

<chapter id="introduction"> 
<title>Introduction</title> 
<para>
&kalgebra; is a MathML-based graph calculator. Although it was initially
MathML oriented it can now be used by everyone with little mathematic
knowledge.</para> 

<screenshot>
<screeninfo>Here's a screenshot of &kalgebra; main window</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="kalgebra-main-window.png" format="PNG"/>
	  </imageobject>
	    <textobject>
	    <phrase>&kalgebra; main window</phrase>
	  </textobject>
	</mediaobject>
</screenshot>

<para>
&kalgebra; main window consists in a <guilabel>Console</guilabel> tab, a <guilabel>2D Graph</guilabel> tab, 
a <guilabel>3D Graph</guilabel> tab and a <guilabel>Dictionary</guilabel> tab. Below
these tabs you will find an input field to type your functions or do your
calculations.
</para>

</chapter>

<chapter id="syntax">
<title>Syntax</title>

<para>If we want to understand how it works, the best thing we can do is to
realize that our input is being converted into MathML although it is not necessary to
know MathML. I have based the syntax basically on common sense, it should not
be hard for anyone, I’ve looked closely to maxima and maple’s syntax so they look very similar.</para>
<para>Here is a list of the available operators we have by now:</para>
<itemizedlist>
<listitem><para>+ - * / : Add, substract, multiplication and
division.</para> </listitem>
<listitem><para>^, **: Power, you can use them both. Also it is possible to use
the unicode ² characters. Powers are one way to make roots too, you can do it
like: a**(1/b)</para></listitem>
<listitem><para>-&gt; : lambda. It’s the way to specify the bounded variable in
a function.</para></listitem>
<listitem><para>x=a..b : This is used when we need to delimitate a range
(bounded variable+uplimit+downlimit). This means that x goes from a to b.</para></listitem>
<listitem><para>() : It is used to specify a higher priority.</para></listitem>
<listitem><para>abc(params) : Functions. When the parser finds a function, it checks
if abc is an operator. If it is, it will be treated as an operator, if it is
not, it will be treated as a user function.</para></listitem>
<listitem><para>:= : Definition. It is used to define a variable value. You can
do things like x:=3, x:=y being y defined or not or perimeter:=r->2*pi*r.
</para></listitem>
<listitem><para>? : Piecewise condition definition. Piecewise is the way we can define
conditional operations in &kalgebra;. If we introduce the condition before the '?' it will
use this condition only if it is true, if it finds a '?' without any condition, it will
enter in the last instance.
Example: piecewise { eq(x,0) ? 0, eq(x,1) ? x+1, ? x**2 }
</para></listitem>
<listitem><para>{ } : MathML container. It can be used to define a container. Mainly
useful for working with piecewise.
</para></listitem>
</itemizedlist>
<para>Now you could ask me, why should the user mind about MathML? That’s easy.
With this, we can operate with functions like cos(), sin(), any other
trigonometrical functions, sum() or product(). It does not matter what kind it is.
We can use plus(), times() and everything which has its operator. Boolean
functions are implemented as well, so we can do something like or(1,0,0,0,0).</para>

</chapter>

<chapter id="using-console">
<title>Using the Console</title>
<para>&kalgebra;'s console is useful as a calculator. There you
have a list of the declared variables. By double clicking on them you will see a
dialog that lets you change their values (just a way to trick the log).

Every time you enter an expression, the "ans" variable's value will be changed to the last result.</para>

<para>Examples:</para>
<itemizedlist>
<listitem><para>sin(pi)</para></listitem>
<listitem><para>k:=33</para></listitem>
<listitem><para>sum(k*x : x=0..10)</para></listitem>
<listitem><para>f:=p->p*k</para></listitem>
<listitem><para>f(pi)</para></listitem>
</itemizedlist>

<para>Menu options:</para>

<variablelist>

<varlistentry>
<term><menuchoice>
<shortcut><keycombo action="simul">&Ctrl;
<keycap>N</keycap></keycombo></shortcut>
<guimenuitem>New</guimenuitem>
</menuchoice></term>
<listitem><para>Flushes the log.</para></listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<shortcut><keycombo action="simul">&Ctrl;
<keycap>L</keycap></keycombo></shortcut>
<guimenuitem>Load Script</guimenuitem>
</menuchoice></term>
<listitem><para>Executes the instructions in a file sequentially.
Nice if you want to define some libraries or something like this.</para></listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<shortcut><keycombo action="simul">&Ctrl;
<keycap>G</keycap></keycombo></shortcut>
<guimenuitem>Save Script</guimenuitem>
</menuchoice></term>
<listitem><para>Saves the instructions you have typed since the session began.</para></listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<shortcut><keycombo action="simul">&Ctrl;
<keycap>S</keycap></keycombo></shortcut>
<guimenuitem>Save Log</guimenuitem>
</menuchoice></term>
<listitem><para>Saves the log with all results into a file.</para></listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<shortcut><keycombo action="simul">&Ctrl;
<keycap>Q</keycap></keycombo></shortcut>
<guimenuitem>Quit</guimenuitem>
</menuchoice></term>
<listitem><para>Shuts the program down.</para></listitem>
</varlistentry>

</variablelist>

</chapter>

<chapter id="two-D-graphs">
<title>2D Graphs</title>
<para>To add a new 2D graph on &kalgebra;, what you have to do is to go to the <guilabel>2D
Graph</guilabel> tab and click in the <guilabel>Add</guilabel> tab to add the new function. Then your focus
will go to an input text box where you can type your function.</para>

<sect1 id="two-D-syntax">
<title>Syntax</title>
<para>If you want to use a typical f(x) function it is not necessary to specify
it, but if you want a f(y) or a polar function, you will have to add y-> and q->
as the bounded variables.</para>

<para>Examples:</para>
<itemizedlist>
<listitem><para>sin(x)</para></listitem>
<listitem><para>x²</para></listitem>
<listitem><para>y->sin(y)</para></listitem>
<listitem><para>q->3*sin(7*q)</para></listitem>
<listitem><para>q=0..100->q</para></listitem>
</itemizedlist>
<para>If you have entered the function click on the <guibutton>OK</guibutton> button to display the graph in the main window.</para>

</sect1>

<sect1 id="two-D-features">
<title>Features</title>
<para>You can set several graphs on the same view. Just use the <guilabel>Add</guilabel> button when
you are in List mode. You can set each graph its own color.</para>

<para>The view can be zoomed and moved with the mouse. Using the wheel
you can zoom in and out. You can also select an area with the left button
of the mouse and this area will be zoomed in. Move the view with the arrow keys.</para>

<para>In the <guilabel>List</guilabel> tab, you can open a context menu with a &RMB; click on a function and hide or remove it.</para>

<para>In the <guimenu>2D Graph</guimenu> menu you find these options:</para>
<itemizedlist>
<listitem><para>Show or hide the grid</para></listitem>
<listitem><para>Keep the aspect ratio while zooming</para></listitem>
<listitem><para>Zoom in (<keycombo action="simul">&Ctrl;
<keycap>+</keycap></keycombo>) and zoom out (<keycombo action="simul">&Ctrl;
<keycap>-</keycap></keycombo>)</para></listitem>
<listitem><para>Save (<keycombo action="simul">&Ctrl;
<keycap>S</keycap></keycombo>) the graph as image file</para></listitem>
<listitem><para>Reset the view to the original zoom</para></listitem>
<listitem><para>Select a resolution for the graphs</para></listitem>
</itemizedlist>
</sect1>

</chapter>

<chapter id="three-D-graphs">
<title>3D Graphs</title>

<para>To draw a 3D Graph with &kalgebra; you will have to go to the <guilabel>3D Graph</guilabel> tab
and you will see an input field at the bottom where you will type your function. Z can not be defined yet, for the
moment &kalgebra; only supports implicit 3d graphs dependent only on the x and y, such as (x,y)->x*y, where z=x*y.</para>

<para>Examples:</para>
<itemizedlist>
<listitem><para>sin(x)*sin(y)</para></listitem>
<listitem><para>x/y</para></listitem>
</itemizedlist>

<para>The view can be zoomed and moved with the mouse. Using the wheel
you can zoom in and out. Hold the &LMB; and move the mouse to rotate the graph.</para>

<para>The left and right arrow keys rotate the graph around the z axis, the up and down arrow keys rotate around the horizontal axis of the view.</para>

<para>In the <guimenu>3D Graph</guimenu> menu you find these options:</para>
<itemizedlist>
<listitem><para>Enable or disable transparency</para></listitem>
<listitem><para>Save (<keycombo action="simul">&Ctrl;
<keycap>S</keycap></keycombo>) the graph as image file</para></listitem>
<listitem><para>Reset the view to the original zoom</para></listitem>
<listitem><para>Draw the graphs with dots, lines or solid</para></listitem>
</itemizedlist>


</chapter>

<chapter id="dictionary">
<title>Dictionary</title>

<para>The dictionary is a collection of all &kalgebra; available operations. It can be
useful to check in the dictionary what is an operation useful for and to know how many parameters does
a function stand for.</para>

</chapter>


<chapter id="credits">
<title>Credits and License</title>

<itemizedlist>
<listitem><para>Program copyright 2005-2007 &Aleix.Pol;</para>
</listitem>
</itemizedlist>

<para>
Documentation copyright 2007 &Aleix.Pol; &Aleix.Pol.mail;
</para>

<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL;               <!-- FDL: do not remove -->
&underGPL;        	 <!-- GPL License -->

</chapter>


<appendix id="installation">
<title>Installation</title>

<sect1 id="getting-kapptemplate">
<title>How to obtain &kalgebra;</title>

&install.intro.documentation;

</sect1>

<sect1 id="compilation">
<title>Compilation and installation</title>

&install.compile.documentation;

</sect1>

</appendix>
&documentation.index; 
</book>

<!--
Local Variables:
mode: sgml
sgml-minimize-attributes:nil
sgml-general-insert-case:lower
sgml-indent-step:0
sgml-indent-data:nil
End:
-->
