Error using imag: too many input arguments
1 view (last 30 days)
Show older comments
Sergio Manzetti
on 22 Jun 2021
Commented: Sergio Manzetti
on 22 Jun 2021
Hi, I get the given error when trying to plot the contour of the given function
syms r x y k z
[ph,r] = meshgrid((0:5:360)*pi/180,0:.5:10);
[X,Y] = pol2cart(ph,r);
Z = X+i*Y;
J = besselj(k,l.*r);
J2 = besselj(k,m.*r);
Y = bessely(k,l.*r);
Y2 = bessely(k,m.*r);
H = besselh(k,r);
F1 = symsum((J).*exp(1i*k*ph),k,-5,5);
F2 = symsum((J2+Y2).*exp(1i.*k.*ph),k,-5,5);
F3 = symsum(H.*exp(1i.*k.*ph),k,-5,5);
pwu = nan(size(F1), 'like', F1);
mask = 0 <= r & r < 0.5;
pwu(mask) = F1(mask);
mask = 0.5 <= r & r < 1;
pwu(mask) = F2(mask);
mask = r >= 1;
pwu(mask) = F3(mask);
U = subs(pwu, {l, m}, {1.5, 3});hold on
contour(X,Y,imag(double(U),30))
axis equal
xlabel('r','FontSize',14);
ylabel('phi','FontSize',14);
The error lies in the 4th last line, however it appears to me as OK. What is wrong here?
thanks!
0 Comments
Accepted Answer
Walter Roberson
on 22 Jun 2021
Edited: Walter Roberson
on 22 Jun 2021
Count the bracket level!
contour(X,Y,imag(double(U),30))
1 2 3 2 10
Notice that the ,30 is at nesting level 2 -- inside the imag() call.
7 Comments
Walter Roberson
on 22 Jun 2021
My code had
[x, y] = pol2cart(ph,r);
Z = x + 1i*y;
Your code has
[X,Y] = pol2cart(ph,r);
Z = X+i*Y;
Notice y compared to Y . This is important because you have
Y = bessely(k,l.*r);
which assigns a symbolic result to Y, and then later when you want to
contour(X,Y,imag(double(U)),30)
then you are using the symbolic Y, not the numeric Y.
You should have just taken my code and changed
surf(x, y, real(double(U)))
hold on
surf(x, y, zeros(size(x)))
hold off
to
contour(x, y, imag(double(U)), 30);
More Answers (0)
See Also
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!