Reviewed by Bradley M. Bell*
MLAB's use of analytic derivatives is one feature that is both unique and very helpful. Some of the built-in functions, such as the fitting utility, automatically calculate and use analytic derivatives. This relieves the user from the tedious work of programming derivative calculations for these utilities. It also makes the interface to these built-in functions simpler. The stiff differential equation solver is another utility that makes good use of this feature. It is therefore both easy to use and fast. The following example defines a model using a differential equation, simulates a data set for the model, and fits the model decay rate to the stimulated data:
function e't(t) = a*e(t)
initial e(0) = 1
t = (1:20)/20
for i=1:20 do {data(i) = exp(-t(i))+.1*normran(0);}
a = -.5
fit (a), e to (t &' data)
MLAB's approach is to build in many of the functions that are toolboxes in similar languages, for example, the differential equation solver and the nonlinear least squares optimizer. An extensive set of statistical utilities is also included as built-in functions. MLAB tends to execute these functions faster than the toolbox routines in similar languages. On the other hand, MLAB's interpreter is slower than the interpreter in some of the other high-level languages. Thus iterative routines written in MLAB tend to be slow.
MLAB is not a good language for developing large programs. The following is a list of some of its limitations in this regard. As mentioned above, the MLAB interpreter is slower than those in some of the other high-level languages. All variables in MLAB are global (except for function parameters). All functions are scalar-valued. The version that I was given to review on the PC quickly ran out of memory (there is an extended memory version that is supposedly better). Only one data type, 64-bit floating point, is fully supported in MLAB. There is limited provision for strings. For example, I could not read a data file contining string values in certain fields. There is also a limited provision for complex values, as a vector of two real values.
The documentation is adequate for a mathematically sophisticated user. The reference manual contains only a functional description of the built-in utilities. Some users may be confused by these descriptions (examples would be helpful). The applications manual contains many interesting examples, but they would be very difficult for an unsophisticated user to understand. On the other hand, a professor could teach a good modeling course with this manual as an outline. The graphics manual contains examples of how to use the MLAB plotting utilities. The on-line help is organized in a tree structure. The user must traverse the tree to get to his topic (instead of using search strings). This is not a great defect because the tree structure is well thought out.