Linux Goodies

In Pursuit Of The Perfect O/S



A Review of the Euler Mathematics Toolbox

Amazon Computers

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.

Below is an illustration of a Euler 3-D plot created with the Linux version of Euler. This review will concentrate on the Linux version that is part of the Debian distribution.

Euler mesh plot

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};

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.

euler line plot

Above 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.

euler line plot

In addition to line plots and 3D plots, Euler can do line contours and colored contours, as shown above. For the color filled contours, the user can select the hue color.


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:

  • 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.