This is documentation for Mathematica 5.2, which was
based on an earlier version of the Wolfram Language.

## Getting Started

As with any other computer system, there are a few points that you need to get straight before you can even start using Mathematica. For example, you absolutely must know how to type your input to Mathematica. To find out these kinds of basic points, you should read at least the first section of Part 1 in this book.

Once you know the basics, you can begin to get a feeling for Mathematica by typing in some examples from this book. Always be sure that you type in exactly what appears in the book--do not change any capitalization, bracketing, etc.

After you have tried a few examples from the book, you should start experimenting for yourself. Change the examples slightly, and see what happens. You should look at each piece of output carefully, and try to understand why it came out as it did.

After you have run through some simple examples, you should be ready to take the next step: learning to go through what is needed to solve a complete problem with Mathematica.

## Solving a Complete Problem

You will probably find it best to start by picking a specific problem to work on. Pick a problem that you understand well--preferably one whose solution you could easily reproduce by hand. Then go through each step in solving the problem, learning what you need to know about Mathematica to do it. Always be ready to experiment with simple cases, and understand the results you get with these, before going back to your original problem.

In going through the steps to solve your problem, you will learn about various specific features of Mathematica, typically from sections of Part 1. After you have done a few problems with Mathematica, you should get a feeling for many of the basic features of the system.

When you have built up a reasonable knowledge of the features of Mathematica, you should go back and learn about the overall structure of the Mathematica system. You can do this by systematically reading Part 2 of this book. What you will discover is that many of the features that seemed unrelated actually fit together into a coherent overall structure. Knowing this structure will make it much easier for you to understand and remember the specific features you have already learned.

## The Principles of Mathematica

You should not try to learn the overall structure of Mathematica too early. Unless you have had broad experience with advanced computer languages or pure mathematics, you will probably find Part 2 difficult to understand at first. You will find the structure and principles it describes difficult to remember, and you will always be wondering why particular aspects of them might be useful. However, if you first get some practical experience with Mathematica, you will find the overall structure much easier to grasp. You should realize that the principles on which Mathematica is built are very general, and it is usually difficult to understand such general principles before you have seen specific examples.

One of the most important aspects of Mathematica is that it applies a fairly small number of principles as widely as possible. This means that even though you have used a particular feature only in a specific situation, the principle on which that feature is based can probably be applied in many other situations. One reason it is so important to understand the underlying principles of Mathematica is that by doing so you can leverage your knowledge of specific features into a more general context. As an example, you may first learn about transformation rules in the context of algebraic expressions.

But the basic principle of transformation rules applies to any symbolic expression. Thus you can also use such rules to modify the structure of, say, an expression that represents a Mathematica graphics object.

## Changing the Way You Work

Learning to use Mathematica well involves changing the way you solve problems. When you move from pencil and paper to Mathematica the balance of what aspects of problem solving are difficult changes. With pencil and paper, you can often get by with a fairly imprecise initial formulation of your problem. Then when you actually do calculations in solving the problem, you can usually fix up the formulation as you go along. However, the calculations you do have to be fairly simple, and you cannot afford to try out many different cases.

When you use Mathematica, on the other hand, the initial formulation of your problem has to be quite precise. However, once you have the formulation, you can easily do many different calculations with it. This means that you can effectively carry out many mathematical experiments on your problem. By looking at the results you get, you can then refine the original formulation of your problem.

There are typically many different ways to formulate a given prob- lem in Mathematica. In almost all cases, however, the most direct and simple formulations will be best. The more you can formulate your problem in Mathematica from the beginning, the better. Often, in fact, you will find that formulating your problem directly in Mathematica is better than first trying to set up a traditional mathematical formulation, say an algebraic one. The main point is that Mathematica allows you to express not only traditional mathematical operations, but also algorithmic and structural ones. This greater range of possibilities gives you a better chance of being able to find a direct way to represent your original problem.

## Writing Programs

For most of the more sophisticated problems that you want to solve with Mathematica, you will have to create Mathematica programs. Mathematica supports several types of programming, and you have to choose which one to use in each case. It turns out that no single type of programming suits all cases well. As a result, it is very important that you learn several different types of programming.

If you already know a traditional programming language such as BASIC, C, Fortran, Perl or Java, you will probably find it easiest to learn procedural programming in Mathematica, using Do, For and so on. But while almost any Mathematica program can, in principle, be written in a procedural way, this is rarely the best approach. In a symbolic system like Mathematica, functional and rule-based programming typically yields programs that are more efficient, and easier to understand.

If you find yourself using procedural programming a lot, you should make an active effort to convert at least some of your programs to other types. At first, you may find functional and rule-based programs difficult to understand. But after a while, you will find that their global structure is usually much easier to grasp than procedural programs. And as your experience with Mathematica grows over a period of months or years, you will probably find that you write more and more of your programs in non-procedural ways.

## Learning the Whole System

As you proceed in using and learning Mathematica, it is important to remember that Mathematica is a large system. Although after a while you should know all of its basic principles, you may never learn the details of all its features. As a result, even after you have had a great deal of experience with Mathematica, you will undoubtedly still find it useful to look through this book. When you do so, you are quite likely to notice features that you never noticed before, but that with your experience, you can now see how to use.

## How to Read This Book

If at all possible, you should read this book in conjunction with using an actual Mathematica system. When you see examples in the book, you should try them out on your computer.

You can get a basic feeling for what Mathematica does by looking at "A Tour of Mathematica" in Section T.0. You may also find it useful to try out examples from this Tour with your own copy of Mathematica.

Whatever your background, you should make sure to look at the first three or four sections in Part 1 before you start to use Mathematica on your own. These sections describe the basics that you need to know in order to use Mathematica at any level.

The remainder of Part 1 shows you how to do many different kinds of computations with Mathematica. If you are trying to do a specific calculation, you will often find it sufficient just to look at the sections of Part 1 that discuss the features of Mathematica you need to use. A good approach is to try and find examples in the book which are close to what you want to do.

The emphasis in Part 1 is on using the basic functions that are built into Mathematica to carry out various different kinds of computations.

Part 2, on the other hand, discusses the basic structure and principles that underlie all of Mathematica. Rather than describing a sequence of specific features, Part 2 takes a more global approach. If you want to learn how to create your own Mathematica functions, you should read Part 2.

Part 3 is intended for those with more sophisticated mathematical interests and knowledge. It covers the more advanced mathematical features of Mathematica, as well as describing some features already mentioned in Part 1 in greater mathematical detail.

Each part of the book is divided into sections and subsections. There are two special kinds of subsections, indicated by the following headings:

The main parts in this book are intended to be pedagogical, and can meaningfully be read in a sequential fashion. The Appendix, however, is intended solely for reference purposes. Once you are familiar with Mathematica, you will probably find the list of functions in the Appendix the best place to look up details you need.

## About the Examples in This Book

All the examples given in this book were generated by running an actual copy of Mathematica Version 5.1. If you have a copy of this version, you should be able to reproduce the examples on your computer as they appear in the book.

There are, however, a few points to watch:

• Almost all of the examples show output as it would be generated in StandardForm with a notebook interface to Mathematica. Output with a text-based interface will look similar, but not identical.