The Euler Math Toolbox
|
Yet another freely available matrix math language Euler.
Euler provides a very capable environment for exploring complex mathematical
functions and examining data. It is available for both Windows and Linux, and
provides a minimal GUI environment in both. The Windows version is more
complete, including an integrated Maxima package allowing
algebraic expressions to be evaluated. This review will concentrate on the
Linux version that is part of the Debian
distribution.
From Debian and it's derivative operating systems, the installation of Euler
is easy. I installed with the Debian apt-get utility as follows:
As root:
apt-get install euler
apt-get install euler-doc
|
To run Euler, simply type in euler in a terminal window. That will bring up
the GUI work environment for Euler. From the environment, one can interactively
graph functions, load programs, load data, and manipulate matrix data with the
many tools. To test out Euler, I converted a program to Euler that I'd written
in PDL and converted
to Yorick, Octave, R, and Scilab.The program
exercised many but certainly not all of Euler's extensive capabilities.
Particularly the program exercised a number of matrix routines, the Fourier
transform routines, and both line plotting and 3D plotting routines. While not
the fastest of the languages in which I ran the program, I'd estimate Euler to
be comparable in speed to Octave.
|
In matrix syntax, Euler is somewhat similar to MATLAB and Octave. Enough so
that MATLAB or Octave users could easily adapt. Sequences of numbers are
generated in the same way, and indexing matrices is the same. In fact, Euler
allows matrix indices to be expressed within parentheses or brackets to provide
more compatibility with other languages. I found it best to use brackets for
matrix indexing, because Euler sometimes confuses parenthetical indexing with
function calls. A number of matrix operations are different, and somewhat
unique to the Euler language. For example:
|
|
To combine matrices X and Y by columns:
A = X | Y;
To combine matrices X and Y by rows:
A = X _ Y;
To perform a matrix multiply:
A = X . Y;
As you can see with these examples, Euler isn't intended to be a MATLAB
clone, just a language that is similar in capability and appearance. Functions
are declared in a way unique to Euler. Similar to other languages, but not
exactly like any of those I'm experienced with. To declare a function that
accepts 3 arguments and returns 3 results:
function test(x, y, z)
...
return {a, b, c};
endfunction
One nice thing about functions in Euler is that they can return multiple
arguments. Note the curly bracket nomenclature for returning multiple
arguments. Again similar looking to MATLAB and Octave users, but not exactly
the same as those languages. The same curly bracket nomenclature is used to
receive multiple arguments:
{u, v, w} = test(x, y, z);
I was unable to find any form of data structuring in Euler beyond the
matrix. That is, to my knowledge there is no way to hold a stack of images for
example rather than as individual matrices, or to combine different data
structures into some kind of single record. However, Euler does have an
impressive collection of problem solving, linear algebra, and statistics
functions.
One thing to note about the FFT routine in Euler is that it only accepts
matrices whose dimensions are a power of 2. If you have some other sized
matrix or vector, you must pad with zeros to get dimensions up to the next
power of 2, or trim down to a power of 2.
For help, one can click on the help menu at the top of the GUI and Euler
will bring up a browser to display the HTML help documentation. The user can
set which browser to use in the .euler/euler.cfg file. Typing help
followed by an Euler function will bring up help on that particular function
directly to the GUI window.
Also in the .euler/euler.cfg file is a list of the libraries
automatically loaded every time Euler is invoked. A user can create his or her
own libraries and have them auto-loaded by adding them to the euler.cfg
file.
File I/O operations are limited compared to many matrix languages. It's
no problem if you work exclusively within the Euler system, but makes
reading files made from other utilties difficult.
In the Windows version, one can simply write out a matrix with the
writematrix, and read a formally written matrix with the
readmatrix command. In Linux, there is the writematrix command,
but reading in a matrix one has to use getmatrix, which must be
supplied with the size of the matrix in the call function.
|
The Linux version of Euler can read and write data ASCII files, but assumes
that the files are purely numbers. There is little support for reading files
that might have other kinds of information, such as data labels mixed with the
data. There is a getchar command, and I was able to write an Euler
function that could read past a label to a line feed, and then read in the data
as a vector. Euler has only primitive binary file support, being able to read
or write single or double word integers, and can only write from vectors, not
matrices.
|
|
The main confusing thing I found was that the documentation listed a pair of
hatch symbols ## to indicate the start of a comment line. It
turns out that the comment indicator is actually a pair of periods.
..This is a comment line
Euler Graphics
Euler has many familiar graphic routines that do what you might expect. The
plot function will plot a vector or an x,y pair. Mesh will plot a matrix as a
3D filled wire model. Other routines can do contours, color contours, and wire
model 3D presentations with Euler's own unique arguments.
Euler can even display images, though one has to convert an image into one
of the simple file forms that Euler can import.
|
Here you see can example of a multiple-line plot created with Euler. Rather
than provide extensive optional arguments to plot functions as do some
languages, Euler plot functions accept only the data to be plotted.
Other function calls allow the user to select the plot color, plot scale,
etc. To plot multiple functions in different colors as was done on this plot, I
used the Euler holding command to allow additional functions to be
plotted on the same window.
|
|
In addition to line plots and 3D plots, Euler can do line contours and
colored contours, as in this image. For the color filled contours, the user can
select the hue color.
|
|
Summary
In summary, I find Euler to be very useful, with some solution methods not
commonly found in math languages. It has a smaller resource requirement than
many matrix languages, is easy to use, and easy to program. It isn't probably
the best choice for large scale projects or data reduction because of it's
limited file I/O support and lack of large scale data structures.
|
What Euler is good for is listed at the Sourceforge Euler Site. Euler has many
familiar graphic routines that do what you might expect. The plot function
will plot a vector or an x,y pair. Mesh will plot a matrix as a 3D filled wire
model. Other routines can do contours, color contours, and wire model 3D
presentations with Euler's own unique arguments.
The following pros and cons are my subjective views of Euler:
Pros:
Freely available for both Windows and Linux. The Windows version includes
more features, such as the integrated use of Maxima.
Loads quickly.
A GUI environment for controlling the Euler environment.
An easy to learn Basic style programming language.
Quite fast when solutions are optimized to use intrinsic matrix operators.
Easy to use 2D and 3D graphics utilities.
Cons:
The Linux version is only the matrix language portion, no Maxima interface.
File handling utilities are minimal, making it difficult to work with
files made with other utilities.
String handling features are limited.
Designed to be used interactively -- not in batch mode.
|
|
|