Reviewed by Kayll Lake for Physics World.

The booklet "A First Look At

For those who are not familiar with Mathematica, it is an all-purpose computer algebra software package that uses a high-level programming language. It can, for example, be used to integrate and differentiate functions to any degree of precision, evaluate advanced mathematical expressions and perform three-dimensional visualizations. This new version of Mathematica has been five years in coming and, as we would expect, it offers several new features. These include support for fully editable, typeset functions that are entered into an interactive notebook. A user can, for example, create an integral function that looks just like it would on a printed page by selecting icons and symbols from tool palettes. If the integral does not have limits, Mathematica gives a symbolic result; if it does have limits, the answer is quoted as a number. The list of other new features is long. There are changes in numerical and algebraic computation, mathematical functions, graphics programming and the core system. The input and output, the notebook and the system interface are also different from earlier versions, and the series of "standard add-on packages" has also been revised. Whereas I encountered problems with some of the new features, Mathematica 3.0 is a "new shoe" and we can expect most teething problems to be resolved in short order. The ease of use of the system is, to a certain extent, a matter of taste. For example, I doubt that a working mathematician will be too enthusiastic about pointing and clicking at palettes to write out equations. A beginner might, but they might also be intimidated by the complexity of the complete interface.

In addition to Mathematica and a 1400-page guidebook, which is part of the help system, there is a remarkable array of supplementary material. This includes applications from Wolfram Research, third-party applications, hundreds of books, and

Of particular interest to me is the claim that Mathematica 3.0 offers "Faster execution speed and lower memory usage for typical kernel operations." Whereas the speed of a system is not of central interest to every user, it is a prime concern for many researchers. The change in the relative speed of a system between versions is, I think, of interest to all. Mathematica 3.0 currently runs under Microsoft Windows, MacOS, Linux, UNIX and NEXTSTEP version 3.0 or higher. The version of Mathematica 3.0 I tested was designed for Microsoft Windows 95, and the version I had to compare it to was designed for earlier incarnations of Microsoft Windows. To accommodate this, I re partitioned my hard drive and set up a dual boot Windows 3.11/ Windows 95 environment by offering up an identical copy of my first partition to the Windows 95 (4.00.950) upgrade procedure. Mathematica 2.2 was installed in Windows 3.11, and in Windows 95 through the upgrade. Mathematica 3.0 was installed into Windows 95 from a CD. The installation is effortless. As described below, I ran tests of Mathematica 2.2 under Windows 3.11 and Windows 95, and tests of Mathematica 3.0 under Windows 95. (The first system used was an Intel Pentium 133 MHz, on an Asus PCI/E-P54NP4, with 512 K cache and 48 MB RAM. The disc was a Seagate ST11950N/ND SCSI-2, and video card an ATI graphics Pro Turbo. The tests were re executed with an Intel Pentium Pro as described below.)

Timings for various kinds of Mathematica functions and programs run on different computer configurations have been collected by Stefan Steinhaus of the University of Frankfurt in Germany, and by Karl Unterkofler of the Technical University in Graz, Austria. These now standard tests were used to produce the first two sets of tables shown below. In each case three separate runs were used. In Windows 3.11 the runs were from separate boots from DOS, and for Windows 95 the runs were from separate (warm) boots of the computer. These tests were supplemented by a series of computationally more intensive tests with

The tests were re executed with an Intel Pentium Pro CPU rated at 150 MHz, on an i440FX Amptron mainboard with 32 MB EDO RAM. The disc was an IBM 2.1GB IDE, and video card a Matrox Mystique. The system has a MMA 3.0 Benchmark of 0.75 according to the test by Karl Unterkofler. (This benchmark for the original system is 0.37.) The results at 150 MHz (

**Performance**:For the 17 standard tests, Mathematica 3.0 was slower in 14, faster in 2 and the same as Mathematica 2.2 in 1. ( On the Pentium Pro, Mathematica 3.0 was faster in 4.) The tests with*GRTensorM*showed that Mathematica 3.0 was slower, used more memory, and loaded external programs more slowly than Mathematica 2.2 in all 4 tests. In one case Mathematica 3.0 took over five times as long to do the calculation, but produced a more fully simplified result. The kernel of Mathematica 3.0 can be run directly, either as a window or a command line. In this mode I noticed a performance improvement of a few percent.**Features**:Mathematica 3.0 is a product that tries to do everything. I expect that there are quite a number of Mathematica users, and potential users, who would prefer to see an improved core system, with an array of other features available as an option.- If you are a PC user and you upgrade from Mathematica 2.2 to version 3.0, I believe you should also upgrade your processor from a Pentium to a Pentium Pro in order to maintain the performance you are used to.

- Versions:
- Mathematica Version 2.2= May 13, 1993
- Mathematica Version 3.0= October 6, 1996

- Units:
- CPU Time in seconds
- Memory in MB

- Reported times are of the form a+b+c. From these read the times a, a+b, a+c. One number means a=b=c.
- The Notebooks (e.g. Stefan.ma) are in the Mathematica 2.2
format and can be downloaded and saved for execution with Mathematica. Mathematica 3.0 will
convert them. If you do not have Mathematica you can obtain
*MathReader*free of charge to look at the Notebooks.

(Stefan.ma)

OS | Ver. | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|

3.11 | 2.2 | 0.05+0.01-0 | 5.27+0-0.11 | 2.58+0+0.05 | 2.31+0-0.6 0 | 0.88+0.11+0.11 |

95 | 2.2 | 0.06+0-0.01 | 5.27 | 2.64-0.06-0.06 | 4.23-1.86-1.92 | 0.93 +0.06+0.06 |

95 | 3 | 0.06 | 9.17+ 0-0.06 | 3.18+0+0.01 | 9.45 | 1.26 |

95 | 2.2 | 0+0.05+0.05 | 1.65 | 1.71 | 1.48-0.05+0.05 | 0.33 |

95 | 3 | 0+0.06+0 | 4.01 | 2.08-0.05-0.11 | 7.41-2.08-3.18 | 0.61 |

95 | 2.2 | 0+0+0.05 | 1.48 | 1.54+0-0.05 | 1.32+0.05+0.05 | 0.33-0.05+0 |

95 | 3 | 0 | 3.62+0+0.01 | 1.81-0.06-0.05 | 5.44-0.5-0.38 | 0.55-0.5+0 |

95 | 2.2 | 0+0.06+0 | 1.37 | 1.43-0.05-0.06 | 1.27-0.01-0.06 | 0.28 |

95 | 3 | 0+0+0.06 | 3.35 | 1.71-0.01+0.05 | 4.72-0.82-0.77 | 0.55 |

OS | Ver. | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|

3.11 | 2.2 | 8.56+0.01-0.16 | 2.09+0+0.05 | 0.77-0.05-0.05 | 4.56 | 3.7 3+0.01+0 |

95 | 2.2 | 8.85-0.18-0.29 | 2.14 | 0.61+0.05+0.04 | 4.55+0.01+0.01 | 3.74+1.15+1.09 |

95 | 3 | 11.92+0.33+0.06 | 3.9 | 1.21-0.06-0.01 | 18.9+0.44-1.16 | 8.24+0.55+0.99 |

95 | 2.2 | 9.72+0+0.28 | 1.21-0.07+0 | 0.38+0.06+0 | 3.35-0.06+0 | 2.42 |

95 | 3 | 10.05-0.11-0.44 | 1.92+0-0.05 | 0.93+0.06-0 | 11.2+0+1.71 | 5.71+0.77+1.45 |

95 | 2.2 | 8.9+0.22+0.22 | 1.1 | 0.38-0.05+0 | 3.02-0.05+0 | 2.2 |

95 | 3 | 8.62+0.33+0.11 | 1.54 | 0.17 | 11.43+0.87+0.92 | 4.94+1.27-0.52 |

95 | 2.2 | 8.24-0.17+0.11 | 0.99 | 0.33-0.05+0 | 2.86-0.06-0.06 | 2.03+0+0.05 |

95 | 3 | 8.08-0.06+0.10 | 1.65-0.06+0 | 0.94+0.05+0.01 | 10.43+0.7-0.06 | 4.89-0.0.33-0.94 |

1. Timing[3^10000; ]

2. Timing[10000!; ]

3. hil = Table[1/(i + j - 1), {i, 30}, {j, 30}];

Timing[Det[hil]]

4. Timing[ListPlot[Table[Prime[i], {i, 10000}], PlotJoined -> True]]

5. Timing[N[Pi,3500]]

6. First[Timing[Eigenvalues[Table[Random[],{200},{200}]]]]

7. Timing[Factor[x^92259-1];]

8. Timing[Integrate[1/(1-x^3),x]]

9. Timing[ParametricPlot3D[{r*Cos[Cos[r]]*Cos[psi],r*Cos[Cos[r]]*Sin[psi],

r*Sin[Cos[r]]},{r, 0.001, (9*Pi)/2 + 0.001}, {psi, 0, (3*Pi)/2},PlotPoints ->{72, 24}]]

10. bx = 6 Cos[u] (1 + Sin[u]);by = 16 Sin[u];rad = 4 (1 - Cos[u] / 2);

X = If[Pi < u <= 2 pi, bx + rad cos[v + pi], bx + rad cos[u] cos[v]];

Y = If[Pi < u <= 2 pi, by,by + rad sin[u] cos[v]];

Z = rad Sin[v];

Timing[ParametricPlot3D[{X, Y, Z},{u, 0, 2 Pi}, {v, 0, 2 Pi},PlotPoints ->

{48,12},Axes -> False,Boxed -> False,ViewPoint-> {1.4, -2.6, -1.7}];]

Mathematica timing tests by Karl Unterkofler.

(Karl.ma) (MMA 3.0 Benchmark Test)

OS | Ver. | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|

3.11 | 2.2 | 5.17-0.01+0 | 7.86-0.01-0.01 | 5.16+0.05+0.05 | 8.24+0+0.16 | 2.31-0.01+0.05 | 4.78-0.05+0.11 | 21.53-1.21-1.15 |

95 | 2.2 | 5.27-0.05-0.05 | 7.91 | 5.27-0.05+0.01 | 8.57-0.28-0.27 | 2. 3+0.01+0.01 | 4.89-0.06-0.06 | 20.65+0+0.17 |

95 | 3 | 6.76+0.05+0.05 | 10.66-0.11-0.06 | 9.06+0.06+0.01 | 9.56+0.27+0.16 | 1.87-0.05-0.0 6 | 7.58+0+0.05 | 1.7+0-0.05 |

95 | 2.2 | 1.65 | 2.47+0-0.06 | 1.65+0.06+0 | 9.99+0.28-0.0.32 | 1.43+0.06-0.05 | 2.91+0+0.01 | 12.13+0.01+0.06 |

95 | 3 | 3.3-0.0.06-0.06 | 4.73+0.16-0.01 | 4+0.33+0.01 | 6.65+0.22-0.06 | 0.99-0.01-0.06 | 3.63-0.12-0.17 | 0.66-0.16-0.17 |

95 | 2.2 | 1.48+0.01+0.015 | 2.25-0.05-0.05 | 1.48+0+0.01 | 9.06+.06-0.11 | 1.26-0.05+0.01 | 2.69-0.06-0.06 | 10.93+0.11+0 |

95 | 3 | 2.91 | 4.29-0.06-0.01 | 3.63+0-0.01 | 6.21-0.22-0.28 | 0.82+0.06+0.06 | 3.24-0.16-0.06 | 0.6-0.16-0.16 |

95 | 2.2 | 1.38-0.01-0.01 | 2.03 | 1.37 | 8.46+0.16-0.28 | 1.15+0.01+0 | 2.42+0-0.01 | 10.1+0.01+0 |

95 | 3 | 2.74-0.05+0.01 | 3.95+0.01+0.01 | 3.4+0.01+0.01 | 5.93-0.16-0.16 | 0.82+0+0.01 | 3.02-0.10-0.10 | 0.55-0.17-0.11 |

1. Timing[N[Sin[1/2], 2500]][[1]]

2. Timing[N[Pi, 10001]][[1]]

3. Timing[10001!][[1]]

4. First[Timing[Eigenvalues[Table[Random[], {200}, {200}]]]]

5. f[x_] := 4*x - 4*x^2;

Timing[Nest[f, 0.6, 5000]][[1]]

6. f[x_] := BesselJ[0, x];

Timing[Nest[f, 0.6, 2500]][[1]]

7. kdv[q_] := D[q, t] - 1/4*D[q, {x, 3}] - (3*q*D[q, x])/2

q3 := (-5*E^((11*t)/8) - 45*E^(2*x) - 18*E^((11*t)/16 + x) +

162*E^((3*t)/2 + 2*x) - 188*E^((13*t)/16 + 3*x) + 162*E^(t/8 + 4*x) -

45*E^((13*t)/8 + 4*x) - 18*E^((15*t)/16 + 5*x) - 5*E^(t/4 + 6*x))/

(8*(-E^((11*t)/16) + 3*E^x - 3*E^((13*t)/16 + 2*x) + E^(t/8 + 3*x))^2)

Timing[Simplify[kdv[q3]]]

OS | Ver. | 1 | 1 | 1 | 2 | 2 | 2 |
---|---|---|---|---|---|---|---|

MaxMemoryUsed[] | TimeUsed[] | Load Time | MaxMemoryUsed[] | TimeUsed[] | Load Time | ||

3.11 | 2.2 | 1.31 | 13.85-0.28-0.11 | ~5 | 1.28 | 16.19+0.4 4+0.39 | ~5 |

95 | 2.2 | 1.31 | 14.56-0.6-0.56 | ~5 | 1.28 | 16.49-0.31+ 0.49 | ~5 |

95 | 3 | 1.73 | 25.03+0.52+0.17 | ~14 | 1.69 | 33.52+0.5 2+0.59 | ~16 |

95 | 2.2 | 1.31 | 9.22-0.38-0.55 | ~3 | 1.28 | 10.07-0.02-0.07 | ~3.5 |

95 | 3 | 1.73 | 10.43+0.08-0.16 | ~5.5 | 1.69 | 14.87+0.16+0.10 | ~6 |

95 | 2.2 | 1.31 | 7.97-0.27-0.28 | ~3 | 1.28 | 9.01-0.11-0.15 | ~3.5 |

95 | 3 | 1.73 | 9.88-0.62-0.54 | ~5.5 | 1.69 | 12.86-0.18-0.11 | ~6 |

95 | 2.2 | 1.31 | 7.41-0.16-0.10 | ~3 | 1.28 | 8.4+0.04-0.05 | ~3.5 |

95 | 3 | 1.73 | 9.32-0.64-0.80 | ~5.5 | 1.69 | 12.24-0.11+0.07 | ~6 |

OS | Ver. | 3 | 3 | 3 | 4 | 4 | 4 |
---|---|---|---|---|---|---|---|

MaxMemoryUsed[] | TimeUsed[] | Load Time | MaxMemoryUsed[] | TimeUsed[] | Load Time | ||

3.11 | 2.2 | 1.57 | 131.99-0.18-0.12 | ~5 | 3.34 | 157.24+0 .52+0.36 | ~13 |

95 | 2.2 | 1.57 | 133.31-0.34-0.17 | ~5 | 3.34 | 157.52-0. 22-0.12 | ~14 |

95 | 3 | 1.99 | 194.49-1.91-1.43 | ~15 | 4.73 | 849.67-2. 91-2.21 | ~34 |

95 | 2.2 | 1.57 | 82.83-0.07-0.11 | ~3 | 3.37 | 85.35-0.21-0.99 | ~8 |

95 | 3 | 1.99 | 97.36+0.91+0.29 | ~5 | 4.73 | 398.99+5.27+4.88 | ~16 |

95 | 2.2 | 1.57 | 74.43+0-0.0.21 | ~3 | 3.37 | 76.08-0.22-0.11 | ~8 |

95 | 3 | 1.99 | 87.52-0.20+0.03 | ~5 | 4.73 | 360.9+16.8+5.68 | ~16 |

95 | 2.2 | 1.57 | 68.87-0.0.11-0.10 | ~3 | 3.37 | 70.81-0.0.12+0.37 | ~8 |

95 | 3 | 1.99 | 81.38-0.04+0.12 | ~5 | 4.73 | 342.14-0.02+0.04 | ~16 |

1. Reduction of the Ricci tensor to zero and calculation and simplification of the Kretschmann scalar (R

2. Calculation and simplification of the invariants R,R

3. Calculation and simplification of the differential invariant (R

4. Calculation and simplification of all Ricci invariants of the mixmaster space-time.(Mixmr.ma)

i)Why the different times?

A given programme solving a given problem under identical conditions does not take different lengths of time. The catch here is that the conditions are never identical. The state of a computer depends primarily on the state of its cache memory, and this is in fact different even between fresh boots of a system. If the CPU times are small (as they are for some of the "standard tests") it is important to estimate the variation in execution times one might expect.

ii)There is even some variation between the same calculation (First[Timing[Eigenvalues[Table[Random[],{200},{200}]]]]) in the two tables, 6 in the first table and 4 in the second. Why?

The state of the kernel is different due to different calculation streams.

iii)Do the Pentium and Pentium Pro not respond the same way to "Eigenvalues"?

Apparently not.

iv)Is that 0.17 in column 8 of the first table a misprint?

It came back three times.