# Mathematica Module Guide

## Prerequisite

We assume you have already had an introductory course in computer programming or have experience writing moderately large, complex, well-documented programs. If not, we strongly recommend taking an introductory programming course (CSE501N or CSE131) before you take this course. Students without a formal introductory course in programming generally don't do very well.

## Introduction

In this module, you will learn how to use Mathematica (recently re-branded as The Wolfram Language) for mathematical computation and as a general purpose programming language. Most students in the class have never used Mathematica before and most of those who have have not used it as a general purpose programming language. If you are thinking

• Why do I have to learn Mathematica instead of using my favorite language, {Python, R, MatLab, Java}?
The choice of programming language is mostly a matter of convenience and personal preference. Most anything can be done in most any language, but it may be easier in some languages than in others.
• I have summarized my reasons for choosing Mathematica here.

## What you will learn

After successful completion of this module you will have the basic tools you need for developing sofware in Mathematica.The abilities you should come away from this module with are:

1. Use Mathematica notebooks to interactively carry out simple symbolic and numeric mathematical computations.
2. Use Mathematica documentation to find functions that do something you want to do.
3. Work with lists, matrices, and general-purpose trees including generating them, selecting parts of them, joining them, and mapping functions over them.
4. Write general-purpose functions (code) in Mathematica including defining local variables, applying functions repeatedly (looping or mapping), and carrying out different computations depending on the value of a variable or expression (branching).
5. Write code that lives up to my standards of style and readability.
6. Write functional programs in which side effects are kept to a minimum.
7. Use Wolfram Workbench, an Eclipse-based integrated development environment (IDE), for developing and testing Mathematica code.
8. Carry out simple test-driven development.
9. Use svn, version control system, to keep a history of your code as you develop it and share it with others (team-mates or the TAs).

## Learning resources

There is a new online tutorial/textbook on Mathematica by Stephen Wolfram which you can find here. The nice thing about it is that there are exercises at the end of each of the short chapters. The bad thing is that it emphasizes the interactive functionality over writing code so it takes a while to get to some of the stuff you need. But definitely worth looking at! I will try to make reference to it at appropriate places.

## Day 1

### In Class

• Help anyone who has not been able to install and open Mathematica, Workbench, or an svn client.
• Overview of the class, topics covered, philosophy, and mechanics.
• Self paced work: Download, read, and complete assignments in the Mathematica notebook MathematicaQuickstart.nb. If you click on this link you should see the contents of the directory that contains it. Then right click (control click) on it and download it. It is a Mathematica notebook with the .nb extension. This is a significant assignment that may take up to 5 hours to complete. Please start early and come to a help session if needed.

### Before the next class

• Turn in the notebook Mathematica Quickstart Guide with the exercises completed. As you read, evaluate all input cells and make sure you understand why the output is what it is. When you turn in the notebook, all input cells must have corresponding output cells showing that you evaluated them. In addition, you must have typed something for each exercise, regardless of whether you were able to get it correct. Turn in your new notebook and the modified MathematicsQuickstart.nb by following the instructions linked above. For your new notebook (and for the MathematicaQuickstart.nb if its not already in your repository) you will need to do an "svn add" as described in the instructions.
• Read this section of the Wolfram online textbook: Expressions and Their Structure . However, there is one style thing that I don't like about this textbook and that is extensive use of "dingbat" shorthand such as "@" for function application or "/@" for "Map". You'll need to be able to read these as they are sometimes used in the documentation, but please don't use them as they hurt readability. The only ones I really approve of in code are & and # when defining anonymous functions.
• Extra help: In these sections I will suggest sections of the online Wolfram textbook that you may find helpful. They often present similar material to what I've presented, but with different types of examples and a diffferent perspective. Also this textbook contains optional exercises that you can do to improve your understanding and mastery. The solutions are provided in the final section.

## Day 2

### In Class

• Review and practice homework turn-in with svn.
• Questions: Mathematica Quickstart Guide and associated assignment.
• Presentation: Symbols, expressions, and forms (from “Day2PresentationExpressions.nb”).
• Functions as data structures: introduction, self-paced work, questions.
• Recursive functions: introduction, self-paced work, questions.
• Functional programming: introduction, self-paced work, questions.

### Before the next class

Read: To turn in: Complete and turn in all three notebooks: