By the Student Information Processing Board

Today, we'll discuss two popular mathematics software packages, Matlab and Mathematica. In addition, we'll take a look at gnuplot, a tool designed to produce high-quality data plots.

```
athena%
```**add matlab**

athena% **matlab -desktop**

(Without the `-desktop`

flag, Matlab will start its text-mode
interface.)
"Matlab" is short for "matrix laboratory". You can enter an matrix with square brackets, with spaces between numbers on the same row and semicolons to break rows:

```
>>
```**a = [1 2; 3 4]**

a =

1 2

3 4

You can also use an iteration syntax for long lists. For example,
`[1:1000]`

is the first thousand positive integers, and
`[0:.01:1 2:.01:3]`

represents all hundredths from 0 to 1 and
from 2 to 3, inclusive.
Standard matrix operations such as multiplication (`*`

),
`transpose`

, etc. are supported. You can call a function with
parentheses:

```
>>
```**transpose([1; 2; 3])**

ans =

1 2 3

Since Matlab will try matrix operations first, if you want to do a
"scalar operation" on each element, you'll need to add a period before
the operator. Using the answer from the previous problem:
```
>>
```**ans * [4 5 6]**

??? Error using ==> mtimes

Inner matrix dimensions must agree.

>> **ans .* [4 5 6]**

ans =

4 10 18

To plot a function via Matlab, first create the data points, then use
the plot command:
```
>>
```**x=[0:.1:pi]; y=sin(a);**

>> **plot(x, y)**

You can find more information about options to the plot command, and in
fact about most Matlab commands, by typing `help`

followed by
the name of the command.
A good, detailed reference about using Matlab is SIPB's document
“Inessential
Matlab”, available in hard copy from our office. An online
version is also linked from the web copy of this article at
`http://www.mit.edu/~asksipb/`

.

```
athena%
```**add math**

athena% **mathematica**

You'll be able to start typing expressions in standard mathematical
notation. To evaluate an expression, hit Shift-Enter.
```
In[1] :=
```**16! ^ (1/256)**

Out[1] = 2^{15/256} 3^{3/128} 5^{3/256}
7^{1/128} 143^{1/256}

Standard Mathematica functions are capitalized and use square brackets
for their arguments, for example:
```
In[2] :=
```**Simplify[Integrate[2 Sin[Log[x]], x]]**

Out[2] = x (-Cos[Log[x]] + Sin[Log[x]])

In[3] := **Integrate[Sin[x]/x, {x, 0, Infinity}]**

Out[3] = π/2

Mathematica is a powerful yet lightweight programming language as well;
the classic example of the factorial can be re-implemented as:
```
fact[x_] := If[x==0, 1, x fact[x-1]]
```

In a more rule-based style, you can write
```
fact[x_] := x fact[x-1]
```

fact[0] := 1

(The underscore indicates a variable argument, rather than a literal
"x".) You can even use higher-order functions, just like in Scheme:
```
In[4] :=
```**Map[(#^2+1) &, {1, 2, 3, 10}]**

Out[4] = {2, 5, 10, 101}

Mathematica's online help, available from the Help menu, is extremely
detailed and has several tutorials as well as a complete function
reference. You can also type a question mark followed by a function name
for a quick overview of the function's syntax:
```
In[5]:=
```**?Sin**

Sin[z] gives the sine of z.

Although advanced math packages such as Mathematica and
Maple incorporate some graphics capabilities, their focus
is on data analysis and not presentation
To produce more professional figures, it is best to use
an external program such as the
`gnuplot`

utility.

Gnuplot runs in a terminal, but opens
a separate window to display graphs. To start a `gnuplot> `

prompt, add the `gnuplot`

locker
(enter

at an Athena prompt),
then type **add gnuplot**

.
Once running, gnuplot has an extensive on-line help
system, accessible by typing **gnuplot**

at the prompt.
**help**

Making plots on-screen is easy; for example, try:

`gnuplot> `**plot x**2*sin(x)**

It's also easy to plot data files, such as the output from
this Mathematica command:

.
Assuming that **Export["trig.dat", Table[{x,Sin[x],Cos[x],Tan[x]}, {x,-3,3,0.1}]]**`trig.dat`

is in the directory where you started gnuplot,
you can plot the tangent function with

.
**plot "trig.dat" using 1:4**

You can also get `gnuplot`

to write plots to a file. Try:

`gnuplot> `**set terminal jpeg**

gnuplot> **set output "tangent.jpg"**

gnuplot> **plot "trig.dat" using 1:4 smooth unique title "tan(x)"**

gnuplot> **set terminal x11**

`gnuplot`

can produce an extensive variety of
plotting styles -- try using it for your next scientific paper!

To ask us a question, send email to sipb@mit.edu. We'll try to answer you quickly, and we can address your question in our next column. You can also stop by our office in W20-557 or call us at x3-7788 if you need help. Copies of each column and pointers to additional information are posted on our website: http://www.mit.edu/~asksipb/