MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply TodayTo resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Asked by Yuval on 27 Mar 2013

I am trying to plot six concentric circles using meshgrid() and plot(). The circles' radii vary between 0.5 and 1.75 (with intervals of 0.25). I am wondering whether the code below is sufficiently efficient and whether indeed it should be performed as delineated below:

theta = linspace(0, 2*pi, 50); [X, Y] = meshgrid(0.5:0.25:1.75, theta); plot(a+cos(Y).*X, b+sin(Y).*X);

?

*No products are associated with this question.*

Answer by Matt J on 27 Mar 2013

Accepted answer

You could conserve a little memory if you did it this way, but I don't know anyone who cares about efficiency for such a small plotting task,

theta = linspace(0, 2*pi, 50).'; R=0.5:0.25:1.75;

plot(a+cos(theta)*R, b+sin(theta)*R);

Show 5 older comments

Matt J on 27 Mar 2013

You mean you ran my code exactly, but with the transpose omitted and everything worked fine? I don't think so. You should have gotten a dimension mismatch error as I do below

Error using * Inner matrix dimensions must agree.

Error in test (line 6) plot(a+cos(theta)*R, b+sin(theta)*R);

And it's perfectly clear why this happens. Matrix multiplication between 2 row vectors together like cos(theta) and R or sin(theta) and R is undefined.

Yuval on 27 Mar 2013

I mean I ran mine, the original one I posted here, in which the transpose was clearly omitted, and yet the plot was just as that generated by your own code, with the transpose. Is that still impossible? Did you mean to suggest that that is strictly mandatory if R is defined as you proposed? Please allow me to re-post what works perfectly fine on this machine:

theta = linspace(0, 2*pi, 50); R = 0.5: 0.25: 1.75; [X, Y] = meshgrid(R, theta); plot(a+cos(Y).*X, b+sin(Y).*X);

Matt J on 27 Mar 2013

Yes, the transposition of theta was only relevant to my proposed approach -- the one that does not use meshgrid. Notice that you use elementwise .* multiplication whereas I use pure matrix multiplication '*'. Matrix multiplication requires the operands to be appropriately shaped.

## 1 Comment

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/68765#comment_139208

Yeah - it does, but so? What is the question?