User Tools

Site Tools


gibson:teaching:spring-2016:math445:lecture:graphics3d

Math 445 lecture 16: 2D, 3D graphics

Some examples of plotting 2d functions $f(x,y)$ in Matlab.


1d graphs

How would you make a graph of $f(x) = (x-1)^2$ on $-3 \leq x \leq 3$ in Matlab? You would

  1. Create vector x of gridpoints with linspace
  2. Evaluate $f(x)$ on gridpoints using dot operations on x
  3. Use plot(x,f) to draw the graph

For example,

plot1d.m
% Plot 1d graph of f(x) = (x-1)^2 on -3 < x < 3
 
x = linspace(-3, 3, 100); % create vector x of gridpoints
f = (x-1).^2;             % evaluate f(x) on gridpoints
plot(x,f)                 % plot  the graph
 
xlabel('x')
ylabel('f(x) = (x-1)^2')

produces


2d graphs with meshgrid

Graphing a 2d function $f(x,y)$ is very similar. For example, to make a graph of the function $f(x,y) = 2*(x-1)^2 + (y-1)^2$ on $-4 \leq x \leq 4, -4 \leq y \leq 4$

  1. Create vectors x and y of gridpoints on $x$ and $y$ axes with linspace
  2. Create matrices X and Y of gridpoints on 2d mesh with meshgrid
  3. Evaluate $f(x,y)$ on mesh of gridpoints using dot operations on X,Y
  4. Use pcolor(x,y,f) to draw the graph (or contour, contourf, surf, surfc)

For example,

plot2d.m
% Plot f(x,y) = 2*(x-1)^2 + (y-1)^2 on -4 < x < 4, -4 < y < 4
 
x = linspace(-4,4,30);     % create 1d gridpoints on x and y axes
y = linspace(-4,4,30);
 
[X,Y] = meshgrid(x,y);     % create 2d mesh of gridpoints over x,y
 
F = 2*(X-1).^2 + (Y-1).^2; % evaluate the function f(x,y) over mesh
 
pcolor(x,y,F);             % or contour(X,Y,F), surf(x,y,F), etc. 
colorbar()                 % plot a colorbar
 
xlabel('x');
ylabel('y');
title('f(x,y) = 2(x-1)^2 + (y-1)^2')
 
shading interp   % or faceted, flat


quiver plots and the gradient

The function $f(x,y) = x e^{-x^2 - y^2}$ has gradient

\begin{eqnarray*}
\nabla f = \left( \begin{array}{c} \partial f/\partial x \\  \partial f/\partial y \end{array} \right) = \left( \begin{array}{c} (1-x^2) e^{-x^2 - y^2} \\ -2xy e^{-x^2 - y^2} \end{array} \right)
\end{eqnarray*}

Here's the Matlab code to make a contour plot of $f(x,y)$ with its gradient superimposed as a quiver plot.

plotgradient.m
% Plot f(x,y) = x e^(-x^2 - y^2) with contours and its gradient as arrows.
x = linspace(-2, 2, 30);
y = linspace(-2, 2, 30);
 
[X,Y] = meshgrid(x,y);
 
F = X .* exp(-X.^2 - Y.^2);  % evaluate f(x,y) on mesh
contour(x,y,F);              % draw contour plot of f
 
% let dfdy = y component of grad F = df/dy
 
dfdx = (1-2*X.^2) .* exp(-X.^2 - Y.^2); % evaluate dfdx on mesh
dfdy = -2*X.*Y .* exp(-X.^2 - Y.^2);    % evaluate dfdy on mesh
 
hold on
quiver(x,y,dfdx,dfdy);       % draw quiver plot
 
xlabel('x')
ylabel('y')
title('f(x,y) = x e^{-x^2 - y^2} with \nabla f arrow plot')
colorbar()

gibson/teaching/spring-2016/math445/lecture/graphics3d.txt · Last modified: 2016/03/29 09:02 by gibson