ing directly downhill or uphill. When the contours are far apart,
the gain or loss in elevation is gradual. When the contours are
close together, the gain or loss in elevation is quite rapid.
The level curves of a multivariate function are analogous to the
contours in the topographical map. They are curves of constant
elevation. Let's look at an example.
Sketch several level curves of the function
f(x,y)=x2+y2.
Solution: We are interested in finding
points of constant elevation, that is, solutions of the
equation
f(x,y)=c,
where
c is a constant. Equivalently, we
wish to sketch solutions of
x2+y2=c,
where
c is a constant. Of course, these
'level curves' are circles, centered at the origin, with radius
c. These level curves are drawn in Figure 2 for
constants
c=0, 1, 2, 3, and
4
.
Level curves of
f(x,y)=x2+y2 lie in the
xy-plane.
Matlab: It's a simple task to draw the
level curves of Figure 2 using Matlab's
contour command. We begin as if we
were going to draw a surface, creating a grid of
(x,y) pairs with the
meshgridcommand.
x=linspace(-3,3,40); y=linspace(-3,3,40);
[x,y]=meshgrid(x,y);
We then use the function
f(x,y)=x2+y2, or
equivalently,
z=x2+y2, to calculate the
z-values.
z=x.^2+y.^2;
Where we would normally use the
mesh
command to draw the surface, instead we use the
contourcommand to draw the level
curves.
contour(x,y,z)
Add a grid, equalize, then tighten the axes.
grid on axis equal axis tight
Annotate the plot.
xlabel('x-axis') ylabel('y-axis') title('Level curves of the
function f(x,y) = x^2 + y^2.')
The above sequence of commands will produce the level curves shown
in Figure 3.
![[转载]MATLAB <wbr>中contour函数的使用 Level curves drawn with Matlab.](http://msemac.redwoods.edu/~darnold/math50c/matlab/contours/figure3.png)
Level curves of
f(x,y)=x2+y2 drawn with
Matlab's
contour command.
By default, Matlab draws a few more level curves than the number
shown in Figure 2.
Adding Labels to the Contours: It would be
nice if we could label each contour with its height. As one might
expect, Matlab has this capability. Using the same data as above,
execute this command. Note that we use a semi-colon to suppress the
output.
[c,h]=contour(x,y,z);
Without getting too technical, information on the level curves is
stored in the output variables
c
and
h. We then feed the output as input to
Matlab's
clabel command.
clabel(c,h)
Using the same formatting as above (grid, axis equal and tight, and
annotations), this produces the image shown in Figure 4.
![[转载]MATLAB <wbr>中contour函数的使用 Label each contour with its height.](http://msemac.redwoods.edu/~darnold/math50c/matlab/contours/figure4.png)
Label each contour with its height.
Adding Labels Manually: In Figure 4, there
are labels all over the place, some that we might feel are not very
well placed. We can exert control over how many labels are used and
their placement. Simply pass the option 'manual' to Matlab's
clabel command. First, redraw the
contours, capturing again he output in the variables
c and
h.
[c,h]=contour(x,y,z);
Next, execute the
clabel command
with the 'manual' switch as follows.
clabel(c,h,'manual')
At first, it appears that nothing happens. However, move your mouse
over the figure window and the axes and note that the mouse cursor
turns into a large crosshairs. Each time you click a contour with
the mouse, a label is set on the contour selected by the
crosshairs. When you've completed clicking several contours, while
the mouse crosshairs are still over the axes, press the Enter key
on your keyboard. This will toggle the crosshairs off and stop
further labeling of contours. You can now repeat the formatting
(grid, equalize, tighten, and annoations) to produce the image in
Figure 5.
![[转载]MATLAB <wbr>中contour函数的使用 Annotating level curves manually.](http://msemac.redwoods.edu/~darnold/math50c/matlab/contours/figure5.png)
Annotating level curves manually provides a cleaner looking
plot.
Forcing Contours
Sometimes you'd like to do one of two things:
- Force more contours than the default number provided by the
contour command.
- Force contours at particular heights.
Forcing More Contours: You can force more
contours by adding an additional argument to the contour command.
To force 20 contours, execute the following command.
contour(x,y,z,20)
Adding the formatting commands (grid, equal and tighten, and
annotations) produces the additional contours shown in Figure
6.
![[转载]MATLAB <wbr>中contour函数的使用 Forcing additional contours.](http://msemac.redwoods.edu/~darnold/math50c/matlab/contours/figure6.png)
Forcing additional contours.
Forcing Specific Contours: You can also
force contours at specific heights. To reproduce the level curves
of Figure 1, at the heights
c=0, 1, 2, 3, and
4, we pass the specific heights we wish to see in a vector to the
contour command. First, list the
specific heights in a vector.
v=[0,1,2,3,4];
Pass the vector
v to the
contour command as follows:
[c,h]=contour(x,y,z,v);
Labeling the contours shows that our contours have the heights
requested.
clabel(c,h)
These commands, plus the formatting commands (grid, equalize and
tighten, annotations) produce the result shown in Figure 7.
![[转载]MATLAB <wbr>中contour函数的使用 Forcing contours at particular heights.](http://msemac.redwoods.edu/~darnold/math50c/matlab/contours/figure7.png)
Forcing contours at particular heights.
Note the strong resemblance of Figure 7 to Figure 1
Miscellaneous Extras
Implicit Plotting: Sometimes you want to
draw a single contour. For example, suppose you wish to draw the
graph of the implict relation
x2+2xy+y2-2x=3.
One way to proceed would be to first define the function
f(x,y)=x2+2xy+y2-2x,
then plot the level curve
F(x,y)=3. Start by
creating a grid of
(,y) pairs.
x=linspace(-3,3,40); y=linspace(-3,3,40);
[x,y]=meshgrid(x,y);
Calculate
z=f(x,y)=x2+2xy+y2-2x.
z=x.^2+2*x.*y+y.^2-2*x;
Now, we wish to draw the single contour
z=f(x,y)=3. Create a vector with this height.
Matlab requires that you repeat the height value you want two
times.
v=[3,3];
Plot the single contour.
contour(x,y,z,v);
Add a grid, equalize and tighten the axes.
grid on axis equal axis tight
Finally, add appropriate annotations.
xlabel('x-axis') ylabel('y-axis') title('The implicit curve
x^2+2xy+y^2-2x=3.')
The result of the above sequence of commands is captured in Figure
8.
![[转载]MATLAB <wbr>中contour函数的使用 Plotting an implicit equation.](http://msemac.redwoods.edu/~darnold/math50c/matlab/contours/figure8.png)
Plotting an implicit equation.
Surface and Contours: Sometimes you want
the surface
and the contours. Again,
an easy task in Matlab. The following commands produce the surface
and contour plot shown in Figure 9.
x=linspace(-3,3,40); y=linspace(-3,3,40); [x,y]=meshgrid(x,y);
z=x.^2+y.^2; meshc(x,y,z); grid on box on view([130,30])
xlabel('x-axis') ylabel('y-axis') zlabel('z-axis') title('Mesh and
contours for f(x,y)=x^2+y^2.')
Note that the
meshc command provides
both a mesh and a contour plot.
![[转载]MATLAB <wbr>中contour函数的使用 Surface and contours combined.](http://msemac.redwoods.edu/~darnold/math50c/matlab/contours/figure9.png)
Surface and contours combined.
In Figure 9, note that when the level curves in the plane get close
together, the corresponding position on the surface is steeper. On
the other hand, when the distance between the level curves is
large, the surface is flatter in nature; i.e., the elevation change
is gradual.
Contours Plotted at Actual Height: Finally,
it's also possible to plot the contours at their actual
heights.
x=linspace(-3,3,40); y=linspace(-3,3,40); [x,y]=meshgrid(x,y);
z=x.^2+y.^2; contour3(x,y,z); grid on box on view([130,30])
xlabel('x-axis') ylabel('y-axis') zlabel('z-axis') title('Contours
at height for f(x,y)=x^2+y^2.')
In Figure 10, note that the
contour3
command plots contours at their actual heights instead of in
the plane. This hands us a deeper understanding of the meaning of a
'level curve.'
![[转载]MATLAB <wbr>中contour函数的使用 Contours plotted at actual heights.](http://msemac.redwoods.edu/~darnold/math50c/matlab/contours/figure10.png)
Contours plotted at actual heights.
Matlab Files
Although the following file features advanced use of Matlab, we
include it here for those interested in discovering how we
generated the images for this activity. You can download the Matlab
file at the following link. Download the file to a directory or
folder on your system.
level.m
The file
level.m is designed to be
run in 'cell mode.' Open the file
level.m
in the Matlab editor, then enable cell mode from the
Cell Menu. After that, use the entries on
the
Cell Menu or the icons on the
toolbar to execute the code in the cells provided in the file.
There are options for executing both single and multiple cells.
After executing a cell, examine the contents of your folder and
note that a PNG file was generated by executing the cell.
Exercises
When completed, publish the results of these exercises to HTML and
upload to your drop box.
- Use contour to sketch default
level curves for the function f(x,y)=1-x-y. Use
the clabelcommand to automatically label
the level curves.
- Use contour to sketch default
level curves for the function f(x,y)=xy. Use
the clabelcommand with the 'manual' switch
to label level curves of choice.
- Use contour to sketch the level
curves f(x,y)=c for
f(x,y)=x2+4y2 for the following values
of c: 1,2,3,4, and 5.
- Use the contour command to force
20 level curves for the function
f(x,y)=2+3x-2y.
- Use the meshc command to produce
a surface and contour plot for the function
(x,y)=9-x2-y2.
- Use the contour3 command to
sketch level curves at their heights for the
functionf(x,y)=x2+y2.
- Use the contour to sketch the
graph of the implicit equation x3+y3=3xy. This
curve is known as the Folium of Descartes.
Note: You are asked to plot a single cuver here, not a
set of many contours.