My aim here is simply to provide a rough overview of some resources and software I have found on the internet which might be useful to engineers and scientists. Most of these links are particularly useful for Linux users. The topics covered are:
Overview
Guide
Generally Useful Resources:
Useful article at IBM's developerworks.
First of all, this is a bit of a crusade with me, but I feel I must recommend the Python programming language. I have found it to be absolutely invaluable. It has several advantages
- Very very easy to learn.
- Very clean syntax, so easy to maintain code.
- Wide range of libraries to handle many common tasks.
- Large user base.
- Modular. Also, Python can be programmed in a traditional or an object-oriented style.
All of these are important for anyone doing scientific computing. Python is not as fast as a compiled language, such as C, but it is quite easy to couple Python to C code. A useful paradigm ;-) is to prototype an algorithm in Python, and then translate numerically intensive parts into C later on if it is decided that the performance gain justifies the investment in time.
Octave is a mostly compatible replacement for Matlab. It can be used on Linux, as well as some other systems. Octave is not really a drop in replacement for Matlab, and lacks enough functionality/features to stymy attempts to run Matlab libraries you find on the net. That said, it is still very useful in its own right, and with careful coding it would be possible to write code which would work on both Octave and Matlab. I found Octave to be useful as a language reference when converting Matlab code to Python. Most of the syntax is correct in Octave. The features you are most likely to miss are in the area of graphing and visualisation. While on the subject of Matlab, a useful site to check out is MatLinks. The site distributes a toolbox of useful functions for MatLab and Octave users. MatLab users should be able to use it all out of the box. Octave users may have to hack a bit (at least I did, on the wavelets code!) though some components are specifically marked as Octave compatible.
Numerical Libraries and Algorithms:
Perhaps the largest store of algorithms and numerical code is netlib. Many of the programs and methods distributed on netlib have been peer reviewed, so their quality is generally high. A problem I found is that it tends to be a very mixed bag, with disparate coding styles and languages. Nevertheless, it is still a formidable resource.
For a more coherent, though arguably less reputable, source of algorithms, you could check out the online version of Numerical Recipes. Some reviewers have questioned the quality and correctness of several algorithms included in NR. However, others have been very happy with the book. Ultimately, you have to make your own mind up. NR is probably a good place to get a first pointer on a topic, and its writing style is eminently readable. Note that the algorithms are not public domain, or for free use/distribution. Critics would point you to some alternatives.
The GNU Scientific Library is a collection of routines for numerical computing. The routines are written from scratch by the GSL team in ANSI C. (Quoting from the GSL website). GSL includes many standard packages of numerical routines which have been in wide use for a long time (such as FFTPACK, LAPACK, etc.,). Many of these were originally written in FORTRAN and have now been translated into C. The GPL means that these routines are freely distributable and the way they have been packaged gives the programmer a consistent, homogeneous and documented body of code to work with.
If you have followed my advice and started using Python, you will be very pleased to find out that there is a Numerical Python module. This includes functions and data types which are useful for numerical applications. Apparently, speed of these operations compares quite well with C, though I have never verified this for myself. Additionally, an interface to FFTPACK and LAPACK is provided, along with some functions to aid compatibility with Matlab.
Graphing and Visualisation:
The first GNU/Linux based graphing package I used was the remarkable Gnuplot. Gnuplot is a very powerful graphing package which can fill a wide range of graphing roles. Gnuplot is controlled by commands which can be typed in at a command line, or stored in a text file for batch processing. I would recommend (but cannot take responsibility for the consequences!) that you use the development version of Gnuplot which you can retrieve via CVS (instructions). This includes the pm3d and mouse extensions written by P. Mikulik. The first of these lets you do coloured contour plots in 3D. The second allows you to use your mouse to rotate, zoom and scale a plot. These are big improvements, in my opinion. Note that there is a Python module To allow you to interface with Gnuplot. It is useful, especially when you want a quick look at data. However, I have found it a bit buggy for heavy batch processing.
Another graphing resource is Gri. This is similar to Gnuplot in that it can be used interactively. I do not have much experience with this package. The feature that drew my attention to it is the possibility to take an image (for example a shaded contour map) and incorporate it into a PostScript figure, complete with axes and legend, as shown in the diagram here which is of the wavelet transform of some Lamb wave propagation data.
Gri lacks certain features of Gnuplot (e.g. 3D surface plots... because the author does not like them). In particular I find the lack of an interactive mode inconvenient. Also, there are not as many output formats, though postscript is easily converted into many other forms.
A third graphing package is PLplot. This is really a library for C programmers, rather than an application. However, given the widespread use of C, PLplot can be easily interfaced with C, C++, FORTRAN, Python and Tcl (according to the webpage). PLplot has all the usual features, which are showcased in a set of examples.
Other Topics:
To be continued... I intend to put any worthwhile links from my bookmarks here, and to link to perhaps a page on the Wavelet Transform.