# Mathematica Version 3 to Version 7 Conversion Notes

By Xah Lee. Date: . Last updated: .

This page is misc personal notes of learning new features of Mathematica since version 3 in 1996.

### GraphicsArray → GraphicsRow, GraphicsGrid

`GraphicsArray` is replaced by `GraphicsRow` and `GraphicsGrid`

### ImplicitPlot → ContourPlot

`<< Graphics`ImplicitPlot`;` is obsolete. Use ContourPlot instead. Example:

```<< Graphics`ImplicitPlot`;
ImplicitPlot[{(x^2 + y^2)^2 == x^2 - y^2, (x^2 + y^2)^2 == 2 x y},
{x, -2, 2},
PlotStyle -> {GrayLevel, Dashing[{.03}]}]```
```ContourPlot[{(x^2 + y^2)^2 == x^2 - y^2, (x^2 + y^2)^2 == 2 x y},
{x, -1, 1}, {y, -1, 1},
ContourStyle -> {GrayLevel, Dashing[{.03}]}]```

### FilterOptions, FilterRules

`Needs["Utilities`FilterOptions`"];` is obsolete. Replaced by `FilterRules`.

If you have:

```opts = {a->b, c->d, Axes -> False};
FilterOptions[Graphics,opts]```

Now you should do this:

```opts = {a->b, c->d, Axes -> False};
FilterRules[opt,Options@Graphics]```

### Random → RandomReal, RandomInteger

v6.0, Random has been superseded by the functions RandomReal and RandomInteger.

v6.0, StyleForm has been superseded by Style.

### Evaluation behavior

Evaluation behavior seems to have changed. Before, you need to put a “Evaluate” in.

### ParametricPlot eval

`ParametricPlot[Evaluate[Ellipse[.8][t]], {t, 0, 2 π},  AspectRatio -> Automatic]`

Now you don't.

By default the input cell now uses StandardForm instead of InputForm. (if i recall correctly)

definition of function's inline doc seems now needs to first check if it is defined, example

`If[ Not@ValueQ[Agglomerate::usage], Agglomerate::usage = "Agglomerate[list] …."]`

### Order of symbols in \$Context

Order of symbols in \$Context seems to have changed. That is, when loading a package, the exported symbols now override your global ones (goes first in \$Context). Before, when you call a function in a package such as ParaPlot, but you forgot to load the package. M gives a error. Then, you load the package, but that won't work, because “ParaPlot” is in the `Global`` context and that has precedence than the one in `Graph`ParaPlot`. This used to be a big problem. Now, this seems fixed. Haven't thought about logical consequences yet.

### Graphics Display Behavior

The semicolon now surpresses the side-effect of displaying graphics. Any `Graphics[…]` object (For example, `Graphics[Line[{{0, 0}, {1, 1}}]]`) is auto displayed as if with a `Show[Graphics[…]]` but the textual output is still surpressed.

The plot function's option the DisplayFunction's default value \$DisplayFunction seems changed to Identity. Before, if set to Identity it will not display the graphics. Now, the display of graphics seems dependent on whether there's a semi-colon at the end of the whole expression.

It appears, the new logic is that any output of the form `Graphics[…]` will be displayed visually. To surpress it, simply put a semi-colon.

Graphics output inside of Do, For, and While loops is suppressed unless Print is used.

## Plotting Functions

When plotting multiple curves with ParametricPlot, the curves automatically gets colored differently. example

`ParametricPlot[{{x, x^2}, {x, x^3}, {x, x^4}}, {x, -1.2, 1.2}]`

You don't have to use set PlotStyle yourself now, for example, `PlotStyle -> {Hue, Hue[.65], Hue[.34, 1, .7]}`

`ParametricPlot` now uses `Automatic` as the default value for `AspectRatio`.

## New Functions

### geometric transformation functions

a bunch affine or otherwise transformation functions, that either work on graphics directly, or return the matrix formula, or a function that represent such operation. (v6) Nice!

Norm returns the length of vector. (v5). Nice!

Normalize returns the unit vector. (v6). Nice!

These are very nice. Without them, you have to define them like these:

`normalize=Function[#/Sqrt@(Plus@@(#^2))]`

Other new functions.