Error using imag: too many input arguments
조회 수: 1 (최근 30일)
이전 댓글 표시
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
채택된 답변
Walter Roberson
2021년 6월 22일
편집: Walter Roberson
2021년 6월 22일
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
Walter Roberson
2021년 6월 22일
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);
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Surface and Mesh Plots에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!