MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Plot this?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg109548] Re: Plot this?
  • From: "David Park" <djmpark at comcast.net>
  • Date: Wed, 5 May 2010 06:04:02 -0400 (EDT)

There are many ways to plot it. I'll show just a few and discuss some basic
plotting techniques. You may want to look up many of the commands in help.
The straightforward method is to move 49 to the other side of the equation
(which would actually use == instead of = in Mathematica) and then use
Plot3D to plot the lhs. But what xy domain do you want to use? You didn't
say so I'll just pick one.

Plot3D[8 x - x^2 + 14 y - y^2 - 49, {x, -20, 20}, {y, -20, 20}] 

That might or might not be satisfactory for your needs. It doesn't give a
very good indication that the surface is an off-center paraboloid. We could
get a better indication of this by completing the square in x and then in y
to get a more symmetrical form. You could do this by hand, but the
Presentations package has a built-in CompleteTheSquare routine, so I'm going
to make a temporary excursion there and then define the function as f[x,y].

Needs["Presentations`Master`"] 

8 x - x^2 + 14 y - y^2 - 49; 
CompleteTheSquare[%, x]; 
f[x_, y_] = CompleteTheSquare[%, y] 

16 - (-4 + x)^2 - (-7 + y)^2 

The paraboloid is centered at {x0,y0}={4,7}. That was the basic information
we wanted. You could define f with the new expression or with the original
expression. We make a better centered plot.

Plot3D[f[x,y],{x,4-10,4+10},{y,7-10,7+10}] 

It is a little awkward to enter and adjust the x,y iterators for the plot
domain. We could write this in a more convenient form by putting the Plot3D
inside a With statement where we can easily set the center and plot range.

With[{x0 = 4, y0 = 7, range = 10},
 Plot3D[f[x, y], {x, x0 - range, x0 + range}, {y, y0 - range, 
   y0 + range}]
 ] 

We can make much better plots by utilizing the plot options. These come in
the form of rules that are added at the end of the Plot statements. There
are two types, those that affect the objects that are drawn, and those that
affect the overall look of the plot. WRI doesn't distinguish between them
very well. Here are the options for Plot3D. (I omit the output because it is
rather long, but you can evaluate.)

Options[Plot3D] // Column 

Here we use some of the options to alter the appearance of the surface and
the overall look of the plot.

With[{x0 = 4, y0 = 7, range = 10},
 Plot3D[f[x, y], {x, x0 - range, x0 + range}, {y, y0 - range, 
   y0 + range},
  PlotStyle -> Opacity[.85, Brown],
  Mesh -> None,
  Lighting -> "Neutral",
  AxesLabel -> {"x", "y", "f"},
  BoxRatios -> {1, 1, 1},
  ImageSize -> 400] 

PlotStyle and Mesh changed the appearance of the surface by giving it a
color and turning off the mesh lines. Lighting, AxesLabel, BoxRatios and
ImageSize affected the overall look of the plot. 

Another method for specifying a surface in 3D space is through a parametric
representation {x, y, f[x,y]} and then using ParametricPlot3D.

With[{x0 = 4, y0 = 7, range = 10},
 ParametricPlot3D[{x, y, f[x, y]}, {x, x0 - range, x0 + range}, {y, 
   y0 - range, y0 + range},
  PlotStyle -> Opacity[.85, Brown],
  Mesh -> None,
  Lighting -> "Neutral",
  AxesLabel -> {"x", "y", "f"},
  BoxRatios -> {1, 1, 1},
  ImageSize -> 400]
 ] 

But this kind of surface, that has rotational symmetry about a vertical axis
would look much better with a circular domain. We can do that by using polar
coordinates. Let r be the distance from the center in the xy-plane and theta
the angle with the x axis. Then we can write rules to convert from x,y to
polar coordinates and generate a new polar parametrization. 

CartesianToPolarRules = {x -> 4 + r Cos[\[Theta]], 
   y -> 7 + r Sin[\[Theta]]}; 
g[r_, \[Theta]_] = {x, y, 8 x - x^2 + 14 y - y^2 - 49} /. 
   CartesianToPolarRules // Simplify 

{4 + r Cos[\[Theta]], 7 + r Sin[\[Theta]], 16 - r^2} 

Now we obtain a better representation of the surface.

ParametricPlot3D[g[r, \[Theta]], {r, 0, 10}, {\[Theta], 0, 2 \[Pi]},
 PlotStyle -> Opacity[.85, Brown],
 Mesh -> None,
 Lighting -> "Neutral",
 SphericalRegion -> True, RotationAction -> "Clip",
 AxesLabel -> {"x", "y", "f"},
 BoxRatios -> {1, 1, 1},
 ImageSize -> 400] 

You can use the mouse to rotate the image, zoom in and out (hold down Ctrl)
or shift the image (hold down Shift). Just using rotation, the image often
jumps when you let go of the mouse. The options SphericalRegion and
RotationAction stop this. (You can also stop the jumping by doing a little
zooming first.)

Finally, you might want to show the surface without the axes, box and
labeling. You can do that with:

ParametricPlot3D[g[r, \[Theta]], {r, 0, 10}, {\[Theta], 0, 2 \[Pi]},
 PlotStyle -> Opacity[.85, Brown],
 Mesh -> None,
 Lighting -> "Neutral",
 SphericalRegion -> True, RotationAction -> "Clip",
 Axes -> False,
 BoxRatios -> {1, 1, 1},
 Boxed -> False,
 ImageSize -> 400] 

Sometimes you can make a quick plot with Mathematica and it will be
sufficient for the purpose. Other times, especially if you are making a
graphics to present to others, you may have to slowly develop the plot,
using a certain amount of trial and error to obtain the most effective
presentation.


David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/  




From: Trevor Rabey [mailto:trevorATperfectproject.com.au at giganews.com] 


I am new to Mathematica and going at snail's pace.
I would like to plot:

8x - x^2 + 14y - y^2 = 49

Anyone?

--
Trevor Rabey




  • Prev by Date: Optimization problem for dice game (repost)
  • Next by Date: NDSolve backward in time
  • Previous by thread: Re: Plot this?
  • Next by thread: Re: Plot this?