# channelflow.org

### Site Tools

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

# Differences

This shows you the differences between two versions of the page.

 — gibson:teaching:spring-2018:math445:lecture:graphics3d [2018/04/02 11:36] (current)gibson created 2018/04/02 11:36 gibson created 2018/04/02 11:36 gibson created Line 1: Line 1: + ====== Math 445 lecture 20: 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 + - Create vector ''​x''​ of gridpoints with ''​linspace''​ + - Evaluate $f(x)$ on gridpoints using dot operations on ''​x''​ + - Use ''​plot(x,​f)''​ to draw the graph + + For example, ​ + ​ + % 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 + {{ :​gibson:​teaching:​spring-2016:​math445:​onedplot.png?​direct&​400 |}} + + ---- + + ==== 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$ + + - Create vectors ''​x''​ and ''​y''​ of gridpoints on $x$ and $y$ axes with ''​linspace''​ + - Create matrices ''​X''​ and ''​Y''​ of gridpoints on 2d mesh with ''​meshgrid''​ + - Evaluate $f(x,y)$ on mesh of gridpoints using dot operations on ''​X,​Y''​ + - Use ''​pcolor(x,​y,​f)''​ to draw the graph (or ''​contour'',​ ''​contourf'',​ ''​surf'',​ ''​surfc''​) + + For example, + ​ + % 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 + ​ + + {{ :​gibson:​teaching:​spring-2016:​math445:​lecture:​twodplot.png?​direct&​400 |}} + + ---- + + ==== 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. + + ​ + % 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:​quiver.png?​direct&​500 |}}