CHAPTER 2: MATRIX COMPUTATIONS AND LINEAR ALGEBRA

 

Lecture 2.5: Plotting of functions of two variables

 

Functions on rectangular grids:

 

Consider a function of two variables: z = f(x,y) in the rectangular domain:

D = (x,y): a x b; c y d

Define the discrete interval of the x-axis:

[ a, x1, x2, , xN, b ]

Define the discrete interval of the y-axis:

[ c, y1, y2, , yM, d ]

Intersections of vertical lines x = xn and horizontal lines y = ym form a rectangular grid of N-by-M interior points and (2*N+2*M) boundary points and 4 corner points. Evaluations of the function z = f(x,y) at the grid points defines an (N+2)-by-(M+2) matrix of values: z{n,m} = f(xn,ym).

 

         meshgrid(x,y): creates matrices for rectangular grids [X,Y] from vectors [x,y]

 

x = 0 : 0.5 : 2; % a row-vector of 5 points for the x-axis

y = -3 : 1 : 3; % a row-vector of 7 points for the y-axis

[X,Y] = meshgrid(x,y) % create 5-by-7 matrices for grids of X and Y

% meshgrid is equivalent to: X = ones(7,1)*x; Y = y'*ones(1,5);

 

X 0 0.5000 1.0000 1.5000 2.0000

0 0.5000 1.0000 1.5000 2.0000

0 0.5000 1.0000 1.5000 2.0000

0 0.5000 1.0000 1.5000 2.0000

0 0.5000 1.0000 1.5000 2.0000

0 0.5000 1.0000 1.5000 2.0000

0 0.5000 1.0000 1.5000 2.0000

 

Y = -3 -3 -3 -3 -3

-2 -2 -2 -2 -2

-1 -1 -1 -1 -1

0 0 0 0 0

1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

 

         mesh(x,y,z): plot a shape of function of two variables on a rectangular grid

 

x = -2 : 0.1 : 2; y = -2 : 0.1 : 2;

% z = x.*y.*exp(-x.^2 y.^2) : example of a function of two variables

% direct coding of the function z = f(x,y) does not work because x,y,z are row-vectors

 

[X,Y] = meshgrid(x,y);

Z = X.*Y.*exp(-X.^2-Y.^2);

% pointwise multiplication works now because X and Y are matrices

mesh(X,Y,Z);

title('a mesh plot of a function of two variables');

xlabel('x'); ylabel('y'); zlabel('z');

 

 

         contour(x,y,z,label): plots contour lines of a function of two variables on a rectangular grid

 

h = contour(X,Y,Z,10); clabel(h);

 

h =

         contour(x,y,z,[0,0]): plots an implicit function of one variable: z = F(x,y) = 0

 

% y^5 y^3 = tanh(x) : the implicit function y = y(x) to be plotted

x = -0.3 : 0.01 : 0.3; y = -1 : 0.01 : 1; [X,Y] = meshgrid(x,y);

Z = Y.^5-Y.^3-tanh(X); contour(x,y,Z,[0,0]); xlabel('x'); ylabel('y');

 

 

         mesh(x,y,0*y'*x): plots the rectangular grid without any function on the grid

 

x = 1 : 0.2 : 3; y = -2 : 0.1 : 2;

mesh(x,y,0*y'*x); view([0,0,1]);

         surf: creates a colorful image of a two-dimensional surface

 

x = -2 : 0.1 : 2; y = -2 : 0.1 : 2;

[X,Y] = meshgrid(x,y); Z = X.*Y.*exp(-X.^2-Y.^2);

surf(X,Y,Z); title('a surface defined by a function of two variables');

xlabel('x'); ylabel('y'); zlabel('z');

 

 

         meshc, surfc: plots contours of the function z = f(x,y) on the (x,y)-plane in addition to the output of functions "mesh" and "surf"

surfc(X,Y,Z)

         surfl: creates a two-dimensional surface with lighting

surfl(X,Y,Z); colormap hot; shading interp;

 

         quiver: plots a two-dimensional vector [u,v] on the plane [x,y], where u = f(x,y); y = g(x,y)

% The system of two differential equations:

% dx/dt = f(x,y) = y; dy/dt = g(x,y) = - sin(x)

% The quiver displays the vector field on the phase plane (x,y)

x = -2*pi:0.25:2*pi; y = -pi:0.25:pi; [X,Y] = meshgrid(x,y);

U = Y; V = -sin(X); quiver(X,Y,U,V,2);

% the last input argument is a scale factor,

% that adjusts the lengths of vectors on the plane

More controls of three-dimensional plots:

 

         axis([xmin,xmax,ymin,ymax,zmin,zmax]): sets limits of the three-dimensional space

         xlabel, ylabel, zlabel: labels for x, y, z

         view([x,y,z]): changes the view angle of the plot, where [x,y,z] are coordinates of a viewer looking at the origin [0,0,0]

         view([az,el]): changes the view angle of the plot, where az is the azimutal angle in the (x,y) plane, measured from negative y-axis counterclockwise, and el is the elevation angle from the (x,y) plane

         colormap: changes definition of colors on the color axis

 

x = 1:4; y = 1:8; [X,Y] = meshgrid(x,y); Z = sqrt(X.^2 + Y.^2);

colormap(hsv); surf(Z); xlabel('x'); ylabel('y');

 

 

         shading: changes visualiazation of a surface

         caxis([zmin,zmax]): specifies the color scheme between the minimal and maximal values of z defined by an user

Remark: it is useful to specify all properties of a figure and keep them with "hold on" before plotting the surface, because plotting operations are time-consuming in space of three dimensions.