This week in screencasting: The polar express

October 21, 2010, 10:06 am



MATLAB doesn’t provide a built-in function for plotting in cylindrical coordinates. Instead — and this is either ingenious or annoying depending on how you look at it — to plot something in cylindrical coordinates, you generate all the points you need in cylindrical coordinates and then use the pol2cart function to convert them en masse to cartesian coordinates, then plot the whole thing as usual in cartesian coordinates.

I think this is smart, since by avoiding the use of a specialized function for cylindrical plots and sticking instead to a single command for 3D plotting, you learn one command for all 3D plots and you get to use all the extras available, such as adding a contour plot onto the cylindrical plot. Overloading the pol2cart function so that it can accept and produce the third coordinate makes this all work. Overall I like how MATLAB doesn’t try to make a function for everything but rather creates a well-featured set of relatively simple tools that will do lots of things.

But I can see where some people — especially MATLAB novices — would find all this annoying, since the entire process takes several steps. There’s a workflow diagram for doing this in the screencast, but a better way is to make an M-file that holds all the steps. Here’s the one I flashed briefly at the end of the screencast:

[sourcecode language="matlab"]

% Script for plotting a cylindrical function.
% Written by Robert Talbert, Ph.D., 10/20/2010

% Theta: Change t1 and t2 to set the starting and ending values for theta.
t1 = 0;
t2 = pi/2;
theta = linspace(t1, t2);

% r: : Change r1 and r2 to set the starting and ending values for theta.
r1 = -5;
r2 = 5;
r = linspace(r1, r2);

% Create meshgrid for inputs:
[theta, r] = meshgrid(theta, r);

% Apply the function to create a matrix of z-values. Change the function to
% match what you want to plot.

z = r*cos(theta);

% Convert to cartesian and plot using mesh:

[x,y,z] = pol2cart(theta, r, z);

It would be simple enough to modify this so that it’s a function rather than a script, accepting the arrays theta and r and a function handle for z, and then producing the 3D plot. Or, one could even make an “ez” version where the user just enters a string containing the function s/he wants. If somebody wants to try that out, and you want to share your results, just put the source code in the comments.

The third one in this series will be up later this weekend. It’s on spherical coordinates and it’s pretty much the same process, only using sph2cart instead of pol2cart. There might be a fourth one as well, dealing with some special cases like constant cylindrical/spherical functions (you can’t just say “rho = 5″, because rho has to be a matrix) and how to plot not just the surfaces but the volumes underneath them.

This entry was posted in Calculus, Engineering, Math, MATLAB, Teaching, Technology and tagged , , , , , , , , . Bookmark the permalink.