Math 21a: Multivariable Calculus, Spring 2003
Mathematica Assignment

Support

Welcome to this Mathematica computer assignment! In case of technical problems with this assignment, please consult first the  page at http://www.courses.fas.harvard.edu/~math21a/lab.html which contains some frequenly asked question. If the problem is not listed and you are still stuck, send e-mail to maths21a@fas.harvard.edu. Please be aware that Mathematica is a pretty complex program demanding a lot of resources from computers, whether it is a Unix workstation, a Mac or PC. Therefore save the notebook frequently during your work.  The assignment can be found  at the very end of the notebook.

Cells

Mathematica notebooks are subdivided into cells, each of which is marked by a blue bracket at the right of the window.  These cells come in several different types.  For instance, the text you are currently reading is in a "text" cell, while the expression below is in an "input" cell.

76 - 23

You can tell the different types of cells apart by the font they use: text cells use a normal weight proportional width font (Times), while input cells use a boldface typewriter-style font (Courier).  Text cells are just for show, containing instructions, descriptions, or explanations.  If you want Mathematica to evaluate a mathematical expression, you must put it in an input cell.  To create a new cell, position the cursor between two existing cells or after the last cell.  The cursor will then change from a vertical I-beam to a horizontal I-beam.  If you click there, Mathematica will draw a horizontal line across the window.  If you then start typing, Mathematica will create a new input cell for you.  Any new cell you create will automatically be an input cell.

Evaluating Expressions

All commands are entered into Mathematica as text.  To evalute an expression, click anywhere in the expression and press the <Enter> key on the keypad (not the one on the main keyboard) or hold down the <Shift> key and press <Enter>.  Mathematica will then think for a moment and write the answer below the expression.  Your input and Mathematica's output are labeled "In[#]:" and "Out[#]:" respectively, and Mathematica draws the input in boldface to distinguish it from the plain text output.  For example, to add the following two numbers, click the sum below and press <Enter>.

3 + 8

Throughout these Mathematica assignments, we will give you lots of expressions to evaluate, along with descriptive text.  Just go through it one cell at a time, reading the text and evaluating each of the expressions one by one.  In these notebooks, cells which require you to try out what you have learned will be boxed in blue.

Basic Operators

The basic operations are + (addition), - (subtraction), * (multiplication), / (division), and ^ (exponentiation).  Mathematica obeys the usual operator precedence, first performing exponentiation, then multiplication and division, and finally addition and subtraction.  If you want to group your operations differently, use parentheses ().  Try evaluating the following expressions:

12 - 3*5

(12 - 3)*5

6/2*3

6/(2*3)

-5^2

(-5)^2

If you put two expressions next to each other separated only by a space, Mathematica multiplies them, just like in normal mathematical notation.  This can be confusing if you just put two numbers next to each other, but it comes in handy with more complicated expressions.  Here are some examples:

5 2

3 (8 - 4)

Functions and Constants

Mathematica comes preprogrammed with lots of functions and constants.  Some of the functions we will be using are Sin[x], Cos[x], Exp[x] (the exponential (e^x)), Log[x] (the natural logarithm ln x), Sqrt[x] (square root (Sqrt[x])), and Abs[x] (the absolute value |x|).  Note that the first letter of all built-in functions are capitalized, and you use square brackets [] to apply them, as opposed to regular parentheses ().  Some useful constants that Mathematica knows are Pi (or π) and E (or e ≈ 2.71828, the base for natural logarithms).  Again, be sure to capitalize the first letter.  Alternatively, you can use the palette of templates and symbols on the right of your screen to type in some of these operators and constants.  (If you do not see the palette, select from the menu File - Palettes - BasicInput.)  Here are some examples.

Sin[0.123]

Just like in standard math notation, if you write two things next to each other with only a space between them, Mathematica multiplies them.

Cos[2 Pi]

When you evaluated this next expression, note that Mathematica is clever enough to give you the exact answer, rather than a decimal approximation.

Sin[π/4]

If you prefer a numeric approximation, add //N to the end of your expression.

Sin[π/4] // N

or

N[Sqrt[2]]

Defining Variables and Functions

Mathematica lets you do both symbolic and numerical calculations using variables and functions.  You can use any string of letters for a variable name.  In addition to the usual variable names x, y, t, you can also use more descriptive names like theta or radius.  You can assign variables a value and then use that value in further computations.  Here are some examples:

a = 5

a^2  -  3  a  +  4

b = -3

a b

Notice that if you write two variable names next to each other separated only by a space, Mathematica multiplies them, just like in normal mathematical notation.  However, you must take care to put in the space between your variable names.  Otherwise, Mathematica will think that you are talking about a single variable with a long name!  For instance, in the following cell, instead of multiplying a by b, Mathematica assumes you are using a new variable ab:

ab

To define a function for Mathematica, we write f[x_] := value, where f is the name of the function, x is the variable, and value is the expression for the function.  Note that when defining a function, you again use square brackets [] instead of parentheses. In Mathematica, this distinction is very important; parentheses () are used to group expressions, while square brackets [] are used when applying a function.  When defining a function, you use colon-equal := instead of a normal equal sign, and you put an underscore _ immediately after the variable name.  This tells Mathematica to evaluate the right side only after plugging in the value of the variable.  Note that Mathematica does not give you an output when you define a function, but once a function is defined, you can apply it to any number you want, or even to a variable or expression.  When you are finished typing out your function definition in the input cell, you must type 'enter' on the keypad or hold down 'shift' and press 'enter' on the regular key board to tell Mathematica that your definition is ready. This tells Matheamtica to read the input cell. Give the following functions a try:

f[x_] := x^2 - 3  x  +  4

f[5]

f[t + 1]

Here we define a function of two variables.  Note that your variable and function names can be as long or as descriptive as you like.

DistanceFromOrigin[x_, y_]  :=  Sqrt[x^2 + y^2]

DistanceFromOrigin[3, 5]

Graphing Functions

To graph a function, you need to tell Mathematica the function itself, the name of the dependent variable, and the domain of the function. For instance, to plot the function f(x) = (e^(-((x^2)/2))) (called a Gaussian distribution function) in the domain –3 ≤ x ≤ 3 you would type:

f[x_]  :=  Exp[-x^2/2]

Plot[f[x], {x, -3,  3}]

In the Plot command, be sure to write f[x] including the variable name. If you just write f, Mathematica will think that f is a variable name, not a function. As a shorthand, you can skip the step where you define the function separately, and include that in the Plot command itself:

Plot[Exp[-x^2/2], {x, -3,  3}]

Curves in the plane

Parameterizing a Circle

As we have seen, Mathematica's Plot[] command lets us plot the graph of a function.  However, not all curves in the plane can be described as the graph of a function.  In particular, a function can have only one value of y for each value of x.  Suppose we want to draw the unit circle, given by the equation (x^2) +  (y^2) = 1.  To draw it as a graph of a function, we first solve this equation for y to obtain y = ±(Sqrt[1 - (x^2)]).  But since there are two possible values for the square root, we cannot draw it as a graph of a single function.

Instead, we can plot the circle by treating the two coordinates x = cos(t) and y = sin(t) as functions of a third variable t called a parameter.  However, before getting to the circle, it is instructive to first plot the graphs of x and y as functions of t separately:

x[t_] := Cos[t]

Plot[x[t], {t, 0, 2 Pi} ]

y[t_] := Sin[t]

Plot[y[t], {t, 0, 2 Pi}]

Now, to plot the circle, combine them both into a single  vector-valued   function r(t) = x(t) i + y(t) j.  In general, Mathematica represents vectors (both vector-valued   functions and vector values) by separating the vector components with comma (,) and enclosing them in curly braces {}.  Thus, we can represent the vector-valued   function in Mathematica as follows:

r[t_] := {x[t], y[t]}

Use Mathematica to compute the vector r(t) corresponding to various values of t:

r[0]

r[Pi/4]

r[Pi/2]

r[t]

If you base these vectors at the origin, their endpoints describe a circle as t  varies from 0 to 2π.  In Mathematica, you plot this curve using the ParametricPlot[] command, which requires you to specify a vector-valued  function, the dependent variable, and the domain in the following format:

ParametricPlot[r[t],  {t, 0,  2  Pi}]

If we plot a predefined vector-valued function such as r[t], Mathematica generates a warning but proceeds with the parametric plot.  To prevent the warning message from being displayed, use the Evaluate[] version of the function r[t] to tell Mathematica to substitute the definition of r[t] into the function to be plotted, as shown in the example below.

ParametricPlot[Evaluate[r[t]],  {t, 0,  2  Pi}]

Ellipses

To change the circle into an ellipse (making x the major axis), try the vector-valued function r(t) =( 2 cos(t)  +  sin(t) ):

ParametricPlot[{2 Cos[t], Sin[t]},  {t, 0,  2  Pi}]

Find a vector-valued   function parameterizing the ellipse with major axis of length a and minor axis of length b centered at the point (c, d).  Write your function in terms of the constants a, b, c, d:

Polar Coordinates

Returning to the circle case, any circle centered at the origin can be parameterized by the vector-valued   function r(θ)=r (cos(θ)i+sin(θ)j), where r is the radius and θ is the angle from the positive x axis.  Here the radius r is constant, but what if we varied r with θ?  In other words, what would happen if we changed the radius while the circle was being drawn?  Such a function r(θ) is said to be in polar coordinates.  Try setting r(θ) = θ and see what happens.

r[theta_]  :=  theta

ParametricPlot[
      Evaluate[r[theta] {Cos[theta], Sin[theta]}],  {theta, 0, 2  Pi}, 
      AspectRatio -> Automatic]

Now play with the cells above to graph a spiral that winds around the origin three times.

Next, change the radius to be a periodic function, such as r(θ) = cos(2  θ).

r[theta_]  :=  Cos[2 theta]

ParametricPlot[
      Evaluate[r[theta] {Cos[theta], Sin[theta]}],  {theta, 0, 2  Pi}, 
      AspectRatio -> Automatic]

Curves in space

Helix

In this section, we will experiment with three dimensional vector-valued   functions.  First, we will draw a helix, or a 3D spiral, using the function r(t)=cos(t)i+sin(t)j+tk.  Modify the function given below to get a helix that wraps around four times.

r[t_] := {Cos[t], Sin[t], t}

ParametricPlot3D[r[t], {t, 0, 2 Pi}]

Slinky

The next task is to draw a vector-valued function describing a Slinky™, everyone's favorite spring toy.  The  option PlotPoints->400 is added to the command to make Mathematica compute the value of the function at more points than usual, giving us better resolution.

r[t_] := {Cos[t] ( 2 + Cos[40  t]), Sin[40  t], 
        Sin[t] (2 + Cos[40  t])}

ParametricPlot3D[r[t],  {t, 0,  Pi}, PlotPoints -> 400]

Rotato Peeler

If there is additional time, here is a task designed especially for fans of late-night infomercials.  Rotato Peeler is an amazing gadget that can peel an orange, apple, potato, or Kiwi in one piece.  It has a blade that sits on the skin of the fruit that slowly moves from the top to the bottom while the fruit turns (courtesy of a hand crank operated by various actors who probably have better things to do than peel fruit).  Assuming the fruit is a perfect sphere, we will draw the spiral path of the blade on the fruit's surface, wrapping around 10 times, using a parametric curve.

r[t_] := {Sin[t] Cos[20  t], Sin[t] Sin[20  t], Cos[t]}

ParametricPlot3D[Evaluate[r[t]], {t, 0, Pi},  
      PlotPoints -> 400]

Note: This curve involves two separate circular motions. The first is the horizontal motion in the plane spanned by i and j. This is a circle that wraps around ten times. The second is the vertical motion involving the radius in the i j plane and the vertical height along the k axis. This is just half a circle going from the north pole to the south pole.  Combining the two motions, we get the product of two sin t/cos t with different periods for the horizontal and vertical circles.

3D Surface Plots

Mathematica uses the Plot3D function to graph a surface defined by a function of two variables.  To plot such a graph, you need to specify the function f(x, y) and the names and range of the two independent variables.

For example, to graph the saddle f(x, y) = (x^2) - (y^2) over the domain -2 ≤ x ≤ 2, -2 ≤ y ≤ 2,  have Mathematica evaluate the following cell:

Plot3D[x^2 - y^2, {x, -2, 2}, {y, -2, 2}]

One of the Plot option in Mathematica is PlotPoints-> n.  This option tells Mathematica to use n points to plot the function.  The default is n = 15.  Thus, if we include PlotPoints->30 in the Plot3D function, Mathematica would plot the surface with higher resolution. Here is an example to try:

Plot3D[x^2 - y^2, {x, -2, 2}, {y, -2, 2},  
      PlotPoints -> 30]

You can look up other Plot3D options by typing

?? Plot3D

One questionmark alone gives a rough description of the function, two questionmarks provides you with 
more detailed information.

The Hyperboloid

The function f(x, y) = (Sqrt[1 + (x^2) +  (y^2)]) gives an upward-facing  hyperboloid. To verify, have Mathematica evaluate the following cell:

Plot3D[Sqrt[1 + x^2 + y^2], {x, -3, 3}, {y, -3, 3}]

For practice, change the function in the Plot3D input above so as the bottom of the hyperboloid is (0, 0, 5) without the changing the shape of the hyperbolic. Tell Mathematica to plot the result.

Sinusoidal Waves

Before using Mathematica to graph the next surface, imagine what the surfaces should look like.

Plot3D[Sin[x + y], {x, -2 Pi,  2  Pi}, {y, -2 Pi, 2  Pi}, 
      PlotPoints -> 30]

Parametric Plots

To plot a surface defined by a function in polar coordinates, we will use the ParametricPlot3D function. For example, graph the surface which is given in cylindrical coordinates as z = (r^2) for 0 ≤ r ≤ 2.

ParametricPlot3D[{r Cos[t],  r Sin[t],  r^2},  {r,  0,  
        2},  {t,  0,  2  Pi}]

Radially Symmetric Functions

Earlier, we used polar coordinates to describe the surface of a paraboloid f(r, θ) = (r^2) and used the ParametricPlot3D function in Mathematica to plot the surface. You can review the picture by evaluating:

ParametricPlot3D[{r Cos[t], r Sin[t], r^2},  {r, 0, 2},  {t, 0, 
        2  Pi}]

For practice with another function, plot the top half of a sphere in polar coordinates (f(x, y) = (Sqrt[1 - (x^2) - (y^2)])).  You will need to adjust the limits of the domain to avoid taking the square root of a negative number. To make this plot, fill in the missing data in the next cell and have Mathematica evaluate the result.

The Saddle

Polar coordinates are useful even when the function is not radially symmetric.  Consider the saddle function f(x, y) = (x^2) - (y^2).  In polar coordinates, we have:
	\(TraditionalForm\`f(x, 
          y) = \(\((r\ cos\ t)\)\^2 - \((r\ sin  t)\)\^2 = \(\(r\^2\)(\(cos\^2\) t\  - \(sin\^2\) t) = r\^2\ \(cos(2  t)\)\)\)\),
where we used the double angle formula for cosine in the last equality.

Graph the saddle in polar coordinates by having Mathematica evaluate the next cell.

ParametricPlot3D[{r Cos[t], r Sin[t], r^2 Cos[2  t]},  {r, 0, 
        2},  {t, 0, 2  Pi}]

For practice, change the function in the ParametricPlot3D input above so that the resulting plot is a saddle with three instead of two pairs of upward and downward pointing directions.  Have Mathematica plot the result. This graph is also known as a Monkey Saddle.

Waves on a Pond

ParametricPlot3D[{r Cos[t], r Sin[t], 2  Cos[r]},  {r, 0, 
        6  Pi},  {t, 0, 2  Pi}]

Contour Lines and Level Curves

A contour line is the set of points on a surface where the height is constant.  If the surface is described by z = f(x, y), then a contour line is the set of points satisfying the equation z = f(x, y) = c.  Visually, you can think of this as the intersection of the surface with the horizontal plane corresponding to the constant function z = c.  We will use the Show function to combine the graph of the surface and the plane in order to examine the points of intersection.

For example, the z = 1 contour line of the saddle f(x, y) = (x^2) - (y^2) is the intersection of the saddle surface with a plane:

Plot3D[x^2 - y^2, {x, -2, 2}, {y, -2, 2}]

A level curve is the projection of a contour line down onto the xy-plane.  A contour plot is a 2D graph showing multiple level curves of a function.  This gives you an alternative method of looking at a function of two variables.  If you have gone hiking, you may have seen a topographical map.  A topographical map is just a contour plot of the height function, which lets you add elevation information to an otherwise 2D map.  Another example of a contour plot is a weather map showing isobars, lines of equal barometric pressure.  In this, case the function value is not height, so it is not as natural to graph it in three dimensions.

Mathematica can draw level curves using the ContourPlot command.  To  draw the level curves of the saddle function f(x, y) = (x^2) - (y^2) for -2 ≤ x ≤ 2 and -2 ≤ y ≤ 2 have Mathematica evaluate the next cell:

ContourPlot[x^2 - y^2, {x, -2 , 2 }, {y, -2, 2}, 
      ColorFunction -> Hue]

Vector Fields

Once you have a vector field such as the gradient, you can have Mathematica plot it for you using the function  PlotVectorField.  Unlike the Mathematica functions we have seen so far, this function  is not in the standard Mathematica package.  To use this add-on function, we need to first load the Graphics`PlotField` package.  (Note the use of backquotes.)

Get["Graphics`PlotField`"]

Once  the package is loaded, we can use the PlotVectorField function to plot our vector fields.  Like what we have seen in ParametricPlot3D, we need to tell Mathematica to evaluate the Gradient before plotting the vector field. Tell Mathematica to evaluate the next cell in order to obtain a picture of the gradient of (x^2)-(y^2)

PlotVectorField[{2  x, 2  y}, {x, -1, 1}, {y, -1, 
        1}]

We can also draw both the level curves and gradient vector field on the same graph.  Use the Show function to combine the level curves and gradient vector field of the saddle f(x, y) = (x^2) - (y^2). To do this first have Mathematica evaluate the next cell to define f(x,y) as (x^2) - (y^2).

f[x_, y_] := x^2 - y^2

Then have Mathematica evaluate

Show[ContourPlot[x^2 - y^2, {x, -2 , 2 }, {y, -2, 2}], 
      PlotVectorField[{2  x, -2 y}, {x, -2, 2}, {y, -2, 
          2}]]

Implicit Surfaces

To draw surfaces of the form g(x,y,z)=0, we load the package ContourPlot3D:

Get["Graphics`ContourPlot3D`"]

For example, to draw an ellipsoid

f[x_, y_, z_] := x^2 + y^2 + z^2 - 1; 
    ContourPlot3D[
      f[x, y, z], {x, -1, 1}, {y, -1, 1}, {z, -1, 1}]

You can produce amazing surfaces like this. Just try to go beyond quadrics

f[x_, y_, z_] := x^4 - 2  y^2 + z^2 - 1; 
    ContourPlot3D[
      f[x, y, z], {x, -2, 2}, {y, -2, 2}, {z, -2, 2}]

Symbolic calculations

Mathematica can be used as a calculator to do symbolic or numerical calculations. For example, to 
look up integrals

Integrate[Sin[x]^5, x]

or to calculate integrals numerically:

NIntegrate[Sin[1 + Sin[x]], {x, 0, 2  Pi}]

Also higher dimensional integrals can be computed. Here is a numerical integration of a two dimensional
integral:

NIntegrate[Sin[1 + x*y], {x, -1, 1}, {y, -1, 1}]

Here is a numerical integration of a three dimensional integral:

NIntegrate[
      Sin[x] + Cos[y] + z, {x, -1, 1}, {y, -1, 1}, {z, -1, 
        1}]

Differentiation can be done in different ways:

f[x_] := Sin[ Cos[x]]

f'[x]

which is a short hand notation for

D[f[x], x]

To calculate a Taylor series of a function a a point, try

Series[Sin[x], {x, 0, 8}]

Assignment

To get full credit for this Mathematica assignment, you have to hand in:

        1)  A printout of a graph of a function f(x,y) of two variables of your choice.
        2) A printout of a parametric surface r(u,v) =(x(u,v),y(u,v),z(u,v)) of your choice. 
        3) A printout of a curve r(t)=(x(t),y(t)) in the plane  of your choice
        4) A printout of a vector field F(x,y) = (P(x,y),Q(x,y)) in the plane of your choice.
        5) A printout of an implicit surface g(x,y,z)=0. 
        6)  A numerical calculation for the length of an ellipse with semiaxes3 and 4.
        
In each of the  parts 1-5, the example has to be different from any example which appear in this
notebook. Each problem gives 1/6 of the full credit. 
If you find something cool during your experiments, feel free to include it also.

Harvard University, Mathematics 21a Spring 2003